diff --git a/src/EffectLib/EffectData.h b/src/EffectLib/EffectData.h index 739f6ff6..404f5071 100644 --- a/src/EffectLib/EffectData.h +++ b/src/EffectLib/EffectData.h @@ -42,8 +42,8 @@ class CEffectData void __ClearLightDataVector(); void __ClearMeshDataVector(); - // FIXME : κ ״ ʴ´. ̵ ãƳ ġ. - // (Ưȭ) ̽ ٲ Ѵٴ ϴ. - [levites] + // FIXME : 이 부분은 그다지 맘에 들지 않는다. 좋은 아이디어를 찾아내어 고치자. + // 상위가 (특화된) 상위의 인터페이스 때문에 모양이 바뀌어야 한다는 것은 옳지 못하다. - [levites] virtual CParticleSystemData * AllocParticle(); virtual CEffectMeshScript * AllocMesh(); virtual CLightData * AllocLight(); diff --git a/src/EffectLib/EffectInstance.cpp b/src/EffectLib/EffectInstance.cpp index 1e20d55a..e2618fdd 100644 --- a/src/EffectLib/EffectInstance.cpp +++ b/src/EffectLib/EffectInstance.cpp @@ -52,7 +52,7 @@ void CEffectInstance::UpdateSound() { CSoundManager& rkSndMgr=CSoundManager::Instance(); rkSndMgr.UpdateSoundInstance(m_matGlobal._41, m_matGlobal._42, m_matGlobal._43, m_dwFrame, m_pSoundInstanceVector); - // NOTE : Ʈ ġ ´ - [levites] + // NOTE : 매트릭스에서 위치를 직접 얻어온다 - [levites] } ++m_dwFrame; } diff --git a/src/EffectLib/EffectManager.cpp b/src/EffectLib/EffectManager.cpp index 480f825c..165ba3cb 100644 --- a/src/EffectLib/EffectManager.cpp +++ b/src/EffectLib/EffectManager.cpp @@ -48,7 +48,7 @@ bool CEffectManager::IsAliveEffect(DWORD dwInstanceIndex) void CEffectManager::Update() { - // 2004. 3. 1. myevan. Ʈ ͸ ϴ ڵ + // 2004. 3. 1. myevan. 이펙트 모니터링 하는 코드 /* if (GetAsyncKeyState(VK_F9)) { @@ -173,8 +173,8 @@ BOOL CEffectManager::RegisterEffect(const char * c_szFileName,bool isExistDelete return TRUE; } -// CEffectData ϰ ϰ.. -// CEffectData CRC ְ Ѵ +// CEffectData 를 포인터형으로 리턴하게 하고.. +// CEffectData에서 CRC를 얻을수 있게 한다 BOOL CEffectManager::RegisterEffect2(const char * c_szFileName, DWORD* pdwRetCRC, bool isNeedCache) { std::string strFileName; diff --git a/src/EffectLib/EffectManager.h b/src/EffectLib/EffectManager.h index 682f1fd7..a395a85f 100644 --- a/src/EffectLib/EffectManager.h +++ b/src/EffectLib/EffectManager.h @@ -62,8 +62,8 @@ class CEffectManager : public CScreen, public CSingleton bool GetEffectData(DWORD dwID, CEffectData ** ppEffect); bool GetEffectData(DWORD dwID, const CEffectData ** c_ppEffect); - // Area Effect Լ... EffectInstance Pointer ȯѴ. - // EffectManager EffectInstanceMap ̿ ʴ´. + // Area에 직접 찍는 Effect용 함수... EffectInstance의 Pointer를 반환한다. + // EffectManager 내부 EffectInstanceMap을 이용하지 않는다. void CreateUnsafeEffectInstance(DWORD dwEffectDataID, CEffectInstance ** ppEffectInstance); bool DestroyUnsafeEffectInstance(CEffectInstance * pEffectInstance); diff --git a/src/EffectLib/EffectMeshInstance.h b/src/EffectLib/EffectMeshInstance.h index eaf17d11..185d4336 100644 --- a/src/EffectLib/EffectMeshInstance.h +++ b/src/EffectLib/EffectMeshInstance.h @@ -9,7 +9,7 @@ class CEffectMeshInstance : public CEffectElementBaseInstance { public: - // NOTE : Mesh ؽ Ÿ νϽ̴. + // NOTE : Mesh 단위 텍스춰 데이타의 인스턴스이다. typedef struct STextureInstance { CFrameController TextureFrameController; diff --git a/src/EffectLib/ParticleInstance.cpp b/src/EffectLib/ParticleInstance.cpp index 21f77e91..298619ca 100644 --- a/src/EffectLib/ParticleInstance.cpp +++ b/src/EffectLib/ParticleInstance.cpp @@ -185,9 +185,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal) case BILLBOARD_TYPE_ALL: default: { - // NOTE : Rotation Routine. Camera Up Vector Cross Vector ü View Vector - // Rotation Ų. - // FIXME : ݵ ȭ ! + // NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로 + // Rotation 시킨다. + // FIXME : 반드시 최적화 할 것! if (m_fRotation==0.0f) { v3Up = -c_rv3Cross; @@ -239,7 +239,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal) D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal); } - // NOTE: ӵ ̿ ִ : log(velocity)ŭ þ. + // NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다. float length = D3DXVec3Length(&v3Up); if (length == 0.0f) { @@ -342,9 +342,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f case BILLBOARD_TYPE_ALL: default: { - // NOTE : Rotation Routine. Camera Up Vector Cross Vector ü View Vector - // Rotation Ų. - // FIXME : ݵ ȭ ! + // NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로 + // Rotation 시킨다. + // FIXME : 반드시 최적화 할 것! if (m_fRotation==0.0f) { v3Up = -c_rv3Cross; @@ -373,7 +373,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal); } - // NOTE: ӵ ̿ ִ : log(velocity)ŭ þ. + // NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다. float length = D3DXVec3Length(&v3Up); if (length == 0.0f) { diff --git a/src/EffectLib/ParticleSystemInstance.cpp b/src/EffectLib/ParticleSystemInstance.cpp index 6bccfdfe..b126bd4a 100644 --- a/src/EffectLib/ParticleSystemInstance.cpp +++ b/src/EffectLib/ParticleSystemInstance.cpp @@ -161,8 +161,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime) D3DXVec3TransformCoord(&v3TimePosition, &v3TimePosition, mc_pmatLocal); } pInstance->m_v3StartPosition = v3TimePosition; - // NOTE : Update ȣ ʰ Rendering DZ length 0 Ǵ ִ. - // Velocity ׸ŭ ʱȭ ֵ ٲ - [levites] + // NOTE : Update를 호출하지 않고 Rendering 되기 때문에 length가 0이 되는 문제가 있다. + // Velocity를 구한 후 그만큼 빼준 값으로 초기화 해주도록 바꿨음 - [levites] //pInstance->m_v3LastPosition = pInstance->m_v3Position; // Direction & Velocity @@ -212,8 +212,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime) // Rotation pInstance->m_fRotation = m_pParticleProperty->m_wRotationRandomStartingBegin; pInstance->m_fRotation = frandom(m_pParticleProperty->m_wRotationRandomStartingBegin,m_pParticleProperty->m_wRotationRandomStartingEnd); - // Rotation - Lie LocalMatrix Rotation Random Ѵ. - // Ź ʿ . ȭ ʿ. - [levites] + // Rotation - Lie 일 경우 LocalMatrix 의 Rotation 값을 Random 에 적용한다. + // 매번 할 필요는 없을듯. 어느 정도의 최적화가 필요. - [levites] if (BILLBOARD_TYPE_LIE == m_pParticleProperty->m_byBillboardType && mc_pmatLocal) { pInstance->m_fRotation += fLieRotation; @@ -486,7 +486,7 @@ void CParticleSystemInstance::OnInitialize() void CParticleSystemInstance::OnDestroy() { - // 2004. 3. 1. myevan. ƼŬ ƾ + // 2004. 3. 1. myevan. 파티클 제거 루틴 TParticleInstanceListVector::iterator i; for(i = m_ParticleInstanceListVector.begin(); i!=m_ParticleInstanceListVector.end(); ++i) { diff --git a/src/EffectLib/Type.h b/src/EffectLib/Type.h index ecbd20ea..18c0f2f0 100644 --- a/src/EffectLib/Type.h +++ b/src/EffectLib/Type.h @@ -71,12 +71,12 @@ enum EBillBoardType BILLBOARD_TYPE_ALL, BILLBOARD_TYPE_Y, - BILLBOARD_TYPE_LIE, // ٴڿ + BILLBOARD_TYPE_LIE, // 바닥에 누은 형상 BILLBOARD_TYPE_2FACE, // / and \ BILLBOARD_TYPE_3FACE, // / and \ and - - //BILLBOARD_TYPE_RAY, // ܻ + //BILLBOARD_TYPE_RAY, // 잔상 }; @@ -220,8 +220,8 @@ typedef std::vector TTimeEventTableVector2; typedef std::vector TTimeEventTableVector3; -// NOTE : TimeEventValue Լ Ѱ ƾ ϴ Ƿ -// ƴ ۼ ߽ϴ. - [levites] +// NOTE : TimeEventValue 함수들은 값을 넘겨 받지 말아야 하는 때도 있으므로 +// 값의 직접 리턴이 아닌 포인터 리턴으로 작성 했습니다. - [levites] template __forceinline void GetTimeEventBlendValue(float fElapsedTime, std::vector >& rVector, T * pReturnValue) diff --git a/src/EterBase/CPostIt.h b/src/EterBase/CPostIt.h index d5f00cc3..ca9a2b4b 100644 --- a/src/EterBase/CPostIt.h +++ b/src/EterBase/CPostIt.h @@ -6,14 +6,14 @@ class _CPostItMemoryBlock; /** * @class CPostIt - * @brief ӷó Ŭ̾Ʈ Ŭ̾Ʈ ϱ Ͽ Ǵ Ŭ + * @brief 게임런처에서 게임 클라이언트로 정보를 전달 및 클라이언트에서 수신하기 위하여 사용되는 클래스 */ class CPostIt { public: /** * @brief CPostIt constructor - * @param [in] szAppName : ̸ . + * @param [in] szAppName : 게임의 이름이 들어간다. */ explicit CPostIt( LPCSTR szAppName ); @@ -23,45 +23,45 @@ public: ~CPostIt( void ); /** - * @brief CPostIt class ϰ ִ Ÿ Ŭ忡 Ѵ. + * @brief CPostIt class에서 보유하고 있는 데이타를 클립보드에 저장한다. */ BOOL Flush( void ); /** - * @brief CPostIt class ϰ ִ Ÿ Ŭ忡 ִ . + * @brief CPostIt class에서 보유하고 있는 데이타 및 클립보드에 있는 내용을 지운다. */ void Empty( void ); /** - * @brief Ÿ о´. - * @param [in] lpszKeyName : ҷ Ÿ Ű. "KEY" ִ´. - * @param [in] lpszData : ҷ Ÿ - * @param [in] nSize : lpszData ִ + * @brief 데이타를 읽어온다. + * @param [in] lpszKeyName : 불러올 데이타의 키. "KEY" 식의 내용을 넣는다. + * @param [in] lpszData : 불러올 데이타의 버퍼 + * @param [in] nSize : lpszData 버퍼의 최대사이즈 */ BOOL Get( LPCSTR lpszKeyName, LPSTR lpszData, DWORD nSize ); /** - * @brief Ÿ ִ´. - * @param [in] lpBuffer : Ÿ. "KEY=DATA" ִ´. + * @brief 저장할 데이타를 넣는다. + * @param [in] lpBuffer : 저장할 데이타. "KEY=DATA" 식의 내용을 넣는다. */ BOOL Set( LPCSTR lpszData ); /** - * @brief Ÿ ִ´. - * @param [in] lpszKeyName : Ÿ Ű. "KEY" ִ´. - * @param [in] lpszData : Ÿ. "DATA" ִ´. + * @brief 저장할 데이타를 넣는다. + * @param [in] lpszKeyName : 저장할 데이타의 키. "KEY" 식의 내용을 넣는다. + * @param [in] lpszData : 저장할 데이타. "DATA" 식의 내용을 넣는다. */ BOOL Set( LPCSTR lpszKeyName, LPCSTR lpszData ); /** - * @brief Ÿ(DWORD) ִ´. - * @param [in] lpBuffer : Ÿ. "KEY=DATA" Ÿ ִ´. - * @param [in] dwValue : Ÿ. (DWORD) + * @brief 저장할 데이타(DWORD)를 넣는다. + * @param [in] lpBuffer : 저장할 데이타. "KEY=DATA" 식의 데이타를 넣는다. + * @param [in] dwValue : 저장할 데이타. (DWORD) */ BOOL Set( LPCSTR lpszKeyName, DWORD dwValue ); /** - * @brief CPostIt class Ѵ. (Ŭ constructor ̸ ڰ ֱ , ̸ ؾ) + * @brief CPostIt class를 복사한다. (클래스 constructor에 이름 인자가 있기 때문에, 새 이름을 지정해야함) * @param [in] pPostIt : Destination class * @param [in] lpszKeyName : Destination class's new app-name */ diff --git a/src/EterBase/FileDir.cpp b/src/EterBase/FileDir.cpp index 8a207453..9c1412b1 100644 --- a/src/EterBase/FileDir.cpp +++ b/src/EterBase/FileDir.cpp @@ -60,9 +60,9 @@ bool CDir::Create(const char * c_szFilter, const char* c_szPath, BOOL bCheckedEx if (!c_szExtension) continue; - // NOTE : ӽ - [levites] - // δ TRUE · . - // Ʈ CDir ϴ Extension "wav", "gr2" ̷ ְԲ Ѵ. - [levites] + // NOTE : 임시 변수 - [levites] + // 최종적으로는 무조건 TRUE 형태로 만든다. + // 그전에 전 프로젝트의 CDir을 사용하는 곳에서 Extension을 "wav", "gr2" 이런식으로 넣게끔 한다. - [levites] if (bCheckedExtension) { std::string strFilter = c_szFilter; diff --git a/src/EterBase/FileLoader.cpp b/src/EterBase/FileLoader.cpp index 84144368..8a2c2793 100644 --- a/src/EterBase/FileLoader.cpp +++ b/src/EterBase/FileLoader.cpp @@ -72,7 +72,7 @@ int CMemoryTextFileLoader::SplitLine2(DWORD dwLine, CTokenVector* pstTokenVector pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < c_rstLine.length()); @@ -116,7 +116,7 @@ bool CMemoryTextFileLoader::SplitLine(DWORD dwLine, CTokenVector* pstTokenVector pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < c_rstLine.length()); diff --git a/src/EterBase/FileLoader.h b/src/EterBase/FileLoader.h index 90d8b7d5..39915bd3 100644 --- a/src/EterBase/FileLoader.h +++ b/src/EterBase/FileLoader.h @@ -1,6 +1,6 @@ #pragma once -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #include #include diff --git a/src/EterBase/MappedFile.cpp b/src/EterBase/MappedFile.cpp index 4745cb66..30b5e474 100644 --- a/src/EterBase/MappedFile.cpp +++ b/src/EterBase/MappedFile.cpp @@ -85,7 +85,7 @@ BYTE* CMappedFile::AppendDataBlock( const void* pBlock, DWORD dwBlockSize ) void CMappedFile::Destroy() { - if (m_pLZObj) // Ͱ ͷ ȴ + if (m_pLZObj) // 압축된 데이터가 이 포인터로 연결 된다 { delete m_pLZObj; m_pLZObj = NULL; @@ -144,7 +144,7 @@ int CMappedFile::Seek(DWORD offset, int iSeekType) return m_seekPosition; } -// 2004.09.16.myevan.MemoryMappedFile 98/ME üũ +// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //DWORD g_dwCount=0; int CMappedFile::Map(const void **dest, int offset, int size) @@ -192,7 +192,7 @@ int CMappedFile::Map(const void **dest, int offset, int size) return 0; } - // 2004.09.16.myevan.MemoryMappedFile 98/ME üũ + // 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //g_dwCount++; //Tracenf("MAPFILE %d", g_dwCount); @@ -247,7 +247,7 @@ void CMappedFile::Unmap(LPCVOID data) { if (UnmapViewOfFile(data)) { - // 2004.09.16.myevan.MemoryMappedFile 98/ME üũ + // 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //g_dwCount--; //Tracenf("UNMAPFILE %d", g_dwCount); } diff --git a/src/EterBase/StdAfx.h b/src/EterBase/StdAfx.h index ac19b5e8..c13c470b 100644 --- a/src/EterBase/StdAfx.h +++ b/src/EterBase/StdAfx.h @@ -6,7 +6,7 @@ #endif #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #include diff --git a/src/EterBase/Timer.cpp b/src/EterBase/Timer.cpp index f1ec5f68..923b8294 100644 --- a/src/EterBase/Timer.cpp +++ b/src/EterBase/Timer.cpp @@ -27,7 +27,7 @@ BOOL ELTimer_Init() DWORD ELTimer_GetMSec() { - //assert(gs_dwBaseTime!=0 && "ELTimer_Init ϼ"); + //assert(gs_dwBaseTime!=0 && "ELTimer_Init 를 먼저 실행하세요"); //LARGE_INTEGER liTickCount; //QueryPerformanceCounter(&liTickCount); return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000 / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime; @@ -36,7 +36,7 @@ DWORD ELTimer_GetMSec() VOID ELTimer_SetServerMSec(DWORD dwServerTime) { NANOBEGIN - if (0 != dwServerTime) // nanomite if + if (0 != dwServerTime) // nanomite를 위한 더미 if { gs_dwServerTime = dwServerTime; gs_dwClientTime = CTimer::instance().GetCurrentMillisecond(); @@ -70,7 +70,7 @@ CTimer::CTimer() ELTimer_Init(); NANOBEGIN - if (this) // nanomite if + if (this) // nanomite를 위한 더미 if { m_dwCurrentTime = 0; m_bUseRealTime = true; diff --git a/src/EterBase/Utils.cpp b/src/EterBase/Utils.cpp index e5f08dfd..859ddc61 100644 --- a/src/EterBase/Utils.cpp +++ b/src/EterBase/Utils.cpp @@ -433,7 +433,7 @@ void MyCreateDirectory(const char* path) if (strlen(path) >= 3) { - if (*(path + 1) == ':') // C:, D: 츦 üũ + if (*(path + 1) == ':') // C:, D: 같은 경우를 체크 path += 3; } diff --git a/src/EterBase/Utils.h b/src/EterBase/Utils.h index db81e353..fc6b35ff 100644 --- a/src/EterBase/Utils.h +++ b/src/EterBase/Utils.h @@ -64,9 +64,9 @@ extern void GetExceptionPathName(const char * sz_Name, std::string & OnlyFileN extern void GetWorkingFolder(std::string & strFileName); extern void StringLowers(char * pString); extern void StringPath(std::string & rString); -extern void StringPath(char * pString); // ҹڷ , \ / ٲ۴. -extern void StringPath(const char * c_szSrc, char * szDest); // ҹڷ , \ / ٲ۴. -extern void StringPath(const char * c_szSrc, std::string & rString); // ҹڷ , \ / ٲ۴. +extern void StringPath(char * pString); // 모두 소문자로 만들고, \는 /로 바꾼다. +extern void StringPath(const char * c_szSrc, char * szDest); // 모두 소문자로 만들고, \는 /로 바꾼다. +extern void StringPath(const char * c_szSrc, std::string & rString); // 모두 소문자로 만들고, \는 /로 바꾼다. extern void PrintAsciiData(const void* data, int bytes); bool IsFile(const char* filename); bool IsGlobalFileName(const char * c_szFileName); diff --git a/src/EterBase/lzo.cpp b/src/EterBase/lzo.cpp index 4541af62..0748e5ad 100644 --- a/src/EterBase/lzo.cpp +++ b/src/EterBase/lzo.cpp @@ -120,9 +120,9 @@ void CLZObject::BeginCompress(const void * pvIn, UINT uiInLen) m_pbIn = (const BYTE *) pvIn; // sizeof(SHeader) + - // ȣȭ fourCC 4Ʈ - // ִ ִ 뷮 + - // ȣȭ 8 Ʈ + // 암호화를 위한 fourCC 4바이트 + // 압축된 후 만들어질 수 있는 최대 용량 + + // 암호화를 위한 8 바이트 m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8; m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize); @@ -139,9 +139,9 @@ void CLZObject::BeginCompressInBuffer(const void * pvIn, UINT uiInLen, void * /* m_pbIn = (const BYTE *) pvIn; // sizeof(SHeader) + - // ȣȭ fourCC 4Ʈ - // ִ ִ 뷮 + - // ȣȭ 8 Ʈ + // 암호화를 위한 fourCC 4바이트 + // 압축된 후 만들어질 수 있는 최대 용량 + + // 암호화를 위한 8 바이트 m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8; m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize); diff --git a/src/EterBase/lzo.h b/src/EterBase/lzo.h index 21810cd3..c2877eab 100644 --- a/src/EterBase/lzo.h +++ b/src/EterBase/lzo.h @@ -12,9 +12,9 @@ class CLZObject typedef struct SHeader { DWORD dwFourCC; - DWORD dwEncryptSize; // ȣȭ ũ - DWORD dwCompressedSize; // ũ - DWORD dwRealSize; // ũ + DWORD dwEncryptSize; // 암호화된 크기 + DWORD dwCompressedSize; // 압축된 데이터 크기 + DWORD dwRealSize; // 실제 데이터 크기 } THeader; #pragma pack() diff --git a/src/EterBase/tea.cpp b/src/EterBase/tea.cpp index dfa2a42c..a45f6fab 100644 --- a/src/EterBase/tea.cpp +++ b/src/EterBase/tea.cpp @@ -1,8 +1,8 @@ /* * Filename: tea.c -* Description: TEA ȣȭ +* Description: TEA 암호화 모듈 * -* Author: (aka. , Cronan), ۿ (aka. myevan, ڷ) +* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루) */ #include "StdAfx.h" #include "tea.h" @@ -10,24 +10,24 @@ /* * TEA Encryption Module Instruction -* Edited by aka. , Cronan +* Edited by 김한주 aka. 비엽, Cronan * * void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest) * void tea_decode(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest) -* 8Ʈ ȣ/ȣȭ Ҷ ȴ. key 16 Ʈ Ѵ. -* sz, sy 8Ʈ Ѵ. +* 8바이트를 암호/복호화 할때 사용된다. key 는 16 바이트여야 한다. +* sz, sy 는 8바이트의 역순으로 대입한다. * * int tea_decrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size); * int tea_encrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size); -* Ѳ 8 Ʈ ̻ ȣ/ȣȭ Ҷ Ѵ. size -* 8 ƴϸ 8 ũ⸦ "÷" ȣȭ Ѵ. +* 한꺼번에 8 바이트 이상을 암호/복호화 할때 사용한다. 만약 size 가 +* 8의 배수가 아니면 8의 배수로 크기를 "늘려서" 암호화 한다. * * ex. tea_code(pdwSrc[1], pdwSrc[0], pdwKey, pdwDest); * tea_decrypt(pdwDest, pdwSrc, pdwKey, nSize); */ -#define TEA_ROUND 32 // 32 ϸ, . -#define DELTA 0x9E3779B9 // DELTA ٲ . +#define TEA_ROUND 32 // 32 를 권장하며, 높을 수록 결과가 난해해 진다. +#define DELTA 0x9E3779B9 // DELTA 값 바꾸지 말것. void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest) { diff --git a/src/EterGrnLib/LODController.cpp b/src/EterGrnLib/LODController.cpp index 5fe92ef0..3095a766 100644 --- a/src/EterGrnLib/LODController.cpp +++ b/src/EterGrnLib/LODController.cpp @@ -282,8 +282,8 @@ void CGrannyLODController::AddModel(CGraphicThing * pThing, int iSrcModel, CGran } else { - // FIXME : CModelInstance::m_pgrnWorldPose Update ϴµ, - // Deform NULL Դϴ. ٲ .. - [levites] + // FIXME : CModelInstance::m_pgrnWorldPose를 Update에서 사용하는데, + // Deform을 하지 않으면 NULL 입니다. 구조가 조금 바뀌어야 할지도.. - [levites] pModelInstance->DeformNoSkin(&ms_matIdentity); } @@ -460,10 +460,10 @@ void CGrannyLODController::UpdateLODLevel(float fDistanceFromCenter, float fDist assert(m_pCurrentModelInstance != NULL); - if (fDistanceFromCenter > LOD_APPLY_MIN) // ߽ LOD + if (fDistanceFromCenter > LOD_APPLY_MIN) // 중심 LOD 예외 취소 { - // ī޶ ־ fLODRate ۾ - // 3 LOD .. հ 0, ڰ Ŀ + // 카메라부터 멀어질 수록 fLODRate가 작아진다 + // 3개 LOD가 있을때.. 가장 먼게 0, 가까울 수록 숫자가 커진다 // 100fps 50fps 33fps 25fps 20fps // 10ms 20ms 30ms 40ms 50ms diff --git a/src/EterGrnLib/LODController.h b/src/EterGrnLib/LODController.h index 93d896da..84f64662 100644 --- a/src/EterGrnLib/LODController.h +++ b/src/EterGrnLib/LODController.h @@ -269,7 +269,7 @@ class CGrannyLODController : public CGraphicBase BOOL isModelInstance(); CGrannyModelInstance* GetModelInstance(); - bool HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; } // NOTE: GetModelInstance() == 0 Ŭ ũ (2012. 05. 07) + bool HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; } // NOTE: GetModelInstance() == 0일 때 클라 크래쉬나는 문제 수정(2012. 05. 07) protected: void SetCurrentModelInstance(CGrannyModelInstance * pgrnModelInstance); diff --git a/src/EterGrnLib/Material.cpp b/src/EterGrnLib/Material.cpp index 70a7363c..b0a024f5 100644 --- a/src/EterGrnLib/Material.cpp +++ b/src/EterGrnLib/Material.cpp @@ -238,7 +238,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate pgrnOpacityTexture = GrannyGetMaterialTextureByType(m_pgrnMaterial, GrannyOpacityTexture); } - // Two-Side ʿ ˻ + // Two-Side 렌더링이 필요한 지 검사 { granny_int32 twoSided = 0; granny_data_type_definition TwoSidedFieldType[] = @@ -262,7 +262,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate if (pgrnOpacityTexture) m_roImage[1].SetPointer(__GetImagePointer(pgrnOpacityTexture->FromFileName)); - // ۽Ƽ ޽ + // 오퍼시티가 있으면 블렌딩 메쉬 if (!m_roImage[1].IsNull()) m_eType = TYPE_BLEND_PNT; else @@ -285,7 +285,7 @@ void CGrannyMaterial::__ApplyDiffuseRenderState() if (m_bTwoSideRender) { - // -_- μ ... Save & Restore ϸ δ. Save & Restore . + // -_-렌더링 프로세스가 좀 구려서... Save & Restore 하면 순서때문에 좀 꼬인다. 귀찮으니 Save & Restore 대신 따로 저장해 둠. m_dwLastCullRenderStateForTwoSideRendering = STATEMANAGER.GetRenderState(D3DRS_CULLMODE); STATEMANAGER.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); } @@ -511,7 +511,7 @@ DWORD CGrannyMaterialPalette::GetMaterialCount() const /* void CActorInstance::BeginSpecularRender() { - // NOTE - Blendingؼ κ Specular Ű ʴ´ - [levites] + // NOTE - Blending해서 찍는 부분은 Specular를 적용시키지 않는다 - [levites] STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE); STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, D3DXCOLOR(1.0f, 1.0f, 1.0f, m_AddColor.r)); diff --git a/src/EterGrnLib/Mesh.cpp b/src/EterGrnLib/Mesh.cpp index 2586dd56..7ddf0d80 100644 --- a/src/EterGrnLib/Mesh.cpp +++ b/src/EterGrnLib/Mesh.cpp @@ -159,7 +159,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal) assert(m_triGroupNodes == NULL); int mtrlCount = m_pgrnMesh->MaterialBindingCount; - if (mtrlCount <= 0) // õ 2 ũ ߻ + if (mtrlCount <= 0) // 천의 동굴 2층 크래쉬 발생 return true; int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh); @@ -199,7 +199,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal) void CGrannyMesh::RebuildTriGroupNodeList() { - assert(!"CGrannyMesh::RebuildTriGroupNodeList() - 带 ϴ°- -?"); + assert(!"CGrannyMesh::RebuildTriGroupNodeList() - \xBF\xD6 \xB8\xAE\xBA\xF4\xB5\xE5\xB8\xA6 \xC7\xCF\xB4\xC2\xB0\xA1- -?"); /* int mtrlCount = m_pgrnMesh->MaterialBindingCount; int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh); diff --git a/src/EterGrnLib/Model.cpp b/src/EterGrnLib/Model.cpp index e054891b..8555a0da 100644 --- a/src/EterGrnLib/Model.cpp +++ b/src/EterGrnLib/Model.cpp @@ -155,7 +155,7 @@ bool CGrannyModel::LoadMeshs() assert(m_meshs == NULL); assert(m_pgrnModel != NULL); - if (m_pgrnModel->MeshBindingCount <= 0) // ޽ + if (m_pgrnModel->MeshBindingCount <= 0) // 메쉬가 없는 모델 return true; granny_skeleton * pgrnSkeleton = m_pgrnModel->Skeleton; diff --git a/src/EterGrnLib/ModelInstance.h b/src/EterGrnLib/ModelInstance.h index 57f11f50..a06a4a9f 100644 --- a/src/EterGrnLib/ModelInstance.h +++ b/src/EterGrnLib/ModelInstance.h @@ -55,12 +55,12 @@ class CGrannyModelInstance : public CGraphicCollisionObject void DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix); void Deform(const D3DXMATRIX * c_pWorldMatrix); - // FIXME : ϵ Ѱ 2 ؽ Ǿִ ̱⿡ ̷ - // Ҿ Ű簡 , ñ ( ؽ ) + (ȿ ؽ) - // ̷ ڵ ̷ ʳ մϴ. - [levites] - // NOTE : ο if Ű ٴ ŷ ̷ Լ ü и - // Ű ս 鿡 ϴ. - [levites] - // NOTE : ǹ OneTexture. ijʹ 쿡 TwoTexture. + // FIXME : 현재는 하드웨어의 한계로 2장의 텍스춰로 제한이 되어있는 상태이기에 이런 + // 불안정한 아키텍춰가 가능하지만, 궁극적인 방향은 (모델 텍스춰 전부) + (효과용 텍스춰) + // 이런식의 자동 셋팅이 이뤄져야 되지 않나 생각합니다. - [levites] + // NOTE : 내부에 if문을 포함 시키기 보다는 조금은 번거롭지만 이렇게 함수 콜 자체를 분리 + // 시키는 것이 퍼포먼스 적인 측면에서는 더 나은 것 같습니다. - [levites] + // NOTE : 건물은 무조건 OneTexture. 캐릭터는 경우에 따라 TwoTexture. void RenderWithOneTexture(); void RenderWithTwoTexture(); void BlendRenderWithOneTexture(); @@ -160,7 +160,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject // Granny Data granny_model_instance * m_pgrnModelInstance; - //granny_world_pose * m_pgrnWorldPose; // + //granny_world_pose * m_pgrnWorldPose; // 현재 월드 포즈 포인터 granny_control * m_pgrnCtrl; granny_animation * m_pgrnAni; @@ -182,7 +182,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject CGrannyMaterialPalette m_kMtrlPal; // WORK - granny_world_pose* m_pgrnWorldPoseReal; // ޸𸮴 ⿡ Ҵ + granny_world_pose* m_pgrnWorldPoseReal; // 실제 메모리는 여기에 할당 std::vector m_vct_pgrnMeshBinding; // Dynamic Vertex Buffer diff --git a/src/EterGrnLib/ModelInstanceCollisionDetection.cpp b/src/EterGrnLib/ModelInstanceCollisionDetection.cpp index 4b5c21bf..8f8b933d 100644 --- a/src/EterGrnLib/ModelInstanceCollisionDetection.cpp +++ b/src/EterGrnLib/ModelInstanceCollisionDetection.cpp @@ -239,7 +239,7 @@ void CGraphicThingInstance::DrawBoundBox() D3DXVECTOR3 vtMax; SetDiffuseColor(0.0f, 1.0f, 0.0f); - // ij ٿ ڽ + // 캐릭터 꽉차는 바운딩 박스 //GetBoundBox(&vtMin, &vtMax); //DrawLineCube(vtMin.x, vtMin.y, vtMin.z, vtMax.x, vtMax.y, vtMax.z); //const CThing::TMeshVector& rmeshVector=mc_pModel->meshVector; diff --git a/src/EterGrnLib/ModelInstanceModel.cpp b/src/EterGrnLib/ModelInstanceModel.cpp index 29bdbbcc..faa16bfc 100644 --- a/src/EterGrnLib/ModelInstanceModel.cpp +++ b/src/EterGrnLib/ModelInstanceModel.cpp @@ -161,7 +161,7 @@ void CGrannyModelInstance::__CreateMeshMatrices() { assert(m_pModel != NULL); - if (m_pModel->GetMeshCount() <= 0) // ޽ (ī޶ ) 𵨵 Ȥ ִ.. + if (m_pModel->GetMeshCount() <= 0) // 메쉬가 없는 (카메라 같은) 모델도 간혹 있다.. return; int meshCount = m_pModel->GetMeshCount(); @@ -274,14 +274,14 @@ const float * CGrannyModelInstance::GetBoneMatrixPointer(int iBone) const const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) const { - // NOTE : GrannyGetWorldPose4x4 ߸ .. ׷ϰ ӵ - // GrannyGetWorldPose4x4 matrix Ҹ + // NOTE : GrannyGetWorldPose4x4는 스케일 값등이 잘못나올 수 있음.. 그래니가 속도를 위해 + // GrannyGetWorldPose4x4에 모든 matrix 원소를 제 값으로 넣지 않음 return GrannyGetWorldPoseComposite4x4(__GetWorldPosePtr(), iBone); } void CGrannyModelInstance::ReloadTexture() { - assert(" - CGrannyModelInstance::ReloadTexture()"); + assert("\xC7\xF6\xC0\xE7 \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xC0\xBD - CGrannyModelInstance::ReloadTexture()"); /* assert(m_pModel != NULL); const CGrannyMaterialPalette & c_rGrannyMaterialPalette = m_pModel->GetMaterialPalette(); diff --git a/src/EterGrnLib/ModelInstanceMotion.cpp b/src/EterGrnLib/ModelInstanceMotion.cpp index 3c19e88f..70adb1cd 100644 --- a/src/EterGrnLib/ModelInstanceMotion.cpp +++ b/src/EterGrnLib/ModelInstanceMotion.cpp @@ -112,7 +112,7 @@ void CGrannyModelInstance::ChangeMotionPointer(const CGrannyMotion* pMotion, int if (!pgrnModelInstance) return; - // Ǵ պκ ŵ ϱ LocalTime Ѵ. - [levites] + // 보간 되는 앞부분을 스킵 하기 위해 LocalTime 을 어느 정도 무시한다. - [levites] float fSkipTime = 0.3f; float localTime = GetLocalTime() - fSkipTime; diff --git a/src/EterGrnLib/ModelInstanceRender.cpp b/src/EterGrnLib/ModelInstanceRender.cpp index f8b9a5b9..6a85c480 100644 --- a/src/EterGrnLib/ModelInstanceRender.cpp +++ b/src/EterGrnLib/ModelInstanceRender.cpp @@ -47,7 +47,7 @@ void CGrannyModelInstance::DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix) // With One Texture void CGrannyModelInstance::RenderWithOneTexture() { - // FIXME : Deform, Render, BlendRender ɷִ - [levites] + // FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites] if (IsEmpty()) return; @@ -99,7 +99,7 @@ void CGrannyModelInstance::BlendRenderWithOneTexture() // With Two Texture void CGrannyModelInstance::RenderWithTwoTexture() { - // FIXME : Deform, Render, BlendRender ɷִ - [levites] + // FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites] if (IsEmpty()) return; diff --git a/src/EterGrnLib/StdAfx.h b/src/EterGrnLib/StdAfx.h index e7ff8ae1..a0cb07cc 100644 --- a/src/EterGrnLib/StdAfx.h +++ b/src/EterGrnLib/StdAfx.h @@ -1,6 +1,6 @@ #pragma once -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 //#include #include diff --git a/src/EterGrnLib/ThingInstance.cpp b/src/EterGrnLib/ThingInstance.cpp index 94b1bb9d..a0708e8d 100644 --- a/src/EterGrnLib/ThingInstance.cpp +++ b/src/EterGrnLib/ThingInstance.cpp @@ -342,8 +342,8 @@ bool CGraphicThingInstance::GetBonePosition(int iModelIndex, int iBoneIndex, flo *pfz = pfMatrix[14]; return true; } -//iSkelInstance ⺻ Link( ٴ°)Ű, -// ⺻ attach(ǥ °) ˴ϴ. +//iSkelInstance 가 있으면 기본 본에 Link(본이 붙는것)시키고, +//없으면 기본 본에 attach(좌표만 가져다 쓰는것) 됩니다. bool CGraphicThingInstance::SetModelInstance(int iDstModelInstance, int iSrcModelThing, int iSrcModel,int iSkelInstance) { if (!CheckModelInstanceIndex(iDstModelInstance)) @@ -735,7 +735,7 @@ void CGraphicThingInstance::UpdateLODLevel() const D3DXVECTOR3 & c_rv3CameraPosition = pcurCamera->GetEye(); const D3DXVECTOR3 & c_v3Position = GetPosition(); - // NOTE : ߽κ Ÿ 꿡 z ̴ ʴ´. - [levites] + // NOTE : 중심으로부터의 거리 계산에 z값 차이는 사용하지 않는다. - [levites] CGrannyLODController::FUpdateLODLevel update; update.fDistanceFromCenter = sqrtf((c_rv3TargetPosition.x - c_v3Position.x) * (c_rv3TargetPosition.x - c_v3Position.x) + (c_rv3TargetPosition.y - c_v3Position.y) * (c_rv3TargetPosition.y - c_v3Position.y)); diff --git a/src/EterGrnLib/ThingInstance.h b/src/EterGrnLib/ThingInstance.h index 857558af..1b896b97 100644 --- a/src/EterGrnLib/ThingInstance.h +++ b/src/EterGrnLib/ThingInstance.h @@ -34,7 +34,7 @@ class CGraphicThingInstance : public CGraphicObjectInstance void UpdateLODLevel(); void UpdateTime(); - void DeformAll(); // LOD + void DeformAll(); // 모든 LOD 디폼 bool LessRenderOrder(CGraphicThingInstance* pkThingInst); diff --git a/src/EterImageLib/Image.h b/src/EterImageLib/Image.h index a9f5c3e9..45f5a34d 100644 --- a/src/EterImageLib/Image.h +++ b/src/EterImageLib/Image.h @@ -9,11 +9,11 @@ struct TGA_HEADER { char idLen; // 0 - char palType; // ķƮ 1, 0 - char imgType; // ķƮ 1, 2 + char palType; // 파레트있으면 1, 없음 0 + char imgType; // 파레트있으면 1, 없음 2 WORD colorBegin; // 0 - WORD colorCount; // ķƮ 256, 0 - char palEntrySize; // ķƮ 24, 0 + WORD colorCount; // 파레트 있으면 256, 없음 0 + char palEntrySize; // 파레트 있으면 24, 없음 0 WORD left; WORD top; WORD width; diff --git a/src/EterImageLib/TGAImage.cpp b/src/EterImageLib/TGAImage.cpp index 61261394..dfcbfc13 100644 --- a/src/EterImageLib/TGAImage.cpp +++ b/src/EterImageLib/TGAImage.cpp @@ -33,7 +33,7 @@ void CTGAImage::Create(int width, int height) m_Header.width = (short) width; m_Header.height = (short) height; m_Header.colorBits = 32; - m_Header.desc = 0x08; // alpha channel + m_Header.desc = 0x08; // alpha channel 있음 CImage::Create(width, height); } @@ -54,7 +54,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem) switch (m_Header.imgType) { - case 3: // ĸ ִ (1bytes per pixel, Ⱦ) + case 3: // 알파만 있는 것 (1bytes per pixel, 거의 안쓰임) { for (i = 0; i < hxw; ++i) { @@ -64,7 +64,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem) } break; - case 2: // ȵ TGA + case 2: // 압축 안된 TGA { if (m_Header.colorBits == 16) // 16bit { @@ -112,7 +112,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem) } break; - case 10: // TGA (RLE) + case 10: // 압축 된 TGA (RLE) { BYTE rle; @@ -123,7 +123,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem) { rle = (BYTE) *(c_pbMem++); --iSize; - if (rle < 0x80) // ȵ + if (rle < 0x80) // 압축 안된 곳 { rle++; @@ -146,7 +146,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem) } else { - // + // 압축 된 곳 rle -= 127; b = (BYTE) *(c_pbMem++); --iSize; @@ -315,7 +315,7 @@ bool CTGAImage::SaveToDiskFile(const char* c_szFileName) fwrite(&m_Header, 18, 1, fp); - if (m_Header.imgType == 10) // RLE + if (m_Header.imgType == 10) // RLE 압축으로 저장 { DWORD * data = GetBasePointer(); diff --git a/src/EterLib/AttributeData.cpp b/src/EterLib/AttributeData.cpp index 61e0e197..786f20ba 100644 --- a/src/EterLib/AttributeData.cpp +++ b/src/EterLib/AttributeData.cpp @@ -61,7 +61,7 @@ bool CAttributeData::OnLoad(int /*iSize*/, const void * c_pvBuf) { if (!c_pvBuf) { - // NOTE: ٸ ׷ 浹 ͸ ϴ ҽ ı ʰ Ŵ. + // NOTE: 파일이 존재하지 않으면 다른곳에서 그래픽 모델을 기반으로 충돌 데이터를 생성하니 리소스를 파괴하지 않고 유지시킴. return true; } diff --git a/src/EterLib/AttributeInstance.h b/src/EterLib/AttributeInstance.h index 22b39140..b347cf3a 100644 --- a/src/EterLib/AttributeInstance.h +++ b/src/EterLib/AttributeInstance.h @@ -15,7 +15,7 @@ class CAttributeInstance const char * GetDataFileName() const; - // NOTE : Object + // NOTE : Object 전용 void SetObjectPointer(CAttributeData * pAttributeData); void RefreshObject(const D3DXMATRIX & c_rmatGlobal); CAttributeData * GetObjectPointer() const; diff --git a/src/EterLib/Camera.cpp b/src/EterLib/Camera.cpp index 1d9110ec..31aa1cce 100644 --- a/src/EterLib/Camera.cpp +++ b/src/EterLib/Camera.cpp @@ -438,7 +438,7 @@ void CCamera::RotateEyeAroundTarget(float fPitchDegree, float fRollDegree) D3DXMATRIX matRot, matRotPitch, matRotRoll; - // Ӹ Ѿ ... + // 머리위로 넘어가기 막기... if (m_fPitch + fPitchDegree > 80.0f) { fPitchDegree = 80.0f - m_fPitch; @@ -593,7 +593,7 @@ bool CCameraManager::isCurrentCamera(unsigned char ucCameraNum) return false; } -// ⽺ Լ... +// 잡스러운 함수들... bool CCameraManager::AddCamera(unsigned char ucCameraNum) { if(m_CameraMap.end() != m_CameraMap.find(ucCameraNum)) diff --git a/src/EterLib/Camera.h b/src/EterLib/Camera.h index 4ef3cea3..f5578053 100644 --- a/src/EterLib/Camera.h +++ b/src/EterLib/Camera.h @@ -51,8 +51,8 @@ class CCamera void SetResistance(float fResistance); private: - const CCamera & operator = (const CCamera &) ; // - CCamera (const CCamera & ) ; // + const CCamera & operator = (const CCamera &) ; // 지원하지 않음 + CCamera (const CCamera & ) ; //지원하지 않음 // Camera Update eCameraState m_eCameraState; @@ -85,14 +85,14 @@ class CCamera D3DXMATRIX m_matInverseView; D3DXMATRIX m_matBillboard; // Special matrix for billboarding effects - //߰ + //추가분 float m_fPitch; float m_fRoll; float m_fDistance; - // ī޶ AI Ray + // 카메라 AI를 위한 Ray 들 - // ī޶ ѷ Ray + // 카메라를 둘러싼 Ray CRay m_kCameraBottomToTerrainRay; CRay m_kCameraFrontToTerrainRay; CRay m_kCameraBackToTerrainRay; @@ -124,14 +124,14 @@ class CCamera bool m_bDrag; // protected: - // + // 물리 D3DXVECTOR3 m_v3AngularAcceleration; D3DXVECTOR3 m_v3AngularVelocity; float m_fResistance; public: ////////////////////////////////////////////////////////////////////////// - // + // 물리 ////////////////////////////////////////////////////////////////////////// void SetAngularAcceleration(D3DXVECTOR3 v3AngularAcceleration) { m_v3AngularAcceleration = v3AngularAcceleration; } @@ -185,7 +185,7 @@ class CCamera float GetRoll() const { return m_fRoll; } float GetDistance() const { return m_fDistance; } - void Pitch(const float fPitchDelta); //ư ִ´. + void Pitch(const float fPitchDelta); //돌아가는 각도를 넣는다. void Roll(const float fRollDelta); void SetDistance(const float fdistance); @@ -193,35 +193,35 @@ class CCamera // camera movement ////////////////////////////////////////////////////////////////////////// - // ״ ̵... ī޶ ġ Ÿ ġ ޶. + // 말그대로 이동... 카메라 위치와 타겟 위치가 모두 달라진다. void Move(const D3DXVECTOR3 & v3Displacement); - // .. ī޶ ġ ̵.. Ÿ ġ ... + // 줌.. 카메라 위치만 이동.. 타겟 위치는 고정... void Zoom(float fRatio); - // ̵.. Ÿġ ޶Ƿ ܰ ٸ... + // 뷰 방향으로 이동.. 타겟위치가 달라지므로 줌과는 다르다... void MoveAlongView(float fDistance); - // ī޶ ̵.. + // 카메라 옆 방향으로 이동.. void MoveAlongCross(float fDistance); - // ī޶ ̵... + // 카메라 업벡터 방향으로 이동... void MoveAlongUp(float fDistance); - // ī޶ ̵... MoveAlongCross .. + // 카메라 옆 방향으로 이동... MoveAlongCross과 동일.. void MoveLateral(float fDistance); - // Z XY ̵.. + // 뷰 방향의 Z 성분을 무시한 XY평면 방향으로 이동.. void MoveFront(float fDistance); - // Z( ) ̵... + // Z방향(연직 방향)으로 이동... void MoveVertical(float fDistance); - // //ī޶ ġ Ű Ӹ . Ÿ ޶? - // //ȸ ƴ "(Degree)" ִ´. + // //카메라 위치는 고정시키고 머리만 든다. 타겟이 달라지겠죠? + // //회전각을 라디안이 아닌 "도(Degree)"로 넣는다. // void RotateUpper(float fDegree); - // Ÿ ߽ . Eterlib SetAroundCamera ɰ ... - // fPitchDegree (0)κ Ʒ ... - // fRollDegree Ÿ ߽ ð ... + // 타겟 중심으로 돈다. Eterlib의 SetAroundCamera의 기능과 유사... + // fPitchDegree는 수평(0도)로부터 아랫쪽으로 꺽어지는 각도... + // fRollDegree는 타겟 중심으로 시계방향으로 도는 각도... void RotateEyeAroundTarget(float fPitchDegree, float fRollDegree); - // ߽ ߽ . Ÿ ޶? + // 도는 중심점을 따로 지정 그 점을 중심으로 돈다. 타겟 점도 달라지겠죠? void RotateEyeAroundPoint(const D3DXVECTOR3 & v3Point, float fPitchDegree, float fRollDegree); protected: diff --git a/src/EterLib/CollisionData.cpp b/src/EterLib/CollisionData.cpp index fdcd410c..fb9a896a 100644 --- a/src/EterLib/CollisionData.cpp +++ b/src/EterLib/CollisionData.cpp @@ -230,7 +230,7 @@ bool CSphereCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSp { if (square_distance_between_linesegment_and_point(s.v3LastPosition,s.v3Position,m_attribute.v3Position) < (m_attribute.fRadius+s.fRadius)*(m_attribute.fRadius+s.fRadius)) { - // NOTE : Ÿ .. - [levites] + // NOTE : 거리가 가까워 졌을때만.. - [levites] if (GetVector3Distance(s.v3Position, m_attribute.v3Position) < GetVector3Distance(s.v3LastPosition, m_attribute.v3Position)) return true; @@ -321,7 +321,7 @@ bool CPlaneCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSph if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[2]) > - s.fRadius/*0.0f*/) if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[3]) > - s.fRadius/*0.0f*/) { - // NOTE : Ÿ .. - [levites] + // NOTE : 거리가 가까워 졌을때만.. - [levites] if (fabs(D3DXVec3Dot(&(s.v3Position - m_attribute.v3Position), &m_attribute.v3Normal)) < fabs(D3DXVec3Dot(&(s.v3LastPosition - m_attribute.v3Position), &m_attribute.v3Normal))) return true; @@ -471,14 +471,14 @@ bool CCylinderCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamic { if (CollideCylinderVSDynamicSphere(m_attribute, s)) { - // NOTE : Ÿ .. - [levites] + // NOTE : 거리가 가까워 졌을때만.. - [levites] if (GetVector3Distance(s.v3Position, m_attribute.v3Position) < GetVector3Distance(s.v3LastPosition, m_attribute.v3Position)) return true; } - // NOTE : ̵ Ÿ Ŭ ƴ ( ũ ) ̵ϸ鼭 üũ - [levites] + // NOTE : 이동 거리가 클 경우 빈틈없이 (원 크기 단위로) 이동하면서 전부 체크 해 본다 - [levites] D3DXVECTOR3 v3Distance = s.v3Position - s.v3LastPosition; float fDistance = D3DXVec3Length(&v3Distance); if (s.fRadius<=0.0001f) diff --git a/src/EterLib/ColorTransitionHelper.h b/src/EterLib/ColorTransitionHelper.h index deb7a60d..b5319672 100644 --- a/src/EterLib/ColorTransitionHelper.h +++ b/src/EterLib/ColorTransitionHelper.h @@ -27,10 +27,10 @@ class CColorTransitionHelper bool isTransitionStarted() { return m_bTransitionStarted; } private: - D3DCOLOR m_dwCurColor; // + D3DCOLOR m_dwCurColor; // 현재 색 - DWORD m_dwStartTime; // ٲ ϴ ð - DWORD m_dwDuration; // ȿ ٲ°? + DWORD m_dwStartTime; // 바뀌기 시작하는 시간 + DWORD m_dwDuration; // 얼마 동안에 바뀌는가? bool m_bTransitionStarted; diff --git a/src/EterLib/CullingManager.cpp b/src/EterLib/CullingManager.cpp index 86c89ec6..c5affff4 100644 --- a/src/EterLib/CullingManager.cpp +++ b/src/EterLib/CullingManager.cpp @@ -93,7 +93,7 @@ void CCullingManager::Reset() void CCullingManager::Update() { // TODO : update each object - // ϰ غ + // 하지말고 각자 하게 해보자 //DWORD time = ELTimer_GetMSec(); //Reset(); diff --git a/src/EterLib/Decal.h b/src/EterLib/Decal.h index a19ba980..f5533b5c 100644 --- a/src/EterLib/Decal.h +++ b/src/EterLib/Decal.h @@ -42,15 +42,15 @@ protected: D3DXPLANE m_v4FrontPlane; D3DXPLANE m_v4BackPlane; - // + // 개수 DWORD m_dwVertexCount; DWORD m_dwPrimitiveCount; - // ý ۿ δ콺 + // 버택스 버퍼와 인댁스 버퍼 // CGraphicVertexBuffer m_GraphicVertexBuffer; // CGraphicIndexBuffer m_GraphicIndexBuffer; - // ý ۿ δ콺 ſ 迭 DrawIndexedPrimitiveUP ׸. + // 버택스 버퍼와 인댁스 버퍼 대신에 배열 만들고 DrawIndexedPrimitiveUP로 그리자. typedef struct { WORD m_wMinIndex; diff --git a/src/EterLib/FileLoaderThread.cpp b/src/EterLib/FileLoaderThread.cpp index 3b5c0673..e7fcb649 100644 --- a/src/EterLib/FileLoaderThread.cpp +++ b/src/EterLib/FileLoaderThread.cpp @@ -79,7 +79,7 @@ void CFileLoaderThread::Shutdown() } while (!bRet); - WaitForSingleObject(m_hThread, 10000); // 尡 DZ⸦ 10 ٸ + WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림 } UINT CFileLoaderThread::Execute(void * /*pvArg*/) diff --git a/src/EterLib/GrpBase.cpp b/src/EterLib/GrpBase.cpp index ca5bab91..c27652bd 100644 --- a/src/EterLib/GrpBase.cpp +++ b/src/EterLib/GrpBase.cpp @@ -75,13 +75,13 @@ int CGraphicBase::ms_iWavingPower; DWORD CGraphicBase::ms_dwFlashingEndTime; D3DXCOLOR CGraphicBase::ms_FlashingColor; -// Terrain picking Ray... CCamera ̿ϴ .. Ray ʿ... +// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요... CRay CGraphicBase::ms_Ray; bool CGraphicBase::ms_bSupportDXT = true; bool CGraphicBase::ms_isLowTextureMemory = false; bool CGraphicBase::ms_isHighTextureMemory = false; -// 2004.11.18.myevan.DynamicVertexBuffer ü +// 2004.11.18.myevan.DynamicVertexBuffer로 교체 /* std::vector CGraphicBase::ms_lineIdxVector; std::vector CGraphicBase::ms_lineTriIdxVector; diff --git a/src/EterLib/GrpBase.h b/src/EterLib/GrpBase.h index eeafa076..10bbf9d9 100644 --- a/src/EterLib/GrpBase.h +++ b/src/EterLib/GrpBase.h @@ -230,7 +230,7 @@ class CGraphicBase void UpdatePipeLineMatrix(); protected: - // D3DX Mesh (÷ ǥȰ ) + // 각종 D3DX Mesh 들 (컬루젼 데이터 등을 표시활 때 쓴다) static LPD3DXMESH ms_lpSphereMesh; static LPD3DXMESH ms_lpCylinderMesh; @@ -274,7 +274,7 @@ class CGraphicBase static float ms_fNearY; static float ms_fFarY; - // 2004.11.18.myevan.DynamicVertexBuffer ü + // 2004.11.18.myevan.DynamicVertexBuffer로 교체 /* static std::vector ms_lineIdxVector; static std::vector ms_lineTriIdxVector; @@ -292,7 +292,7 @@ class CGraphicBase static DWORD ms_dwFlashingEndTime; static D3DXCOLOR ms_FlashingColor; - // Terrain picking Ray... CCamera ̿ϴ .. Ray ʿ... + // Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요... static CRay ms_Ray; // diff --git a/src/EterLib/GrpCollisionObject.h b/src/EterLib/GrpCollisionObject.h index 94f9018c..b82d995f 100644 --- a/src/EterLib/GrpCollisionObject.h +++ b/src/EterLib/GrpCollisionObject.h @@ -18,8 +18,8 @@ class CGraphicCollisionObject : public CGraphicBase bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection); bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection); - // NOTE : ms_vtPickRayOrig ms_vtPickRayDir CGraphicBGase ִµ - // ڷ ־ ϴ ִ°? Customize ؼ? - [levites] + // NOTE : ms_vtPickRayOrig와 ms_vtPickRayDir를 CGraphicBGase가 가지고 있는데 + // 굳이 인자로 넣어줘야 하는 이유가 있는가? Customize를 위해서? - [levites] bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius); bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight); }; diff --git a/src/EterLib/GrpDevice.cpp b/src/EterLib/GrpDevice.cpp index bda3aa23..6c06303a 100644 --- a/src/EterLib/GrpDevice.cpp +++ b/src/EterLib/GrpDevice.cpp @@ -183,7 +183,7 @@ static DWORD s_MaxTextureWidth, s_MaxTextureHeight; BOOL EL3D_ConfirmDevice(D3DCAPS9& rkD3DCaps, UINT uBehavior, D3DFORMAT /*eD3DFmt*/) { - // PUREDEVICE GetTransform / GetViewport ʴ´. + // PUREDEVICE는 GetTransform / GetViewport 등이 되지 않는다. if (uBehavior & D3DCREATE_PUREDEVICE) return FALSE; @@ -369,7 +369,7 @@ RETRY: ms_iD3DAdapterInfo, D3DDEVTYPE_HAL, hWnd, - // 2004. 1. 9 myevan ؽ μ ڵ ߰ + // 2004. 1. 9 myevan 버텍스 프로세싱 방식 자동 선택 추가 pkD3DModeInfo->m_dwD3DBehavior, &ms_d3dPresentParameter, &ms_lpd3dDevice))) @@ -393,7 +393,7 @@ RETRY: if (ErrorCorrection) return CREATE_DEVICE; - // 2004. 1. 9 myevan ūǹ ڵε.. ǥϰ + // 2004. 1. 9 myevan 큰의미 없는 코드인듯.. 에러나면 표시하고 종료하자 iReflashRate = 0; ++ErrorCorrection; iRet = CREATE_REFRESHRATE; diff --git a/src/EterLib/GrpDevice.h b/src/EterLib/GrpDevice.h index 70152745..4d7abbf3 100644 --- a/src/EterLib/GrpDevice.h +++ b/src/EterLib/GrpDevice.h @@ -23,8 +23,8 @@ public: CREATE_GET_DEVICE_CAPS2 = (1 << 3), CREATE_DEVICE = (1 << 4), CREATE_REFRESHRATE = (1 << 5), - CREATE_ENUM = (1 << 6), // 2003. 01. 09. myevan Ʈ - CREATE_DETECT = (1 << 7), // 2003. 01. 09. myevan + CREATE_ENUM = (1 << 6), // 2003. 01. 09. myevan 모드 리스트 얻기 실패 + CREATE_DETECT = (1 << 7), // 2003. 01. 09. myevan 모드 선택 실패 CREATE_NO_TNL = (1 << 8), CREATE_BAD_DRIVER = (1 << 9), CREATE_FORMAT = (1 << 10), diff --git a/src/EterLib/GrpExpandedImageInstance.cpp b/src/EterLib/GrpExpandedImageInstance.cpp index a634a506..4021f5c9 100644 --- a/src/EterLib/GrpExpandedImageInstance.cpp +++ b/src/EterLib/GrpExpandedImageInstance.cpp @@ -116,7 +116,7 @@ void CGraphicExpandedImageInstance::OnRender() break; } - // 2004.11.18.myevan.ctrl+alt+del ݺ ƨ + // 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제 if (CGraphicBase::SetPDTStream(vertices, 4)) { CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT); diff --git a/src/EterLib/GrpFontTexture.cpp b/src/EterLib/GrpFontTexture.cpp index 93fb1527..88c732dd 100644 --- a/src/EterLib/GrpFontTexture.cpp +++ b/src/EterLib/GrpFontTexture.cpp @@ -213,7 +213,7 @@ CGraphicFontTexture::TCharacterInfomation* CGraphicFontTexture::UpdateCharacterI wchar_t keyValue = code.second; if (keyValue == 0x08) - keyValue = L' '; // ٲ۴ (ƶ ½ : NAME:\tTEXT -> TEXT\t:NAME ȯ ) + keyValue = L' '; // 탭은 공백으로 바꾼다 (아랍 출력시 탭 사용: NAME:\tTEXT -> TEXT\t:NAME 로 전환됨 ) ABCFLOAT stABC; SIZE size; diff --git a/src/EterLib/GrpImage.cpp b/src/EterLib/GrpImage.cpp index 13d0fff4..cfd3b4b9 100644 --- a/src/EterLib/GrpImage.cpp +++ b/src/EterLib/GrpImage.cpp @@ -68,7 +68,7 @@ bool CGraphicImage::OnLoad(int iSize, const void * c_pvBuf) m_imageTexture.SetFileName(CResource::GetFileName()); - // Ư ǻͿ Unknown ''ϸ ƨ -_-; - + // 특정 컴퓨터에서 Unknown으로 '안'하면 튕기는 현상이 있음-_-; -비엽 if (!m_imageTexture.CreateFromMemoryFile(iSize, c_pvBuf, D3DFMT_UNKNOWN, m_dwFilter)) return false; diff --git a/src/EterLib/GrpImageInstance.cpp b/src/EterLib/GrpImageInstance.cpp index 023f9c98..b34cf539 100644 --- a/src/EterLib/GrpImageInstance.cpp +++ b/src/EterLib/GrpImageInstance.cpp @@ -83,7 +83,7 @@ void CGraphicImageInstance::OnRender() vertices[3].texCoord = TTextureCoordinate(eu, ev); vertices[3].diffuse = m_DiffuseColor; - // 2004.11.18.myevan.ctrl+alt+del ݺ ƨ + // 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제 if (CGraphicBase::SetPDTStream(vertices, 4)) { CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT); @@ -207,7 +207,7 @@ void CGraphicImageInstance::Initialize() void CGraphicImageInstance::Destroy() { - m_roImage.SetPointer(NULL); // CRef ۷ īƮ . + m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함. Initialize(); } diff --git a/src/EterLib/GrpImageTexture.cpp b/src/EterLib/GrpImageTexture.cpp index e63432fb..1b7391bb 100644 --- a/src/EterLib/GrpImageTexture.cpp +++ b/src/EterLib/GrpImageTexture.cpp @@ -44,7 +44,7 @@ bool CGraphicImageTexture::CreateDeviceObjects() if (m_stFileName.empty()) { - // Ʈ ؽ + // 폰트 텍스쳐 if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, 0, m_d3dFmt, D3DPOOL_MANAGED, &m_lpd3dTexture, NULL))) return false; } diff --git a/src/EterLib/GrpLightManager.cpp b/src/EterLib/GrpLightManager.cpp index bd76e6a0..57bcaa6a 100644 --- a/src/EterLib/GrpLightManager.cpp +++ b/src/EterLib/GrpLightManager.cpp @@ -97,18 +97,18 @@ struct LightComp } }; -// NOTE : FlushLight -// ݵ RestoreLight ߸ Ѵ. +// NOTE : FlushLight후 렌더링 +// 그 후 반드시 RestoreLight를 해줘야만 한다. void CLightManager::FlushLight() { Update(); m_LightSortVector.clear(); - // NOTE: Dynamic Static и Ű CenterPosition ٲ𶧸 Static - // ٽ Flush ϴ ȭ ִ. - [levites] + // NOTE: Dynamic과 Static을 분리 시키고 CenterPosition이 바뀔때마다 Static만 + // 다시 Flush 하는 식으로 최적화 할 수 있다. - [levites] - // light Ÿ Ѵ. + // light들의 거리를 추출해 정렬한다. TLightMap::iterator itor = m_LightMap.begin(); for (; itor != m_LightMap.end(); ++itor) @@ -124,7 +124,7 @@ void CLightManager::FlushLight() // quick sort lights std::sort(m_LightSortVector.begin(), m_LightSortVector.end(), LightComp()); - // NOTE - Ÿ ĵ Ʈ Limit ŭ ؼ ش. + // NOTE - 거리로 정렬된 라이트를 Limit 갯수 만큼 제한해서 켜준다. STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, TRUE); for (DWORD k = 0; k < min(m_dwLimitLightCount, m_LightSortVector.size()); ++k) diff --git a/src/EterLib/GrpLightManager.h b/src/EterLib/GrpLightManager.h index a0567c4f..eb1e8399 100644 --- a/src/EterLib/GrpLightManager.h +++ b/src/EterLib/GrpLightManager.h @@ -93,8 +93,8 @@ class CLightManager : public CGraphicBase, public CLightBase, public CSingleton< void Initialize(); - // NOTE : FlushLight - // ݵ RestoreLight ߸ Ѵ. + // NOTE : FlushLight후 렌더링 + // 그 후 반드시 RestoreLight를 해줘야만 한다. void Update(); void FlushLight(); void RestoreLight(); diff --git a/src/EterLib/GrpMarkInstance.cpp b/src/EterLib/GrpMarkInstance.cpp index e78261e6..a4d9b71d 100644 --- a/src/EterLib/GrpMarkInstance.cpp +++ b/src/EterLib/GrpMarkInstance.cpp @@ -241,7 +241,7 @@ void CGraphicMarkInstance::Initialize() void CGraphicMarkInstance::Destroy() { - m_roImage.SetPointer(NULL); // CRef ۷ īƮ . + m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함. Initialize(); } diff --git a/src/EterLib/GrpScreen.cpp b/src/EterLib/GrpScreen.cpp index 80cd27da..b667a327 100644 --- a/src/EterLib/GrpScreen.cpp +++ b/src/EterLib/GrpScreen.cpp @@ -53,7 +53,7 @@ void CScreen::RenderBox3d(float sx, float sy, float sz, float ex, float ey, floa { ex, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 3 { sx, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 2 - { ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f } // 3, (x 1 3) + { ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f } // 3, (x가 1증가된 3) }; // 2004.11.18.myevan.DrawIndexPrimitiveUP -> DynamicVertexBuffer @@ -510,11 +510,11 @@ void CScreen::SetCursorPosition(int x, int y, int hres, int vres) ms_vtPickRayOrig.y = matViewInverse._42; ms_vtPickRayOrig.z = matViewInverse._43; -// // 2003. 9. 9 ߰ -// // picking ... Ѥ; Ͱ ʿ... +// // 2003. 9. 9 동현 추가 +// // 지형 picking을 위한 뻘짓... ㅡㅡ; 위에 것과 통합 필요... ms_Ray.SetStartPoint(ms_vtPickRayOrig); ms_Ray.SetDirection(-ms_vtPickRayDir, 51200.0f); -// // 2003. 9. 9 ߰ +// // 2003. 9. 9 동현 추가 } bool CScreen::GetCursorPosition(float* px, float* py, float* pz) diff --git a/src/EterLib/GrpText.cpp b/src/EterLib/GrpText.cpp index a47d64fc..1c24ce0b 100644 --- a/src/EterLib/GrpText.cpp +++ b/src/EterLib/GrpText.cpp @@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/) bool bItalic = false; // format - // .fnt "" Ʈ ⺻ 12 ε - // :18.fnt "" Ʈ 18 ε - // :14i.fnt "" Ʈ 14 & Ÿ ε + // 굴림.fnt "굴림" 폰트 기본 사이즈 12 로 로딩 + // 굴림:18.fnt "굴림" 폰트 사이즈 18 로 로딩 + // 굴림:14i.fnt "굴림" 폰트 사이즈 14 & 이탤릭으로 로딩 const char * p = strrchr(GetFileName(), ':'); if (p) diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp index 0b3e4145..aa40201b 100644 --- a/src/EterLib/GrpTextInstance.cpp +++ b/src/EterLib/GrpTextInstance.cpp @@ -121,12 +121,12 @@ int ReadToken(const char* token) void CGraphicTextInstance::Update() { - if (m_isUpdate) // ڿ ٲ Ʈ Ѵ. + if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다. return; if (m_roText.IsNull()) { - Tracef("CGraphicTextInstance::Update - Ʈ ʾҽϴ\n"); + Tracef("CGraphicTextInstance::Update - Font not set\n"); return; } @@ -139,7 +139,7 @@ void CGraphicTextInstance::Update() UINT defCodePage = GetDefaultCodePage(); - UINT dataCodePage = defCodePage; // ƶ Ʈ ͸ UTF8 Ϸ + UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패 CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' '); @@ -185,7 +185,7 @@ void CGraphicTextInstance::Update() bool isEnglish = true; int nEnglishBase = wArabicTextLen - 1; - //<< ũ>> + //<<하이퍼 링크>> int x = 0; int len; @@ -194,7 +194,7 @@ void CGraphicTextInstance::Update() std::wstring hyperlinkBuffer; int no_hyperlink = 0; - // ɺ ƶ ؾѴ + // 심볼로 끝나면 아랍어 모드로 시작해야한다 if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1])) { isEnglish = false; @@ -208,24 +208,24 @@ void CGraphicTextInstance::Update() if (isEnglish) { - // <<ɺ (ex. ȣ, )>> -> . - // <<(ɺ ƴ ͵ : , , ƶ)>> - // (1) ɺ or + // <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지. + // <<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>> + // (1) 맨 앞의 심볼 or // (2) - // 1) ڰ ƶ ƴ && - // 2) ڰ ƶ ƴ && - // 3) ڰ ɺ'|' ƴ && + // 1) 앞 글자가 아랍어 아님 && + // 2) 뒷 글자가 아랍어 아님 && + // 3) 뒷 글자가 심볼'|'이 아님 && // or - // (3) ɺ '|' - // <<ƶ Ѿ : ɺ.>> - // 1) ձ ƶ - // 2) ޱ ƶ + // (3) 현재 심볼이 '|' + // <<아랍어 모드로 넘어가는 경우 : 심볼에서.>> + // 1) 앞글자 아랍어 + // 2) 뒷글자 아랍어 // // if (Arabic_IsInSymbol(wArabicChar) && ( (i == 0) || (i > 0 && - !(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //ձ, ޱڰ ƶ ƴ. + !(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //앞글자, 뒷글자가 아랍어 아님. wArabicText[i+1] != '|' ) || wArabicText[i] == '|' @@ -234,10 +234,10 @@ void CGraphicTextInstance::Update() // pass int temptest = 1; } - // (1)ƶ̰ų (2)ƶ ɺ̶ ƶ ȯ + // (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환 else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar)) { - //  ׸. + //그 전까지의 영어를 그린다. for (int e = i + 1; e <= nEnglishBase;) { int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer); @@ -251,7 +251,7 @@ void CGraphicTextInstance::Update() kHyperlink.ex += charWidth; //x += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -279,7 +279,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = 0; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치 } else { @@ -299,7 +299,7 @@ void CGraphicTextInstance::Update() int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor); kHyperlink.ex += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -313,16 +313,16 @@ void CGraphicTextInstance::Update() isEnglish = false; } } - else //[[[ƶ ]]] + else //[[[아랍어 모드]]] { - // ƶ̰ų ƶ ɺ̶ + // 아랍어이거나 아랍어 출력중 나오는 심볼이라면 if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar)) { int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor); kHyperlink.ex += charWidth; x += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -333,7 +333,7 @@ void CGraphicTextInstance::Update() tempLink.sx += charWidth; } } - else //̰ų, ɺ̶, + else //영어이거나, 영어 다음에 나오는 심볼이라면, { nEnglishBase = i; isEnglish = true; @@ -355,7 +355,7 @@ void CGraphicTextInstance::Update() int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor); kHyperlink.ex += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -383,7 +383,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = 0; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치 } else { @@ -401,7 +401,7 @@ void CGraphicTextInstance::Update() } } - else // ƶ ٸ . + else // 아랍외 다른 지역. { int x = 0; int len; @@ -440,7 +440,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = x; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치 } else { @@ -460,7 +460,7 @@ void CGraphicTextInstance::Update() if (token < end) { int newCodePage = ReadToken(token); - dataCodePage = newCodePage; // ƶ Ʈ ͸ UTF8 Ϸ + dataCodePage = newCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패 begin = token + 5; } else @@ -570,7 +570,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) CGraphicFontTexture::TCharacterInfomation* pCurCharInfo; - // ׵θ + // 테두리 if (m_isOutline) { fCurX=fStanX; @@ -586,7 +586,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) fFontHeight=float(pCurCharInfo->height); fFontAdvance=float(pCurCharInfo->advance); - // NOTE : Ʈ ¿ Width Ӵϴ. - [levites] + // NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites] if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth) { if (m_isMultiLine) @@ -636,7 +636,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) akVertex[2].y=fFontSy-feather; akVertex[3].y=fFontEy+feather; - // + // 왼 akVertex[0].x=fFontSx-fFontHalfWeight-feather; akVertex[1].x=fFontSx-fFontHalfWeight-feather; akVertex[2].x=fFontEx-fFontHalfWeight+feather; @@ -646,7 +646,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); - // + // 오른 akVertex[0].x=fFontSx+fFontHalfWeight-feather; akVertex[1].x=fFontSx+fFontHalfWeight-feather; akVertex[2].x=fFontEx+fFontHalfWeight+feather; @@ -660,7 +660,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) akVertex[2].x=fFontEx+feather; akVertex[3].x=fFontEx+feather; - // + // 위 akVertex[0].y=fFontSy-fFontHalfWeight-feather; akVertex[1].y=fFontEy-fFontHalfWeight+feather; akVertex[2].y=fFontSy-fFontHalfWeight-feather; @@ -670,7 +670,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4)) STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); - // Ʒ + // 아래 akVertex[0].y=fFontSy+fFontHalfWeight-feather; akVertex[1].y=fFontEy+fFontHalfWeight+feather; akVertex[2].y=fFontSy+fFontHalfWeight-feather; @@ -684,7 +684,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) } } - // Ʈ + // 메인 폰트 fCurX=fStanX; fCurY=fStanY; fFontMaxHeight=0.0f; @@ -698,7 +698,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) fFontMaxHeight=max(fFontHeight, pCurCharInfo->height); fFontAdvance=float(pCurCharInfo->advance); - // NOTE : Ʈ ¿ Width Ӵϴ. - [levites] + // NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites] if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth) { if (m_isMultiLine) @@ -811,9 +811,9 @@ void CGraphicTextInstance::Render(RECT * pClipRect) sy -= float(m_textHeight) / 2.0f; break; } - // ȭ - // ؽĸ Ѵٸ... STRIP ϰ, ؽİ ǰų DrawPrimitive ȣ - // ִ ڸ ̵! + // 최적화 사항 + // 같은텍스쳐를 사용한다면... STRIP을 구성하고, 텍스쳐가 변경되거나 끝나면 DrawPrimitive를 호출해 + // 최대한 숫자를 줄이도록하자! TPDTVertex vertices[4]; vertices[0].diffuse = diffuse; @@ -865,13 +865,13 @@ void CGraphicTextInstance::Render(RECT * pClipRect) STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, dwFogEnable); STATEMANAGER.SetRenderState(D3DRS_LIGHTING, dwLighting); - //ݰ ũ ִ κ. + //금강경 링크 띄워주는 부분. if (m_hyperlinkVector.size() != 0) { int lx = gs_mx - m_v3Position.x; int ly = gs_my - m_v3Position.y; - //ƶ ǥ ȣ ٲش. + //아랍은 좌표 부호를 바꿔준다. if (GetDefaultCodePage() == CP_ARABIC) { lx = -lx; ly = -ly + m_textHeight; @@ -1063,7 +1063,7 @@ WORD CGraphicTextInstance::GetTextLineCount() float fFontAdvance=float(pCurCharInfo->advance); //float fFontHeight=float(pCurCharInfo->height); - // NOTE : Ʈ ¿ Width Ӵϴ. - [levites] + // NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites] if (fx+fFontWidth > m_fLimitWidth) { fx = 0.0f; @@ -1110,7 +1110,7 @@ void CGraphicTextInstance::__Initialize() m_vAlign = VERTICAL_ALIGN_TOP; m_iMax = 0; - m_fLimitWidth = 1600.0f; // NOTE : ػ ִġ. ̺ ? - [levites] + m_fLimitWidth = 1600.0f; // NOTE : 해상도의 최대치. 이보다 길게 쓸 일이 있을까? - [levites] m_isCursor = false; m_isSecret = false; diff --git a/src/EterLib/GrpVertexBufferStatic.cpp b/src/EterLib/GrpVertexBufferStatic.cpp index 780450fc..669b6c1a 100644 --- a/src/EterLib/GrpVertexBufferStatic.cpp +++ b/src/EterLib/GrpVertexBufferStatic.cpp @@ -3,7 +3,7 @@ bool CStaticVertexBuffer::Create(int vtxCount, DWORD fvf, bool /*isManaged*/) { - // MANAGED + // 무조건 MANAGED 모드 return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED); } diff --git a/src/EterLib/IME.cpp b/src/EterLib/IME.cpp index adf0db27..0a99614f 100644 --- a/src/EterLib/IME.cpp +++ b/src/EterLib/IME.cpp @@ -819,7 +819,7 @@ void CIME::SetCurPos(int offset) } else { - // offset ؽƮ ġ ´. ؾ. + // offset은 보여지는 텍스트의 위치로 온다. 따라서 새로 계산해야함. //ms_curpos = min(ms_lastpos, offset); ms_curpos = min(ms_lastpos, GetTextTagInternalPosFromRenderPos(m_wText, ms_lastpos, offset)); } @@ -1503,8 +1503,8 @@ void CIME::CheckInputLocale() ms_wszCurrentIndicator[1] = towlower(szLang[1]); } - // ƶ ڵ ٲ ʴ´ - // 뵵 ʴ´. + // 아랍어에서 영어로 변경시 코드 페이지를 바꾸지 않는다 + // 내용도 지우지 않는다. if(ms_uOutputCodePage != 1256) { ms_uOutputCodePage = ms_uInputCodePage; Clear(); @@ -2147,7 +2147,7 @@ LRESULT CIME::WMComposition(HWND hWnd, UINT /*uiMsg*/, WPARAM /*wParam*/, LPARAM AttributeProcess(hImc); if(lParam&GCS_COMPSTR) { - if (ms_uOutputCodePage == 950) // 븸 Է ó + if (ms_uOutputCodePage == 950) // 대만 주음 입력 처리 { if (lParam&GCS_COMPATTR) CompositionProcessBuilding(hImc); diff --git a/src/EterLib/Input.cpp b/src/EterLib/Input.cpp index 07decf11..47a528b4 100644 --- a/src/EterLib/Input.cpp +++ b/src/EterLib/Input.cpp @@ -72,7 +72,7 @@ bool CInputKeyboard::InitializeKeyboard(HWND hWnd) if (FAILED(hr = ms_lpKeyboard->SetDataFormat(&c_dfDIKeyboard))) return false; -// Alt + F4 - [levites] +// Alt + F4를 위해 비독점 모드로 - [levites] // DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_EXCLUSIVE; // DWORD dwCoopFlags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND; DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE; @@ -99,7 +99,7 @@ void CInputKeyboard::UpdateKeyboard() { hr = ms_lpKeyboard->Acquire(); - // ø̼ Ȱȭ Ǿ ־ Է . + // 현재 어플리케이션이 비활성화 되어 있어 입력을 받을 수 없다. //if (hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED); return; } diff --git a/src/EterLib/LensFlare.cpp b/src/EterLib/LensFlare.cpp index b9d13130..cb7c64b3 100644 --- a/src/EterLib/LensFlare.cpp +++ b/src/EterLib/LensFlare.cpp @@ -206,7 +206,7 @@ void CLensFlare::DrawBeforeFlare() STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); /* - if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // false? + if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // 왠 false? { glColor4f(1.0f, 1.0f, 1.0f, m_fBeforeBright); glDisable(GL_TEXTURE_2D); diff --git a/src/EterLib/LensFlare.h b/src/EterLib/LensFlare.h index 7522cbfc..c53ef2b2 100644 --- a/src/EterLib/LensFlare.h +++ b/src/EterLib/LensFlare.h @@ -81,7 +81,7 @@ public: CLensFlare(); virtual ~CLensFlare(); - void Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW ī޶ Ƿ, ī޶ ڿ ؾ . + void Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW로 부터 카메라 방향을 얻어오므로, 카메라 설정 뒤에 해야 함. void DrawBeforeFlare(); void DrawAfterFlare(); diff --git a/src/EterLib/Profiler.h b/src/EterLib/Profiler.h index a9cc7a73..4b68d93f 100644 --- a/src/EterLib/Profiler.h +++ b/src/EterLib/Profiler.h @@ -74,7 +74,7 @@ class CProfiler : public CSingleton { CGraphicTextInstance * pGraphicTextInstance = CGraphicTextInstance::New(); - CResource * pResource = CResourceManager::Instance().GetResourcePointer("ü.fnt"); + CResource * pResource = CResourceManager::Instance().GetResourcePointer("\xB1\xBC\xB8\xB2\xC3\xBC.fnt"); pGraphicTextInstance->Clear(); pGraphicTextInstance->SetTextPointer(static_cast(pResource)); @@ -114,7 +114,7 @@ class CProfiler : public CSingleton CGraphicTextInstance * pGraphicTextInstance = m_GraphicTextInstancePool.Alloc(); - CResource * pResource = CResourceManager::Instance().GetResourcePointer("ü.fnt"); + CResource * pResource = CResourceManager::Instance().GetResourcePointer("\xB1\xBC\xB8\xB2\xC3\xBC.fnt"); pGraphicTextInstance->Clear(); pGraphicTextInstance->SetTextPointer(static_cast(pResource)); diff --git a/src/EterLib/Resource.cpp b/src/EterLib/Resource.cpp index 1dbe7d01..a37003c2 100644 --- a/src/EterLib/Resource.cpp +++ b/src/EterLib/Resource.cpp @@ -131,8 +131,8 @@ int CResource::ConvertPathName(const char * c_szPathName, char * pszRetPathName, void CResource::SetFileName(const char* c_szFileName) { - // 2004. 2. 1. myevan. 尡 Ǵ Ȳ static ʴ° . - // 2004. 2. 1. myevan. ̸ ó std::string + // 2004. 2. 1. myevan. 쓰레드가 사용되는 상황에서 static 변수는 사용하지 않는것이 좋다. + // 2004. 2. 1. myevan. 파일 이름 처리를 std::string 사용 m_stFileName=c_szFileName; } diff --git a/src/EterLib/ResourceManager.cpp b/src/EterLib/ResourceManager.cpp index d40dfa9d..c917caa6 100644 --- a/src/EterLib/ResourceManager.cpp +++ b/src/EterLib/ResourceManager.cpp @@ -10,9 +10,9 @@ int g_iLoadingDelayTime = 20; -const long c_Deleting_Wait_Time = 30000; // ð (30) -const long c_DeletingCountPerFrame = 30; // Ӵ üũ ҽ -const long c_Reference_Decrease_Wait_Time = 30000; // ε ҽ ð (30) +const long c_Deleting_Wait_Time = 30000; // 삭제 대기 시간 (30초) +const long c_DeletingCountPerFrame = 30; // 프레임당 체크 리소스 갯수 +const long c_Reference_Decrease_Wait_Time = 30000; // 선로딩 리소스의 해제 대기 시간 (30초) CFileLoaderThread CResourceManager::ms_loadingThread; @@ -56,7 +56,7 @@ void CResourceManager::ProcessBackgroundLoading() ms_loadingThread.Request(stFileName); m_WaitingMap.insert(TResourceRequestMap::value_type(dwFileCRC, stFileName)); itor = m_RequestMap.erase(itor); - //break; // NOTE: ⼭ break ϸ õõ ε ȴ. + //break; // NOTE: 여기서 break 하면 천천히 로딩 된다. } DWORD dwCurrentTime = ELTimer_GetMSec(); @@ -74,7 +74,7 @@ void CResourceManager::ProcessBackgroundLoading() pResource->OnLoad(pData->dwSize, pData->pvBuf); pResource->AddReferenceOnly(); - // ⼭ ö ۷ īƮ ð ڿ Ǯֱ Ͽ + // 여기서 올라간 레퍼런스 카운트를 일정 시간이 지난 뒤에 풀어주기 위하여 m_pResRefDecreaseWaitingMap.insert(TResourceRefDecreaseWaitingMap::value_type(dwCurrentTime, pResource)); } } @@ -85,7 +85,7 @@ void CResourceManager::ProcessBackgroundLoading() delete pData; } - // DO : ð ̸ ε ξ ҽ ۷ īƮ Ų - [levites] + // DO : 일정 시간이 지나고 난뒤 미리 로딩해 두었던 리소스의 레퍼런스 카운트를 감소 시킨다 - [levites] long lCurrentTime = ELTimer_GetMSec(); TResourceRefDecreaseWaitingMap::iterator itorRef = m_pResRefDecreaseWaitingMap.begin(); @@ -233,7 +233,7 @@ CResource * CResourceManager::GetTypeResourcePointer(const char * c_szFileName, DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile); CResource * pResource = FindResourcePointer(dwFileCRC); - if (pResource) // ̹ ҽ Ѵ. + if (pResource) // 이미 리소스가 있으면 리턴 한다. return pResource; CResource * (*newFunc) (const char *) = NULL; @@ -283,7 +283,7 @@ CResource * CResourceManager::GetResourcePointer(const char * c_szFileName) DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile); CResource * pResource = FindResourcePointer(dwFileCRC); - if (pResource) // ̹ ҽ Ѵ. + if (pResource) // 이미 리소스가 있으면 리턴 한다. return pResource; const char * pcFileExt = strrchr(c_pszFile, '.'); diff --git a/src/EterLib/ResourceManager.h b/src/EterLib/ResourceManager.h index 143cff19..22308a5e 100644 --- a/src/EterLib/ResourceManager.h +++ b/src/EterLib/ResourceManager.h @@ -26,7 +26,7 @@ class CResourceManager : public CSingleton CResource * GetResourcePointer(const char * c_szFileName); CResource * GetTypeResourcePointer(const char * c_szFileName, int iType=-1); - // ߰ + // 추가 bool isResourcePointerData(DWORD dwFileCRC); void RegisterResourceNewFunctionPointer(const char* c_szFileExt, CResource* (*pResNewFunc)(const char* c_szFileName)); @@ -63,7 +63,7 @@ class CResourceManager : public CSingleton TResourceNewFunctionPointerMap m_pResNewFuncMap; TResourceNewFunctionByTypePointerMap m_pResNewFuncByTypeMap; TResourceDeletingMap m_ResourceDeletingMap; - TResourceRequestMap m_RequestMap; // ε û Ʈ + TResourceRequestMap m_RequestMap; // 쓰레드로 로딩 요청한 리스트 TResourceRequestMap m_WaitingMap; TResourceRefDecreaseWaitingMap m_pResRefDecreaseWaitingMap; diff --git a/src/EterLib/SkyBox.cpp b/src/EterLib/SkyBox.cpp index fcc743cb..579316c7 100644 --- a/src/EterLib/SkyBox.cpp +++ b/src/EterLib/SkyBox.cpp @@ -272,7 +272,7 @@ void CSkyBox::SetCloudTexture(const char * c_szFileName) CGraphicImageInstance * pGraphicImageInstance = GenerateTexture(c_szFileName); m_GraphicImageInstanceMap.insert(TGraphicImageInstanceMap::value_type(m_FaceCloud.m_strfacename, pGraphicImageInstance)); - // ̰ Ⱦ° ? [cronan] + // 이거 안쓰는거 같은데요? [cronan] // CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer("D:\\Ymir Work\\special/cloudalpha.tga"); // m_CloudAlphaImageInstance.SetImagePointer(pImage); } @@ -803,7 +803,7 @@ void CSkyBox::Update() void CSkyBox::Render() { - // 2004.01.25 myevan ó Ĺ ű, DepthTest ó + // 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리 STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE); STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE); STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE); @@ -872,7 +872,7 @@ void CSkyBox::RenderCloud() if (!pCloudGraphicImageInstance) return; - // 2004.01.25 myevan ó Ĺ ű, DepthTest ó + // 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리 STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE); STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE); STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE); diff --git a/src/EterLib/SkyBox.h b/src/EterLib/SkyBox.h index 0cb713a1..c0ff5871 100644 --- a/src/EterLib/SkyBox.h +++ b/src/EterLib/SkyBox.h @@ -63,7 +63,7 @@ public: private: TPDTVertex m_Vertex[4]; - TIndex m_Indices[4]; // ε ... + TIndex m_Indices[4]; // 인덱스 버퍼... CColorTransitionHelper m_Helper[4]; }; @@ -99,7 +99,7 @@ protected: protected: ////////////////////////////////////////////////////////////////////////// - // Ÿ + // 타입 정의 typedef std::vector TSkyObjectQuadVector; typedef TSkyObjectQuadVector::iterator TSkyObjectQuadIterator; @@ -118,8 +118,8 @@ protected: ////////////////////////////////////////////////////////////////////////// - // ... - TSkyObjectFace m_FaceCloud; // ϴ ... + // 구름... + TSkyObjectFace m_FaceCloud; // 구름 일단 한장... D3DXMATRIX m_matWorldCloud, m_matTranslationCloud, m_matTextureCloud; D3DXVECTOR3 m_v3PositionCloud; float m_fCloudScaleX, m_fCloudScaleY, m_fCloudHeight; @@ -129,7 +129,7 @@ protected: DWORD m_dwlastTime; - // ī ڽ ̹... + // 스카이 박스 이미지... TGraphicImageInstanceMap m_GraphicImageInstanceMap; // Transform... @@ -137,7 +137,7 @@ protected: D3DXVECTOR3 m_v3Position; float m_fScaleX, m_fScaleY, m_fScaleZ; - // ... ӽ .. + // 랜더링 관련... 임시 변수.. unsigned char m_ucRenderMode; std::string m_strCurTime; diff --git a/src/EterLib/StdAfx.h b/src/EterLib/StdAfx.h index 9eb0782c..99bbf796 100644 --- a/src/EterLib/StdAfx.h +++ b/src/EterLib/StdAfx.h @@ -8,7 +8,7 @@ #define _WIN32_DCOM #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #pragma warning(disable:4018) diff --git a/src/EterLib/TextTag.cpp b/src/EterLib/TextTag.cpp index ca6311de..de171723 100644 --- a/src/EterLib/TextTag.cpp +++ b/src/EterLib/TextTag.cpp @@ -19,7 +19,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext extraInfo.assign(++cur, 8); return TEXT_TAG_COLOR; } - else if (*cur == L'|') // || | ǥѴ. + else if (*cur == L'|') // ||는 |로 표시한다. { tagLen = 2; return TEXT_TAG_TAG; @@ -29,7 +29,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext tagLen = 2; return TEXT_TAG_RESTORE_COLOR; } - else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[̸]|h + else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h { tagLen = 2; return TEXT_TAG_HYPERLINK_START; @@ -154,20 +154,20 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len) const wchar_t * cur = src; - // |r + // |r의 경우 if (*cur == L'r' && *(cur - 1) == L'|') { int len = src_len; - // ||r + // ||r은 무시 if (len >= 2 && *(cur - 2) == L'|') return 1; cur -= 2; len -= 2; - // |c ãƼ |ġ Ѵ. - while (len > 1) // ּ 2ڸ ˻ؾ ȴ. + // |c까지 찾아서 |위치까지 리턴한다. + while (len > 1) // 최소 2자를 검사해야 된다. { if (*cur == L'c' && *(cur - 1) == L'|') return (src - cur) + 1; @@ -175,9 +175,9 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len) --cur; --len; } - return (src_len); // ã ;; + return (src_len); // 못찾으면 전부;; } - // || + // ||의 경우 else if (*cur == L'|' && *(cur - 1) == L'|') return 1; diff --git a/src/EterLib/Thread.h b/src/EterLib/Thread.h index ce096989..6b4225ad 100644 --- a/src/EterLib/Thread.h +++ b/src/EterLib/Thread.h @@ -10,8 +10,8 @@ class CThread protected: static UINT CALLBACK EntryPoint(void * pThis); - virtual UINT Setup() = 0; // Execute ҷ ҷ. - virtual UINT Execute(void * arg) = 0; // 尡 ϴ  + virtual UINT Setup() = 0; // Execute이 불려지기 전에 불려진다. + virtual UINT Execute(void * arg) = 0; // 실제 쓰레드가 하는 일이 들어가는 곳 UINT Run(void * arg); diff --git a/src/EterLib/Util.cpp b/src/EterLib/Util.cpp index 70988e67..764947d1 100644 --- a/src/EterLib/Util.cpp +++ b/src/EterLib/Util.cpp @@ -214,13 +214,13 @@ const char* GetFontFaceFromCodePage9x(WORD codePage) switch( codePage ) { case CP_932: - return "lr oSVbN"; + return "MS PGothic"; case CP_949: - return "ü"; + return "GulimChe"; case CP_936: - return ""; + return "SimSun"; case CP_950: - return "ө"; + return "MingLiU"; case CP_874: return "Tahoma"; case CP_1252: @@ -332,7 +332,7 @@ void base64_decode(const char * str,char * resultStr) { i=0; strcpy(szDest, ""); - while(nCount= length ) // ߴ. + if( nCount+3 >= length ) // 데이터의 끝에 도달했다. { if( szDest[1] == '@' ) { diff --git a/src/EterLib/parser.cpp b/src/EterLib/parser.cpp index 2e86c378..110806bd 100644 --- a/src/EterLib/parser.cpp +++ b/src/EterLib/parser.cpp @@ -220,11 +220,11 @@ bool Group::GetArg(const char *c_arg_base, int arg_len, TArgList & argList) { isValue = true; } - // ƴϰ, ̸ ۵ ʾ ĭ dz ڴ. + // 값이 아니고, 이름이 시작되지 않았을 경우 빈칸은 건너 뛴다. else if (!isValue && iNameLen == 0 && isspace((unsigned char) c)) { } - // ʹ dz ڴ + // 엔터는 건너 뛴다 else if (c == '\r' || c == '\n') { } @@ -350,12 +350,12 @@ bool Group::Create(const std::string & stSource) memcpy(box_data, data_begin, data_len); box_data[data_len] = '\0'; - data_len = LocaleString_RightTrim(box_data, data_len); // ĭ ڸ + data_len = LocaleString_RightTrim(box_data, data_len); // 오른쪽 빈칸 자르기 } { const char* space = LocaleString_FindChar(box_data, data_len, ' '); - if (space) // ڰ + if (space) // 인자가 있음 { int name_len = space - box_data; cmd.name.assign(box_data, name_len); @@ -371,7 +371,7 @@ bool Group::Create(const std::string & stSource) return false; } } - else // ڰ Ƿ Ʈ ɾ. + else // 인자가 없으므로 모든 스트링이 명령어다. { cmd.name.assign(box_data); cmd.argList.clear(); diff --git a/src/EterLib/parser.h b/src/EterLib/parser.h index 2952f6b0..1578a2f9 100644 --- a/src/EterLib/parser.h +++ b/src/EterLib/parser.h @@ -55,30 +55,30 @@ namespace script ~Group(); public: - /** Ʈ ũƮ ׷ . + /** 스트링으로 부터 스크립트 그룹을 만든다. * - * ϸ GetError ޼ҵ Ȯ ִ. + * 실패하면 GetError 메소드로 확인할 수 있다. * - * @param stSource Ʈ ׷ . - * @return true, ϸ false + * @param stSource 이 스트링으로 부터 그룹이 만들어 진다. + * @return 성공시 true, 실패하면 false */ bool Create(const std::string & stSource); - /** ɾ ޴ ޼ҵ + /** 명령어를 받는 메소드 * - * @param cmd ÿ ü ɾ ȴ. - * @return ɾ ִٸ true, ٸ false + * @param cmd 성공시에 이 구조체로 명령어가 복사 된다. + * @return 명령어가 남아 있다면 true, 없다면 false */ bool GetCmd(TCmd & cmd); /* - ɾ ʴ´. + 명령어를 가져오되 꺼내지는 않는다. */ bool ReadCmd(TCmd & cmd); - /** ޴ ޼ҵ + /** 에러를 출력 받는 메소드 * - * @return stError ȴ. + * @return stError 이 곳으로 에러가 출력 된다. */ std::string & GetError(); diff --git a/src/EterLocale/Arabic.cpp b/src/EterLocale/Arabic.cpp index 1cd08df3..e735e7ec 100644 --- a/src/EterLocale/Arabic.cpp +++ b/src/EterLocale/Arabic.cpp @@ -258,7 +258,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen if (Arabic_IsInMap(cur)) { - //  + // 이전 글자 얻어내기 wchar_t prev = 0; { size_t prevIndex = srcIndex; @@ -282,7 +282,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen } } - //  + // 다음 글자 얻어내기 wchar_t next = 0; { size_t nextIndex = srcIndex; diff --git a/src/EterLocale/StringCodec_Vietnamese.cpp b/src/EterLocale/StringCodec_Vietnamese.cpp index eab89785..3f270d9c 100644 --- a/src/EterLocale/StringCodec_Vietnamese.cpp +++ b/src/EterLocale/StringCodec_Vietnamese.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "StringCodec_Vietnamese.h" #pragma warning(disable: 4310) // char 짤림 경고 무시 @@ -551,4 +551,4 @@ int EL_String_Encode_Vietnamese(const wchar_t* wide, int wideLen, char* multi, i } return dest; -} \ No newline at end of file +} diff --git a/src/EterPack/EterPack.cpp b/src/EterPack/EterPack.cpp index 68b9def9..62d55618 100644 --- a/src/EterPack/EterPack.cpp +++ b/src/EterPack/EterPack.cpp @@ -254,7 +254,7 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha m_bReadOnly = bReadOnly; - // bReadOnly 尡 ƴϰ ̽ ٸ + // bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패 if (!CreateIndexFile()) return false; @@ -283,7 +283,7 @@ bool CEterPack::DecryptIV(DWORD dwPanamaKey) if (m_stIV_Panama.length() != 32) return false; - if (m_bDecrypedIV) // ̹ ȣȭ Ǯ ٽ ó + if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함 return true; DWORD* ivs = (DWORD*)&m_stIV_Panama[0]; @@ -474,7 +474,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite) m_DataPositionMap.insert(TDataPositionMap::value_type(index->filename_crc, index)); - if (bOverwrite) // ŷ ߿ ֻ ؾѴ + if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다 rkFileDict.UpdateItem(this, index); else rkFileDict.InsertItem(this, index); @@ -492,7 +492,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite) // //void CEterPack::ClearDataMemoryMap() //{ -// // m_file data file̴... +// // m_file이 data file이다... // m_file.Destroy(); // m_tLastAccessTime = 0; // m_bIsDataLoaded = false; @@ -516,8 +516,8 @@ bool CEterPack::Get(CMappedFile& out_file, const char * filename, LPCVOID * data // m_bIsDataLoaded = true; //} - // CEterPack epk memory map ÷, û κ ũؼ Ѱ µ, - // û , ʿ κи memory map ø, û ϰ . + // 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데, + // 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함. out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size); bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY || @@ -982,15 +982,15 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType data_crc = GetCRC32((const char *) data, len); #endif - // Ͱ .. + // 기존 데이터가 있으면.. if (pIndex) { - // data ũⰡ ũ⸦ ִٸ + // 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면 if (pIndex->real_data_size >= len) { ++m_map_indexRefCount[pIndex->id]; - // ̰ Ʋų, checksum Ʋ Ѵ. + // 길이가 틀리거나, checksum이 틀릴 때만 저장 한다. if ( (pIndex->data_size != len) || #ifdef CHECKSUM_CHECK_MD5 (memcmp( pIndex->MD5Digest, context.digest, 16 ) != 0) ) @@ -1022,13 +1022,13 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType return true; } - // ũⰡ  ٸ, ε Ҵ - // ־ Ѵ. ִ ε д. + // 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해 + // 넣어야 한다. 원래 있던 인덱스는 비워 둔다. PushFreeIndex(pIndex); WriteIndex(fileIndex, pIndex); } - // + // 새 데이터 pIndex = NewIndex(fileIndex, filename, len); pIndex->data_size = len; @@ -1077,7 +1077,7 @@ bool CEterPack::CreateIndexFile() return false; // - // Ƿ . + // 파일이 없으므로 새로 만든다. // fp = fopen(m_indexFileName, "wb"); @@ -1107,16 +1107,16 @@ void CEterPack::WriteIndex(CFileBase & file, TEterPackIndex * index) } /* - * Free Block ̶ Ϳ κ Ѵ. - * Free Block FREE_INDEX_BLOCK_SIZE (32768) - * Ʈ ȴ. + * Free Block 이란 데이터에서 지워진 부분을 말한다. + * Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져 + * 리스트로 관리된다. * - * 128k ʹ - * 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 ̹Ƿ - * δ m_FreeIndexList[4] . + * 예를 들어 128k 의 데이터는 + * 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로 + * 최종 적으로는 m_FreeIndexList[4] 에 들어간다. * - * FREE_INDEX_BLOCK_SIZE ִ FREE_INDEX_MAX_SIZE(512) ̴. - * 16MB ̻ ʹ 迭 512 ġ . + * FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다. + * 따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다. */ int CEterPack::GetFreeBlockIndex(long size) { @@ -1153,7 +1153,7 @@ TEterPackIndex* CEterPack::NewIndex(CFileBase& file, const char* filename, long { TEterPackIndex* index = NULL; int block_size = size + (DATA_BLOCK_SIZE - (size % DATA_BLOCK_SIZE)); -// if ((index = FindIndex(filename))) // ̹ ε ϴ Ȯ +// if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인 // return index; int blockidx = GetFreeBlockIndex(block_size); @@ -1323,7 +1323,7 @@ const char * CEterPack::GetDBName() void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize) { - // Ű ȣȭ + // 키 암호화 if (keySize != 32) return; @@ -1365,7 +1365,7 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un ) // HashFilter ); // StringSource - // Ű ù° 4Ʈ 16Ʈ Ű ˰ + // 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택 unsigned int idx2 = *(unsigned int*) key; switch (idx2 & 3) @@ -1394,14 +1394,14 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un //) // HexEncoder ) // HashFilter ); // StringSource - // Ű Ϸ + // 키 생성 완료 } bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T dataSize, CLZObject& zObj) { if (32 != m_stIV_Panama.length()) { - // Ŀ ޼ Ʈ ׿ + // 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력 #ifdef _DEBUG TraceError("IV not set (filename: %s)", filename); #endif @@ -1423,7 +1423,7 @@ bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T __CreateFileNameKey_Panama(filename, key, sizeof(key)); Encryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32); - // MandatoryBlockSize ִ 2048 Ʈ + // MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만 DWORD cryptSize = dataSize - (dataSize % Encryptor.MandatoryBlockSize()); cryptSize = cryptSize > 2048 ? 2048 : cryptSize; @@ -1458,7 +1458,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T { if (32 != m_stIV_Panama.length()) { - // Ŀ ޼ Ʈ ׿ + // 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력 #ifdef _DEBUG TraceError("IV not set (filename: %s)", filename); #endif @@ -1472,7 +1472,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T __CreateFileNameKey_Panama(filename, key, sizeof(key)); Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32); - // MandatoryBlockSize ִ 2048 Ʈ + // MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만 DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize()); cryptSize = cryptSize > 2048 ? 2048 : cryptSize; diff --git a/src/EterPack/EterPack.h b/src/EterPack/EterPack.h index 8ab20589..72597784 100644 --- a/src/EterPack/EterPack.h +++ b/src/EterPack/EterPack.h @@ -134,7 +134,7 @@ class CEterPack bool EncryptIndexFile(); bool DecryptIndexFile(); - DWORD DeleteUnreferencedData(); //  Ǿ Ѵ. + DWORD DeleteUnreferencedData(); // 몇개가 삭제 되었는지 리턴 한다. bool GetNames(std::vector* retNames); @@ -177,7 +177,7 @@ class CEterPack std::unordered_map m_map_indexRefCount; TDataPositionMap m_DataPositionMap; - TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX \ ϹǷ + 1 ũ⸸ŭ . + TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX 도 억세스 하므로 + 1 크기만큼 만든다. std::string m_stDataFileName; std::string m_stPathName; @@ -193,8 +193,8 @@ class CEterPack //private: // bool m_bIsDataLoaded; - // // ׳ time_t , 32bit time_t ϴ ҽ, - // // CEterPack size size - 4 νϱ ߻ ִ. + // // 그냥 time_t를 쓰면, 32bit time_t를 사용하는 소스에서는, + // // CEterPack의 size를 실제 size - 4로 인식하기 때문에 문제가 발생할 수 있다. // __time64_t m_tLastAccessTime; //public: // __time64_t GetLastAccessTime() { return m_tLastAccessTime; } diff --git a/src/EterPack/EterPackManager.cpp b/src/EterPack/EterPackManager.cpp index 075eca8d..5c9b7355 100644 --- a/src/EterPack/EterPackManager.cpp +++ b/src/EterPack/EterPackManager.cpp @@ -48,7 +48,7 @@ void CEterPackManager::SetRelativePathMode() } -// StringPath std::string +// StringPath std::string 버전 int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName) { rstrFileName = c_szFileName; @@ -226,7 +226,7 @@ bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szF return false; } -const time_t g_tCachingInterval = 10; // 10 +const time_t g_tCachingInterval = 10; // 10초 void CEterPackManager::ArrangeMemoryMappedPack() { //time_t curTime = time(NULL); @@ -250,8 +250,8 @@ bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szF #ifndef _DEBUG //const char *pcExt = strchr(c_szFileName, '.'); //if (pcExt && - // _strnicmp(pcExt, ".py", 3) == 0 && // python ũƮ - // stricmp(c_szFileName, "logininfo.py") != 0 && // α ƴϰ + // _strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중 + // stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고 // strnicmp(c_szFileName, "locale", 6) != 0 // ) //{ @@ -289,7 +289,7 @@ bool CEterPackManager::isExistInPack(const char * c_szFileName) return pkFileItem->pkPack->IsExist(strFileName.c_str()); } - // NOTE : ġ Ǵ ٸ false - [levites] + // NOTE : 매치 되는 팩이 없다면 false - [levites] return false; } @@ -447,7 +447,7 @@ void CEterPackManager::RetrieveHybridCryptPackKeys(const BYTE *pStream) { int iRecvedCryptKeySize = 0; memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) ); - iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // key stream filename hash ԵǾ Ƿ, hash ŭ . + iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌. iMemOffset += sizeof(iRecvedCryptKeySize); memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) ); diff --git a/src/EterPack/EterPackManager.h b/src/EterPack/EterPackManager.h index b202876f..e73eb6e9 100644 --- a/src/EterPack/EterPackManager.h +++ b/src/EterPack/EterPackManager.h @@ -60,12 +60,12 @@ class CEterPackManager : public CSingleton void RetrieveHybridCryptPackKeys( const BYTE* pStream ); void RetrieveHybridCryptPackSDB( const BYTE* pStream ); - // ޸𸮿 ε ѵ , ؾ ͵ . + // 메모리에 매핑된 팩들 가운데, 정리해야할 것들 정리. public: void ArrangeMemoryMappedPack(); protected: - int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string + int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string 버전 bool CompareName(const char * c_szDirectoryName, DWORD iLength, const char * c_szFileName); CEterPack* FindPack(const char* c_szPathName); diff --git a/src/EterPythonLib/PythonGraphicTextModule.cpp b/src/EterPythonLib/PythonGraphicTextModule.cpp index 060bf0c0..2378bbbc 100644 --- a/src/EterPythonLib/PythonGraphicTextModule.cpp +++ b/src/EterPythonLib/PythonGraphicTextModule.cpp @@ -287,7 +287,7 @@ PyObject* grpGetSplitingTextLineCount(PyObject* poSelf, PyObject* poArgs) { i += 1; - // ڵ ٲ޵ǰ ٷ | + // 자동 줄 바꿈되고 바로 | 가 있을 경우 if (iPosition>0) ++iLineCount; @@ -337,15 +337,15 @@ PyObject* grpGetSplitingTextLine(PyObject* poSelf, PyObject* poArgs) int iPosition = 0; int iLineCount = 0; - // 1 : ϰ ȵɱ -_-a - // 2 : .. +_+ + // 1차 : 조금 더 깔끔하게 안될까 -_-a + // 2차 : 오.. 좀 나아졌다 +_+ for (DWORD i = 0; i < strlen(szText);) { if ('|' == szText[i]) { i += 1; - // ڵ ٲ޵ǰ ٷ | + // 자동 줄 바꿈되고 바로 | 가 있을 경우 if (iPosition>0) ++iLineCount; iPosition = 0; diff --git a/src/EterPythonLib/PythonGridSlotWindow.cpp b/src/EterPythonLib/PythonGridSlotWindow.cpp index 936aec19..a9cb515d 100644 --- a/src/EterPythonLib/PythonGridSlotWindow.cpp +++ b/src/EterPythonLib/PythonGridSlotWindow.cpp @@ -18,10 +18,10 @@ void CGridSlotWindow::OnRenderPickingSlot() DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber(); DWORD dwItemIndex = UI::CWindowManager::Instance().GetAttachingIndex(); - // UseMode ̰.. + // UseMode 이고.. if (m_isUseMode) { - // Pick .. + // Pick 된 아이템이 있으면.. TSlot * pSlot = *SlotList.begin(); TSlot * pCenterSlot; if (GetSlotPointer(pSlot->dwCenterSlotNumber, &pCenterSlot)) @@ -40,7 +40,7 @@ void CGridSlotWindow::OnRenderPickingSlot() } } - // ƴϸ ׳ ű + // 아니면 그냥 옮기기 if (CheckMoving(dwSlotNumber, dwItemIndex, SlotList)) CPythonGraphic::Instance().SetDiffuseColor(1.0f, 1.0f, 1.0f, 0.5f); else @@ -85,8 +85,8 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) { TSlot * pSlot = *itor; - // NOTE : ̻ ͸ Ѵ. - // ڵ.. °? - [levites] + // NOTE : 한 슬롯 이상 사이즈의 아이템의 경우 가장 왼쪽 위의 슬롯 포인터를 리턴한다. + // 명시적이지 못한 코드.. 더 좋은 방법은 없는가? - [levites] if (!pMinSlot) { pMinSlot = pSlot; @@ -119,7 +119,7 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) *ppSlot = pCenterSlot; - // ִ ̰.. + // 현재 아이템을 들고 있는 중이고.. if (UI::CWindowManager::Instance().IsAttaching()) { DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber(); @@ -159,7 +159,7 @@ BOOL CGridSlotWindow::GetPickedSlotList(int iWidth, int iHeight, std::listsize()) { TSlot * pMainSlot = *pSlotPointerList->begin(); @@ -349,11 +349,11 @@ BOOL CGridSlotWindow::CheckMoving(DWORD dwSlotNumber, DWORD dwItemIndex, const s { TSlot * pSlot = *itor; - if (dwSlotNumber != pSlot->dwCenterSlotNumber) // ڸ ƴ 쿡 + if (dwSlotNumber != pSlot->dwCenterSlotNumber) // 들었던 자리가 아닐 경우에 { - if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // ְ + if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // 아이템이 있고 { - if (dwItemIndex != pSlot->dwItemIndex) // ٸ ̸ ű + if (dwItemIndex != pSlot->dwItemIndex) // 다른 아이템이면 못 옮김 return false; } } diff --git a/src/EterPythonLib/PythonSlotWindow.cpp b/src/EterPythonLib/PythonSlotWindow.cpp index a5059b6c..e321d071 100644 --- a/src/EterPythonLib/PythonSlotWindow.cpp +++ b/src/EterPythonLib/PythonSlotWindow.cpp @@ -252,7 +252,7 @@ void CSlotWindow::SetCoverButton(DWORD dwIndex, const char * c_szUpImageName, co rpCoverButton->Enable(); rpCoverButton->Show(); - // NOTE : Cover ư Plus ư ӽ ڵ带.. + // NOTE : Cover 버튼이 Plus 버튼을 가려버려서 임시 코드를.. if (pSlot->pSlotButton) { SetTop(pSlot->pSlotButton); @@ -585,7 +585,7 @@ void CSlotWindow::RefreshSlot() { OnRefreshSlot(); - // NOTE : Refresh ɶ ToolTip մϴ - [levites] + // NOTE : Refresh 될때 ToolTip 도 갱신 합니다 - [levites] if (IsRendering()) { TSlot * pSlot; @@ -862,8 +862,8 @@ void CSlotWindow::OnMouseOverOut() void CSlotWindow::OnMouseOver() { - // FIXME : 츦 巡 ϴ ߿ SetTop Ǿ Capture Ǯ . װ ڵ. - // ٺ ذå ãƾ - [levites] + // FIXME : 윈도우를 드래깅 하는 도중에 SetTop이 되어버리면 Capture가 풀어져 버린다. 그것의 방지 코드. + // 좀 더 근본적인 해결책을 찾아야 할 듯 - [levites] // if (UI::CWindowManager::Instance().IsCapture()) // if (!UI::CWindowManager::Instance().IsAttaching()) // return; @@ -991,7 +991,7 @@ void CSlotWindow::OnRender() TSlotListIterator itor; // - // ׸ + // 모든 슬롯 상자 그리기 ////////////////////////////////////////////////////////////////////////// #ifdef __RENDER_SLOT_AREA__ CPythonGraphic::Instance().SetDiffuseColor(0.5f, 0.5f, 0.5f); @@ -1056,7 +1056,7 @@ void CSlotWindow::OnRender() if (fcurTime - rSlot.fStartCoolTime >= rSlot.fCoolTime) { - // Ÿ 1 ̳.. + // 쿨타임이 끝난지 1초 이내라면.. if ((fcurTime - rSlot.fStartCoolTime) - rSlot.fCoolTime < 1.0f) __CreateFinishCoolTimeEffect(&rSlot); @@ -1218,8 +1218,8 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) int ixLocal = lx - m_rect.left; int iyLocal = ly - m_rect.top; - // NOTE : Ѱ ̶ ̿ Ʒ - // ʷ ˻ ν ִ Slot ڵ ȴٴ Ư ̿Ѵ. - [levites] + // NOTE : 왼쪽 맨위 상단 한곳이 기준 이라는 점을 이용해 왼쪽 위에서부터 오른쪽 아래로 + // 차례로 검색해 감으로써 덮혀 있는 Slot은 자동 무시 된다는 특성을 이용한다. - [levites] for (TSlotListIterator itor = m_SlotList.begin(); itor != m_SlotList.end(); ++itor) { TSlot & rSlot = *itor; @@ -1227,7 +1227,7 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) int ixCellSize = rSlot.ixCellSize; int iyCellSize = rSlot.iyCellSize; - // NOTE : Item Hide Ǿ 츦 .. + // NOTE : Item이 Hide 되어있을 경우를 위한.. if (rSlot.isItem) { ixCellSize = max(rSlot.ixCellSize, int(rSlot.byxPlacedItemSize * ITEM_WIDTH)); diff --git a/src/EterPythonLib/PythonSlotWindow.h b/src/EterPythonLib/PythonSlotWindow.h index 4c7e82e4..ba45ac7e 100644 --- a/src/EterPythonLib/PythonSlotWindow.h +++ b/src/EterPythonLib/PythonSlotWindow.h @@ -24,7 +24,7 @@ namespace UI SLOT_STATE_LOCK = (1 << 0), SLOT_STATE_CANT_USE = (1 << 1), SLOT_STATE_DISABLE = (1 << 2), - SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3), // Cover ư Կ ϴµ, flag ̾ Ŀ + SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3), // 현재 Cover 버튼은 슬롯에 무언가 들어와 있을 때에만 렌더링 하는데, 이 flag가 있으면 빈 슬롯이어도 커버 렌더링 }; class CSlotWindow : public CWindow @@ -44,9 +44,9 @@ namespace UI { DWORD dwState; DWORD dwSlotNumber; - DWORD dwCenterSlotNumber; // NOTE :  ū ġ ȣ - DWORD dwItemIndex; // NOTE : ⼭ Ǵ Item̶ ܾ ƴ, - BOOL isItem; // " 빰"̶ . ? - [levites] + DWORD dwCenterSlotNumber; // NOTE : 사이즈가 큰 아이템의 경우 아이템의 실제 위치 번호 + DWORD dwItemIndex; // NOTE : 여기서 사용되는 Item이라는 단어는 좁은 개념의 것이 아닌, + BOOL isItem; // "슬롯의 내용물"이라는 포괄적인 개념어. 더 좋은 것이 있을까? - [levites] // CoolTime float fCoolTime; diff --git a/src/EterPythonLib/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp index fd273253..fd0a7a12 100644 --- a/src/EterPythonLib/PythonWindow.cpp +++ b/src/EterPythonLib/PythonWindow.cpp @@ -66,10 +66,10 @@ namespace UI void CWindow::Clear() { - // FIXME : Children Delete ʴ´. - // Pythonʿ Destroy ϳ ٽ ȣ ̹Ƿ.. - // ũ ´. - // ´ ִ°? - [levites] + // FIXME : Children을 즉시 Delete하지는 않는다. + // 어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로.. + // 하지만 만약을 위해 링크는 끊어 놓는다. + // 더 좋은 형태는 있는가? - [levites] std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear()); m_pChildList.clear(); @@ -93,8 +93,8 @@ namespace UI m_bShow = false; } - // NOTE : IsShow "ڽ ̴°?" , __IsShowing "ڽ ׷ ִ°?" üũѴ - // ڽ Show Tree Parent ϳ Hide Ƿ.. - [levites] + // NOTE : IsShow는 "자신이 보이는가?" 이지만, __IsShowing은 "자신이 그려지고 있는가?" 를 체크한다 + // 자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites] bool CWindow::IsRendering() { if (!IsShow()) @@ -577,7 +577,7 @@ namespace UI BOOL CWindow::OnMouseLeftButtonUp() { PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple()); - return TRUE; // NOTE : ButtonUp ܷ TRUE + return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE } BOOL CWindow::OnMouseLeftButtonDoubleClick() @@ -1291,7 +1291,7 @@ namespace UI } /////////////////////////////////////////////////////////////////////////////////////////////// - // MarkBox - ũ ¿ UI + // MarkBox - 마크 출력용 UI 윈도우 /////////////////////////////////////////////////////////////////////////////////////////////// CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject) { diff --git a/src/EterPythonLib/PythonWindow.h b/src/EterPythonLib/PythonWindow.h index ef8cb8ad..e1255304 100644 --- a/src/EterPythonLib/PythonWindow.h +++ b/src/EterPythonLib/PythonWindow.h @@ -28,16 +28,16 @@ namespace UI enum EFlags { - FLAG_MOVABLE = (1 << 0), // ִ â - FLAG_LIMIT = (1 << 1), // â ȭ  - FLAG_SNAP = (1 << 2), // ִ â + FLAG_MOVABLE = (1 << 0), // 움직일 수 있는 창 + FLAG_LIMIT = (1 << 1), // 창이 화면을 벗어나지 않음 + FLAG_SNAP = (1 << 2), // 스냅 될 수 있는 창 FLAG_DRAGABLE = (1 << 3), - FLAG_ATTACH = (1 << 4), // θ پ ִ â (For Drag / ex. ScriptWindow) - FLAG_RESTRICT_X = (1 << 5), // ¿ ̵ - FLAG_RESTRICT_Y = (1 << 6), // ̵ + FLAG_ATTACH = (1 << 4), // 완전히 부모에 붙어 있는 창 (For Drag / ex. ScriptWindow) + FLAG_RESTRICT_X = (1 << 5), // 좌우 이동 제한 + FLAG_RESTRICT_Y = (1 << 6), // 상하 이동 제한 FLAG_NOT_CAPTURE = (1 << 7), - FLAG_FLOAT = (1 << 8), // ߿ ־ ġ Ǵ â - FLAG_NOT_PICK = (1 << 9), // 콺 Pick ʴ â + FLAG_FLOAT = (1 << 8), // 공중에 떠있어서 순서 재배치가 되는 창 + FLAG_NOT_PICK = (1 << 9), // 마우스에 의해 Pick되지 않는 창 FLAG_IGNORE_SIZE = (1 << 10), FLAG_RTL = (1 << 11), // Right-to-left }; @@ -91,8 +91,8 @@ namespace UI bool IsIn(long x, long y); bool IsIn(); CWindow * PickWindow(long x, long y); - CWindow * PickTopWindow(long x, long y); // NOTE : Children ʰ - // üũ ϴ Ưȭ Լ + CWindow * PickTopWindow(long x, long y); // NOTE : Children으로 내려가지 않고 상위에서만 + // 체크 하는 특화된 함수 void __RemoveReserveChildren(); @@ -166,10 +166,10 @@ namespace UI EHorizontalAlign m_HorizontalAlign; EVerticalAlign m_VerticalAlign; - long m_x, m_y; // X,Y ǥ - long m_lWidth, m_lHeight; // ũ - RECT m_rect; // Global ǥ - RECT m_limitBiasRect; // limit bias + long m_x, m_y; // X,Y 상대좌표 + long m_lWidth, m_lHeight; // 크기 + RECT m_rect; // Global 좌표 + RECT m_limitBiasRect; // limit bias 값 bool m_bMovable; bool m_bShow; diff --git a/src/EterPythonLib/PythonWindowManager.cpp b/src/EterPythonLib/PythonWindowManager.cpp index 1b48e84e..2e5c3ccf 100644 --- a/src/EterPythonLib/PythonWindowManager.cpp +++ b/src/EterPythonLib/PythonWindowManager.cpp @@ -534,7 +534,7 @@ namespace UI if (m_pActiveWindow) m_pActiveWindow->OnKillFocus(); - // ̹ 츮Ʈȿ ִٸ Ѵ.. + // 이미 락된 윈도우리스트안에 있다면 제거한다.. m_LockWindowList.remove(pWin); if (m_pLockWindow) @@ -575,8 +575,8 @@ namespace UI if (m_pActiveWindow) { - // NOTE : Window Clear ұ? - // ϴ ߺ ȵǸ Ŀ Ǵ ü 5 ̸̴ ʿ .. - [levites] + // NOTE : 누적된 Window가 많아지면 Clear를 해줘야 할까? + // 일단은 중복 누적이 안되며 포커스 되는 갯수 자체가 5개 미만이니 굳이 필요하지는 않을 듯.. - [levites] m_ActiveWindowList.push_back(m_pActiveWindow); m_pActiveWindow->OnKillFocus(); } @@ -618,8 +618,8 @@ namespace UI CWindow * pParentWindow = pWin->GetParent(); pParentWindow->SetTop(pWin); - // NOTE : Capture µȴ..? - [levites] - // NOTE : κ丮 巡 ؼ ۿ ĸ簡 Ƽ â ư ι ϴ ׸ ߰ + // NOTE : Capture가 리셋된다..? - [levites] + // NOTE : 인벤토리에서 아이템을 드래그 해서 밖에다 놓을때 캡춰가 남아서 창의 버튼을 두번 눌러야 하는 버그를 위해 추가 // ResetCapture(); } @@ -628,7 +628,7 @@ namespace UI if (m_pLockWindow) return; - // GameLayer ִ 찡 ŷ ƴٸ SetTop ش. + // GameLayer에 속해 있는 윈도우가 피킹 됐다면 무조건 SetTop을 해준다. TLayerContainer::iterator itor = m_LayerWindowMap.find("UI"); if (itor == m_LayerWindowMap.end()) return; @@ -896,7 +896,7 @@ namespace UI { if (m_pLeftCaptureWindow->OnMouseLeftButtonUp()) { - // NOTE : ⼭ m_pLeftCaptureWindow NULL ֽϴ!! - [levites] + // NOTE : 여기서 m_pLeftCaptureWindow가 NULL 일 수 있습니다!! - [levites] m_pLeftCaptureWindow = NULL; return; } @@ -1099,7 +1099,7 @@ namespace UI return; } - // NOTE : ü ʰ ActivateǾִ EditLine ̺Ʈ + // NOTE : 전체로 돌리지 않고 Activate되어있는 EditLine에만 보내는 이벤트 } void CWindowManager::RunChangeCodePage() diff --git a/src/EterPythonLib/PythonWindowManagerModule.cpp b/src/EterPythonLib/PythonWindowManagerModule.cpp index 4e9fb4dc..4301cc02 100644 --- a/src/EterPythonLib/PythonWindowManagerModule.cpp +++ b/src/EterPythonLib/PythonWindowManagerModule.cpp @@ -1260,7 +1260,7 @@ PyObject * wndMgrSetSlotCoolTime(PyObject * poSelf, PyObject * poArgs) PyObject * wndMgrSetToggleSlot(PyObject * poSelf, PyObject * poArgs) { - assert(!"wndMgrSetToggleSlot - ʴ Լ"); + assert(!"wndMgrSetToggleSlot - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6"); return Py_BuildNone(); } @@ -1883,13 +1883,13 @@ PyObject * wndMarkBox_SetImageFilename(PyObject * poSelf, PyObject * poArgs) PyObject * wndMarkBox_SetImage(PyObject * poSelf, PyObject * poArgs) { - // ƹ͵ + // 아무것도 하지 않음 return Py_BuildNone(); } PyObject * wndMarkBox_Load(PyObject * poSelf, PyObject * poArgs) { - // ƹ͵ + // 아무것도 하지 않음 return Py_BuildNone(); } @@ -2495,7 +2495,7 @@ void initwndMgr() PyObject * poModule = Py_InitModule("wndMgr", s_methods); -// ϳ ųʸ ʹ Function Ǵ ̷ ųʸ - [levites] +// 하나의 딕셔너리에 너무 많은 Function이 포함 되는 것 같아 이런식으로 딕셔너리를 나누는 것을 고려 중 - [levites] // PyObject * poMgrModule = Py_InitModule("wndMgr", s_methods); // PyObject * poTextModule = Py_InitModule("wndText", s_methods); // PyObject * poSlotModule = Py_InitModule("wndSlot", s_methods); diff --git a/src/GameLib/ActorInstance.cpp b/src/GameLib/ActorInstance.cpp index 0e3254c9..de687acb 100644 --- a/src/GameLib/ActorInstance.cpp +++ b/src/GameLib/ActorInstance.cpp @@ -112,7 +112,7 @@ void CActorInstance::OnUpdate() } -// 2004.07.05.myevan. ýź ʿ ̴ ذ +// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결 IBackground& CActorInstance::GetBackground() { return IBackground::Instance(); @@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position) m_v3FishingPosition = rv3Position; } -// ActorInstanceMotion.cpp ֵ +// ActorInstanceMotion.cpp 에 넣도록 하자 void CActorInstance::Move() { if (m_isWalking) @@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess() void CActorInstance::__AccumulationMovement(float fRot) { - // NOTE - ϴ WAIT ̲ - // Ŀ RaceMotionData ̵Ǵ Flag ְԲ Ѵ. - [levites] + // NOTE - 일단은 WAIT로 미끄러짐 방지 + // 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites] if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex()) return; @@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc return; } - // NOTE : Sphere Overlap ó ⸦ ϸ Penetration Ƽ ( ε ԰ --) - // Sphere Collision ġ RollBackϴ ٲ. - // BGObject ؼ. + // NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --) + // Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다. + // 단 BGObject에 대해서만. if (isAttacking() ) return; @@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc { BlockMovement(); - //Movementʱȭ + //Movement초기화 /* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f); TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin(); @@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_ return; } - // Body ϳ մϴ. + // Body는 하나임을 가정합니다. if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f) return; diff --git a/src/GameLib/ActorInstance.h b/src/GameLib/ActorInstance.h index 0011a583..7ff67ad3 100644 --- a/src/GameLib/ActorInstance.h +++ b/src/GameLib/ActorInstance.h @@ -2,8 +2,8 @@ // class CActorInstance -// Note : ij Lighting, Local Point Light, Weapon Trace ȿ ޺ Ÿ, Ÿ, -// Ÿ ߻, ü ϴ Ŵ ̴. +// Note : 캐릭터의 Lighting, Local Point Light, Weapon Trace 등의 효과와 콤보 데이타, 사운드 데이타, +// 모션 데이타 들을 추상적, 총체적으로 관리하는 개별 매니저가 될 것이다. #include "FlyTarget.h" #include "RaceData.h" @@ -64,7 +64,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject virtual void OnChangeShape() = 0; }; - // 2004.07.05.myevan.ýź ʿ ̴ ذ + // 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결 private: static IBackground& GetBackground(); @@ -217,7 +217,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject CActorInstance(); virtual ~CActorInstance(); - // 20041201.myevan.νϽ̽ Լ + // 20041201.myevan.인스턴스베이스용 함수 void INSTANCEBASE_Transform(); void INSTANCEBASE_Deform(); @@ -294,13 +294,13 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject ///////////////////////////////////////////////////////////////////////////////////// // Motion Queueing System - void SetMotionMode(int iMotionMode); // FIXME : ð ϰԲ Ѵ. + void SetMotionMode(int iMotionMode); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. int GetMotionMode(); void SetLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); bool InterceptOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f); bool InterceptLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f); - bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ð ϰԲ Ѵ. - bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ð ϰԲ Ѵ. + bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. + bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. void SetMotionLoopCount(int iCount); bool IsPushing(); @@ -346,9 +346,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject ///////////////////////////////////////////////////////////////////////////////////// // Battle // Input - // ű ɼ ִ ڵ - // Ʈ ÷̾ ϰ ܼ Showing Type̱ - // ˻簡 ʿ . + // 하위로 옮길 가능성이 있는 코드들 + // 네트웍 연동시 전투 관련은 플레이어를 제외하곤 단순히 Showing Type이기 때문에 + // 조건 검사가 필요 없다. void InputNormalAttackCommand(float fDirRot); // Process input - Only used by player's character bool InputComboAttackCommand(float fDirRot); // Process input - Only used by player's character @@ -524,7 +524,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void ClearFlyEventHandler(); void SetFlyEventHandler(IFlyEventHandler * pHandler); - // 2004. 07. 07. [levites] - ų Ÿ ٲ ذ ڵ + // 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드 bool CanChangeTarget(); protected: @@ -567,7 +567,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void CurrentMotionProcess(); MOTION_KEY GetRandomMotionKey(MOTION_KEY dwMotionKey); - float GetLastMotionTime(float fBlendTime); // NOTE : ڵ BlendTimeŭ մ ð + float GetLastMotionTime(float fBlendTime); // NOTE : 자동으로 BlendTime만큼을 앞당긴 시간을 리턴 float GetMotionDuration(DWORD dwMotionKey); bool InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f); @@ -637,31 +637,31 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject protected: float __GetAttackSpeed(); - DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // + DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // 모션 데이터 설정 void __ClearMotion(); - bool __BindMotionData(DWORD dwMotionKey); // ͸ ε - void __ClearHittedActorInstanceMap(); // νϽ + bool __BindMotionData(DWORD dwMotionKey); // 모션 데이터를 바인딩 + void __ClearHittedActorInstanceMap(); // 때려진 액터 인스턴스 맵을 지운다 - UINT __GetMotionType(); // Ÿ + UINT __GetMotionType(); // 모션 타입 얻기 - bool __IsNeedFlyTargetMotion(); // FlyTarget ʿ ΰ? - bool __HasMotionFlyEvent(); // 𰡸 °? - bool __IsWaitMotion(); // ΰ? - bool __IsMoveMotion(); // ̵ ΰ? - bool __IsAttackMotion(); // ΰ? - bool __IsComboAttackMotion(); // ޺ ΰ? - bool __IsDamageMotion(); // ΰ? - bool __IsKnockDownMotion(); // ˴ٿ ΰ? - bool __IsDieMotion(); // ΰ? - bool __IsStandUpMotion(); // Ͼ ΰ? + bool __IsNeedFlyTargetMotion(); // FlyTarget 이 필요한 모션인가? + bool __HasMotionFlyEvent(); // 무언가를 쏘는가? + bool __IsWaitMotion(); // 대기 모션 인가? + bool __IsMoveMotion(); // 이동 모션 인가? + bool __IsAttackMotion(); // 공격 모션 인가? + bool __IsComboAttackMotion(); // 콤보 공격 모션 인가? + bool __IsDamageMotion(); // 데미지 모션인가? + bool __IsKnockDownMotion(); // 넉다운 모션인가? + bool __IsDieMotion(); // 사망 모션 인가? + bool __IsStandUpMotion(); // 일어서기 모션인가? bool __IsMountingHorse(); - bool __CanAttack(); // Ҽ ִ°? - bool __CanNextComboAttack(); // ޺ Ѱ? + bool __CanAttack(); // 공격 할수 있는가? + bool __CanNextComboAttack(); // 다음 콤보 어택이 가능한가? - bool __IsComboAttacking(); // ޺ ΰ? - void __CancelComboAttack(); // ޺ + bool __IsComboAttacking(); // 콤보 공격중인가? + void __CancelComboAttack(); // 콤보 공격 취소 WORD __GetCurrentMotionIndex(); DWORD __GetCurrentMotionKey(); @@ -683,9 +683,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject D3DXVECTOR3 __GetFlyTargetPosition(); protected: - void __DestroyWeaponTrace(); // ܻ Ѵ - void __ShowWeaponTrace(); // ܻ δ - void __HideWeaponTrace(); // ܻ + void __DestroyWeaponTrace(); // 무기 잔상을 제거한다 + void __ShowWeaponTrace(); // 무기 잔상을 보인다 + void __HideWeaponTrace(); // 무기 잔상을 감춘다 protected: // collision data @@ -705,7 +705,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject // For Collision Detection TCollisionPointInstanceList m_BodyPointInstanceList; TCollisionPointInstanceList m_DefendingPointInstanceList; - SSplashArea m_kSplashArea; // TODO : ؾѴ - [levites] + SSplashArea m_kSplashArea; // TODO : 복수에 대한 고려를 해야한다 - [levites] CAttributeInstance * m_pAttributeInstance; ///////////////////////////////////////////////////////////////////////////////////// @@ -736,7 +736,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject float m_fInvisibleTime; BOOL m_isHiding; - // TODO : State ų ִ + // TODO : State로 통합 시킬 수 있는지 고려해 볼것 BOOL m_isResistFallen; BOOL m_isSleep; BOOL m_isFaint; @@ -822,7 +822,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void __InitializeRotationData(); void __InitializePositionData(); - public: // InstanceBase ӽ÷ public + public: // InstanceBase 통합전 임시로 public IEventHandler* __GetEventHandlerPtr(); IEventHandler& __GetEventHandlerRef(); diff --git a/src/GameLib/ActorInstanceAttach.cpp b/src/GameLib/ActorInstanceAttach.cpp index bfc104b2..f5f1a639 100644 --- a/src/GameLib/ActorInstanceAttach.cpp +++ b/src/GameLib/ActorInstanceAttach.cpp @@ -159,7 +159,7 @@ void CActorInstance::AttachWeapon(DWORD dwItemIndex,DWORD dwParentPartIndex, DWO } __DestroyWeaponTrace(); - //չ(ڰ ̵) ޼, ο . + //양손무기(자객 이도류) 왼손,오른손 모두에 장착. if (__IsRightHandWeapon(pItemData->GetWeaponType())) AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData); if (__IsLeftHandWeapon(pItemData->GetWeaponType())) @@ -182,7 +182,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI if (!GetAttachingBoneName(dwPartIndex, &szBoneName)) return; - // NOTE : (̵ó)ܵ ° ٸ ´. Ʈ + // NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴 if (CRaceData::PART_WEAPON_LEFT == dwPartIndex) { RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing()); @@ -205,7 +205,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI SetModelInstance(dwPartIndex, dwPartIndex, 0); AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex); - // 20041208.myevan.⽺ŧ( SetShape ش.) + // 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.) if (USE_WEAPON_SPECULAR) { SMaterialData kMaterialData; @@ -424,8 +424,8 @@ void CActorInstance::RefreshActorInstance() { const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData; - // FIXME : ù° ڴ Part ȣ. - // Base 0ΰ? - [levites] + // FIXME : 첫번째 인자는 Part의 번호다. + // Base는 무조건 0인가? - [levites] TCollisionPointInstance PointInstance; if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType) continue; diff --git a/src/GameLib/ActorInstanceBattle.cpp b/src/GameLib/ActorInstanceBattle.cpp index 64b464ab..479a7639 100644 --- a/src/GameLib/ActorInstanceBattle.cpp +++ b/src/GameLib/ActorInstanceBattle.cpp @@ -170,28 +170,28 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) } else if (m_pkCurRaceMotionData->IsComboInputTimeData()) { - // ð + // 동작 경과 시간 float fElapsedTime = GetAttackingElapsedTime(); - // ̹ Է Ѱ ð ٸ.. + // 이미 입력 한계 시간이 지났다면.. if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime()) { - //Tracen("Է Ѱ ð "); + //Tracen("Input Timeout"); if (IsBowMode()) m_isNextPreInput = TRUE; return false; } - if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면 { - //Tracen(" ޺ "); + //Tracen("Next combo action"); // args : BlendingTime __RunNextCombo(); return true; } - else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // Է ð .. + else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면.. { - //Tracen(" Է "); + //Tracen("Setting up line input"); m_isPreInput = TRUE; return false; } @@ -199,9 +199,9 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) else { float fElapsedTime = GetAttackingElapsedTime(); - if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면 { - //Tracen(" ޺ "); + //Tracen("Next combo action"); // args : BlendingTime __RunNextCombo(); return true; @@ -229,7 +229,7 @@ void CActorInstance::ComboProcess() // Process PreInput if (m_isPreInput) { - //Tracenf("Է %f ޺ð %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime()); + //Tracenf("Prefix %f NextComboTime %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime()); if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) { __RunNextCombo(); @@ -243,8 +243,8 @@ void CActorInstance::ComboProcess() { m_isPreInput = FALSE; - if (!IsUsingSkill()) // m_isNextPreInput Ȱ ϶ ϴ - if (m_isNextPreInput) // Ȱ϶ ų ĵ Ǵ° ̰ + if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수 + if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임 { __RunNextCombo(); m_isNextPreInput = FALSE; @@ -288,7 +288,7 @@ void CActorInstance::__RunNextCombo() ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f); //////////////////////////////// - // ޺ ٸ + // 콤보가 끝났다면 if (m_dwcurComboIndex == pComboData->ComboIndexVector.size()) { __OnEndCombo(); @@ -302,8 +302,8 @@ void CActorInstance::__OnEndCombo() m_dwcurComboIndex = 1; } - // ⼭ ޺ ʱȭ ؼ ȵȴ. - // ޺ ʱȭ Ǵ ޺ Motion ڵ Wait ư ̴. + // 여기서 콤보를 초기화 해선 안된다. + // 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다. } void CActorInstance::__ClearCombo() @@ -566,7 +566,7 @@ bool CActorInstance::__CanPushDestActor(CActorInstance& rkActorDst) if (rkActorDst.IsNPC()) return false; - // Ŵ и + // 거대 몬스터 밀림 제외 extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkActorDst.GetRace())) return false; @@ -587,15 +587,15 @@ bool IS_PARTY_HUNTING_RACE(unsigned int vnum) { return true; - // Ƽ + // 모든 몬스터 파티 사냥 적용 /* - if (vnum < 8) // ÷̾ + if (vnum < 8) // 플레이어 return true; - if (vnum >= 8000 && vnum <= 8112) // ƾ + if (vnum >= 8000 && vnum <= 8112) // 메틴석 return true; - if (vnum >= 2400 && vnum < 5000) // õ + if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터 return true; return false; @@ -623,13 +623,13 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c // Invisible Time if (IS_PARTY_HUNTING_RACE(rVictim.GetRace())) { - if (uiSkill) // Ƽ Ͷ ų̸ ð + if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용 rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime; - if (m_isMain) // #0000794: [M2KR] - 뷱 Ÿ ݿ Ÿ ʰ ڽ ݿ Ѱ͸ üũѴ + if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다 rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime; } - else // Ƽ Ͱ ƴ 츸 + else // 파티 사냥 몬스터가 아닐 경우만 적용 { rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime; } @@ -640,7 +640,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c // Hit Effect D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z); - // #0000780: [M2KR] Ÿݱ + // #0000780: [M2KR] 수룡 타격구 문제 extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rVictim.GetRace())) { @@ -651,7 +651,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y)); - // 2004.08.03.myevan.̳ Ÿ ȿ ʴ´ + // 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다 if (rVictim.IsBuilding()||rVictim.IsDoor()) { D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos; @@ -673,7 +673,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c if (rVictim.IsBuilding()) { - // 2004.08.03. 鸮 ̻ϴ + // 2004.08.03.빌딩의 경우 흔들리면 이상하다 } else if (rVictim.IsStone() || rVictim.IsDoor()) { diff --git a/src/GameLib/ActorInstanceCollisionDetection.cpp b/src/GameLib/ActorInstanceCollisionDetection.cpp index 40f94eb2..12d5c449 100644 --- a/src/GameLib/ActorInstanceCollisionDetection.cpp +++ b/src/GameLib/ActorInstanceCollisionDetection.cpp @@ -34,7 +34,7 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc { if (!pPointInstance) { - assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // ۷ üϽÿ + assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오 return; } @@ -95,12 +95,12 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc void CActorInstance::UpdateAdvancingPointInstance() { - // ̵ ʱ ; Ѵ - [levites] + // 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites] D3DXVECTOR3 v3Movement = m_v3Movement; if (m_pkHorse) v3Movement = m_pkHorse->m_v3Movement; - // Ʈ ʾƵ ȴ - [levites] + // 말은 업데이트 하지 않아도 된다 - [levites] if (m_pkHorse) m_pkHorse->UpdateAdvancingPointInstance(); @@ -169,7 +169,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector { if (!c_pAttackingSphereVector) { - assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // ۷ üϽÿ + assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오 return false; } @@ -186,7 +186,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere)) { - // FIXME : ãƳ ٲ Ѵ. + // FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다. *pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f; return true; } @@ -200,19 +200,19 @@ bool CActorInstance::CreateCollisionInstancePiece(DWORD dwAttachingModelIndex, c { if (!c_pAttachingData) { - assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // ۷ üϽÿ + assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오 return false; } if (!c_pAttachingData->pCollisionData) { - assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // ۷ üϽÿ + assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오 return false; } if (!pPointInstance) { - assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // ۷ üϽÿ + assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오 return false; } @@ -279,18 +279,18 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim) const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData; THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap; - // NOTE : ̹ ȴٸ + // NOTE : 이미 때렸다면 때릴 수 없음 if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim)) { return FALSE; } - // NOTE : Snipe ̰.. + // NOTE : Snipe 모드이고.. if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType) { - // Target PC .. + // Target 이 PC 라면.. if (__IsFlyTargetPC()) - // ٸ ü + // 다른 객체는 때릴 수 없다 if (!__IsSameFlyTarget(&rVictim)) return FALSE; @@ -299,7 +299,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim) { CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget(); - // NOTE : Target PC ϶ Ѹ ִ. + // NOTE : Target 이 PC 일때는 한명만 때릴 수 있다. if (pActorInstance->IsPC()) if (&rVictim != pActorInstance) return FALSE; @@ -333,7 +333,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim) BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim) { // Check Distance - // NOTE - ϴ üũ ϰ + // NOTE - 일단 근접 체크만 하고 있음 D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z); float fDistance = D3DXVec3LengthSq(&v3Distance); @@ -362,7 +362,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim) { const NRaceData::THitData & c_rHitData = *itorHitData; - // NOTE : ̹ ¾Ҵ üũ + // NOTE : 이미 맞았는지 체크 THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData); if (itHitData != m_HitDataMap.end()) { @@ -437,7 +437,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim) //Tracef(" ----------- Next Hit : %d\n", itHitData->second.size()); int iCurrentHitCount = itHitData->second.size(); - // NOTE : 16 Ѱ + // NOTE : 보통 공격은 16명이 한계 if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType) { if (iCurrentHitCount > 16) @@ -458,7 +458,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim) D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f; - // #0000780: [M2KR] Ÿݱ + // #0000780: [M2KR] 수룡 타격구 문제 extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rVictim.GetRace())) { @@ -503,8 +503,8 @@ BOOL CActorInstance::TestPhysicsBlendingCollision(CActorInstance & rVictim) if (fDistance > 800.0f*800.0f) return FALSE; - // NOTE : ϶ Defending Sphere Collision Check մϴ. - // NOTE : Wait Ǵ ߿ հ  ־.. - [levites] + // NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다. + // NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites] TCollisionPointInstanceList * pMainList; TCollisionPointInstanceList * pVictimList; if (isAttacking() || IsWaiting()) @@ -589,17 +589,17 @@ BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim) return FALSE; // Check Distance - // NOTE : ָ üũ - // ŵó Ʈ ũⰡ Ŭ - // ijͰ ڽ Body Sphere Radius ũ ̵ߴ üũϰ, - // ׷ ʴٸ Ÿ üũؼ ɷش. + // NOTE : 적당히 멀면 체크 안함 + // 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음 + // 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고, + // 만약 그렇지 않다면 거리로 체크해서 걸러준다. D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z); float fDistance = D3DXVec3LengthSq(&v3Distance); if (fDistance > 800.0f*800.0f) return FALSE; - // NOTE : ϶ Defending Sphere Collision Check մϴ. - // NOTE : Wait Ǵ ߿ հ  ־.. - [levites] + // NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다. + // NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites] TCollisionPointInstanceList * pMainList; TCollisionPointInstanceList * pVictimList; if (isAttacking() || IsWaiting()) diff --git a/src/GameLib/ActorInstanceData.cpp b/src/GameLib/ActorInstanceData.cpp index 0eb70694..4119ff9e 100644 --- a/src/GameLib/ActorInstanceData.cpp +++ b/src/GameLib/ActorInstanceData.cpp @@ -79,7 +79,7 @@ bool CActorInstance::SetRace(DWORD eRace) CGraphicThingInstance::Clear(); - //NOTE : PC Part ϰ ش. + //NOTE : PC만 Part별로 다 생성하게 해준다. if( IsPC()) { CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM); diff --git a/src/GameLib/ActorInstanceFly.cpp b/src/GameLib/ActorInstanceFly.cpp index 44d26436..25724de5 100644 --- a/src/GameLib/ActorInstanceFly.cpp +++ b/src/GameLib/ActorInstanceFly.cpp @@ -107,7 +107,7 @@ void CActorInstance::SetFlyEventHandler(IFlyEventHandler * pHandler) m_pFlyEventHandler = pHandler; } -// 2004. 07. 07. [levites] - ų Ÿ ٲ ذ ڵ +// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드 bool CActorInstance::CanChangeTarget() { if (__IsNeedFlyTargetMotion()) diff --git a/src/GameLib/ActorInstanceMotion.cpp b/src/GameLib/ActorInstanceMotion.cpp index 338c7ff8..d3e9a32e 100644 --- a/src/GameLib/ActorInstanceMotion.cpp +++ b/src/GameLib/ActorInstanceMotion.cpp @@ -65,11 +65,11 @@ void CActorInstance::ReservingMotionProcess() case CRaceMotionData::NAME_STAND_UP_BACK: if (IsFaint()) { - //Tracenf("Ͼ "); + //Tracenf("You tried to stand up but are fainted"); SetEndStopMotion(); - // 1ʾ + // 이후의 모션 전부 1초씩 딜레이 TMotionDeque::iterator itor = m_MotionDeque.begin(); for (; itor != m_MotionDeque.end(); ++itor) { @@ -98,12 +98,12 @@ void CActorInstance::ReservingMotionProcess() case CRaceMotionData::NAME_STAND_UP_BACK: if (IsDead()) { - //Tracenf("Ͼ "); - // ͷ + //Tracenf("You tried to stand up but are dead"); + // 예전 데이터로 복구 m_kCurMotNode=kPrevMotionNode; __ClearMotion(); - // + // 이전 동작 마지막 상태 유지 SetEndStopMotion(); return; } @@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess() if (0 == dwRealMotionKey) return; - // FIX: ȣ __SetMotion Լ ȿ ٸ ɼ Ƿ duration ' ' duration ؾ . + // FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함. //float fDurationTime=rReservingMotionNode.fDuration; float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio; float fStartTime = rReservingMotionNode.fStartTime; @@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess() void CActorInstance::CurrentMotionProcess() { - if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // ӽô. ǥ Once Ѿ ȵȴ. - [levites] + if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites] if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount) m_kCurMotNode.dwcurFrame = 0; @@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess() bool isLooping=false; - // ٸ Playing Flag + // 끝났다면 Playing Flag를 끈다 if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion()) { if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1) @@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee m_kCurMotNode.uSkill = 0; } -// ϰ == SetMotion ϰ == ִϸ̼ ͸ ÷ ߴ? +// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐? bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio) { if (!m_pkCurRaceData) @@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, assert(NULL != m_pkCurRaceMotionData); - // FIX : ȣ __SetMotion Լ ٸ ֱ dwMotionKey ȿ ʰ - // ش Ű duration ȿ . 翬 play ð ؾ .. -_-;; + // FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고 + // 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;; // float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio; float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio; @@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey) MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey) { - // NOTE : ȣ Ǵ κ ƴ ȭ - [levites] - // FIXME : ó õ Ϳ ó Ǿ ʴ. + // NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites] + // FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다. WORD wMode = GET_MOTION_MODE(dwMotionKey); WORD wIndex = GET_MOTION_INDEX(dwMotionKey); @@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey) dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i); // Temporary - // NOTE: μ ⼭ غ ǹ̾. ü Ȯΰ Ʒ ڵ ٸ ذؾ ϹǷ ϴ ּó. ߿ ä .. + // NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자.. // m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey); // Temporary @@ -668,7 +668,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw { if (!m_isMain) { - Logn(0, "ΰ ƴ϶ ̵̶ "); + Logn(0, "If you're not the main character, you're moving and don't do damage moves."); return false; } } @@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw } - // NOTE : ų ġ - [levites] + // NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites] if (__IsHiding()) { __ShowEvent(); @@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw m_pkHorse->__BindMotionData(dwChildMotKey); if (c_rkSetMotData.iLoopCount) - m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // Ÿ ǰ ־ + m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음 else m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP; @@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw if (__CanAttack()) { - // ⼭ ó մϴ - [levites] + // 여기서 공격 모션일 경우의 처리를 합니다 - [levites] __ShowWeaponTrace(); m_HitDataMap.clear(); @@ -752,12 +752,12 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw { if (!__CanNextComboAttack()) { - // 2004.11.19.myevan. Ž ̺κп ٷ µǾ ȳ´ - m_dwcurComboIndex = 0; // ޺ - [levites] + // 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다 + m_dwcurComboIndex = 0; // 콤보 리셋 - [levites] - // NOTE : ClearCombo() ؼ ȵȴ. - // ޺ ų ̾ m_pkCurRaceMotionData ʱȭ Ǿ . - //Tracef("MotionData ޺ Ÿ ʽϴ.\n"); + // NOTE : ClearCombo() 를 수행해서는 안된다. + // 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다. + //Tracef("MotionData does not contain combo data.\n"); } } } diff --git a/src/GameLib/ActorInstanceMotionEvent.cpp b/src/GameLib/ActorInstanceMotionEvent.cpp index c6d4b403..051feb10 100644 --- a/src/GameLib/ActorInstanceMotionEvent.cpp +++ b/src/GameLib/ActorInstanceMotionEvent.cpp @@ -303,7 +303,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType) return; - // FIXME : TMotionWarpEventData - [levites] + // FIXME : TMotionWarpEventData로 뺄 변수 - [levites] static const float sc_fDistanceFromTarget = 270.0f; if (m_kFlyTarget.IsValidTarget()) @@ -315,7 +315,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD D3DXVec3Normalize(&v3Distance, &v3Distance); TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget); - // 2004.07.05.myevan.ýź ʿ ̴ ذ. ǥġ ̵ ϴ ̵ ʴ´ + // 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다 IBackground& rkBG=GetBackground(); if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y)) SetPixelPosition(DestPixelPosition); diff --git a/src/GameLib/ActorInstanceRender.cpp b/src/GameLib/ActorInstanceRender.cpp index 18bdb5cb..58bda991 100644 --- a/src/GameLib/ActorInstanceRender.cpp +++ b/src/GameLib/ActorInstanceRender.cpp @@ -38,8 +38,8 @@ void CActorInstance::OnRender() kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor); STATEMANAGER.SetMaterial(&kMtrl); - // ̷.. ´ Diffuse Blend и.. - // ƴϸ ̷ · Texture & State Sorting .. - [levites] + // 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로.. + // 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites] STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE); switch(m_iRenderMode) diff --git a/src/GameLib/ActorInstanceRotation.cpp b/src/GameLib/ActorInstanceRotation.cpp index 3d052eee..6d3761ae 100644 --- a/src/GameLib/ActorInstanceRotation.cpp +++ b/src/GameLib/ActorInstanceRotation.cpp @@ -62,7 +62,7 @@ void CActorInstance::RotationProcess() m_fcurRotation = m_rotEnd; } - // FIXME : "ǹ϶ üũ" ٲ۴. - [levites] + // FIXME : "건물일때만 체크"로 바꾼다. - [levites] if (0.0f != m_rotX || 0.0f != m_rotY) { CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation); diff --git a/src/GameLib/Area.cpp b/src/GameLib/Area.cpp index f1272a0b..97a7783c 100644 --- a/src/GameLib/Area.cpp +++ b/src/GameLib/Area.cpp @@ -483,7 +483,7 @@ void CArea::__Load_BuildObjectInstances() __SetObjectInstance(*it, c_pObjectData); - // ȭ + // 최적화용 if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING) m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) ); } @@ -718,7 +718,7 @@ void CArea::__SetObjectInstance_SetDungeonBlock(TObjectInstance * pObjectInstanc void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName) { - // OBB 浹 ڵ . + // OBB를 사용한 충돌 정보 자동 생성. const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName); CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName); @@ -736,7 +736,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\")); - // NOTE: dungeon Ʈ Dummy Collision ڵ ʵ ( ø 찡 ־. ̷ ϱ ׷ Ϸ) + // NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료) if (pAttributeData->IsEmpty() && false == bIsDungeonObject) { if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance) @@ -778,7 +778,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz /* void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName) { - // AABB 浹 ڵ . + // AABB를 사용한 충돌 정보 자동 생성. const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName); CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName); @@ -806,7 +806,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz collision.v3Position = (v3Min + v3Max) * 0.5f; D3DXVECTOR3 vDelta = (v3Max - v3Min); - collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max ϱ , , ݰ + collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장 collision.fDimensions[1] = vDelta.y * 0.5f; collision.fDimensions[2] = vDelta.z * 0.5f; @@ -830,7 +830,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz /* void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName) { - // Sphere 浹 ڵ . + // Sphere를 사용한 충돌 정보 자동 생성. const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName); CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName); @@ -940,7 +940,7 @@ bool CArea::__Load_LoadObject(const char * c_szFileName) ObjectData.Position.z = atof(c_rstrzPosition.c_str()); ObjectData.dwCRC = atoi (c_rstrCRC.c_str()); - // 20041217.myevan.̼ + // 20041217.myevan.로테이션 공식 변경 ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0; if (rVector.size() > 4) { @@ -1040,7 +1040,7 @@ bool CArea::__Load_LoadAmbience(const char * c_szFileName) ObjectData.dwCRC = atoi (c_rstrCRC.c_str()); ObjectData.dwRange = atoi(c_rstrRange.c_str()); - // 20041217.myevan.̼ ʱȭ + // 20041217.myevan.로테이션 초기화 ObjectData.InitializeRotation(); ObjectData.m_fHeightBias = 0.0f; ObjectData.fMaxVolumeAreaPercentage = 0.0f; @@ -1274,7 +1274,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance) ////////////////////////////////////////////////////////////////////////// -// Coordination +// Coordination 관련 void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY) { *usCoordX = m_wX; diff --git a/src/GameLib/Area.h b/src/GameLib/Area.h index 1fae3c70..98d2febc 100644 --- a/src/GameLib/Area.h +++ b/src/GameLib/Area.h @@ -157,7 +157,7 @@ class CArea typedef std::vector TDungeonBlockInstanceVector; typedef std::vector TObjectInstanceVector; typedef std::vector TAmbienceInstanceVector; - typedef std::map TGraphicThingInstanceCRCMap; // ȭ by + typedef std::map TGraphicThingInstanceCRCMap; // 최적화용 by 동현 typedef std::set TShowingPortalIDSet; typedef struct SCRCWithNumber @@ -264,7 +264,7 @@ class CArea protected: // Static Data - TObjectDataVector m_ObjectDataVector; // Area ִ Ʈ + TObjectDataVector m_ObjectDataVector; // Area 상에 있는 오브젝트들 // Rendering Instances TObjectInstanceVector m_ObjectInstanceVector; @@ -280,7 +280,7 @@ class CArea TCRCWithNumberVector m_kRenderedThingInstanceCRCWithNumberVector; TThingInstanceVector m_kRenderedGrapphicThingInstanceVector; - // ǥ : ɸ ü ߿ ǥ... Ѵ 0~999 + // 좌표 : 심리스 맵 전체 중에서의 좌표... 둘다 0~999 WORD m_wX; WORD m_wY; diff --git a/src/GameLib/AreaLoaderThread.cpp b/src/GameLib/AreaLoaderThread.cpp index 4b21d82f..5c63104f 100644 --- a/src/GameLib/AreaLoaderThread.cpp +++ b/src/GameLib/AreaLoaderThread.cpp @@ -111,7 +111,7 @@ void TEMP_CAreaLoaderThread::Shutdown() } while (!bRet); - WaitForSingleObject(m_hThread, 10000); // 尡 DZ⸦ 10 ٸ + WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림 } UINT TEMP_CAreaLoaderThread::Execute(void * pvArg) diff --git a/src/GameLib/AreaTerrain.cpp b/src/GameLib/AreaTerrain.cpp index eb86a165..ec71a228 100644 --- a/src/GameLib/AreaTerrain.cpp +++ b/src/GameLib/AreaTerrain.cpp @@ -130,7 +130,7 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName) } ////////////////////////////////////////////////////////////////////////// -// Seamless ο Լ... +// Seamless용 새로운 함수들... ////////////////////////////////////////////////////////////////////////// void CTerrain::CopySettingFromGlobalSetting() @@ -891,7 +891,7 @@ void CTerrain::PutImage16(BYTE *src, BYTE *dst, long src_pitch, long dst_pitch, for (int x = 0; x < texturewidth; ++x) { WORD packed_pixel = src[x] << 8; - //& ѹ Ʊ + //& 연산 한번이 아깝다 //WORD packed_pixel = (src[x]&0xF0) << 8; *((WORD*)(dst+x*2)) = packed_pixel; } @@ -998,11 +998,11 @@ void CTerrain::_CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY) lpTerrainVertex->kPosition = kPosition; lpTerrainVertex->kNormal = kNormal; - if (0.5f > kNormal.z) // 30 ִ. Cliff type + if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의 ++wNumCliffType; - else if (0.8660254f > kNormal.z) // 60 ִ. Hill type + else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의 ++wNumHillType; - else // ̻ plain Ÿ + else // 그 이상은 plain 타입 ++wNumPlainType; if (kPosition.z > fMaxZ) diff --git a/src/GameLib/FlyTrace.cpp b/src/GameLib/FlyTrace.cpp index 1e15861a..949184c9 100644 --- a/src/GameLib/FlyTrace.cpp +++ b/src/GameLib/FlyTrace.cpp @@ -83,8 +83,8 @@ void CFlyTrace::Update() } -//1. ĸ ټִ. -//2. ؽĸ -_- +//1. 알파를 쓰려면 색깔만 줄수있다. +//2. 텍스쳐를 쓰려면 알파 없다-_- struct TFlyVertex diff --git a/src/GameLib/FlyingInstance.cpp b/src/GameLib/FlyingInstance.cpp index b78796b8..1629c3c1 100644 --- a/src/GameLib/FlyingInstance.cpp +++ b/src/GameLib/FlyingInstance.cpp @@ -111,7 +111,7 @@ void CFlyingInstance::__SetTargetDirection(const CFlyTarget& c_rkTarget) { D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition(); - // ӽ ڵ + // 임시 코드 if (m_pData->m_bMaintainParallel) { v3TargetPos.z += 50.0f; @@ -131,7 +131,7 @@ void CFlyingInstance::__SetTargetNormalizedDirection(const D3DXVECTOR3 & v3Nomal Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot); } -// 2004. 3. 26. myevan. ϴ ּ ó. ̹ ʿ. ӿ ʴ´ٸ ӹ޾ 鵵 +// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자 void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target) { //m_pFlyTarget = pTarget; @@ -462,7 +462,7 @@ bool CFlyingInstance::Update() if (m_pData->m_bHitOnBackground) { - // 浹 + // 지형 충돌 if (CFlyingManager::Instance().GetMapManagerPtr()) { @@ -477,7 +477,7 @@ bool CFlyingInstance::Update() } } - // ǹ+ 浹 + // 건물+나무 충돌 FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position); rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying); diff --git a/src/GameLib/FlyingInstance.h b/src/GameLib/FlyingInstance.h index 33db1658..5541fdfb 100644 --- a/src/GameLib/FlyingInstance.h +++ b/src/GameLib/FlyingInstance.h @@ -11,8 +11,8 @@ class CActorInstance; class CFlyingInstance { public: - // 2004. 3. 26. myevan. ̹ ʿ. ӿ ʴ´ٸ ӹ޾ 鵵 - void Clear(); // Destroy + // 2004. 3. 26. myevan. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자 + void Clear(); // Destroy와 같다 void SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition); void SetFlyTarget(const CFlyTarget & cr_Target); // Shot at Target @@ -56,7 +56,7 @@ public: void SetOwner(IActorInstance * pOwner) { m_pOwner = pOwner; } void SetSkillIndex(DWORD dwIndex) { m_dwSkillIndex = dwIndex; } - // FIXME : ϰ ֽϴ. ӽ÷ .. - [levites] + // FIXME : 툴에서 사용하고 있습니다. 임시로 위로.. - [levites] void __Explode(bool bBomb=true); void __Bomb(); @@ -67,7 +67,7 @@ protected: void __SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition); void __SetTargetDirection(const CFlyTarget& c_rkTarget); - void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // Ÿ + void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // 시작 타겟 방향 설정 protected: diff --git a/src/GameLib/GameEventManager.h b/src/GameLib/GameEventManager.h index 8fe95a7f..801fd06e 100644 --- a/src/GameLib/GameEventManager.h +++ b/src/GameLib/GameEventManager.h @@ -6,10 +6,10 @@ // // CGameEventManager // -// Note : Game󿡼 Ͼ , ȭ 鸲, Range Ӱ Ÿ Event -// ϴ Ŭ. - [levites] +// Note : Game상에서 일어나는 폭발, 화면 흔들림, Range 무기들의 움직임과 타격 등의 Event +// 를 종합적으로 관리하는 클래스. - [levites] // -// Note : ӻ Cinematic Event Ʈϴ Ŵ Ѵ. 2004.07.19 - [levites] +// Note : 게임상의 Cinematic Event 를 컨트롤하는 매니져로 사용한다. 2004.07.19 - [levites] // class CGameEventManager : public CSingleton, public CScreen diff --git a/src/GameLib/GameType.cpp b/src/GameLib/GameType.cpp index 4ffc3d55..ce110690 100644 --- a/src/GameLib/GameType.cpp +++ b/src/GameLib/GameType.cpp @@ -82,8 +82,8 @@ BOOL NRaceData::LoadMotionAttackData(CTextFileLoader & rTextFileLoader, TMotionA if (!LoadAttackData(rTextFileLoader, pData)) return FALSE; - // NOTE : AttackingType MotionType ٲ - // Ÿ аԲ.. + // NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음 + // 기존 데이타의 경우 없으면 기존 것으로 읽게끔.. if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType)) { if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType)) diff --git a/src/GameLib/GameUtil.cpp b/src/GameLib/GameUtil.cpp index 28de1b61..a879dc7a 100644 --- a/src/GameLib/GameUtil.cpp +++ b/src/GameLib/GameUtil.cpp @@ -98,7 +98,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance & float ta = D3DXVec3Dot(&p,&da)/la/la; float tb = D3DXVec3Dot(&p,&db)/lb/lb; - // FIXME üũ ƴϴ + // FIXME 구 체크가 아니다 if (ta<0) return false; @@ -146,7 +146,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance & //*/ /* - // NOTE : AABB üũ + // NOTE : AABB 체크 할 것 /////////////////////////////////////////////////////////////////////////////////////////////// D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position; float fDistance = D3DXVec3Length(&v3Distance); @@ -273,15 +273,15 @@ bool DetectCollisionStaticSphereVSStaticCylinder(const TSphereData & c_rSphere, bool IsCWAcuteAngle(float begin, float end) { - // 360 - src + dest // ð ݴ - // src - dest // ð + // 360 - src + dest // 시계 반대 방향 + // src - dest // 시계 방향 return ((360.0f - begin + end) > (begin - end)); } bool IsCCWAcuteAngle(float begin, float end) { - // abs(360 - dest + src) // ð - // dest - src // ð ݴ + // abs(360 - dest + src) // 시계 방향 + // dest - src // 시계 반대 방향 int fValue = abs((int) (360.0f - end + begin)); return fValue >= (end - begin) ? true : false; } @@ -297,7 +297,7 @@ bool IsCCWRotation(float begin, float end) // 270 90 // 0 // - // ð ݴ + // 시계 반대 return (begin - end < 0); } diff --git a/src/GameLib/Interface.h b/src/GameLib/Interface.h index 78cf53cf..5e252553 100644 --- a/src/GameLib/Interface.h +++ b/src/GameLib/Interface.h @@ -1,6 +1,6 @@ #pragma once -// 2004.07.05.myevan.ýź ʿ ̴ ذ +// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결 class IBackground : public CSingleton { public: diff --git a/src/GameLib/ItemData.cpp b/src/GameLib/ItemData.cpp index c0afb27e..9ada26f5 100644 --- a/src/GameLib/ItemData.cpp +++ b/src/GameLib/ItemData.cpp @@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName) } // Attaching Data - // Item Attaching Data ϴ . + // Item 에 Attaching Data 일단 없음. // if (TextFileLoader.SetChildNode("attachingdata")) // { // if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector)) @@ -203,7 +203,7 @@ void CItemData::__SetIconImage(const char * c_szFileName) { if (!CResourceManager::Instance().IsFileExist(c_szFileName)) { - TraceError("%s ϴ.CItemData::__SetIconImage",c_szFileName); + TraceError("%s file is missing.CItemData::__SetIconImage",c_szFileName); m_pIconImage = NULL; } else if (m_pIconImage == NULL) @@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const return m_ItemTable.alSockets[byIndex]; } -// Լ !!(Ŀ ģ) -//SocketCount = 1 ̸ ʱ޹ -//SocketCount = 2 ̸ ߱޹ -//SocketCount = 3 ̸ ޹ +//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다) +//SocketCount = 1 이면 초급무기 +//SocketCount = 2 이면 중급무기 +//SocketCount = 3 이면 고급무기 int CItemData::GetSocketCount() const { return m_ItemTable.bGainSocketPct; @@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const return float(uSpecularPower) / 100.0f; } -//refine ۹ȣ ڸ ġѴ-_-(̺̿ ٲ ) +//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정) UINT CItemData::GetRefine() const { return GetIndex()%10; diff --git a/src/GameLib/ItemData.h b/src/GameLib/ItemData.h index a8b7b286..c05d7ec6 100644 --- a/src/GameLib/ItemData.h +++ b/src/GameLib/ItemData.h @@ -1,6 +1,6 @@ #pragma once -// NOTE : Item Ŭ. +// NOTE : Item의 통합 관리 클래스다. // Icon, Model (droped on ground), Game Data #include "../eterLib/GrpSubImage.h" @@ -22,18 +22,18 @@ class CItemData enum EItemType { ITEM_TYPE_NONE, //0 - ITEM_TYPE_WEAPON, //1// - ITEM_TYPE_ARMOR, //2// - ITEM_TYPE_USE, //3// + ITEM_TYPE_WEAPON, //1//무기 + ITEM_TYPE_ARMOR, //2//갑옷 + ITEM_TYPE_USE, //3//아이템 사용 ITEM_TYPE_AUTOUSE, //4 ITEM_TYPE_MATERIAL, //5 - ITEM_TYPE_SPECIAL, //6 // + ITEM_TYPE_SPECIAL, //6 //스페셜 아이템 ITEM_TYPE_TOOL, //7 - ITEM_TYPE_LOTTERY, //8// - ITEM_TYPE_ELK, //9// + ITEM_TYPE_LOTTERY, //8//복권 + ITEM_TYPE_ELK, //9//돈 ITEM_TYPE_METIN, //10 ITEM_TYPE_CONTAINER, //11 - ITEM_TYPE_FISH, //12// + ITEM_TYPE_FISH, //12//낚시 ITEM_TYPE_ROD, //13 ITEM_TYPE_RESOURCE, //14 ITEM_TYPE_CAMPFIRE, //15 @@ -41,21 +41,21 @@ class CItemData ITEM_TYPE_SKILLBOOK, //17 ITEM_TYPE_QUEST, //18 ITEM_TYPE_POLYMORPH, //19 - ITEM_TYPE_TREASURE_BOX, //20// - ITEM_TYPE_TREASURE_KEY, //21// + ITEM_TYPE_TREASURE_BOX, //20//보물상자 + ITEM_TYPE_TREASURE_KEY, //21//보물상자 열쇠 ITEM_TYPE_SKILLFORGET, //22 ITEM_TYPE_GIFTBOX, //23 ITEM_TYPE_PICK, //24 - ITEM_TYPE_HAIR, //25//Ӹ - ITEM_TYPE_TOTEM, //26// - ITEM_TYPE_BLEND, //27//ɶ ϰ Ӽ ٴ ๰ - ITEM_TYPE_COSTUME, //28//ڽ (2011 8 ߰ ڽ ýۿ ) - ITEM_TYPE_DS, //29 //ȥ - ITEM_TYPE_SPECIAL_DS, //30 // Ư ȥ (DS_SLOT ϴ UNIQUE ̶ ϸ ) - ITEM_TYPE_EXTRACT, //31 ⵵. - ITEM_TYPE_SECONDARY_COIN, //32 . - ITEM_TYPE_RING, //33 (ũ ƴ ) - ITEM_TYPE_BELT, //34 Ʈ + ITEM_TYPE_HAIR, //25//머리 + ITEM_TYPE_TOTEM, //26//토템 + ITEM_TYPE_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물 + ITEM_TYPE_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템) + ITEM_TYPE_DS, //29 //용혼석 + ITEM_TYPE_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨) + ITEM_TYPE_EXTRACT, //31 추출도구. + ITEM_TYPE_SECONDARY_COIN, //32 명도전. + ITEM_TYPE_RING, //33 반지 (유니크 슬롯이 아닌 순수 반지 슬롯) + ITEM_TYPE_BELT, //34 벨트 ITEM_TYPE_MAX_NUM, }; @@ -63,7 +63,7 @@ class CItemData enum EWeaponSubTypes { WEAPON_SWORD, - WEAPON_DAGGER, //̵ + WEAPON_DAGGER, //이도류 WEAPON_BOW, WEAPON_TWO_HANDED, WEAPON_BELL, @@ -100,8 +100,8 @@ class CItemData enum ECostumeSubTypes { - COSTUME_BODY, //0 (main look) - COSTUME_HAIR, //1 (Ż) + COSTUME_BODY, //0 갑옷(main look) + COSTUME_HAIR, //1 헤어(탈착가능) COSTUME_NUM_TYPES, }; @@ -136,8 +136,8 @@ class CItemData USE_UNBIND, USE_TIME_CHARGE_PER, USE_TIME_CHARGE_FIX, // 28 - USE_PUT_INTO_BELT_SOCKET, // 29 Ʈ Ͽ ִ - USE_PUT_INTO_RING_SOCKET, // 30 Ͽ ִ (ũ , ߰ ) + USE_PUT_INTO_BELT_SOCKET, // 29 벨트 소켓에 사용할 수 있는 아이템 + USE_PUT_INTO_RING_SOCKET, // 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯) }; enum EDragonSoulSubType @@ -168,16 +168,16 @@ class CItemData LIMIT_CON, LIMIT_PCBANG, - /// ο ǽð ð (socket0 Ҹ ð : unix_timestamp Ÿ) + /// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입) LIMIT_REAL_TIME, - /// ó (Ȥ ) Ÿ Ÿ̸ - /// socket0 밡ɽð(ʴ, 0̸ limit value ) ִٰ - /// socket1 Ƚ socket0 unix_timestamp Ÿ Ҹð . + /// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작 + /// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가 + /// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘. LIMIT_REAL_TIME_START_FIRST_USE, - /// ð Ǵ - /// socket0 ð ʴ . ( ش 0̸ limit value socket0 ) + /// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템 + /// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사) LIMIT_TIMER_BASED_ON_WEAR, LIMIT_MAX_NUM @@ -185,41 +185,41 @@ class CItemData enum EItemAntiFlag { - ITEM_ANTIFLAG_FEMALE = (1 << 0), // Ұ - ITEM_ANTIFLAG_MALE = (1 << 1), // Ұ - ITEM_ANTIFLAG_WARRIOR = (1 << 2), // Ұ - ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // ڰ Ұ - ITEM_ANTIFLAG_SURA = (1 << 4), // Ұ - ITEM_ANTIFLAG_SHAMAN = (1 << 5), // Ұ - ITEM_ANTIFLAG_GET = (1 << 6), // - ITEM_ANTIFLAG_DROP = (1 << 7), // - ITEM_ANTIFLAG_SELL = (1 << 8), // - ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A Ұ - ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B Ұ - ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C Ұ - ITEM_ANTIFLAG_SAVE = (1 << 12), // - ITEM_ANTIFLAG_GIVE = (1 << 13), // ŷ Ұ - ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK - ITEM_ANTIFLAG_STACK = (1 << 15), // ĥ - ITEM_ANTIFLAG_MYSHOP = (1 << 16), // ø + ITEM_ANTIFLAG_FEMALE = (1 << 0), // 여성 사용 불가 + ITEM_ANTIFLAG_MALE = (1 << 1), // 남성 사용 불가 + ITEM_ANTIFLAG_WARRIOR = (1 << 2), // 무사 사용 불가 + ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // 자객 사용 불가 + ITEM_ANTIFLAG_SURA = (1 << 4), // 수라 사용 불가 + ITEM_ANTIFLAG_SHAMAN = (1 << 5), // 무당 사용 불가 + ITEM_ANTIFLAG_GET = (1 << 6), // 집을 수 없음 + ITEM_ANTIFLAG_DROP = (1 << 7), // 버릴 수 없음 + ITEM_ANTIFLAG_SELL = (1 << 8), // 팔 수 없음 + ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A 제국 사용 불가 + ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B 제국 사용 불가 + ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C 제국 사용 불가 + ITEM_ANTIFLAG_SAVE = (1 << 12), // 저장되지 않음 + ITEM_ANTIFLAG_GIVE = (1 << 13), // 거래 불가 + ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK시 떨어지지 않음 + ITEM_ANTIFLAG_STACK = (1 << 15), // 합칠 수 없음 + ITEM_ANTIFLAG_MYSHOP = (1 << 16), // 개인 상점에 올릴 수 없음 }; enum EItemFlag { - ITEM_FLAG_REFINEABLE = (1 << 0), // + ITEM_FLAG_REFINEABLE = (1 << 0), // 개량 가능 ITEM_FLAG_SAVE = (1 << 1), - ITEM_FLAG_STACKABLE = (1 << 2), // ĥ - ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // / - ITEM_FLAG_SLOW_QUERY = (1 << 4), // ÿ SQL + ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음 + ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // 가격이 개수 / 가격으로 변함 + ITEM_FLAG_SLOW_QUERY = (1 << 4), // 게임 종료시에만 SQL에 쿼리함 ITEM_FLAG_RARE = (1 << 5), ITEM_FLAG_UNIQUE = (1 << 6), ITEM_FLAG_MAKECOUNT = (1 << 7), ITEM_FLAG_IRREMOVABLE = (1 << 8), ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 9), - ITEM_FLAG_QUEST_USE = (1 << 10), // Ʈ ũƮ ? - ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // Ʈ ũƮ ? + ITEM_FLAG_QUEST_USE = (1 << 10), // 퀘스트 스크립트 돌리는지? + ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // 퀘스트 스크립트 돌리는지? ITEM_FLAG_UNUSED03 = (1 << 12), // UNUSED03 - ITEM_FLAG_LOG = (1 << 13), // α׸ ΰ? + ITEM_FLAG_LOG = (1 << 13), // 사용시 로그를 남기는 아이템인가? ITEM_FLAG_APPLICABLE = (1 << 14), }; @@ -319,17 +319,17 @@ class CItemData APPLY_ATT_BONUS_TO_SURA, // 61 APPLY_ATT_BONUS_TO_SHAMAN, // 62 APPLY_ATT_BONUS_TO_MONSTER, // 63 - APPLY_MALL_ATTBONUS, // 64 ݷ +x% - APPLY_MALL_DEFBONUS, // 65 +x% - APPLY_MALL_EXPBONUS, // 66 ġ +x% - APPLY_MALL_ITEMBONUS, // 67 x/10 - APPLY_MALL_GOLDBONUS, // 68 x/10 - APPLY_MAX_HP_PCT, // 69 ִ +x% - APPLY_MAX_SP_PCT, // 70 ִ ŷ +x% - APPLY_SKILL_DAMAGE_BONUS, // 71 ų * (100+x)% - APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 Ÿ * (100+x)% - APPLY_SKILL_DEFEND_BONUS, // 73 ų * (100-x)% - APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 Ÿ * (100-x)% + APPLY_MALL_ATTBONUS, // 64 공격력 +x% + APPLY_MALL_DEFBONUS, // 65 방어력 +x% + APPLY_MALL_EXPBONUS, // 66 경험치 +x% + APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배 + APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배 + APPLY_MAX_HP_PCT, // 69 최대 생명력 +x% + APPLY_MAX_SP_PCT, // 70 최대 정신력 +x% + APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)% + APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)% + APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)% + APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)% APPLY_EXTRACT_HP_PCT, //75 APPLY_PC_BANG_EXP_BONUS, //76 APPLY_PC_BANG_DROP_BONUS, //77 @@ -338,17 +338,17 @@ class CItemData APPLY_RESIST_SURA, //80 APPLY_RESIST_SHAMAN, //81 APPLY_ENERGY, //82 - APPLY_DEF_GRADE, // 83 . DEF_GRADE_BONUS Ŭ󿡼 ι ǵ (...) ִ. - APPLY_COSTUME_ATTR_BONUS, // 84 ڽƬ ۿ Ӽġ ʽ - APPLY_MAGIC_ATTBONUS_PER, // 85 ݷ +x% - APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 + и ݷ +x% + APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다. + APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스 + APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x% + APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x% - APPLY_RESIST_ICE, // 87 ñ - APPLY_RESIST_EARTH, // 88 - APPLY_RESIST_DARK, // 89 + APPLY_RESIST_ICE, // 87 냉기 저항 + APPLY_RESIST_EARTH, // 88 대지 저항 + APPLY_RESIST_DARK, // 89 어둠 저항 - APPLY_ANTI_CRITICAL_PCT, //90 ũƼ - APPLY_ANTI_PENETRATE_PCT, //91 Ÿ + APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항 + APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항 MAX_APPLY_NUM, // }; diff --git a/src/GameLib/MapBase.cpp b/src/GameLib/MapBase.cpp index b1957f1d..0b4bd024 100644 --- a/src/GameLib/MapBase.cpp +++ b/src/GameLib/MapBase.cpp @@ -57,7 +57,7 @@ bool CMapBase::LoadProperty() if (!LoadMultipleTextData(strFileName.c_str(), stTokenVectorMap)) { - TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR ɼ ϴ.", strFileName.c_str()); + TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR The file is likely missing.", strFileName.c_str()); return false; } @@ -73,9 +73,9 @@ bool CMapBase::LoadProperty() return false; } - // NOTE: ̹ ϴ Ϳ ͸ ϴ ߰ , 뷮 ̱ ۾. - // MapProperty.txt Ͽ ParentMapName Ǿ ִٸ, ʹ ParentMap о´. - // κа(κ Ʈ?) ʿ 뼭, Parent Map ͸ о. + // NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업. + // MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다. + // 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴. if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname")) { m_strParentMapName = stTokenVectorMap["parentmapname"][0]; @@ -98,4 +98,4 @@ bool CMapBase::LoadProperty() SetType(MAPTYPE_OUTDOOR); return true; -} \ No newline at end of file +} diff --git a/src/GameLib/MapBase.h b/src/GameLib/MapBase.h index e32c55f9..39d8cf5e 100644 --- a/src/GameLib/MapBase.h +++ b/src/GameLib/MapBase.h @@ -22,13 +22,13 @@ class CMapBase : public CScreen virtual bool Update(float fX, float fY, float fZ) = 0; virtual void UpdateAroundAmbience(float fX, float fY, float fZ) = 0; virtual float GetHeight(float fx, float fy) = 0; - virtual void OnBeginEnvironment() = 0; // ҷ ⼭ Environment ִ ͵ Ѵ. + virtual void OnBeginEnvironment() = 0; // 렌더링 할 때 불려지며 여기서 Environment에 관련 있는 것들을 셋팅 한다. virtual void ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight) = 0; protected: virtual void OnRender() = 0; - virtual void OnSetEnvironmentDataPtr() = 0; // Environment Ͱ ҷ. + virtual void OnSetEnvironmentDataPtr() = 0; // Environment 데이터가 설정될 때 불려진다. virtual void OnResetEnvironmentDataPtr() = 0; public: @@ -50,14 +50,14 @@ class CMapBase : public CScreen const std::string & GetName() const { return m_strName; } void SetName(const std::string & cr_strName) { m_strName = cr_strName; } - bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // " ʹ ִ" ΰ? - const std::string& GetParentMapName() const { return m_strParentMapName; } // ͸ ִ ̸ ( ʼ õǾ ) + bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // "원본 데이터는 따로 있는" 복사 맵인가? + const std::string& GetParentMapName() const { return m_strParentMapName; } // 원본 데이터를 갖고있는 맵의 이름을 리턴 (복사맵의 경우 필수로 세팅되어야 함) const std::string& GetMapDataDirectory() const { return IsCopiedMap() ? m_strParentMapName : m_strName; } protected: - EMAPTYPE m_eType; // ... Indoor Ourdoor ִ. - std::string m_strName; // ̸. ̸ ĺڰ ? - std::string m_strParentMapName; // ̸. õǾ ִٸ ʹ ParentMap/* ο о´. Ϻθ о ʿ뼭 н. + EMAPTYPE m_eType; // 맵 종류... 현재는 Indoor와 Ourdoor가 있다. + std::string m_strName; // 맵 이름. 맵 이름이 맵 식별자가 될 수 있을까? + std::string m_strParentMapName; // 원본 맵의 이름. 이 값이 세팅되어 있다면 실제 모든 맵 데이터는 ParentMap/* 경로에서 읽어온다. 맵의 일부만 읽어오는 기능은 필요없대서 패스. bool m_bReady; const TEnvironmentData * mc_pEnvironmentData; diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp index 356a45ea..cae13853 100644 --- a/src/GameLib/MapManager.cpp +++ b/src/GameLib/MapManager.cpp @@ -8,7 +8,7 @@ #include "PropertyLoader.h" ////////////////////////////////////////////////////////////////////////// -// ⺻ Լ +// 기본 함수 ////////////////////////////////////////////////////////////////////////// bool CMapManager::IsMapOutdoor() @@ -184,7 +184,7 @@ float CMapManager::GetHeight(float fx, float fy) { if (!m_pkMap) { - TraceError("CMapManager::GetHeight(%f, %f) - ¿ ", fx, fy); + TraceError("CMapManager::GetHeight(%f, %f) - Access without a map created", fx, fy); return 0.0f; } CMapOutdoor& rkMap=GetMapOutdoorRef(); @@ -195,7 +195,7 @@ float CMapManager::GetTerrainHeight(float fx, float fy) { if (!m_pkMap) { - TraceError("CMapManager::GetTerrainHeight(%f, %f) - ¿ ", fx, fy); + TraceError("CMapManager::GetTerrainHeight(%f, %f) - Access without a map created", fx, fy); return 0.0f; } CMapOutdoor& rkMap=GetMapOutdoorRef(); @@ -206,7 +206,7 @@ bool CMapManager::GetWaterHeight(int iX, int iY, long * plWaterHeight) { if (!m_pkMap) { - TraceError("CMapManager::GetTerrainHeight(%f, %f) - ¿ ", iX, iY); + TraceError("CMapManager::GetTerrainHeight(%f, %f) - Access without a map created", iX, iY); return false; } diff --git a/src/GameLib/MapManager.h b/src/GameLib/MapManager.h index 829693f7..4cc0f574 100644 --- a/src/GameLib/MapManager.h +++ b/src/GameLib/MapManager.h @@ -27,13 +27,13 @@ class CMapManager : public CScreen, public IPhysicsWorld void Initialize(); void Destroy(); - void Create(); // AllocMap ȣ ؼ m_pMap + void Create(); // AllocMap 호출 해서 m_pMap 을 만듬 virtual void Clear(); virtual CMapBase * AllocMap(); ////////////////////////////////////////////////////////////////////////// - // Map Լ + // Map 관리 함수 ////////////////////////////////////////////////////////////////////////// bool IsMapReady(); @@ -51,9 +51,9 @@ class CMapManager : public CScreen, public IPhysicsWorld ////////////////////////////////////////////////////////////////////////// // Environment /// - // NOTE : Environment Ų - // Ǿ . Լ Protected ְ, - // MapManager TimeControl κ ϵ Ѵ. - [levites] + // NOTE : 다음 Environment로 서서히 블렌딩 시킨다 + // 아직 세부 구현은 되어있지 않음. 이 함수들은 Protected로 넣고, + // MapManager에 TimeControl 부분을 구현하도록 한다. - [levites] void SetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData); void ResetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData); void SetEnvironmentData(int nEnvDataIndex); diff --git a/src/GameLib/MapOutdoor.cpp b/src/GameLib/MapOutdoor.cpp index f8ff254b..0927103e 100644 --- a/src/GameLib/MapOutdoor.cpp +++ b/src/GameLib/MapOutdoor.cpp @@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy() void CMapOutdoor::Clear() { UnloadWaterTexture(); - Destroy(); // - Initialize(); // ʱȭ + Destroy(); // 해제 + Initialize(); // 초기화 } bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY) diff --git a/src/GameLib/MapOutdoor.h b/src/GameLib/MapOutdoor.h index ae015f4d..bf2d30ea 100644 --- a/src/GameLib/MapOutdoor.h +++ b/src/GameLib/MapOutdoor.h @@ -27,7 +27,7 @@ typedef struct SOutdoorMapCoordinate { - short m_sTerrainCoordX; // Terrain ǥ + short m_sTerrainCoordX; // Terrain 좌표 short m_sTerrainCoordY; } TOutdoorMapCoordinate; @@ -161,7 +161,7 @@ class CMapOutdoor : public CMapBase bool isTerrainLoaded(WORD wX, WORD wY); bool isAreaLoaded(WORD wX, WORD wY); - void AssignTerrainPtr(); // ǥ (ex. 3x3) ִ ͵ ͸ Ѵ. (Ʈ ҷ) + void AssignTerrainPtr(); // 현재 좌표에서 주위(ex. 3x3)에 있는 것들의 포인터를 연결한다. (업데이트 시 불려짐) void SaveAlphaFogOperation(); void RestoreAlphaFogOperation(); @@ -169,7 +169,7 @@ class CMapOutdoor : public CMapBase ////////////////////////////////////////////////////////////////////////// // New ////////////////////////////////////////////////////////////////////////// - // ʵ ´. + // 여러가지 맵들을 얻는다. void GetHeightMap(const BYTE & c_rucTerrainNum, WORD ** pwHeightMap); void GetNormalMap(const BYTE & c_rucTerrainNum, char ** pucNormalMap); @@ -182,19 +182,19 @@ class CMapOutdoor : public CMapBase // Terrain ////////////////////////////////////////////////////////////////////////// protected: - // + // 데이터 CTerrain * m_pTerrain[AROUND_AREA_NUM]; // Terrain - CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain Ҷ ϴ ġ... Seamless Map CTerrainκ ... + CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain을 랜더링 할때 실제로 랜더링하는 폴리곤 패치들... Seamless Map 을 위해 CTerrain으로부터 독립... - long m_lViewRadius; // þ Ÿ.. .. - float m_fHeightScale; // ... 1.0϶ 0~655.35ͱ ǥ . + long m_lViewRadius; // 시야 거리.. 셀단위임.. + float m_fHeightScale; // 높이 스케일... 1.0일때 0~655.35미터까지 표현 가능. - short m_sTerrainCountX, m_sTerrainCountY; // seamless map ȿ  Terrain + short m_sTerrainCountX, m_sTerrainCountY; // seamless map 안에 들어가는 Terrain개수 - TOutdoorMapCoordinate m_CurCoordinate; // ǥ + TOutdoorMapCoordinate m_CurCoordinate; // 현재의 좌표 long m_lCurCoordStartX, m_lCurCoordStartY; - TOutdoorMapCoordinate m_PrevCoordinate; // ǥ + TOutdoorMapCoordinate m_PrevCoordinate; // 현재의 좌표 TOutdoorMapCoordinateMap m_EntryPointMap; WORD m_wPatchCount; @@ -316,7 +316,7 @@ class CMapOutdoor : public CMapBase ////////////////////////////////////////////////////////////////////////// // New ////////////////////////////////////////////////////////////////////////// - long m_lCenterX, m_lCenterY; // Terrain ǥ ǥ... + long m_lCenterX, m_lCenterY; // Terrain 좌표 내의 셀 좌표... long m_lOldReadX, m_lOldReadY; /* Last center */ ////////////////////////////////////////////////////////////////////////// diff --git a/src/GameLib/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp index 99d55cd1..800cf425 100644 --- a/src/GameLib/MapOutdoorLoad.cpp +++ b/src/GameLib/MapOutdoorLoad.cpp @@ -15,7 +15,7 @@ bool CMapOutdoor::Load(float x, float y, float z) { static std::string s_strOldPathName=""; - // 2004.08.09.myevan.Pack ã.. δ ׳ ϵǴ κ ִ + // 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다 std::string c_rstrNewPathName=GetName()+"\\cache"; s_strOldPathName=c_rstrNewPathName; @@ -36,7 +36,7 @@ bool CMapOutdoor::Load(float x, float y, float z) m_lOldReadX = -1; - // TODO: SetRenderingDevice Environment Ʈ Ӽ Ѱ ƽ Ʈ ۵Ѵ. + // TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다. CSpeedTreeDirectX::Instance().SetRenderingDevice(); Update(x, y, z); @@ -100,13 +100,13 @@ bool CMapOutdoor::isAreaLoaded(WORD wX, WORD wY) } -// ǥ (ex. 3x3) ִ Terrain Area͸ -// m_pTerrain m_pArea Ѵ. +// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를 +// m_pTerrain과 m_pArea에 연결한다. void CMapOutdoor::AssignTerrainPtr() { - // 忡Ϳ ȭ ѱ ͷ ؾ ϱ - // virtual method ȣ Ѵ. ޼ҵ CMapOutDoor ƹ ൿ - // ʴ´. + // 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기 + // 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도 + // 하지 않는다. OnPreAssignTerrainPtr(); short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY; @@ -390,15 +390,15 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName) std::string stTextureSetFileName = strTextureSet; - // TextureSet ̹ پ Ⱥδ. + // TextureSet 이 이미 붙어 있을 경우 안붙인다. if (0 != stTextureSetFileName.find_first_of("textureset", 0)) stTextureSetFileName = "textureset\\"+strTextureSet; if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase)) { #ifdef WORLD_EDITOR - // TextureSet Ǿ ʾƵ - LogBox("TextureSet Ǿ Դϴ.\n ؽ ۾ Ͻñ ٶϴ."); + // TextureSet 이 적용되어 있지 않아도 진행 + LogBox("This map does not have a TextureSet applied. Be careful when working with terrain textures."); #else TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str()); return false; diff --git a/src/GameLib/MapOutdoorQuadtree.cpp b/src/GameLib/MapOutdoorQuadtree.cpp index 8c35f0b3..d7a72268 100644 --- a/src/GameLib/MapOutdoorQuadtree.cpp +++ b/src/GameLib/MapOutdoorQuadtree.cpp @@ -9,7 +9,7 @@ void CMapOutdoor::BuildQuadTree() { FreeQuadTree(); - // m_wPatchCount ConvertPatchSplat Ѵ, ⼭ üũѴ. + // m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다. if (0 == m_wPatchCount) { TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method."); diff --git a/src/GameLib/MapOutdoorRender.cpp b/src/GameLib/MapOutdoorRender.cpp index d60fd1bb..16f47654 100644 --- a/src/GameLib/MapOutdoorRender.cpp +++ b/src/GameLib/MapOutdoorRender.cpp @@ -42,10 +42,10 @@ void CMapOutdoor::RenderTerrain() __RenderTerrain_RecurseRenderQuadTree(m_pRootNode); - // Ÿ + // 거리순 정렬 std::sort(m_PatchVector.begin(),m_PatchVector.end()); - // ׸ + // 그리기 위한 벡터 세팅 if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE) __RenderTerrain_RenderSoftwareTransformPatch(); else @@ -133,13 +133,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight) STATEMANAGER.SetLight(0, &c_rkLight); } -// 2004. 2. 17. myevan. κ ̰ ʱȭ Ѵ +// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다 void CMapOutdoor::InitializeVisibleParts() { m_dwVisiblePartFlags=0xffffffff; } -// 2004. 2. 17. myevan. Ư κ ̰ ϰų ߴ Լ +// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수 void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible) { DWORD dwMask=(1<GetEye(); const D3DXVECTOR3 & c_v3LeftPos = pkLeft->GetPosition(); @@ -387,7 +387,7 @@ void CMapOutdoor::RenderArea(bool bRenderAmbience) m_dwRenderedGraphicThingInstanceNum = 0; m_dwRenderedCRCWithNumberVector.clear(); - // NOTE - 20041201.levites. ׸ ߰ + // NOTE - 20041201.levites.던젼 그림자 추가 for (int j = 0; j < AROUND_AREA_NUM; ++j) { CArea * pArea; diff --git a/src/GameLib/MapOutdoorRenderHTP.cpp b/src/GameLib/MapOutdoorRenderHTP.cpp index 7ce43543..2b410685 100644 --- a/src/GameLib/MapOutdoorRenderHTP.cpp +++ b/src/GameLib/MapOutdoorRenderHTP.cpp @@ -100,7 +100,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch() std::vector >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far); std::vector >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near); - // NOTE: Word Editor fog far ִָ ü ؽ ׸ ۾ + // NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음 #ifdef WORLD_EDITOR near_it = m_PatchVector.begin(); far_it = m_PatchVector.end(); @@ -119,7 +119,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch() DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE); std::vector >::iterator it = m_PatchVector.begin(); - // NOTE: view ~ fog near fog disabled · ׸ ۾ . + // NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음. #ifndef WORLD_EDITOR STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE); @@ -379,7 +379,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD } else { - // 0 ؽó + // 0번 텍스처 if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] ) { DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR); @@ -602,7 +602,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD */ #endif - // ׸ + // 그림자 if (m_bDrawShadow) { STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE); diff --git a/src/GameLib/MapOutdoorRenderSTP.cpp b/src/GameLib/MapOutdoorRenderSTP.cpp index 9c82255d..989bfa3c 100644 --- a/src/GameLib/MapOutdoorRenderSTP.cpp +++ b/src/GameLib/MapOutdoorRenderSTP.cpp @@ -221,7 +221,7 @@ void CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat(SoftwareTransformPat break; } - // ׸ + // 그림자 if (m_bDrawShadow) { __SoftwareTransformPatch_SetShadowStream(akTransVertex); diff --git a/src/GameLib/MapOutdoorUpdate.cpp b/src/GameLib/MapOutdoorUpdate.cpp index 5fdf9ecb..ac91a418 100644 --- a/src/GameLib/MapOutdoorUpdate.cpp +++ b/src/GameLib/MapOutdoorUpdate.cpp @@ -8,7 +8,7 @@ #include "TerrainQuadtree.h" #include "ActorInstance.h" -// 2004.08.17.myevan.std::vector ޸ ٿ ɷ ϵ +// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정 class PCBlocker_CDynamicSphereInstanceVector { public: @@ -239,7 +239,7 @@ void CMapOutdoor::__Game_UpdateArea(D3DXVECTOR3& v3Player) D3DXVECTOR3 v3Target = pCamera->GetTarget(); D3DXVECTOR3 v3Eye= pCamera->GetEye(); - D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // + D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향 v3Light *= 50.0f / D3DXVec3Length(&v3Light); /* @@ -742,7 +742,7 @@ void CMapOutdoor::UpdateTerrain(float fX, float fY) ConvertTerrainToTnL(lRealCenterX, lRealCenterY); UpdateAreaList(lRealCenterX, lRealCenterY); - //Tracef("ϴ Area, Terrain : (%d, %d), Area, Terrain : (%d, %d)\n", + //Tracef("Use Area, Terrain : (%d, %d), Clear Area, Terrain : (%d, %d)\n", // m_AreaVector.size(), m_TerrainVector.size(), m_AreaDeleteVector.size(), m_TerrainDeleteVector.size()); } } diff --git a/src/GameLib/MapOutdoorWater.cpp b/src/GameLib/MapOutdoorWater.cpp index e5670b76..f852ba28 100644 --- a/src/GameLib/MapOutdoorWater.cpp +++ b/src/GameLib/MapOutdoorWater.cpp @@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater() // RenderState ////////////////////////////////////////////////////////////////////////// - // Ʒ ִϽŰ... + // 물 위 아래 애니시키기... static float s_fWaterHeightCurrent = 0; static float s_fWaterHeightBegin = 0; static float s_fWaterHeightEnd = 0; static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond(); static DWORD s_dwBlendtime = 300; - // 1.5 + // 1.5초 마다 변경 if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime) { s_dwBlendtime = random_range(1000, 3000); @@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater() DrawWater(i->second); } - // Ŀ z ġ + // 렌더링 한 후에는 물 z 위치를 복구 m_matWorldForCommonUse._43 = 0.0f; ////////////////////////////////////////////////////////////////////////// diff --git a/src/GameLib/MapType.h b/src/GameLib/MapType.h index 11e26cea..d84fb815 100644 --- a/src/GameLib/MapType.h +++ b/src/GameLib/MapType.h @@ -182,7 +182,7 @@ typedef struct SEnvironmentData std::string strMainFlareTextureFileName; float fMainFlareSize; - BOOL bReserve; // ܺο ġ + BOOL bReserve; // 외부에서 설정을 고치지 않음 } TEnvironmentData; typedef std::map TEnvironmentDataMap; diff --git a/src/GameLib/MonsterAreaInfo.cpp b/src/GameLib/MonsterAreaInfo.cpp index e7f0054f..a14fa614 100644 --- a/src/GameLib/MonsterAreaInfo.cpp +++ b/src/GameLib/MonsterAreaInfo.cpp @@ -126,12 +126,12 @@ void CMonsterAreaInfo::RemoveAllMonsters() SetMonsterGroupID(0); - m_strGroupName.assign("̸"); - m_strLeaderName.assign("̸"); + m_strGroupName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD"); + m_strLeaderName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD"); SetMonsterGroupFollowerCount(0); SetMonsterVID(0); - m_strMonsterName.assign("̸"); + m_strMonsterName.assign("\xC0\xCC\xB8\xA7\xBE\xF8\xC0\xBD"); SetMonsterCount(0); SetMonsterDirection(DIR_NORTH); diff --git a/src/GameLib/MonsterAreaInfo.h b/src/GameLib/MonsterAreaInfo.h index 8f314728..e118ba5c 100644 --- a/src/GameLib/MonsterAreaInfo.h +++ b/src/GameLib/MonsterAreaInfo.h @@ -89,17 +89,17 @@ protected: protected: EMonsterAreaInfoType m_eMonsterAreaInfoType; - // Group Type + // Group Type 정보 DWORD m_dwGroupID; std::string m_strGroupName; std::string m_strLeaderName; DWORD m_dwFollowerCount; - // Monster Type + // Monster Type 정보 DWORD m_dwVID; std::string m_strMonsterName; - // + // 공통 정보 DWORD m_dwMonsterCount; EMonsterDir m_eMonsterDir; D3DXVECTOR2 m_v2Monsterdirection; diff --git a/src/GameLib/PhysicsObject.cpp b/src/GameLib/PhysicsObject.cpp index 2373ce38..ab2fa8f3 100644 --- a/src/GameLib/PhysicsObject.cpp +++ b/src/GameLib/PhysicsObject.cpp @@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition, m_v3Acceleration.y, m_v3Acceleration.z); */ - // NOTE : ġ صд. ٵ 100 ũٸ? ; + // NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ; const int LoopValue = 100; D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f); @@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition, //for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f) //{ - // // ϰ üũѴ + // // 좀더 정밀하게 체크한다 // if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio)) // { // v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f); @@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement() bool CPhysicsObject::isBlending() { - // NOTE : IncreaseExternalForce() и óΰ? + // NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가? if (0.0f != D3DXVec3Length(&m_v3Velocity)) return true; - // NOTE : SetLastPosition() и óΰ? + // NOTE : SetLastPosition() 에 의해 밀리는 처리중인가? if (m_xPushingPosition.isPlaying() || m_yPushingPosition.isPlaying()) return true; diff --git a/src/GameLib/PhysicsObject.h b/src/GameLib/PhysicsObject.h index 302e51b2..69c2bcaa 100644 --- a/src/GameLib/PhysicsObject.h +++ b/src/GameLib/PhysicsObject.h @@ -29,8 +29,8 @@ private: }; class CActorInstance; -//NOTE : ȵ Dependency Inversion interface ϱ ؼ ̹Ĵ -// 踦 Ѵٸ world live object ݴ base project (gamelib̳ base project ؾ Ѵ ) +//NOTE : 맘에 안들지만 Dependency Inversion을 막고 이전과 동일한 interface를 유지하기 위해서 이방식대로 간다 +//하지만 제대로 설계를 한다면 world와 live object들의 관리는 조금더 base project에서 (gamelib이나 더 base project에서 해야 한다 ) class IObjectManager { public: diff --git a/src/GameLib/Property.cpp b/src/GameLib/Property.cpp index abafe14c..ef408820 100644 --- a/src/GameLib/Property.cpp +++ b/src/GameLib/Property.cpp @@ -5,12 +5,12 @@ #include "PropertyManager.h" #include "Property.h" /* - * CProperty + * CProperty 파일 포맷 * * 0 ~ 4 bytes: fourcc * 5 ~ 6 bytes: \r\n * - * Ʈ ؽƮ δ + * 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조 */ CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0) { @@ -68,9 +68,9 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector) if (m_stTokenMap.end() == it) return false; -// NOTE : ƨ ߰ +// NOTE : 튕김 현상 발견 // std::copy(rTokenVector.begin(), it->second.begin(), it->second.end()); -// NOTE : ۷ ̷ ϰԲ Ǿ +// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음 /////////////////////////////////////////////////////////////////////////////// // template // OutputIterator copy(InputIterator first, InputIterator last, @@ -82,11 +82,11 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector) // copy(V.begin(), V.end(), L.begin()); // assert(equal(V.begin(), V.end(), L.begin())); /////////////////////////////////////////////////////////////////////////////// -// 嵥 ׷ ƨ. - [levites] +// 헌데 그래도 튕김. - [levites] // std::copy(it->second.begin(), it->second.end(), rTokenVector.begin()); -// ᱹ ̷.. - [levites] -// ϴ : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp +// 결국 이렇게.. - [levites] +// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp CTokenVector & rSourceTokenVector = it->second; CTokenVector::iterator itor = rSourceTokenVector.begin(); for (; itor != rSourceTokenVector.end(); ++itor) @@ -102,7 +102,7 @@ void CProperty::PutString(const char * c_pszKey, const char * c_pszString) std::string stTempKey = c_pszKey; stl_lowers(stTempKey); - // ̹ ִ° + // 이미 있는걸 지움 CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey); if (itor != m_stTokenMap.end()) diff --git a/src/GameLib/PropertyLoader.cpp b/src/GameLib/PropertyLoader.cpp index 4a1520e5..44070423 100644 --- a/src/GameLib/PropertyLoader.cpp +++ b/src/GameLib/PropertyLoader.cpp @@ -33,10 +33,10 @@ DWORD CPropertyLoader::RegisterFile(const char * c_szPathName, const char * c_sz stl_lowers(stExt); stl_lowers(strFileName); - // н ҹڷ \\ / ٲ۴. + // 패스를 소문자로 만들고 \\ 는 / 로 바꾼다. StringPath(strFileName); - // CRC ó ( CRC) + // 예약된 CRC 처리 (지워진 CRC) if (0 == strFileName.compare("property/reserve")) { m_pPropertyManager->LoadReservedCRC(strFileName.c_str()); diff --git a/src/GameLib/PropertyManager.cpp b/src/GameLib/PropertyManager.cpp index 7aa8e85a..27cd6a3a 100644 --- a/src/GameLib/PropertyManager.cpp +++ b/src/GameLib/PropertyManager.cpp @@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName) else { m_isFileMode = true; - // NOTE : ⼭ Property ϽŰ WorldEditor ̻ ; - // , Property Tree List Ѿ DZ ٱʿ.. - [levites] + // NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ; + // 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites] } return true; @@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE)) return false; - if (!m_isFileMode) // Ͽ + if (!m_isFileMode) // 팩 파일에도 넣음 { if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,"")) { @@ -219,13 +219,13 @@ bool CPropertyManager::Erase(DWORD dwCRC) DeleteFile(pProperty->GetFileName()); ReserveCRC(pProperty->GetCRC()); - if (!m_isFileMode) // 尡 ƴϸ ѿ + if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움 m_pack.Delete(pProperty->GetFileName()); FILE * fp = fopen("property/reserve", "a+"); if (!fp) - LogBox(" CRC ϴ."); + LogBox("Unable to Open Scheduled CRC Files."); else { char szCRC[64 + 1]; diff --git a/src/GameLib/RaceData.cpp b/src/GameLib/RaceData.cpp index b321236c..de48b19c 100644 --- a/src/GameLib/RaceData.cpp +++ b/src/GameLib/RaceData.cpp @@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex return NULL; } - // 2004. 3. 15. myevan. dz ε ־ Ѵ. + // 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다. pRaceMotionData->SetName(wMotionIndex); ///// - // FIXME : ̹ GR2 ε Ǿ 쿡  ؾ ϴ°? - // Ȱ ϳ ߰ Ǿ . - [levites] + // FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가? + // 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites] return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage); - // 2004.09.03.myevan.οԼ ó + // 2004.09.03.myevan.새로운함수로 대처 //TMotion Motion; //Motion.byPercentage = byPercentage; //Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName()); diff --git a/src/GameLib/RaceData.h b/src/GameLib/RaceData.h index 94d43d07..61becf22 100644 --- a/src/GameLib/RaceData.h +++ b/src/GameLib/RaceData.h @@ -16,8 +16,8 @@ class CRaceData enum EParts { // Share index with server - // ECharacterEquipmentPart ּ. - //Ŷ ũⰡ մϴ ּ߰. + // ECharacterEquipmentPart도 수정해주세요. + //패킷 크기가 변합니다 서버와 상의후 추가해주세요. PART_MAIN, PART_WEAPON, PART_HEAD, diff --git a/src/GameLib/RaceDataFile.cpp b/src/GameLib/RaceDataFile.cpp index 809965e3..ee05fa92 100644 --- a/src/GameLib/RaceDataFile.cpp +++ b/src/GameLib/RaceDataFile.cpp @@ -73,7 +73,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName) } ///////////////////////// - // Temporary - ̺Ʈ ӽ + // Temporary - 이벤트를 위한 임시 기능 TextFileLoader.GetTokenString("specialpath", &strPathName); ///////////////////////// @@ -146,7 +146,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName) } ///////////////////////// - // Temporary - ̺Ʈ ӽ + // Temporary - 이벤트를 위한 임시 기능 TextFileLoader.GetTokenString("specialpath", &strPathName); ///////////////////////// diff --git a/src/GameLib/RaceManager.cpp b/src/GameLib/RaceManager.cpp index 9a28aa30..58601698 100644 --- a/src/GameLib/RaceManager.cpp +++ b/src/GameLib/RaceManager.cpp @@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector & vec_stPat vec_stPathes.push_back ("d:/ymir work/guild/"); } } - // ̺Ʈ + // 만우절 이벤트용 예외 몬스터 else if (8507 == race || 8510 == race) { vec_stPathes.push_back ("d:/ymir work/monster2/"); @@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN if (s_kMap_stType_dwIndex.end() == fTypeIndex) { - // Ͽ WAIT, WAIT4, WAIT20 ̷ ϵǾ , - // WAIT4, WAIT20 WAIT ν ֵ ó + // 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때, + // WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리 const size_t c_cutLengthLimit = 2; bool bFound = false; diff --git a/src/GameLib/RaceMotionData.h b/src/GameLib/RaceMotionData.h index 5d61894c..ca4fe624 100644 --- a/src/GameLib/RaceMotionData.h +++ b/src/GameLib/RaceMotionData.h @@ -56,41 +56,41 @@ class CRaceMotionData enum EName { - NAME_NONE, // 0 - NAME_WAIT, // 1 (00.msa) - NAME_WALK, // 2 ȱ (02.msa) - NAME_RUN, // 3 ٱ (03.msa) - NAME_CHANGE_WEAPON, // 4 ٲٱ - NAME_DAMAGE, // 5 ± (30.msa) - NAME_DAMAGE_FLYING, // 6 鳯ư (32.msa) - NAME_STAND_UP, // 7 Ͼ (33.msa) - NAME_DAMAGE_BACK, // 8 ĸ± (34.msa) - NAME_DAMAGE_FLYING_BACK, // 9 ĸ鳯ư (35.msa) - NAME_STAND_UP_BACK, // 10 ĸϾ (36.msa) - NAME_DEAD, // 11 ױ (31.msa) - NAME_DEAD_BACK, // 12 ĸױ (37.msa) - NAME_NORMAL_ATTACK, // 13 (20.msa) - NAME_COMBO_ATTACK_1, // 14 ޺ - NAME_COMBO_ATTACK_2, // 15 ޺ - NAME_COMBO_ATTACK_3, // 16 ޺ - NAME_COMBO_ATTACK_4, // 17 ޺ - NAME_COMBO_ATTACK_5, // 18 ޺ - NAME_COMBO_ATTACK_6, // 19 ޺ - NAME_COMBO_ATTACK_7, // 20 ޺ - NAME_COMBO_ATTACK_8, // 21 ޺ - NAME_INTRO_WAIT, // 22 ȭ - NAME_INTRO_SELECTED, // 23 ȭ - NAME_INTRO_NOT_SELECTED, // 24 ȭ - NAME_SPAWN, // 25 ȯ - NAME_FISHING_THROW, // 26 - NAME_FISHING_WAIT, // 27 - NAME_FISHING_STOP, // 28 ׸α - NAME_FISHING_REACT, // 29 - NAME_FISHING_CATCH, // 30 - NAME_FISHING_FAIL, // 31 - NAME_STOP, // 32 ߱ - NAME_SPECIAL_1, // 33 /NPC Ư (24.msa) - NAME_SPECIAL_2, // 34 /NPC Ư (25.msa) + NAME_NONE, // 0 없음 + NAME_WAIT, // 1 대기 (00.msa) + NAME_WALK, // 2 걷기 (02.msa) + NAME_RUN, // 3 뛰기 (03.msa) + NAME_CHANGE_WEAPON, // 4 무기바꾸기 + NAME_DAMAGE, // 5 정면맞기 (30.msa) + NAME_DAMAGE_FLYING, // 6 정면날아가기 (32.msa) + NAME_STAND_UP, // 7 정면일어나기 (33.msa) + NAME_DAMAGE_BACK, // 8 후면맞기 (34.msa) + NAME_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa) + NAME_STAND_UP_BACK, // 10 후면일어나기 (36.msa) + NAME_DEAD, // 11 죽기 (31.msa) + NAME_DEAD_BACK, // 12 후면죽기 (37.msa) + NAME_NORMAL_ATTACK, // 13 공격 (20.msa) + NAME_COMBO_ATTACK_1, // 14 콤보 공격 + NAME_COMBO_ATTACK_2, // 15 콤보 공격 + NAME_COMBO_ATTACK_3, // 16 콤보 공격 + NAME_COMBO_ATTACK_4, // 17 콤보 공격 + NAME_COMBO_ATTACK_5, // 18 콤보 공격 + NAME_COMBO_ATTACK_6, // 19 콤보 공격 + NAME_COMBO_ATTACK_7, // 20 콤보 공격 + NAME_COMBO_ATTACK_8, // 21 콤보 공격 + NAME_INTRO_WAIT, // 22 선택화면 대기 + NAME_INTRO_SELECTED, // 23 선택화면 선택 + NAME_INTRO_NOT_SELECTED, // 24 선택화면 비선택 + NAME_SPAWN, // 25 소환 + NAME_FISHING_THROW, // 26 낚시 던지기 + NAME_FISHING_WAIT, // 27 낚시 대기 + NAME_FISHING_STOP, // 28 낚시 그만두기 + NAME_FISHING_REACT, // 29 낚시 반응 + NAME_FISHING_CATCH, // 30 낚시 잡기 + NAME_FISHING_FAIL, // 31 낚시 실패 + NAME_STOP, // 32 말 멈추기 + NAME_SPECIAL_1, // 33 몬스터/NPC 특수 동작 (24.msa) + NAME_SPECIAL_2, // 34 몬스터/NPC 특수 동작 (25.msa) NAME_SPECIAL_3, NAME_SPECIAL_4, NAME_SPECIAL_5, @@ -139,7 +139,7 @@ class CRaceMotionData NAME_DANCE_3, NAME_DANCE_4, NAME_DANCE_5, - NAME_DANCE_6, // Ÿ + NAME_DANCE_6, // 강남스타일 NAME_DANCE_END = NAME_DANCE_1 + 16, @@ -210,8 +210,8 @@ class CRaceMotionData void SetName(UINT eName); - UINT GetType() const; // Ÿ - bool IsLock() const; // ΰ? (ٸ ǿ ĵ ) + UINT GetType() const; // 모션 타입 얻기 + bool IsLock() const; // 락된 모션 인가? (다른 모션에 캔슬되지 않음) int GetLoopCount() const; @@ -225,7 +225,7 @@ class CRaceMotionData void SetAccumulationPosition(const TPixelPosition & c_rPos); const TPixelPosition & GetAccumulationPosition() { return m_accumulationPosition; } - BOOL IsComboInputTimeData() const; // ޺ Է Ÿ̹ Ͱ ִ°? + BOOL IsComboInputTimeData() const; // 콤보 입력 타이밍 데이터가 있는가? float GetComboInputStartTime() const; float GetNextComboTime() const; diff --git a/src/GameLib/SnowEnvironment.cpp b/src/GameLib/SnowEnvironment.cpp index 11ffd146..8aed9304 100644 --- a/src/GameLib/SnowEnvironment.cpp +++ b/src/GameLib/SnowEnvironment.cpp @@ -124,7 +124,7 @@ void CSnowEnvironment::__ApplyBlur() // BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) , // BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) , // BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) }; -// // ؽĸ ´. +// //누적 블러 텍스쳐를 찍는다. // STATEMANAGER.SetTexture(0,m_lpAccumTexture); // STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 ); // STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex)); diff --git a/src/GameLib/StdAfx.h b/src/GameLib/StdAfx.h index 1e1287aa..90268e0d 100644 --- a/src/GameLib/StdAfx.h +++ b/src/GameLib/StdAfx.h @@ -6,7 +6,7 @@ #endif #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #pragma warning(disable:4018) diff --git a/src/GameLib/WeaponTrace.cpp b/src/GameLib/WeaponTrace.cpp index c447c49f..d4384691 100644 --- a/src/GameLib/WeaponTrace.cpp +++ b/src/GameLib/WeaponTrace.cpp @@ -32,7 +32,7 @@ void CWeaponTrace::Update(float fReachScale) if (!m_pInstance) return; { - // ܻ ð 鸸 մϴ. + // 잔상을 남기는 시간 범위 내의 점들만 유지합니다. TTimePointList::iterator it; for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it) { @@ -69,7 +69,7 @@ void CWeaponTrace::Update(float fReachScale) mat._41 = pBoneMat->_41; mat._42 = pBoneMat->_42; mat._43 = pBoneMat->_43; - // ġ ߰մϴ. + // 현재 위치를 추가합니다. D3DXMATRIX matPoint; D3DXMATRIX matTranslation; D3DXMATRIX matRotation; diff --git a/src/MilesLib/SoundData.cpp b/src/MilesLib/SoundData.cpp index 91c99f1a..e1a52e12 100644 --- a/src/MilesLib/SoundData.cpp +++ b/src/MilesLib/SoundData.cpp @@ -86,7 +86,7 @@ bool CSoundData::ReadFromDisk() } break; - case AILFILETYPE_ADPCM_WAV: // 3D decompress ؾ . + case AILFILETYPE_ADPCM_WAV: // 3D 사운드는 decompress 해야 함. { AIL_WAV_info(s + 1, &info); AIL_decompress_ADPCM(&info, &m_data, &m_size); diff --git a/src/MilesLib/SoundInstance2D.cpp b/src/MilesLib/SoundInstance2D.cpp index 594c6101..aa542813 100644 --- a/src/MilesLib/SoundInstance2D.cpp +++ b/src/MilesLib/SoundInstance2D.cpp @@ -34,11 +34,11 @@ bool CSoundInstance2D::SetSound(CSoundData * pSoundData) { assert(m_sample != NULL && pSoundData != NULL); - // ۷ īƮ 1 ε带 ؾ  - // ǹǷ ݵ Get ȣ ϰ ؾ Ѵ. - // , m_pSoundData pSoundData m_pSoundData ۷ - // īͰ 1 , ʿϰ ε尡 ϾǷ ̸ ۷ - // ī͸ ÷ Ѵ. + // 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴 + // 되므로 반드시 Get을 호출 하고 진행해야 한다. + // 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스 + // 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스 + // 카운터를 올려놔야 한다. LPVOID lpData = pSoundData->Get(); AIL_init_sample(m_sample); diff --git a/src/MilesLib/SoundInstance3D.cpp b/src/MilesLib/SoundInstance3D.cpp index 42fcd9fe..a7c18781 100644 --- a/src/MilesLib/SoundInstance3D.cpp +++ b/src/MilesLib/SoundInstance3D.cpp @@ -35,11 +35,11 @@ bool CSoundInstance3D::SetSound(CSoundData* pSoundData) { assert(m_sample != NULL && pSoundData != NULL); - // ۷ īƮ 1 ε带 ؾ  - // ǹǷ ݵ Get ȣ ϰ ؾ Ѵ. - // , m_pSoundData pSoundData m_pSoundData ۷ - // īͰ 1 , ʿϰ ε尡 ϾǷ ̸ ۷ - // ī͸ ÷ Ѵ. + // 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴 + // 되므로 반드시 Get을 호출 하고 진행해야 한다. + // 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스 + // 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스 + // 카운터를 올려놔야 한다. LPVOID lpData = pSoundData->Get(); if (m_pSoundData != NULL) @@ -97,7 +97,7 @@ void CSoundInstance3D::Stop() { AIL_end_3D_sample(m_sample); // m_sample = NULL; -// NOTE : IsDone üũϷ m_sample ־ մϴ - [levites] +// NOTE : IsDone을 체크하려면 m_sample이 살아있어야 합니다 - [levites] } void CSoundInstance3D::GetVolume(float& rfVolume) const @@ -119,7 +119,7 @@ void CSoundInstance3D::SetPosition(float x, float y, float z) const void CSoundInstance3D::SetOrientation(float x_face, float y_face, float z_face, float x_normal, float y_normal, float z_normal) const { - assert(!" CSoundInstance3D::SetOrientation - ʴ Լ"); + assert(!" CSoundInstance3D::SetOrientation - \xBB\xE7\xBF\xEB \xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6"); // AIL_set_3D_orientation(m_sample, // x_face, y_face, z_face, // x_normal, y_normal, z_normal); diff --git a/src/MilesLib/SoundManager.cpp b/src/MilesLib/SoundManager.cpp index c214b2d5..bbfce774 100644 --- a/src/MilesLib/SoundManager.cpp +++ b/src/MilesLib/SoundManager.cpp @@ -381,7 +381,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha if (0.0f == GetSoundVolume()) return; - // ȭ ʿ ִ - [levites] + // 어느 정도의 최적화가 필요할 수도 있다 - [levites] if (bCheckFrequency) { static float s_fLimitDistance = 5000*5000; @@ -397,7 +397,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha float fTime = itor->second; if (CTimer::Instance().GetCurrentSecond() - fTime < 0.3f) { - //Tracef("Ȱ Ҹ 0.3 ٽ ÷ %s\n", c_szFileName); + //Tracef("Play the same sound again in 0.3 seconds\n", c_szFileName); return; } } @@ -548,7 +548,7 @@ void CSoundManager::FadeOutAllMusic() void CSoundManager::SaveVolume() { - // NOTE : ι ̻ Save õҶ ׳ Return + // NOTE : 두번 이상 Save를 시도할때는 그냥 Return if (m_isSoundDisable) return; diff --git a/src/MilesLib/SoundManager3D.cpp b/src/MilesLib/SoundManager3D.cpp index e0e8631d..7bfebff8 100644 --- a/src/MilesLib/SoundManager3D.cpp +++ b/src/MilesLib/SoundManager3D.cpp @@ -150,7 +150,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName) if (!pkInst->SetSound(pkSoundData)) { TraceError("CSoundManager3D::GetInstance (filename: %s)", c_pszFileName); - // NOTE : 尡 Failed to set. return NULL. - [levites] + // NOTE : 사운드가 없을 경우 Failed to set. return NULL. - [levites] return -1; } @@ -159,7 +159,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName) ++start; - // DWORD Ѱ谪 Ѿ .. ׷.. Ȥó.. - [levites] + // 설마 DWORD 한계값을 넘어갈리야 없겠지만.. 그래도.. 혹시나.. - [levites] if (start > 50000) { start = 0; diff --git a/src/MilesLib/Type.cpp b/src/MilesLib/Type.cpp index 6456cd28..da1d528e 100644 --- a/src/MilesLib/Type.cpp +++ b/src/MilesLib/Type.cpp @@ -26,7 +26,7 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound CTextFileLoader& rkTextFileLoader=*pkTextFileLoader; if (rkTextFileLoader.IsEmpty()) { - SetResultString((strResult + " б ").c_str()); + SetResultString((strResult + " \xC0\xD0\xB1\xE2\xBF\xEB \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xC0\xBD").c_str()); return false; } @@ -35,7 +35,7 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound int iCount; if (!rkTextFileLoader.GetTokenInteger("sounddatacount", &iCount)) { - SetResultString((strResult + " , SoundDataCount ã ").c_str()); + SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF, SoundDataCount\xB8\xA6 \xC3\xA3\xC0\xBB \xBC\xF6 \xBE\xF8\xC0\xBD").c_str()); return false; } @@ -49,13 +49,13 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound CTokenVector * pTokenVector; if (!rkTextFileLoader.GetTokenVector(szSoundDataHeader, &pTokenVector)) { - SetResultString((strResult + " : " + szSoundDataHeader + " ã ").c_str()); + SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF: " + szSoundDataHeader + " \xB8\xA6 \xC3\xA3\xC0\xBB \xBC\xF6 \xBE\xF8\xC0\xBD").c_str()); return false; } if (2 != pTokenVector->size()) { - SetResultString((strResult + " : ũⰡ 2 ƴ").c_str()); + SetResultString((strResult + " \xC6\xC4\xC0\xCF \xC6\xF7\xB8\xE4 \xBF\xA1\xB7\xAF: \xBA\xA4\xC5\xCD \xC5\xA9\xB1\xE2\xB0\xA1 2\xB0\xA1 \xBE\xC6\xB4\xD4").c_str()); return false; } @@ -71,17 +71,17 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound } } - SetResultString((strResult + " ҷ").c_str()); + SetResultString((strResult + " \xBA\xD2\xB7\xAF\xBF\xC8").c_str()); return true; } bool NSound::SaveSoundInformationPiece(const char * c_szFileName, NSound::TSoundDataVector & rSoundDataVector) { - if (rSoundDataVector.empty()) // Ͱ + if (rSoundDataVector.empty()) // 데이터가 없으면 성공으로 간주 { - if (IsFile(c_szFileName)) // ʹ ִµ ִٸ + if (IsFile(c_szFileName)) // 데이터는 비어있는데 파일이 있다면 { - _unlink(c_szFileName); // . + _unlink(c_szFileName); // 지운다. } return true; } @@ -95,8 +95,8 @@ bool NSound::SaveSoundInformationPiece(const char * c_szFileName, NSound::TSound { char szErrorText[256+1]; _snprintf(szErrorText, sizeof(szErrorText), "Failed to save file (%s).\nPlease check if it is read-only or you have no space on the disk.\n", c_szFileName); - LogBox(szErrorText, ""); - SetResultString((strResult + " ").c_str()); + LogBox(szErrorText, "Errors"); + SetResultString((strResult + " \xBE\xB2\xB1\xE2\xBF\xEB \xC6\xC4\xC0\xCF\xC0\xBB \xBF\xAD \xBC\xF6 \xBE\xF8\xC0\xBD").c_str()); return false; } @@ -133,4 +133,4 @@ void NSound::DataToInstance(const TSoundDataVector & c_rSoundDataVector, TSoundI rSoundInstance.dwFrame = (DWORD) (c_rSoundData.fTime / c_fFrameTime); rSoundInstance.strSoundFileName = c_rSoundData.strSoundFileName; } -} \ No newline at end of file +} diff --git a/src/PRTerrainLib/Terrain.h b/src/PRTerrainLib/Terrain.h index d6cc607b..f5e8d765 100644 --- a/src/PRTerrainLib/Terrain.h +++ b/src/PRTerrainLib/Terrain.h @@ -74,7 +74,7 @@ class CTerrainImpl public: static void SetTextureSet(CTextureSet * pTextureSet); - static CTextureSet * GetTextureSet(); // ؾ + static CTextureSet * GetTextureSet(); // 무조건 성공해야 함 protected: static CTextureSet * ms_pTextureSet; @@ -134,7 +134,7 @@ class CTerrainImpl ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// - // TileMap HeightMap + // TileMap과 HeightMap 비율 // int m_iHeightTileRatio; ////////////////////////////////////////////////////////////////////////// diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp index a429d869..078199cb 100644 --- a/src/PRTerrainLib/TextureSet.cpp +++ b/src/PRTerrainLib/TextureSet.cpp @@ -19,7 +19,7 @@ void CTextureSet::Create() { CResource * pResource = CResourceManager::Instance().GetResourcePointer("d:/ymir work/special/error.tga"); m_ErrorTexture.ImageInstance.SetImagePointer(static_cast (pResource)); - AddEmptyTexture(); // 찳 ؽ縦 ó ߰ ؾ + AddEmptyTexture(); // 지우개 텍스춰를 처음에 추가 해야 함 } bool CTextureSet::Load(const char * c_szTextureSetFileName, float fTerrainTexCoordBase) @@ -194,7 +194,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, { if (GetTextureCount() >= 256) { - LogBox("ؽó ̻ ߰ ϴ.", "ִ ؽó 255"); + LogBox("You cannot add any more textures.","Maximum number of textures 255"); return false; } @@ -202,7 +202,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, { if (0 == m_Textures[i].stFilename.compare(c_szFileName)) { - LogBox(" ̸ ؽó ̹ ֽϴ.", "ߺ"); + LogBox("There is already a texture with the same name.", "Duplicate"); return false; } } @@ -211,7 +211,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, if (!pResource->IsType(CGraphicImage::Type())) { - LogBox("CTerrainImpl::GenerateTexture : ̹ ƴմϴ. %s", pResource->GetFileName()); + LogBox("CTerrainImpl::GenerateTexture : Not an image file. %s", pResource->GetFileName()); return false; } @@ -251,7 +251,7 @@ bool CTextureSet::Save(const char * c_pszFileName) fprintf(pFile, "TextureSet\n"); fprintf(pFile, "\n"); - fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1); // -1 ϴ 찳 + fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1); // -1 을 하는 이유는 지우개 때문임 fprintf(pFile, "\n"); for (DWORD i = 1; i < GetTextureCount(); ++i) diff --git a/src/PRTerrainLib/TextureSet.h b/src/PRTerrainLib/TextureSet.h index b62d9038..3221f406 100644 --- a/src/PRTerrainLib/TextureSet.h +++ b/src/PRTerrainLib/TextureSet.h @@ -28,7 +28,7 @@ typedef struct STerrainTexture float UOffset; float VOffset; bool bSplat; - unsigned short Begin, End; // 0 ~ 65535 16bit heightfield ̰. + unsigned short Begin, End; // 0 ~ 65535 의 16bit heightfield 높이값. D3DXMATRIX m_matTransform; } TTerrainTexture; diff --git a/src/ScriptLib/PythonUtils.cpp b/src/ScriptLib/PythonUtils.cpp index 7dd71610..06e2abb0 100644 --- a/src/ScriptLib/PythonUtils.cpp +++ b/src/ScriptLib/PythonUtils.cpp @@ -203,7 +203,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, PyObject* poFunc, PyObject* poArgs { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -221,7 +221,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* po { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -239,7 +239,7 @@ bool PyCallClassMemberFunc_ByPyString(PyObject* poClass, PyObject* poFuncName, P { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -288,9 +288,9 @@ bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* po } /* - * Լ ȣ ʵ Ѵ. - * ε ϰ ȣ 쿡 ݵ false - * Py_DECREF(poArgs); ش. + * 이 함수를 직접 호출하지 않도록 한다. + * 부득이 하게 직접 호출할 경우에는 반드시 false 가 리턴 됐을 때 + * Py_DECREF(poArgs); 를 해준다. */ bool __PyCallClassMemberFunc_ByCString(PyObject* poClass, const char* c_szFunc, PyObject* poArgs, PyObject** ppoRet) { diff --git a/src/SpeedTreeLib/SpeedTreeForest.cpp b/src/SpeedTreeLib/SpeedTreeForest.cpp index 6512770b..ef84787e 100644 --- a/src/SpeedTreeLib/SpeedTreeForest.cpp +++ b/src/SpeedTreeLib/SpeedTreeForest.cpp @@ -78,7 +78,7 @@ BOOL CSpeedTreeForest::GetMainTree(DWORD dwCRC, CSpeedTreeWrapper ** ppMainTree, CMappedFile file; LPCVOID c_pvData; - // NOTE : return FALSE ƴѰ? - [levites] + // NOTE : 파일이 없을때는 return FALSE 아닌가요? - [levites] if (!CEterPackManager::Instance().Get(file, c_pszFileName, &c_pvData)) return FALSE; @@ -127,7 +127,7 @@ void CSpeedTreeForest::DeleteInstance(CSpeedTreeWrapper * pInstance) void CSpeedTreeForest::UpdateSystem(float fCurrentTime) { - // Ʈ ѹ + // 업데이트 할 때 한번 static float fLastTime = fCurrentTime; float fElapsedTime = fCurrentTime - fLastTime; CSpeedTreeRT::SetTime(fElapsedTime); diff --git a/src/UserInterface/AccountConnector.cpp b/src/UserInterface/AccountConnector.cpp index 6badd1c3..4e06c0fd 100644 --- a/src/UserInterface/AccountConnector.cpp +++ b/src/UserInterface/AccountConnector.cpp @@ -141,7 +141,7 @@ bool CAccountConnector::__HandshakeState_Process() if (!__AnalyzePacket(HEADER_GC_PING, sizeof(TPacketGCPing), &CAccountConnector::__AuthState_RecvPing)) return false; - // TODO : ϰ data serialize & deserialize ۾ؾ Ѵ. + // TODO : 차후 서버와 동일하게 가변길이 data serialize & deserialize 작업해야 한다. if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys)) return false; @@ -188,7 +188,7 @@ bool CAccountConnector::__AuthState_Process() if (!__AnalyzePacket(HEADER_GC_PANAMA_PACK, sizeof(TPacketGCPanamaPack), &CAccountConnector::__AuthState_RecvPanamaPack)) return false; - // TODO : ϰ data serialize & deserialize ۾ؾ Ѵ. + // TODO : 차후 서버와 동일하게 가변길이 data serialize & deserialize 작업해야 한다. if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys)) return false; @@ -221,11 +221,11 @@ bool CAccountConnector::__AuthState_RecvPhase() #ifdef USE_OPENID if (!openid_test) { - //2012.07.19 OpenID : - //Ongoing : ̵ -> TPacketCGLogin5 - //Ŭ ִ Ű . + //2012.07.19 OpenID : 김용욱 + //Ongoing : 오픈 아이디 경우-> TPacketCGLogin5 + //클라가 가지고 있는 인증키만을 서버에 보내도록. - //const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //ϵڵ 32 + //const char* tempAuthKey = "d4025bc1f752b64fe5d51ae575ec4730"; //하드코딩 길이 32 TPacketCGLogin5 LoginPacket; LoginPacket.header = HEADER_CG_LOGIN5_OPENID; @@ -256,7 +256,7 @@ bool CAccountConnector::__AuthState_RecvPhase() LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); @@ -287,7 +287,7 @@ bool CAccountConnector::__AuthState_RecvPhase() LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); @@ -455,7 +455,7 @@ bool CAccountConnector::__AuthState_RecvAuthSuccess_OpenID() CEterPackManager::instance().DecryptPackIV(dwPanamaKey); CPythonNetworkStream & rkNet = CPythonNetworkStream::Instance(); - rkNet.SetLoginInfo(kAuthSuccessOpenIDPacket.login, "0000"); //OpenID йȣ ʴ´. + rkNet.SetLoginInfo(kAuthSuccessOpenIDPacket.login, "0000"); //OpenID 인증 과정에서 비밀번호는 사용되지 않는다. rkNet.SetLoginKey(kAuthSuccessOpenIDPacket.dwLoginKey); rkNet.Connect(m_strAddr.c_str(), m_iPort); } @@ -593,7 +593,7 @@ void CAccountConnector::OnConnectSuccess() void CAccountConnector::OnRemoteDisconnect() { - // Matrix Card Number Ҵµ close Ǹ α׷ Ѵ. + // Matrix Card Number 를 보내 놓았는데 close 되면 프로그램을 종료 한다. if (m_isWaitKey) { if (m_poHandler) diff --git a/src/UserInterface/AccountConnector.h b/src/UserInterface/AccountConnector.h index 89337226..67134284 100644 --- a/src/UserInterface/AccountConnector.h +++ b/src/UserInterface/AccountConnector.h @@ -64,8 +64,8 @@ class CAccountConnector : public CNetworkStream, public CSingleton ũID ε + // 길드ID -> 마크ID 인덱스 등록 CGuildMarkManager::Instance().AddMarkIDByGuildID(guildID, markID); } - // ũ ̹ εѴ. ( ) + // 모든 마크 이미지 파일을 로드한다. (파일이 없으면 만들어짐) CGuildMarkManager::Instance().LoadMarkImages(); m_currentRequestingImageIndex = 0; @@ -348,17 +348,17 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock() else { Recv(compSize, compBuf); - // ̹ Ѵ. CRC Բ ȴ. + // 압축된 이미지를 실제로 저장한다. CRC등 여러가지 정보가 함께 빌드된다. CGuildMarkManager::Instance().SaveBlockFromCompressedData(kPacket.imgIdx, posBlock, (const BYTE *) compBuf, compSize); } } if (kPacket.count > 0) { - // ũ ̹ + // 마크 이미지 저장 CGuildMarkManager::Instance().SaveMarkImage(kPacket.imgIdx); - // ҽ ε ( ص ΰ ̰ ) + // 리소스 리로딩 (재접속을 안해도 본인것은 잘 보이게 함) std::string imagePath; if (CGuildMarkManager::Instance().GetMarkImageFilename(kPacket.imgIdx, imagePath)) @@ -372,7 +372,7 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock() } } - // û ûϰ ƴϸ ̹ ϰ + // 더 요청할 것이 있으면 요청하고 아니면 이미지를 저장하고 종료 if (m_currentRequestingImageIndex < CGuildMarkManager::Instance().GetMarkImageCount()) __SendMarkCRCList(); else diff --git a/src/UserInterface/GuildMarkUploader.cpp b/src/UserInterface/GuildMarkUploader.cpp index fa790d67..6de63421 100644 --- a/src/UserInterface/GuildMarkUploader.cpp +++ b/src/UserInterface/GuildMarkUploader.cpp @@ -31,7 +31,7 @@ bool CGuildMarkUploader::IsCompleteUploading() bool CGuildMarkUploader::__Save(const char* c_szFileName) { - /* δ ʾƾ ; + /* 업로더에서 저장하지 않아야 함; ILuint uImg; ilGenImages(1, &uImg); ilBindImage(uImg); diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp index 4d4931f2..1b9d541f 100644 --- a/src/UserInterface/InstanceBase.cpp +++ b/src/UserInterface/InstanceBase.cpp @@ -139,10 +139,10 @@ UINT CInstanceBase::SHORSE::GetLevel() case 20107: case 20108: case 20109: - case 20110: // #0000673: [M2EU] ο Ż Ÿ ȵ - case 20111: // #0000673: [M2EU] ο Ż Ÿ ȵ - case 20112: // #0000673: [M2EU] ο Ż Ÿ ȵ - case 20113: // #0000673: [M2EU] ο Ż Ÿ ȵ + case 20110: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 + case 20111: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 + case 20112: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 + case 20113: // #0000673: [M2EU] 새로운 탈것 타고 공격 안됨 case 20114: case 20115: case 20116: @@ -155,26 +155,26 @@ UINT CInstanceBase::SHORSE::GetLevel() case 20124: case 20125: return 3; - case 20119: // 󸶴 ̺Ʈ 渶 ųҰ, ݰ 2 - case 20219: // ҷ ̺Ʈ 渶 ųҰ, ݰ 2 (=󸶴 渶 Ŭ) + case 20119: // 라마단 이벤트용 흑마는 스킬불가, 공격가능한 레벨2로 설정 + case 20219: // 할로윈 이벤트용 흑마는 스킬불가, 공격가능한 레벨2로 설정 (=라마단 흑마 클론) case 20220: case 20221: case 20222: return 2; } - // Ʈ Ȯ ýۿ Ư ó (20201 ~ 20212 뿪 ϰ 4 ʱ, ߱, ) - // -- Ż Ŭ󿡼 ϰ /ų 밡 ε Ŭ󿡼 óϴ ü ִ .. [hyo] + // 마운트 확장 시스템용 특수 처리 (20201 ~ 20212 대역을 사용하고 순서대로 4개씩 나눠서 초급, 중급, 고급임) + // -- 탈것 레벨을 클라에서 측정하고 공격/스킬 사용가능 여부도 클라에서 처리하는 것 자체에 문제가 있는 듯.. [hyo] { - // ߱ Ż 2 ( , ų Ұ) + // 중급 탈것은 레벨2 (공격 가능, 스킬 불가) if ((20205 <= mount && 20208 >= mount) || - (20214 == mount) || (20217 == mount) // , ϼ + (20214 == mount) || (20217 == mount) // 난폭한 전갑순순록, 난폭한 전갑암순록 ) return 2; - // Ż 3 ( , ų ) + // 고급 탈것은 레벨3 (공격 가능, 스킬 가능) if ((20209 <= mount && 20212 >= mount) || - (20215 == mount) || (20218 == mount) || // , ϼ + (20215 == mount) || (20218 == mount) || // 용맹한 전갑순순록, 용맹한 전갑암순록 (20220 == mount) ) return 3; @@ -190,13 +190,13 @@ bool CInstanceBase::SHORSE::IsNewMount() DWORD mount = m_pkActor->GetRace(); if ((20205 <= mount && 20208 >= mount) || - (20214 == mount) || (20217 == mount) // , ϼ + (20214 == mount) || (20217 == mount) // 난폭한 전갑순순록, 난폭한 전갑암순록 ) return true; - // Ż + // 고급 탈것 if ((20209 <= mount && 20212 >= mount) || - (20215 == mount) || (20218 == mount) || // , ϼ + (20215 == mount) || (20218 == mount) || // 용맹한 전갑순순록, 용맹한 전갑암순록 (20220 == mount) ) return true; @@ -205,7 +205,7 @@ bool CInstanceBase::SHORSE::IsNewMount() } bool CInstanceBase::SHORSE::CanUseSkill() { - // ų 3 ̻̾߸ . + // 마상스킬은 말의 레벨이 3 이상이어야만 함. if (IsMounting()) return 2 < GetLevel(); @@ -303,7 +303,7 @@ bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape) return true; } -// 2004.07.05.myevan.ýź ̴ +// 2004.07.05.myevan.궁신탄영 끼이는 문제 class CActorInstanceBackground : public IBackground { public: @@ -410,7 +410,7 @@ void CInstanceBase::__EnableSkipCollision() { if (__IsMainInstance()) { - TraceError("CInstanceBase::__EnableSkipCollision - ڽ 浹˻罺ŵ Ǹ ȵȴ!!"); + TraceError("CInstanceBase::__EnableSkipCollision - You shouldn't be a conflict check skip yourself!!"); return; } m_GraphicThingInstance.EnableSkipCollision(); @@ -666,7 +666,7 @@ void CInstanceBase::__ClearMainInstance() rkChrMgr.ClearMainInstance(); } -/* ÷̾ ij .*/ +/* 실제 플레이어 캐릭터인지 조사.*/ bool CInstanceBase::__IsMainInstance() { if (this==__GetMainInstancePtr()) @@ -771,10 +771,10 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData) SetMoveSpeed(c_rkCreateData.m_dwMovSpd); SetAttackSpeed(c_rkCreateData.m_dwAtkSpd); - // NOTE : Dress ԰ Alpha ʴ´. + // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다. if (!IsWearingDress()) { - // NOTE : ݵ Affect ʿ ־ + // NOTE : 반드시 Affect 셋팅 윗쪽에 있어야 함 m_GraphicThingInstance.SetAlphaValue(0.0f); m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.5f); } @@ -784,7 +784,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData) SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags); } - // NOTE : ݵ Affect Ŀ ؾ + // NOTE : 반드시 Affect 셋팅 후에 해야 함 AttachTextTail(); RefreshTextTail(); @@ -830,7 +830,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData) __AttachHorseSaddle(); - // ɺ ӽ ڵ, ġ ã + // 길드 심볼을 위한 임시 코드, 적정 위치를 찾는 중 const int c_iGuildSymbolRace = 14200; if (c_iGuildSymbolRace == GetRace()) { @@ -899,7 +899,7 @@ bool CInstanceBase::SetRace(DWORD eRace) BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID) { - // 巹 ԰ ɿ ʰ.. + // 드레스 입고 있을때는 부케외의 장비는 나오지 않게.. if (IsWearingDress()) { const int c_iBouquets[] = @@ -908,7 +908,7 @@ BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID) 50202, // Bouquet for Shaman 50203, 50204, - 0, // #0000545: [M2CN] 巹 + 0, // #0000545: [M2CN] 웨딩 드레스와 장비 착용 문제 }; for (int i = 0; c_iBouquets[i] != 0; ++i) @@ -1189,8 +1189,8 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos { if (__IsMainInstance()) { - //assert(!"CInstanceBase::PushTCPState ÷̾ ڽſ ̵Ŷ ȵȴ!"); - TraceError("CInstanceBase::PushTCPState ÷̾ ڽſ ̵Ŷ ȵȴ!"); + //assert(!"CInstanceBase::PushTCPState \xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE \xC0\xDA\xBD\xC5\xBF\xA1\xB0\xD4 \xC0\xCC\xB5\xBF\xC6\xD0\xC5\xB6\xC0\xBA \xBF\xC0\xB8\xE9 \xBE\xC8\xB5\xC8\xB4\xD9!"); + TraceError("CInstanceBase::PushTCPState Movement packets should not come from the player themselves!"); return; } @@ -1204,7 +1204,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap; m_dwBaseCmdTime = dwCmdTime; - Tracenf("VID[%d] Ʈ [%d]", GetVirtualID(), nNetworkGap); + Tracenf("VID[%d] Network Gap [%d]", GetVirtualID(), nNetworkGap); } */ @@ -1222,7 +1222,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos //int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec(); //if (nApplyGap<-500 || nApplyGap>500) - // Tracenf("VID[%d] NAME[%s] Ʈ [cur:%d ave:%d] ۵ð (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap); + // Tracenf("VID[%d] NAME[%s] Network Gap [cur:%d ave:%d] applyGap (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap); } /* @@ -1313,11 +1313,11 @@ void CInstanceBase::StateProcess() TPixelPosition kPPosDir = kPPosDst - kPPosCur; float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y); - //Tracenf("Ÿ %f", fDirLen); + //Tracenf("Distance %f", fDirLen); if (!__CanProcessNetworkStatePacket()) { - Lognf(0, "vid=%d ¶ ŵ IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown()); + Lognf(0, "vid=%d Skip because you can't move IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown()); return; } @@ -1330,7 +1330,7 @@ void CInstanceBase::StateProcess() { case FUNC_WAIT: { - //Tracenf("%s (%f, %f) -> (%f, %f) Ÿ %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen); + //Tracenf("%s (%f, %f) -> (%f, %f) 남은거리 %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen); if (fDirLen > 1.0f) { //NEW_GetSrcPixelPositionRef() = kPPosCur; @@ -1348,11 +1348,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ǥ"); + //Tracen("Target Stop"); } else { - //Tracen(" "); + //Tracen("Freeze"); m_isGoing = FALSE; @@ -1381,12 +1381,12 @@ void CInstanceBase::StateProcess() if (!IsWalking()) { - //Tracen("Ȱ ʾ ȱ "); + //Tracen("I'm not walking, start walking"); StartWalking(); } else { - //Tracen("̹ ȴ "); + //Tracen("Already walking"); } break; } @@ -1409,7 +1409,7 @@ void CInstanceBase::StateProcess() } else { - //Tracen(" "); + //Tracen("Stopping Standby Attacks"); m_isGoing = FALSE; @@ -1440,11 +1440,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ʹ ־ ̵ "); + //Tracen("Attack after moving too far away"); } else { - //Tracen("븻 "); + //Tracen("Stop normal attacks"); m_isGoing = FALSE; @@ -1456,7 +1456,7 @@ void CInstanceBase::StateProcess() RunNormalAttack(fRotDst); - //Tracen(" "); + //Tracen("Warp Attack due to proximity"); } break; } @@ -1540,11 +1540,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ʹ ־ ̵ "); + //Tracen("Attack after moving too far away"); } else { - //Tracen("ų "); + //Tracen("Stop Skills"); m_isGoing = FALSE; @@ -1556,7 +1556,7 @@ void CInstanceBase::StateProcess() SetRotation(fRotDst); NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false); - //Tracen(" "); + //Tracen("Warp Attack due to proximity"); } } break; @@ -1571,7 +1571,7 @@ void CInstanceBase::MovementProcess() TPixelPosition kPPosCur; NEW_GetPixelPosition(&kPPosCur); - // ǥ̹Ƿ y -ȭؼ Ѵ. + // 렌더링 좌표계이므로 y를 -화해서 더한다. TPixelPosition kPPosNext; { @@ -1604,7 +1604,7 @@ void CInstanceBase::MovementProcess() if (IsWalking()) EndWalking(); - //Tracen("ǥ "); + //Tracen("Stop reaching goals"); m_isGoing = FALSE; @@ -1629,33 +1629,33 @@ void CInstanceBase::MovementProcess() SetAdvancingRotation(fDstRot); - // Ͻð ʾ ʹ ̵ߴٸ.. + // 만약 렌턴시가 늦어 너무 많이 이동했다면.. if (fRestLen < -100.0f) { NEW_SetSrcPixelPosition(kPPosCur); float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef()); SetAdvancingRotation(fDstRot); - //Tracenf("VID %d ⼳ (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen); + //Tracenf("VID %d Over Orientation (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen); - // ̵̶ ߰ Ѵ + // 이동중이라면 다음번에 멈추게 한다 if (FUNC_MOVE == m_kMovAfterFunc.eFunc) { m_kMovAfterFunc.eFunc = FUNC_WAIT; } } - // ߴٸ... + // 도착했다면... else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen) { if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown()) { __DisableSkipCollision(); - //Tracen(" ¶ ŵ"); + //Tracen("Skip the action because you're dead"); m_isGoing = FALSE; - //Tracen("ൿ Ҵ ¶ ŵ"); + //Tracen("Skip subsequent actions because you're dead"); } else { @@ -1737,7 +1737,7 @@ void CInstanceBase::MovementProcess() } else { - //Tracenf("VID %d ų (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot); + //Tracenf("VID %d Skill Attacks (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot); __DisableSkipCollision(); m_isGoing = FALSE; @@ -1751,7 +1751,7 @@ void CInstanceBase::MovementProcess() EndWalking(); } - //Tracenf("VID %d (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking()); + //Tracenf("VID %d Stop (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking()); } break; } @@ -1936,7 +1936,7 @@ void CInstanceBase::Transform() void CInstanceBase::Deform() { - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (!__CanRender()) return; @@ -1960,7 +1960,7 @@ void CInstanceBase::RenderTrace() void CInstanceBase::Render() { - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (!__CanRender()) return; @@ -2252,13 +2252,13 @@ bool CInstanceBase::IsTargetableInstance(CInstanceBase& rkInstVictim) return rkInstVictim.CanPickInstance(); } -// 2004. 07. 07. [levites] - ų Ÿ ٲ ذ ڵ +// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드 bool CInstanceBase::CanChangeTarget() { return m_GraphicThingInstance.CanChangeTarget(); } -// 2004.07.17.levites.isShow ViewFrustumCheck +// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 bool CInstanceBase::CanPickInstance() { if (!__IsInViewFrustum()) @@ -2327,7 +2327,7 @@ BOOL CInstanceBase::IsStone() } -BOOL CInstanceBase::IsGuildWall() //IsBuilding ǹü IsGuildWall 庮( ) +BOOL CInstanceBase::IsGuildWall() //IsBuilding 길드건물전체 IsGuildWall은 담장벽만(문은 제외) { return IsWall(m_dwRace); } @@ -2391,9 +2391,9 @@ BOOL CInstanceBase::IsWoodenDoor() if (m_GraphicThingInstance.IsDoor()) { int vnum = GetVirtualNumber(); - if (vnum == 13000) // + if (vnum == 13000) // 나무문 return true; - else if (vnum >= 30111 && vnum <= 30119) // ͹ + else if (vnum >= 30111 && vnum <= 30119) // 사귀문 return true; else return false; @@ -2447,7 +2447,7 @@ DWORD CInstanceBase::GetVirtualNumber() return m_dwVirtualNumber; } -// 2004.07.17.levites.isShow ViewFrustumCheck +// 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 bool CInstanceBase::__IsInViewFrustum() { return m_GraphicThingInstance.isShow(); @@ -2689,7 +2689,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) { case CItemData::ITEM_TYPE_WEAPON: __ClearWeaponRefineEffect(); - if (refine < 7) // õ 7 ̻ Ʈ ֽϴ. + if (refine < 7) //현재 제련도 7 이상만 이펙트가 있습니다. return 0; switch(pItem->GetSubType()) { @@ -2718,7 +2718,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) case CItemData::ITEM_TYPE_ARMOR: __ClearArmorRefineEffect(); - // Ưȭ Ʈ + // 갑옷 특화 이펙트 if (pItem->GetSubType() == CItemData::ARMOR_BODY) { DWORD vnum = pItem->GetIndex(); @@ -2730,7 +2730,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) } } - if (refine < 7) // õ 7 ̻ Ʈ ֽϴ. + if (refine < 7) //현재 제련도 7 이상만 이펙트가 있습니다. return 0; if (pItem->GetSubType() == CItemData::ARMOR_BODY) @@ -2797,7 +2797,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor) if (IsWalking()) EndWalking(); - // 2004.07.25.myevan.Ʈ ٴ + // 2004.07.25.myevan.이펙트 안 붙는 문제 ////////////////////////////////////////////////////// __ClearAffects(); ////////////////////////////////////////////////////// @@ -2819,7 +2819,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor) RefreshState(CRaceMotionData::NAME_WAIT, TRUE); - // 2004.07.25.myevan.Ʈ ٴ + // 2004.07.25.myevan.이펙트 안 붙는 문제 ///////////////////////////////////////////////// SetAffectFlagContainer(kAffectFlagContainer); ///////////////////////////////////////////////// @@ -2974,9 +2974,9 @@ void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop) void CInstanceBase::RegisterBoundingSphere() { - // Stone DeforomNoSkin ϸ - // ϴ ִϸ̼ ִϸ̼ - // ٿ ڽ ø ̷ ʴ´. + // Stone 일 경우 DeforomNoSkin 을 하면 + // 낙하하는 애니메이션 같은 경우 애니메이션이 + // 바운드 박스에 영향을 미쳐 컬링이 제대로 이루어지지 않는다. if (!IsStone()) { m_GraphicThingInstance.DeformNoSkin(); diff --git a/src/UserInterface/InstanceBase.h b/src/UserInterface/InstanceBase.h index 5295e02f..d508ec17 100644 --- a/src/UserInterface/InstanceBase.h +++ b/src/UserInterface/InstanceBase.h @@ -73,8 +73,8 @@ class CInstanceBase AFFECT_SLOW, AFFECT_STUN, - AFFECT_DUNGEON_READY, // غ - AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE (Ŭ̾Ʈ ø) + AFFECT_DUNGEON_READY, // 던전에서 준비 상태 + AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE 에서 변경(클라이언트에서 컬링되지않음) AFFECT_BUILDING_CONSTRUCTION_SMALL, AFFECT_BUILDING_CONSTRUCTION_LARGE, @@ -85,34 +85,34 @@ class CInstanceBase AFFECT_FISH_MIND, // 13 - AFFECT_JEONGWI, // 14 ȥ - AFFECT_GEOMGYEONG, // 15 ˰ - AFFECT_CHEONGEUN, // 16 õ - AFFECT_GYEONGGONG, // 17 - AFFECT_EUNHYEONG, // 18 - AFFECT_GWIGEOM, // 19 Ͱ - AFFECT_GONGPO, // 20 - AFFECT_JUMAGAP, // 21 ָ - AFFECT_HOSIN, // 22 ȣ - AFFECT_BOHO, // 23 ȣ - AFFECT_KWAESOK, // 24 - AFFECT_HEUKSIN, // 25 żȣ - AFFECT_MUYEONG, // 26 - AFFECT_REVIVE_INVISIBILITY, // 27 Ȱ - AFFECT_FIRE, // 28 - AFFECT_GICHEON, // 29 õ - AFFECT_JEUNGRYEOK, // 30 ¼ - AFFECT_DASH, // 31 뽬 - AFFECT_PABEOP, // 32 Ĺ - AFFECT_FALLEN_CHEONGEUN, // 33 ٿ ׷̵ õ - AFFECT_POLYMORPH, // 34 + AFFECT_JEONGWI, // 14 전귀혼 + AFFECT_GEOMGYEONG, // 15 검경 + AFFECT_CHEONGEUN, // 16 천근추 + AFFECT_GYEONGGONG, // 17 경공술 + AFFECT_EUNHYEONG, // 18 은형법 + AFFECT_GWIGEOM, // 19 귀검 + AFFECT_GONGPO, // 20 공포 + AFFECT_JUMAGAP, // 21 주마갑 + AFFECT_HOSIN, // 22 호신 + AFFECT_BOHO, // 23 보호 + AFFECT_KWAESOK, // 24 쾌속 + AFFECT_HEUKSIN, // 25 흑신수호 + AFFECT_MUYEONG, // 26 무영진 + AFFECT_REVIVE_INVISIBILITY, // 27 부활 무적 + AFFECT_FIRE, // 28 지속 불 + AFFECT_GICHEON, // 29 기천 대공 + AFFECT_JEUNGRYEOK, // 30 증력술 + AFFECT_DASH, // 31 대쉬 + AFFECT_PABEOP, // 32 파법술 + AFFECT_FALLEN_CHEONGEUN, // 33 다운 그레이드 천근추 + AFFECT_POLYMORPH, // 34 폴리모프 AFFECT_WAR_FLAG1, // 35 AFFECT_WAR_FLAG2, // 36 AFFECT_WAR_FLAG3, // 37 AFFECT_CHINA_FIREWORK, // 38 AFFECT_PREMIUM_SILVER, AFFECT_PREMIUM_GOLD, - AFFECT_RAMADAN_RING, // 41 ʽ´ Affect + AFFECT_RAMADAN_RING, // 41 초승달 반지 착용 Affect AFFECT_NUM = 64, @@ -154,31 +154,31 @@ class CInstanceBase NEW_AFFECT_BOW_DISTANCE, // 225 - NEW_AFFECT_EXP_BONUS = 500, // - NEW_AFFECT_ITEM_BONUS = 501, // 尩 + NEW_AFFECT_EXP_BONUS = 500, // 경험의 반지 + NEW_AFFECT_ITEM_BONUS = 501, // 도둑의 장갑 NEW_AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX, NEW_AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT, NEW_AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND, - NEW_AFFECT_MARRIAGE_FAST = 505, // (ݽ), + NEW_AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털 (금슬), NEW_AFFECT_GOLD_BONUS = 506, - NEW_AFFECT_MALL = 510, // Ʈ - NEW_AFFECT_NO_DEATH_PENALTY = 511, // ȣ (ġ гƼ ѹ ش) - NEW_AFFECT_SKILL_BOOK_BONUS = 512, // (å Ȯ 50% ) - NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // ־ (å ) + NEW_AFFECT_MALL = 510, // 몰 아이템 에펙트 + NEW_AFFECT_NO_DEATH_PENALTY = 511, // 용신의 가호 (경험치 패널티를 한번 막아준다) + NEW_AFFECT_SKILL_BOOK_BONUS = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가) + NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // 주안 술서 (책 수련 딜레이 없음) - NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // ( 14 ⺻ ȿ) + NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과) NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517, - NEW_AFFECT_AUTO_HP_RECOVERY = 534, // ڵ HP - NEW_AFFECT_AUTO_SP_RECOVERY = 535, // ڵ SP + NEW_AFFECT_AUTO_HP_RECOVERY = 534, // 자동물약 HP + NEW_AFFECT_AUTO_SP_RECOVERY = 535, // 자동물약 SP NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540, NEW_AFFECT_DRAGON_SOUL_DECK1 = 541, NEW_AFFECT_DRAGON_SOUL_DECK2 = 542, NEW_AFFECT_RAMADAN_ABILITY = 300, - NEW_AFFECT_RAMADAN_RING = 301, // 󸶴 ̺Ʈ Ư ʽ´ + NEW_AFFECT_RAMADAN_RING = 301, // 라마단 이벤트용 특수아이템 초승달의 반지 착용 유무 NEW_AFFECT_NOG_POCKET_ABILITY = 302, @@ -263,7 +263,7 @@ class CInstanceBase TITLE_NONE = 4, }; - enum //Ʒ ȣ ٲ registerEffect ʵ ٲپ Ѵ. + enum //아래 번호가 바뀌면 registerEffect 쪽도 바꾸어 줘야 한다. { EFFECT_REFINED_NONE, @@ -291,8 +291,8 @@ class CInstanceBase EFFECT_BODYARMOR_REFINED8, EFFECT_BODYARMOR_REFINED9, - EFFECT_BODYARMOR_SPECIAL, // 4-2-1 - EFFECT_BODYARMOR_SPECIAL2, // 4-2-2 + EFFECT_BODYARMOR_SPECIAL, // 갑옷 4-2-1 + EFFECT_BODYARMOR_SPECIAL2, // 갑옷 4-2-2 EFFECT_REFINED_NUM, }; @@ -305,7 +305,7 @@ class CInstanceBase DAMAGE_BLOCK = (1<<3), DAMAGE_PENETRATE= (1<<4), DAMAGE_CRITICAL = (1<<5), - // -_- + // 반-_-사 }; enum @@ -359,17 +359,17 @@ class CInstanceBase EFFECT_SUCCESS, EFFECT_FAIL, EFFECT_FR_SUCCESS, - EFFECT_LEVELUP_ON_14_FOR_GERMANY, // 14϶ ( ) - EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,// 15϶ ( ) + EFFECT_LEVELUP_ON_14_FOR_GERMANY, //레벨업 14일때 ( 독일전용 ) + EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 ) EFFECT_PERCENT_DAMAGE1, EFFECT_PERCENT_DAMAGE2, EFFECT_PERCENT_DAMAGE3, EFFECT_AUTO_HPUP, EFFECT_AUTO_SPUP, - EFFECT_RAMADAN_RING_EQUIP, // ʽ´ ߵϴ Ʈ - EFFECT_HALLOWEEN_CANDY_EQUIP, // ҷ ߵϴ Ʈ - EFFECT_HAPPINESS_RING_EQUIP, // ູ ߵϴ Ʈ - EFFECT_LOVE_PENDANT_EQUIP, // ູ ߵϴ Ʈ + EFFECT_RAMADAN_RING_EQUIP, // 초승달 반지 착용 순간에 발동하는 이펙트 + EFFECT_HALLOWEEN_CANDY_EQUIP, // 할로윈 사탕 착용 순간에 발동하는 이펙트 + EFFECT_HAPPINESS_RING_EQUIP, // 행복의 반지 착용 순간에 발동하는 이펙트 + EFFECT_LOVE_PENDANT_EQUIP, // 행복의 반지 착용 순간에 발동하는 이펙트 EFFECT_TEMP, EFFECT_NUM, }; @@ -434,7 +434,7 @@ class CInstanceBase void MountHorse(UINT eRace); void DismountHorse(); - // ũƮ ׽Ʈ Լ. ߿ + // 스크립트용 테스트 함수. 나중에 없에자 void SCRIPT_SetAffect(UINT eAffect, bool isVisible); float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst); @@ -604,7 +604,7 @@ class CInstanceBase BOOL CanAttackHorseLevel(); #ifdef __MOVIE_MODE__ - BOOL IsMovieMode(); // ڿ Ⱥ̴° + BOOL IsMovieMode(); // 운영자용 완전히 안보이는거 #endif bool NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst); @@ -750,8 +750,8 @@ class CInstanceBase //void SetParts(const WORD * c_pParts); void Refresh(DWORD dwMotIndex, bool isLoop); - //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // msԴϴ. - //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // msԴϴ. + //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다. + //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다. float GetDistance(CInstanceBase * pkTargetInst); float GetDistance(const TPixelPosition & c_rPixelPosition); @@ -763,7 +763,7 @@ class CInstanceBase bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos); bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight); - // 2004.07.25.myevan.Ʈ ȳ + // 2004.07.25.myevan.이펙트 안나오는 문제 ///////////////////////////////////////////////////////////// void __ClearAffectFlagContainer(); void __ClearAffects(); @@ -817,7 +817,7 @@ class CInstanceBase void __DisableChangingTCPState(); BOOL __IsEnableTCPProcess(UINT eCurFunc); - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 bool __CanRender(); bool __IsInViewFrustum(); diff --git a/src/UserInterface/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp index 94eb4df7..74ab69c6 100644 --- a/src/UserInterface/InstanceBaseBattle.cpp +++ b/src/UserInterface/InstanceBaseBattle.cpp @@ -49,7 +49,7 @@ void CInstanceBase::ClearFlyTargetInstance() void CInstanceBase::SetFlyTargetInstance(CInstanceBase& rkInstDst) { -// NOTE : NEW_Attack Target ٲܶ ⼭ Ǿ - [levites] +// NOTE : NEW_Attack 때 Target을 바꿀때 여기서 리턴 되어버림 - [levites] // if (isLock()) // return; @@ -188,7 +188,7 @@ bool CInstanceBase::NEW_GetFrontInstance(CInstanceBase ** ppoutTargetInstance, f return true; } -// 2004.07.21.levites - ĺ Ÿ +// 2004.07.21.levites - 비파부 다중 타겟 지원 bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInstanceBase& rkInstTarget, std::vector* pkVct_pkInst) { const float HALF_FAN_ROT_MIN = 20.0f; @@ -198,7 +198,7 @@ bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInsta float fDstDirRot=NEW_GetRotationFromDestInstance(rkInstTarget); - // 2004.07.24.myevan - ĺ ִ + // 2004.07.24.myevan - 비파부 가까이 있는 적부터 공격 std::multimap kMap_pkInstNear; { CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance(); @@ -209,11 +209,11 @@ bool CInstanceBase::NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInsta if (pkInstEach==this) continue; - // 2004.07.25.myevan - 츸 ߰Ѵ + // 2004.07.25.myevan - 적인 경우만 추가한다 if (!IsAttackableInstance(*pkInstEach)) continue; - // 2004.07.21.levites - ĺ Ÿ + // 2004.07.21.levites - 비파부 다중 타겟 지원 if (m_GraphicThingInstance.IsClickableDistanceDestInstance(pkInstEach->m_GraphicThingInstance, fSkillDistance)) { float fEachInstDistance=min(NEW_GetDistanceFromDestInstance(*pkInstEach), HALF_FAN_ROT_MIN_DISTANCE); @@ -253,11 +253,11 @@ bool CInstanceBase::NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std { CInstanceBase* pkInstEach=*i; - // ڽ ߰ ʴ´ + // 자신인 경우 추가하지 않는다 if (pkInstEach==this) continue; - // 츸 ߰Ѵ + // 적인 경우만 추가한다 if (!IsAttackableInstance(*pkInstEach)) continue; @@ -423,7 +423,7 @@ void CInstanceBase::AttackProcess() CInstanceBase* pkInstEach=*i; ++i; - // ΰ InstanceType + // 서로간의 InstanceType 비교 if (!IsAttackableInstance(*pkInstEach)) continue; @@ -465,7 +465,7 @@ void CInstanceBase::RunComboAttack(float fAtkDirRot, DWORD wMotionIndex) m_GraphicThingInstance.ComboAttack(wMotionIndex, fAtkDirRot); } -// ϰ TRUE ΰ ִ +// 리턴값 TRUE가 무엇인가가 있다 BOOL CInstanceBase::CheckAdvancing() { #ifdef __MOVIE_MODE__ @@ -497,7 +497,7 @@ BOOL CInstanceBase::CheckAdvancing() if (m_GraphicThingInstance.CanSkipCollision()) { - //Tracenf("%x VID %d 浹 ŵ", ELTimer_GetMSec(), GetVirtualID()); + //Tracenf("%x VID %d Skip collisions", ELTimer_GetMSec(), GetVirtualID()); return FALSE; } @@ -517,11 +517,11 @@ BOOL CInstanceBase::CheckAdvancing() CActorInstance& rkActorSelf=m_GraphicThingInstance; CActorInstance& rkActorEach=pkInstEach->GetGraphicThingInstanceRef(); - //NOTE : Skil Door Type Collisionüũ Ѵ. + //NOTE : Skil을 쓰더라도 Door Type과는 Collision체크 한다. if( bUsingSkill && !rkActorEach.IsDoor() ) continue; - // Ҽ ִ°? + // 앞으로 전진할수 있는가? if (rkActorSelf.TestActorCollision(rkActorEach)) { uCollisionCount++; @@ -544,13 +544,13 @@ BOOL CInstanceBase::CheckAdvancing() } } - // ʼӼ üũ + // 맵속성 체크 CPythonBackground& rkBG=CPythonBackground::Instance(); const D3DXVECTOR3 & rv3Position = m_GraphicThingInstance.GetPosition(); const D3DXVECTOR3 & rv3MoveDirection = m_GraphicThingInstance.GetMovementVectorRef(); - // NOTE : ̵ Ÿ ũٸ ɰ Ӽ üũ - // 10.0f Ÿ - [levites] + // NOTE : 만약 이동 거리가 크다면 쪼개서 구간 별로 속성을 체크해 본다 + // 현재 설정해 놓은 10.0f는 임의의 거리 - [levites] int iStep = int(D3DXVec3Length(&rv3MoveDirection) / 10.0f); D3DXVECTOR3 v3CheckStep = rv3MoveDirection / float(iStep); D3DXVECTOR3 v3CheckPosition = rv3Position; @@ -695,7 +695,7 @@ void CInstanceBase::Die() if (IsAffect(AFFECT_SPAWN)) __AttachEffect(EFFECT_SPAWN_DISAPPEAR); - // 2004.07.25.Ʈ Ⱥٴ ذ + // 2004.07.25.이펙트 안붙는 문제해결 //////////////////////////////////////// __ClearAffects(); //////////////////////////////////////// @@ -716,4 +716,4 @@ void CInstanceBase::Show() { m_GraphicThingInstance.SetAlphaValue(1.0f); m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.1f); -} \ No newline at end of file +} diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp index 52390165..633ec7ca 100644 --- a/src/UserInterface/InstanceBaseEffect.cpp +++ b/src/UserInterface/InstanceBaseEffect.cpp @@ -135,7 +135,7 @@ void CInstanceBase::ProcessDamage() else if (flag & DAMAGE_CRITICAL) { //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); - //return; ڵ ǥ. + //return; 숫자도 표시. } std::string strDamageType; @@ -162,7 +162,7 @@ void CInstanceBase::ProcessDamage() { strDamageType = "nontarget_"; rdwCRCEft = EFFECT_DAMAGE_NOT_TARGET; - return;// ȵ. + return;//현재 적용 안됨. } else { @@ -178,7 +178,7 @@ void CInstanceBase::ProcessDamage() { if(index > 7) { - TraceError("ProcessDamageѷ ɼ"); + TraceError("ProcessDamage possible infinite loop"); break; } num = damage%10; @@ -258,7 +258,7 @@ CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict( return m_kEffectContainer.m_kDct_dwEftID; } -// Return value boolean ID ٲߴϴ +// Return value 를 boolean 에서 ID 로 바꿉니다 DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey) { SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict(); @@ -481,7 +481,7 @@ bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst) return true; } -// ȮҶ. +//길드전시 상대 길드인지 확인할때. bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID) { DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID); @@ -491,7 +491,7 @@ bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID) return true; } -// 忡 븸 ִ. +//대련 모드에서는 대련 상대만 공격할 수 있다. bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst) { DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst); @@ -510,7 +510,7 @@ bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel) DWORD dwGuildIDSrc=GetGuildID(); DWORD dwGuildIDDst=rkInstSel.GetGuildID(); - if (GetDuelMode()) // ϶ ~_~ + if (GetDuelMode()) //대련 모드일때는 ~_~ return true; return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst); @@ -688,7 +688,7 @@ void CInstanceBase::RefreshTextTailTitle() RefreshTextTail(); } -// 2004.07.25.myevan.Ʈ ٴ ذ +// 2004.07.25.myevan.이펙트 안 붙는 문제 해결 ///////////////////////////////////////////////// void CInstanceBase::__ClearAffectFlagContainer() { @@ -782,7 +782,7 @@ void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible) { if (isVisible) { - // NOTE : Dress ԰ Alpha ʴ´. + // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다. if (IsWearingDress()) return; @@ -798,7 +798,7 @@ void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible) { if (isVisible) { - // NOTE : Dress ԰ Alpha ʴ´. + // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다. if (IsWearingDress()) return; @@ -808,7 +808,7 @@ void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible) } else { - // 2004.10.16.myevan. + // 2004.10.16.myevan.은형법 완전 투명 m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f); m_GraphicThingInstance.HideAllAttachingEffect(); } @@ -861,7 +861,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) return; break; /* - case AFFECT_GWIGEOM: // Ӽ ٲ + case AFFECT_GWIGEOM: // 전기 속성 공격으로 바뀔 예정 if (isVisible) { m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_HIT]); @@ -874,7 +874,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) } return; break; - case AFFECT_HWAYEOM: // ȭ Ӽ ٲ + case AFFECT_HWAYEOM: // 화염 속성 공격으로 바뀔 예정 if (isVisible) { m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_HIT]); @@ -885,7 +885,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]); m_GraphicThingInstance.SetBattleAttachEffect(0); } - // ȭ Ͻ Visible մϴ. + // 화염참은 공격할 때만 일시적으로 Visible 합니다. return; break; */ @@ -904,13 +904,13 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) break; case AFFECT_GYEONGGONG: case AFFECT_KWAESOK: - // , ۶ Attaching ŵϴ. - [levites] + // 경공술, 쾌속은 뛸때만 Attaching 시킵니다. - [levites] if (isVisible) if (!IsWalking()) return; break; case AFFECT_INVISIBILITY: - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (isVisible) { m_GraphicThingInstance.ClearAttachingEffect(); @@ -1028,7 +1028,7 @@ void CInstanceBase::__DetachEffect(DWORD dwEID) DWORD CInstanceBase::__AttachEffect(UINT eEftType) { - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (IsAffect(AFFECT_INVISIBILITY)) return 0; @@ -1043,8 +1043,8 @@ DWORD CInstanceBase::__AttachEffect(UINT eEftType) { std::string & rstrBoneName = ms_astAffectEffectAttachBone[eEftType]; const char * c_szBoneName; - // տ Ѵ. - // ̷ ó س ij Equip Bone Name ٸ . + // 양손에 붙일 때 사용한다. + // 이런 식의 예외 처리를 해놓은 것은 캐릭터 마다 Equip 의 Bone Name 이 다르기 때문. if (0 == rstrBoneName.compare("PART_WEAPON")) { if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName)) diff --git a/src/UserInterface/InstanceBaseMovement.cpp b/src/UserInterface/InstanceBaseMovement.cpp index d55d19c5..eed8ff18 100644 --- a/src/UserInterface/InstanceBaseMovement.cpp +++ b/src/UserInterface/InstanceBaseMovement.cpp @@ -166,7 +166,7 @@ void CInstanceBase::EndWalking(float fBlendingTime) m_isGoing = FALSE; - // Ȱ ߰ ؾ Ѵ + // 걷고 있을때는 무조건 멈추게 해야 한다 if (IsWalking()||!IsAttacked()) { m_GraphicThingInstance.Stop(fBlendingTime); diff --git a/src/UserInterface/Locale_inc_VI2.h b/src/UserInterface/Locale_inc_VI2.h index 3a382159..ea94c9d7 100644 --- a/src/UserInterface/Locale_inc_VI2.h +++ b/src/UserInterface/Locale_inc_VI2.h @@ -1,2 +1,2 @@ -#define LOCALE_SERVICE_VIETNAM // Ʈ -#define LOCALE_SERVICE_VIETNAM_MILD // +#define LOCALE_SERVICE_VIETNAM // 베트남 +#define LOCALE_SERVICE_VIETNAM_MILD // 심의 버전 diff --git a/src/UserInterface/MarkImage.cpp b/src/UserInterface/MarkImage.cpp index 33c42924..90b1659a 100644 --- a/src/UserInterface/MarkImage.cpp +++ b/src/UserInterface/MarkImage.cpp @@ -140,10 +140,10 @@ void CGuildMarkImage::GetData(UINT x, UINT y, UINT width, UINT height, void * da ilCopyPixels(x, y, 0, width, height, 1, IL_BGRA, IL_UNSIGNED_BYTE, data); } -// ̹ = 512x512 -// = ũ 4 x 4 -// ũ = 16 x 12 -// ̹ = 8 x 10 +// 이미지 = 512x512 +// 블럭 = 마크 4 x 4 +// 마크 = 16 x 12 +// 한 이미지의 블럭 = 8 x 10 // SERVER bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage) @@ -154,14 +154,14 @@ bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage) return false; } - // ũ ü ̹ ׸. + // 마크를 전체 이미지에 그린다. DWORD colMark = posMark % MARK_COL_COUNT; DWORD rowMark = posMark / MARK_COL_COUNT; printf("PutMark pos %u %ux%u\n", posMark, colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT); PutData(colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT, SGuildMark::WIDTH, SGuildMark::HEIGHT, pbImage); - // ׷ Ʈ + // 그려진 곳의 블럭을 업데이트 DWORD rowBlock = rowMark / SGuildMarkBlock::MARK_PER_BLOCK_HEIGHT; DWORD colBlock = colMark / SGuildMarkBlock::MARK_PER_BLOCK_WIDTH; @@ -208,7 +208,7 @@ bool CGuildMarkImage::SaveBlockFromCompressedData(DWORD posBlock, const BYTE * p return true; } -void CGuildMarkImage::BuildAllBlocks() // ̹ ü ȭ +void CGuildMarkImage::BuildAllBlocks() // 이미지 전체를 블럭화 { Pixel apxBuf[SGuildMarkBlock::SIZE]; sys_log(0, "CGuildMarkImage::BuildAllBlocks"); diff --git a/src/UserInterface/MarkImage.h b/src/UserInterface/MarkImage.h index 6ea85af0..ce30b3cc 100644 --- a/src/UserInterface/MarkImage.h +++ b/src/UserInterface/MarkImage.h @@ -16,7 +16,7 @@ struct SGuildMark }; /////////////////////////////////////////////////////////////////////////////// - Pixel m_apxBuf[SIZE]; // ̹ + Pixel m_apxBuf[SIZE]; // 실제 이미지 /////////////////////////////////////////////////////////////////////////////// void Clear(); @@ -38,11 +38,11 @@ struct SGuildMarkBlock }; /////////////////////////////////////////////////////////////////////////////// - Pixel m_apxBuf[SIZE]; // ̹ + Pixel m_apxBuf[SIZE]; // 실제 이미지 - BYTE m_abCompBuf[MAX_COMP_SIZE]; // - size_t m_sizeCompBuf; // ũ - DWORD m_crc; // CRC + BYTE m_abCompBuf[MAX_COMP_SIZE]; // 압축된 데이터 + size_t m_sizeCompBuf; // 압축된 크기 + DWORD m_crc; // 압축된 데이터의 CRC /////////////////////////////////////////////////////////////////////////////// DWORD GetCRC() const; @@ -87,9 +87,9 @@ class CGuildMarkImage bool SaveMark(DWORD posMark, BYTE * pbMarkImage); bool DeleteMark(DWORD posMark); - bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // -> Ŭ̾Ʈ + bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트 - DWORD GetEmptyPosition(); // ũ ġ ´. + DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다. void GetBlockCRCList(DWORD * crcList); void GetDiffBlocks(const DWORD * crcList, std::map & mapDiffBlocks); diff --git a/src/UserInterface/MarkManager.cpp b/src/UserInterface/MarkManager.cpp index dcd7c1ae..1ac3494f 100644 --- a/src/UserInterface/MarkManager.cpp +++ b/src/UserInterface/MarkManager.cpp @@ -25,7 +25,7 @@ CGuildMarkManager::CGuildMarkManager() #if _MSC_VER >= 1200 mkdir("mark"); #endif - // mark id . () + // 남은 mark id 셋을 만든다. (서버용) for (DWORD i = 0; i < MAX_IMAGE_COUNT * CGuildMarkImage::MARK_TOTAL_COUNT; ++i) m_setFreeMarkID.insert(i); } @@ -54,7 +54,7 @@ void CGuildMarkManager::SetMarkPathPrefix(const char * prefix) m_pathPrefix = prefix; } -// ũ ε ҷ ( ) +// 마크 인덱스 불러오기 (서버에서만 사용) bool CGuildMarkManager::LoadMarkIndex() { char buf[64]; @@ -182,7 +182,7 @@ DWORD CGuildMarkManager::__AllocMarkID(DWORD guildID) DWORD markID = *it; DWORD imgIdx = markID / CGuildMarkImage::MARK_TOTAL_COUNT; - CGuildMarkImage * pkImage = __GetImage(imgIdx); // ̹ ٸ + CGuildMarkImage * pkImage = __GetImage(imgIdx); // 이미지가 없다면 만들기 위해 if (pkImage && AddMarkIDByGuildID(guildID, markID)) return markID; @@ -271,7 +271,7 @@ void CGuildMarkManager::GetDiffBlocks(DWORD imgIdx, const DWORD * crcList, std:: { mapDiffBlocks.clear(); - // Ŭ̾Ʈ ̹ û . + // 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다. if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx)) { sys_err("invalid idx %u", imgIdx); @@ -298,7 +298,7 @@ bool CGuildMarkManager::SaveBlockFromCompressedData(DWORD imgIdx, DWORD posBlock // CLIENT bool CGuildMarkManager::GetBlockCRCList(DWORD imgIdx, DWORD * crcList) { - // Ŭ̾Ʈ ̹ û . + // 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다. if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx)) { sys_err("invalid idx %u", imgIdx); diff --git a/src/UserInterface/MarkManager.h b/src/UserInterface/MarkManager.h index f8fa1427..90df0579 100644 --- a/src/UserInterface/MarkManager.h +++ b/src/UserInterface/MarkManager.h @@ -32,11 +32,11 @@ class CGuildMarkManager : public singleton // void SetMarkPathPrefix(const char * prefix); - bool LoadMarkIndex(); // ũ ε ҷ ( ) - bool SaveMarkIndex(); // ũ ε ϱ + bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용) + bool SaveMarkIndex(); // 마크 인덱스 저장하기 - void LoadMarkImages(); // ũ ̹ ҷ - void SaveMarkImage(DWORD imgIdx); // ũ ̹ + void LoadMarkImages(); // 모든 마크 이미지를 불러오기 + void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장 bool GetMarkImageFilename(DWORD imgIdx, std::string & path) const; bool AddMarkIDByGuildID(DWORD guildID, DWORD markID); diff --git a/src/UserInterface/MovieMan.cpp b/src/UserInterface/MovieMan.cpp index a74a1bb2..bea4eab2 100644 --- a/src/UserInterface/MovieMan.cpp +++ b/src/UserInterface/MovieMan.cpp @@ -55,7 +55,7 @@ void CMovieMan::FillRect( RECT& fillRect, DWORD fillColor ) if (fillRect.bottom == fillRect.top || fillRect.left == fillRect.right) { - // ä ʿ + // 채울 필요 없음 return; } @@ -83,7 +83,7 @@ inline void CMovieMan::GDIFillRect( RECT& fillRect, DWORD fillColor ) } //---------------------------------------------------------------------------------------------------- -// Ư ǽ GDI ȭ鿡 Ѹ +// 특정 서피스를 GDI로 바탕화면에 뿌린다 // inline void CMovieMan::GDIBlt(IDirectDrawSurface *pSrcSurface, RECT *pDestRect) { @@ -105,7 +105,7 @@ void CMovieMan::PlayLogo(const char *pcszName) void CMovieMan::PlayIntro() { - // Ʈ Ű Է̳ 콺 Ŭ ŵ + // 인트로 영상은 키보드 입력이나 마우스 클릭으로 스킵 가능 PlayMovie( INTRO_FILE, MOVIEMAN_SKIPPABLE_YES, MOVIEMAN_POSTEFFECT_FADEOUT, 0xFFFFFF ); } @@ -146,7 +146,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons return FALSE; } - // 32Ʈ ˾ƺ + // 32비트인지 알아본다 ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_PIXELFORMAT; @@ -178,12 +178,12 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons hr = pDDStream->GetFormat(&ddsd, NULL, NULL, NULL); if (SUCCEEDED(hr)) { - // ũ ũ⸦ + // 동영상 크기와 윈도우 크기를 기준으로 동영상 재생될 적당한 영역을 설정 m_movieWidth = ddsd.dwWidth; m_movieHeight = ddsd.dwHeight; - // ۴ RGB32 PrimarySurface ٸ - // GDI fallback ؼ StretchBlt Ѵ + // 백버퍼는 무조건 RGB32로 만들고 PrimarySurface와 형식이 다르면 + // GDI fallback 해서 StretchBlt 한다 DDSURFACEDESC ddsdBackSurface; ZeroMemory(&ddsdBackSurface, sizeof(ddsdBackSurface)); ddsdBackSurface.ddpfPixelFormat.dwSize = sizeof(ddsdBackSurface.ddpfPixelFormat); @@ -228,7 +228,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons pDD->Release(); - // Ű, 콺 + // 키보드, 마우스 버퍼 비우기 MSG msg; while (PeekMessage(&msg, hWnd, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)); while (PeekMessage(&msg, hWnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE)); @@ -237,7 +237,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons } //---------------------------------------------------------------------------------------------------- -// Screen ǥ ȯ +// 메인 윈도우의 Screen 좌표를 반환 // void CMovieMan::GetWindowRect(RECT& windowRect) { @@ -256,12 +256,12 @@ void CMovieMan::GetWindowRect(RECT& windowRect) // GetClientRect( hWnd, &windowRect ); - // clientRect ClientToScreen ϴ Ͱ + // clientRect를 ClientToScreen 하는 것과 같음 OffsetRect( &windowRect, p.x, p.y ); } //---------------------------------------------------------------------------------------------------- -// 쿡 ä RECT ȯ(/ ) +// 메인 윈도우에 동영상을 꽉채우는 RECT 반환(가로/세로 비율 유지) // void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect) { @@ -290,7 +290,7 @@ void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect) } //---------------------------------------------------------------------------------------------------- -// ȭ ƴ , ׻ 2 RECT ǥ +// 화면 위에서 동영상이 아닌 검은색 영역, 항상 2개의 RECT로 표현 가능 // void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT& lowerRect) { @@ -299,20 +299,20 @@ void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT& if (m_movieWidth > m_movieHeight) { - // Ʒ ΰ + // 위아래 두개 SetRect(&upperRect, windowRect.left, windowRect.top, windowRect.right, movieRect.top); SetRect(&lowerRect, windowRect.left, movieRect.bottom, windowRect.right, windowRect.bottom); } else { - // ¿ ΰ + // 좌우 두개 SetRect(&upperRect, windowRect.left, windowRect.top, movieRect.left, windowRect.bottom); SetRect(&lowerRect, movieRect.right, windowRect.top, windowRect.right, windowRect.bottom); } } //---------------------------------------------------------------------------------------------------- -// Ư ǽ Blocking ׸ +// 특정 서피스에 Blocking으로 동영상을 그린다 // HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDrawMediaStream *pDDStream, IMultiMediaStream *pMMStream, bool bSkipAllowed, int nPostEffectID, DWORD dwPostEffectData) { @@ -322,7 +322,7 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr HRESULT hr = pDDStream->CreateSample(pSurface, NULL, 0, &pSample); if (SUCCEEDED(hr)) { - // ѹ ĥش + // 최초 한번 검은색으로 배경을 칠해준다 RECT movieRect; RECT upperRect, lowerRect; CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); @@ -333,21 +333,21 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr pMMStream->SetState(STREAMSTATE_RUN); while (pSample->Update(0, NULL, NULL, NULL) == S_OK) { - // ߾ ׸ + // 윈도우 중앙을 기준으로 꽉차게 그린다 CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL))) { GDIBlt(pSurface, &movieRect); } - // ߰ ŵ ϸ ŰESC/콺 Է½ Ż + // 중간에 스킵 가능하면 키보드ESC/마우스 입력시 탈출 if (bSkipAllowed && (KEY_DOWN(VK_LBUTTON) || KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))) { break; } } - // ÿ 2 ̵ƿ + // 동영상 재생 종료시에 2초 동안 페이드아웃 switch(nPostEffectID) { case MOVIEMAN_POSTEFFECT_FADEOUT: @@ -393,15 +393,15 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea if (ext == "mpg") { // 2007-08-01, nuclei - // MPG Ѵٰ ϰ Ŵ ڵ - // ܺ ڵ(ffdshow ) ʵ Ѵ - // (Ÿ ϵ ڵ ) + // MPG만 재생한다고 가정하고 매뉴얼로 각종 코덱을 연결해 + // 외부 코덱(ffdshow 등)에 영향을 받지 않도록 한다 + // (기타 파일도 재생은 되지만 코덱에 영향을 받을 수 있음) hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_MPEG1Splitter, CLSID_CMpegVideoCodec, CLSID_CMpegAudioCodec); } else if (ext == "mp43") { // 2007-08-12, nuclei - // MPEG-4, MP3 ڵ ̿ AVI ߰(Ȯڴ .mp43 ؾ) + // MPEG-4, MP3 코덱을 이용한 AVI의 재생 추가(확장자는 .mp43으로 해야함) hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_AviSplitter, CLSID_MP4VideoCodec, CLSID_MP3AudioCodec); } else @@ -409,7 +409,7 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea hr = pAMStream->OpenFile(wPath, 0); } - // hr S_OK + // 재생 성공시 hr은 S_OK if (SUCCEEDED(hr)) { pAMStream->QueryInterface(IID_IMultiMediaStream, (void**) ppMMStream); @@ -421,11 +421,11 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea } //---------------------------------------------------------------------------------------------------- -// Ư ȭ ų ο +// 특정색으로 화면이 밝아지거나 어두워짐 // HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fadeOutDuration, DWORD fadeOutColor) { - // Lock ɱ ʱȭ + // Lock 걸기 위해 초기화 DDSURFACEDESC lockedSurfaceDesc; int *pCopiedSrcSurBuf = NULL; @@ -441,7 +441,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad return hr; } - // 1ȸ ǽ ϰ 纻 FadeOut óѴ + // 최초 1회에 서피스 복사하고 복사본에 FadeOut 처리한다 if (!pCopiedSrcSurBuf) { if (!(pCopiedSrcSurBuf = (int*)malloc((LONG)lockedSurfaceDesc.lPitch * m_movieHeight))) @@ -452,7 +452,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad CopyMemory(pCopiedSrcSurBuf, lockedSurfaceDesc.lpSurface, (LONG)lockedSurfaceDesc.lPitch * m_movieHeight); } - // ȼ ö(32Ʈ) + // 픽셀 플랏팅(32비트) int *pSrcSurfaceBuf = pCopiedSrcSurBuf; int *pDestSurfaceBuf = (int*)lockedSurfaceDesc.lpSurface; @@ -476,7 +476,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad } pSurface->Unlock(lockedSurfaceDesc.lpSurface); - // ٲ ̹ ׸ + // 색상이 바뀐 동영상 이미지 그리기 RECT movieRect; CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL))) @@ -484,23 +484,23 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad GDIBlt(pSurface, &movieRect); } - // Ǵ ĭ ä + // 위 또는 좌측 빈칸 색채우기 RECT upperRect, lowerRect; CalcBackgroundRect(movieRect, upperRect, lowerRect); FillRect(upperRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue); FillRect(lowerRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue); - // + // 음량 조절 if (m_pBasicAudio) { m_pBasicAudio->put_Volume((long)(-10000 * fadeProgress)); } } - // ޸ + // 메모리 해제 free(pCopiedSrcSurBuf); - // 1.0 FadeOut ȭ ׸ + // 마지막엔 1.0을 기준으로 완전히 FadeOut된 화면 그리기 RECT windowRect; GetWindowRect(windowRect); FillRect(windowRect, fadeOutColor); @@ -509,7 +509,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad } //---------------------------------------------------------------------------------------------------- -// MPEG-1 ܺ ڵ ϴ Լ +// MPEG-1 비디오 파일을 외부 코덱 간섭없이 렌더링하는 함수 // HRESULT CMovieMan::BuildFilterGraphManually( WCHAR* wpFilename, @@ -537,8 +537,8 @@ HRESULT CMovieMan::BuildFilterGraphManually( CoCreateInstance(clsidVideoCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pVideoFilter); CoCreateInstance(clsidAudioCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pAudioFilter); - // MP43 ڴ ٸ DMO ڵ ־ش - // MONSTER ߰ߵ ̽(ڵ ) + // 만약 MP43 디코더가 없다면 DMO 코덱을 대신 넣어준다 + // MONSTER팀에서 발견된 케이스(코덱을 누군가 강제로 삭제) if (!pVideoFilter && IsEqualGUID(clsidVideoCodec, CLSID_MP4VideoCodec)) { // Create the DMO Wrapper filter. @@ -580,7 +580,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pOutPin->Release(); if (SUCCEEDED(hr)) { - // Ŀ Output ɵ Ÿ + // 연결후에만 Output 핀들이 나타난다 pSplitterFilter->EnumPins(&pEnumPins); PIN_INFO pinInfo; while( SUCCEEDED(pEnumPins->Next(1, &pInPin, NULL)) ) @@ -589,7 +589,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pinInfo.pFilter->Release(); if (pinInfo.dir == PINDIR_OUTPUT) { - // Pin - + // Pin의 순서를 비디오-오디오로 가정 pSplitterVideoOutPin = pInPin; pEnumPins->Next(1, &pSplitterAudioOutPin, NULL); break; @@ -606,12 +606,12 @@ HRESULT CMovieMan::BuildFilterGraphManually( hr = pGraphBuilder->Connect(pSplitterVideoOutPin, pInPin); if (SUCCEEDED(hr)) { - // + // 비디오 렌더 hr = pGraphBuilder->Render(pOutPin); pInPin->Release(); pOutPin->Release(); - // Ͽ ִ + // 오디오는 파일에 따라 없을 수도 있다 if (pSplitterAudioOutPin && pAudioFilter) { pAudioFilter->EnumPins(&pEnumPins); @@ -619,7 +619,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pEnumPins->Next(1, &pOutPin, NULL); pEnumPins->Release(); pGraphBuilder->Connect(pSplitterAudioOutPin, pInPin); - // ص Ѿ + // 오디오 렌더는 실패해도 넘어갈 수 있음 pGraphBuilder->Render(pOutPin); pInPin->Release(); pOutPin->Release(); @@ -627,7 +627,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( } } - // + // 해제 //#ifdef _DEBUG // RemoveFromRot(dwRegister); //#endif diff --git a/src/UserInterface/MovieMan.h b/src/UserInterface/MovieMan.h index 54acfc9d..d089c4fa 100644 --- a/src/UserInterface/MovieMan.h +++ b/src/UserInterface/MovieMan.h @@ -1,11 +1,11 @@ #pragma once -// ̵ƿ () +// 페이드아웃 길이(초) #define MOVIEMAN_FADE_DURATION 1300 #define MOVIEMAN_SKIPPABLE_YES true #define MOVIEMAN_POSTEFFECT_FADEOUT 1 -// DX 7.0 +// 동영상 재생에 DX 7.0 사용 struct IDirectDraw; struct IDirectDrawSurface; struct IDirectDrawMediaStream; diff --git a/src/UserInterface/NetworkActorManager.cpp b/src/UserInterface/NetworkActorManager.cpp index f3d8c4cc..7b7806cf 100644 --- a/src/UserInterface/NetworkActorManager.cpp +++ b/src/UserInterface/NetworkActorManager.cpp @@ -273,7 +273,7 @@ bool CNetworkActorManager::__IsVisibleActor(const SNetworkActorData& c_rkNetActo if (__IsMainActorVID(c_rkNetActorData.m_dwVID)) return true; - // 2004.08.02.myevan.׻ ̱ ÷ + // 2004.08.02.myevan.항상 보이기 플래그 if (c_rkNetActorData.m_kAffectFlags.IsSet(CInstanceBase::AFFECT_SHOW_ALWAYS)) return true; @@ -293,7 +293,7 @@ bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY) LONG len = (LONG)sqrt(double(dx * dx + dy * dy)); extern int CHAR_STAGE_VIEW_BOUND; - if (len < CHAR_STAGE_VIEW_BOUND) // Ÿ cm + if (len < CHAR_STAGE_VIEW_BOUND) // 거리제한 cm return true; return false; diff --git a/src/UserInterface/NetworkActorManager.h b/src/UserInterface/NetworkActorManager.h index 629b967c..577feba8 100644 --- a/src/UserInterface/NetworkActorManager.h +++ b/src/UserInterface/NetworkActorManager.h @@ -90,7 +90,7 @@ struct SNetworkUpdateActorData short m_sAlignment; BYTE m_byPKMode; DWORD m_dwMountVnum; - DWORD m_dwStateFlags; // Create ̴ + DWORD m_dwStateFlags; // 본래 Create 때만 쓰이는 변수임 CAffectFlagContainer m_kAffectFlags; SNetworkUpdateActorData() diff --git a/src/UserInterface/Packet.h b/src/UserInterface/Packet.h index 048aee1f..e86e61d4 100644 --- a/src/UserInterface/Packet.h +++ b/src/UserInterface/Packet.h @@ -4,18 +4,18 @@ #include "Hackshield.h" #include METIN2HS_INCLUDE_ANTICPXSVR #else -#pragma pack(push) // alignment +#pragma pack(push) //기존 alignment 저장 #pragma pack(8) #define ANTICPX_TRANS_BUFFER_MAX 400 typedef struct _AHNHS_TRANS_BUFFER { - unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* ۼ Ŷ ִ ũ */]; + unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */]; unsigned short nLength; } AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER; -#pragma pack(pop) // alignment . +#pragma pack(pop) // 기존 alignment 복구. #endif /* !USE_AHNLAB_HACKSHIELD */ #include "../gamelib/RaceData.h" @@ -30,8 +30,8 @@ enum HEADER_CG_LOGIN = 1, HEADER_CG_ATTACK = 2, HEADER_CG_CHAT = 3, - HEADER_CG_PLAYER_CREATE = 4, // ο ÷̾ - HEADER_CG_PLAYER_DESTROY = 5, // ÷̾ . + HEADER_CG_PLAYER_CREATE = 4, // 새로운 플래이어를 생성 + HEADER_CG_PLAYER_DESTROY = 5, // 플래이어를 삭제. HEADER_CG_PLAYER_SELECT = 6, HEADER_CG_CHARACTER_MOVE = 7, HEADER_CG_SYNC_POSITION = 8, @@ -95,8 +95,8 @@ enum HEADER_CG_MESSENGER = 67, //HEADER_BLANK68 = 68, HEADER_CG_MALL_CHECKOUT = 69, - HEADER_CG_SAFEBOX_CHECKIN = 70, // â ִ´. - HEADER_CG_SAFEBOX_CHECKOUT = 71, // â ´. + HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣는다. + HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다. HEADER_CG_PARTY_INVITE = 72, HEADER_CG_PARTY_INVITE_ANSWER = 73, HEADER_CG_PARTY_REMOVE = 74, @@ -144,7 +144,7 @@ enum HEADER_CG_GUILD_SYMBOL_CRC = 113, HEADER_CG_SCRIPT_SELECT_ITEM = 114, HEADER_CG_LOGIN4 = 115, - HEADER_CG_LOGIN5_OPENID = 116, //OpenID : Ű . + HEADER_CG_LOGIN5_OPENID = 116, //OpenID : 실행시 받은 인증키를 서버에 보냄. HEADER_CG_RUNUP_MATRIX_ANSWER = 201, HEADER_CG_NEWCIBN_PASSPOD_ANSWER = 202, @@ -188,17 +188,17 @@ enum HEADER_GC_CHANGE_SPEED = 18, HEADER_GC_CHARACTER_UPDATE = 19, #if defined(GAIDEN) - HEADER_GC_ITEM_DEL = 20, // â ߰ - HEADER_GC_ITEM_SET = 21, // â ߰ + HEADER_GC_ITEM_DEL = 20, // 아이템 창에 추가 + HEADER_GC_ITEM_SET = 21, // 아이템 창에 추가 #else - HEADER_GC_ITEM_SET = 20, // â ߰ - HEADER_GC_ITEM_SET2 = 21, // â ߰ + HEADER_GC_ITEM_SET = 20, // 아이템 창에 추가 + HEADER_GC_ITEM_SET2 = 21, // 아이템 창에 추가 #endif - HEADER_GC_ITEM_USE = 22, // ( 鿡 ֱ ) - HEADER_GC_ITEM_DROP = 23, // - HEADER_GC_ITEM_UPDATE = 25, // ġ Ʈ - HEADER_GC_ITEM_GROUND_ADD = 26, // ٴڿ ߰ - HEADER_GC_ITEM_GROUND_DEL = 27, // ٴڿ + HEADER_GC_ITEM_USE = 22, // 아이템 사용 (주위 사람들에게 보여주기 위해) + HEADER_GC_ITEM_DROP = 23, // 아이템 버리기 + HEADER_GC_ITEM_UPDATE = 25, // 아이템 수치 업데이트 + HEADER_GC_ITEM_GROUND_ADD = 26, // 바닥에 아이템 추가 + HEADER_GC_ITEM_GROUND_DEL = 27, // 바닥에서 아이템 삭제 HEADER_GC_QUICKSLOT_ADD = 28, HEADER_GC_QUICKSLOT_DEL = 29, HEADER_GC_QUICKSLOT_SWAP = 30, @@ -386,13 +386,13 @@ enum PLAYER_PER_ACCOUNT3 = 3, PLAYER_PER_ACCOUNT4 = 4, - PLAYER_ITEM_SLOT_MAX_NUM = 20, // ÷̾ Դ  . + PLAYER_ITEM_SLOT_MAX_NUM = 20, // 플래이어의 슬롯당 들어가는 갯수. QUICKSLOT_MAX_LINE = 4, - QUICKSLOT_MAX_COUNT_PER_LINE = 8, // Ŭ̾Ʈ + QUICKSLOT_MAX_COUNT_PER_LINE = 8, // 클라이언트 임의 결정값 QUICKSLOT_MAX_COUNT = QUICKSLOT_MAX_LINE * QUICKSLOT_MAX_COUNT_PER_LINE, - QUICKSLOT_MAX_NUM = 36, // ִ + QUICKSLOT_MAX_NUM = 36, // 서버와 맞춰져 있는 값 SHOP_HOST_ITEM_MAX_NUM = 40, @@ -465,7 +465,7 @@ typedef struct packet_mark_idxlist BYTE header; DWORD bufSize; WORD count; - //ڿ size * (WORD + WORD)ŭ + //뒤에 size * (WORD + WORD)만큼 데이터 붙음 } TPacketGCMarkIDXList; typedef struct packet_mark_block @@ -474,7 +474,7 @@ typedef struct packet_mark_block DWORD bufSize; BYTE imgIdx; DWORD count; - // ڿ 64 x 48 x ȼũ(4Ʈ) = 12288ŭ + // 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음 } TPacketGCMarkBlock; typedef struct command_symbol_upload @@ -543,7 +543,7 @@ typedef struct command_login char pwd[PASS_MAX_NUM + 1]; } TPacketCGLogin; -// start - Ŷ +// start - 권한 서버 접속을 위한 패킷들 typedef struct command_login2 { BYTE header; @@ -566,7 +566,7 @@ typedef struct command_login5 char authKey[OPENID_AUTHKEY_LEN + 1]; DWORD adwClientKey[4]; } TPacketCGLogin5; -// end - Ŷ +// end - 권한 서버 접속을 위한 패킷들 typedef struct command_direct_enter { @@ -585,8 +585,8 @@ typedef struct command_player_select typedef struct command_attack { BYTE header; - BYTE bType; // - DWORD dwVictimVID; // VID + BYTE bType; // 공격 유형 + DWORD dwVictimVID; // 적 VID BYTE bCRCMagicCubeProcPiece; BYTE bCRCMagicCubeFilePiece; } TPacketCGAttack; @@ -1014,9 +1014,9 @@ typedef struct SShopItemTable DWORD vnum; BYTE count; - TItemPos pos; // PC ̿ - DWORD price; // PC ̿ - BYTE display_pos; // PC ̿, ġ. + TItemPos pos; // PC 상점에만 이용 + DWORD price; // PC 상점에만 이용 + BYTE display_pos; // PC 상점에만 이용, 보일 위치. } TShopItemTable; typedef struct SPacketCGMyShop @@ -1116,18 +1116,18 @@ typedef struct command_script_select_item // From Server enum EPhase { - PHASE_CLOSE, // (Ǵ ) - PHASE_HANDSHAKE, // Ǽ..;; - PHASE_LOGIN, // α - PHASE_SELECT, // ij ȭ - PHASE_LOADING, // ε ȭ - PHASE_GAME, // ȭ - PHASE_DEAD, // ׾ .. ( ȿ ִ ..) + PHASE_CLOSE, // 끊기는 상태 (또는 끊기 전 상태) + PHASE_HANDSHAKE, // 악수..;; + PHASE_LOGIN, // 로그인 중 + PHASE_SELECT, // 캐릭터 선택 화면 + PHASE_LOADING, // 선택 후 로딩 화면 + PHASE_GAME, // 게임 화면 + PHASE_DEAD, // 죽었을 때.. (게임 안에 있는 것일 수도..) - PHASE_DBCLIENT_CONNECTING, // - PHASE_DBCLIENT, // - PHASE_P2P, // - PHASE_AUTH, // α + PHASE_DBCLIENT_CONNECTING, // 서버용 + PHASE_DBCLIENT, // 서버용 + PHASE_P2P, // 서버용 + PHASE_AUTH, // 로그인 인증 용 }; typedef struct packet_phase @@ -1136,7 +1136,7 @@ typedef struct packet_phase BYTE phase; } TPacketGCPhase; -typedef struct packet_blank // Ŷ. +typedef struct packet_blank // 공백패킷. { BYTE header; } TPacketGCBlank; @@ -1273,7 +1273,7 @@ enum EPKModes PK_MODE_MAX_NUM, }; -// 2004.11.20.myevan.CRaceData::PART_MAX_NUM ϰ - ϴ°Ͱ ġ +// 2004.11.20.myevan.CRaceData::PART_MAX_NUM 사용안하게 수정 - 서버에서 사용하는것과 일치하지 않음 enum ECharacterEquipmentPart { CHR_EQUIPPART_ARMOR, @@ -1293,7 +1293,7 @@ typedef struct packet_char_additional_info BYTE bEmpire; DWORD dwGuildID; DWORD dwLevel; - short sAlignment; //ġ + short sAlignment; //선악치 BYTE bPKMode; DWORD dwMountVnum; } TPacketGCCharacterAdditionalInfo; @@ -1405,14 +1405,14 @@ typedef struct packet_GlobalTime enum EChatType { - CHAT_TYPE_TALKING, /* ׳ ä */ - CHAT_TYPE_INFO, /* ( , ġ . ) */ - CHAT_TYPE_NOTICE, /* */ - CHAT_TYPE_PARTY, /* Ƽ */ - CHAT_TYPE_GUILD, /* 帻 */ - CHAT_TYPE_COMMAND, /* */ - CHAT_TYPE_SHOUT, /* ġ */ - CHAT_TYPE_WHISPER, // ʹ ʴ Only Client Enum + CHAT_TYPE_TALKING, /* 그냥 채팅 */ + CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */ + CHAT_TYPE_NOTICE, /* 공지사항 */ + CHAT_TYPE_PARTY, /* 파티말 */ + CHAT_TYPE_GUILD, /* 길드말 */ + CHAT_TYPE_COMMAND, /* 명령 */ + CHAT_TYPE_SHOUT, /* 외치기 */ + CHAT_TYPE_WHISPER, // 서버와는 연동되지 않는 Only Client Enum CHAT_TYPE_BIG_NOTICE, CHAT_TYPE_MAX_NUM, }; @@ -1426,7 +1426,7 @@ typedef struct packet_chatting BYTE bEmpire; } TPacketGCChat; -typedef struct packet_whisper // Ŷ +typedef struct packet_whisper // 가변 패킷 { BYTE bHeader; WORD wSize; @@ -1513,57 +1513,57 @@ enum EPointTypes POINT_MAX_HP, // 6 POINT_SP, // 7 POINT_MAX_SP, // 8 - POINT_STAMINA, // 9 ׹̳ - POINT_MAX_STAMINA, // 10 ִ ׹̳ + POINT_STAMINA, // 9 스테미너 + POINT_MAX_STAMINA, // 10 최대 스테미너 POINT_GOLD, // 11 - POINT_ST, // 12 ٷ - POINT_HT, // 13 ü - POINT_DX, // 14 ø - POINT_IQ, // 15 ŷ - POINT_ATT_POWER, // 16 ݷ - POINT_ATT_SPEED, // 17 ݼӵ - POINT_EVADE_RATE, // 18 ȸ - POINT_MOV_SPEED, // 19 ̵ӵ - POINT_DEF_GRADE, // 20 - POINT_CASTING_SPEED, // 21 ֹӵ (ٿŸ*100) / (100 + ̰) = ٿ Ÿ - POINT_MAGIC_ATT_GRADE, // 22 ݷ - POINT_MAGIC_DEF_GRADE, // 23 - POINT_EMPIRE_POINT, // 24 - POINT_LEVEL_STEP, // 25 ܰ.. (1 2 3 , 4 Ǹ ) - POINT_STAT, // 26 ɷġ ø ִ - POINT_SUB_SKILL, // 27 ų Ʈ - POINT_SKILL, // 28 Ƽ ų Ʈ -// POINT_SKILL_PASV, // 27 нú ø ִ -// POINT_SKILL_ACTIVE, // 28 Ƽ ų Ʈ - POINT_MIN_ATK, // 29 ּ ı - POINT_MAX_ATK, // 30 ִ ı - POINT_PLAYTIME, // 31 ÷̽ð - POINT_HP_REGEN, // 32 HP ȸ - POINT_SP_REGEN, // 33 SP ȸ + POINT_ST, // 12 근력 + POINT_HT, // 13 체력 + POINT_DX, // 14 민첩성 + POINT_IQ, // 15 정신력 + POINT_ATT_POWER, // 16 공격력 + POINT_ATT_SPEED, // 17 공격속도 + POINT_EVADE_RATE, // 18 회피율 + POINT_MOV_SPEED, // 19 이동속도 + POINT_DEF_GRADE, // 20 방어등급 + POINT_CASTING_SPEED, // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임 + POINT_MAGIC_ATT_GRADE, // 22 마법공격력 + POINT_MAGIC_DEF_GRADE, // 23 마법방어력 + POINT_EMPIRE_POINT, // 24 제국점수 + POINT_LEVEL_STEP, // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업) + POINT_STAT, // 26 능력치 올릴 수 있는 개수 + POINT_SUB_SKILL, // 27 보조 스킬 포인트 + POINT_SKILL, // 28 액티브 스킬 포인트 +// POINT_SKILL_PASV, // 27 패시브 기술 올릴 수 있는 개수 +// POINT_SKILL_ACTIVE, // 28 액티브 스킬 포인트 + POINT_MIN_ATK, // 29 최소 파괴력 + POINT_MAX_ATK, // 30 최대 파괴력 + POINT_PLAYTIME, // 31 플레이시간 + POINT_HP_REGEN, // 32 HP 회복률 + POINT_SP_REGEN, // 33 SP 회복률 - POINT_BOW_DISTANCE, // 34 Ȱ Ÿ ġ (meter) + POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter) - POINT_HP_RECOVERY, // 35 ü ȸ - POINT_SP_RECOVERY, // 36 ŷ ȸ + POINT_HP_RECOVERY, // 35 체력 회복 증가량 + POINT_SP_RECOVERY, // 36 정신력 회복 증가량 - POINT_POISON_PCT, // 37 Ȯ - POINT_STUN_PCT, // 38 Ȯ - POINT_SLOW_PCT, // 39 ο Ȯ - POINT_CRITICAL_PCT, // 40 ũƼ Ȯ - POINT_PENETRATE_PCT, // 41 Ÿ Ȯ - POINT_CURSE_PCT, // 42 Ȯ + POINT_POISON_PCT, // 37 독 확률 + POINT_STUN_PCT, // 38 기절 확률 + POINT_SLOW_PCT, // 39 슬로우 확률 + POINT_CRITICAL_PCT, // 40 크리티컬 확률 + POINT_PENETRATE_PCT, // 41 관통타격 확률 + POINT_CURSE_PCT, // 42 저주 확률 - POINT_ATTBONUS_HUMAN, // 43 ΰ - POINT_ATTBONUS_ANIMAL, // 44 % - POINT_ATTBONUS_ORC, // 45 Ϳ % - POINT_ATTBONUS_MILGYO, // 46 б % - POINT_ATTBONUS_UNDEAD, // 47 ü % - POINT_ATTBONUS_DEVIL, // 48 (Ǹ) % - POINT_ATTBONUS_INSECT, // 49 - POINT_ATTBONUS_FIRE, // 50 ȭ - POINT_ATTBONUS_ICE, // 51 - POINT_ATTBONUS_DESERT, // 52 縷 + POINT_ATTBONUS_HUMAN, // 43 인간에게 강함 + POINT_ATTBONUS_ANIMAL, // 44 동물에게 데미지 % 증가 + POINT_ATTBONUS_ORC, // 45 웅귀에게 데미지 % 증가 + POINT_ATTBONUS_MILGYO, // 46 밀교에게 데미지 % 증가 + POINT_ATTBONUS_UNDEAD, // 47 시체에게 데미지 % 증가 + POINT_ATTBONUS_DEVIL, // 48 마귀(악마)에게 데미지 % 증가 + POINT_ATTBONUS_INSECT, // 49 벌레족 + POINT_ATTBONUS_FIRE, // 50 화염족 + POINT_ATTBONUS_ICE, // 51 빙설족 + POINT_ATTBONUS_DESERT, // 52 사막족 POINT_ATTBONUS_UNUSED0, // 53 UNUSED0 POINT_ATTBONUS_UNUSED1, // 54 UNUSED1 POINT_ATTBONUS_UNUSED2, // 55 UNUSED2 @@ -1575,42 +1575,42 @@ enum EPointTypes POINT_ATTBONUS_UNUSED8, // 61 UNUSED8 POINT_ATTBONUS_UNUSED9, // 62 UNUSED9 - POINT_STEAL_HP, // 63 - POINT_STEAL_SP, // 64 ŷ + POINT_STEAL_HP, // 63 생명력 흡수 + POINT_STEAL_SP, // 64 정신력 흡수 - POINT_MANA_BURN_PCT, // 65 + POINT_MANA_BURN_PCT, // 65 마나 번 - /// ؽ ʽ /// + /// 피해시 보너스 /// - POINT_DAMAGE_SP_RECOVER, // 66 ݴ ŷ ȸ Ȯ + POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률 - POINT_BLOCK, // 67 - POINT_DODGE, // 68 ȸ + POINT_BLOCK, // 67 블럭율 + POINT_DODGE, // 68 회피율 POINT_RESIST_SWORD, // 69 POINT_RESIST_TWOHAND, // 70 POINT_RESIST_DAGGER, // 71 POINT_RESIST_BELL, // 72 POINT_RESIST_FAN, // 73 - POINT_RESIST_BOW, // 74 ȭ : - POINT_RESIST_FIRE, // 75 ȭ : ȭݿ - POINT_RESIST_ELEC, // 76 : ݿ - POINT_RESIST_MAGIC, // 77 : - POINT_RESIST_WIND, // 78 ٶ : ٶݿ + POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소 + POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소 + POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소 + POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소 + POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소 - POINT_REFLECT_MELEE, // 79 ݻ + POINT_REFLECT_MELEE, // 79 공격 반사 - /// Ư ؽ /// - POINT_REFLECT_CURSE, // 80 ݻ - POINT_POISON_REDUCE, // 81 + /// 특수 피해시 /// + POINT_REFLECT_CURSE, // 80 저주 반사 + POINT_POISON_REDUCE, // 81 독데미지 감소 - /// Ҹ /// - POINT_KILL_SP_RECOVER, // 82 Ҹ MP ȸ + /// 적 소멸시 /// + POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복 POINT_EXP_DOUBLE_BONUS, // 83 POINT_GOLD_DOUBLE_BONUS, // 84 POINT_ITEM_DROP_BONUS, // 85 - /// ȸ /// + /// 회복 관련 /// POINT_POTION_BONUS, // 86 POINT_KILL_HP_RECOVER, // 87 @@ -1635,32 +1635,32 @@ enum EPointTypes POINT_STAT_RESET_COUNT = 112, POINT_HORSE_SKILL = 113, - POINT_MALL_ATTBONUS, // 114 ݷ +x% - POINT_MALL_DEFBONUS, // 115 +x% - POINT_MALL_EXPBONUS, // 116 ġ +x% - POINT_MALL_ITEMBONUS, // 117 x/10 - POINT_MALL_GOLDBONUS, // 118 x/10 - POINT_MAX_HP_PCT, // 119 ִ +x% - POINT_MAX_SP_PCT, // 120 ִŷ +x% + POINT_MALL_ATTBONUS, // 114 공격력 +x% + POINT_MALL_DEFBONUS, // 115 방어력 +x% + POINT_MALL_EXPBONUS, // 116 경험치 +x% + POINT_MALL_ITEMBONUS, // 117 아이템 드롭율 x/10배 + POINT_MALL_GOLDBONUS, // 118 돈 드롭율 x/10배 + POINT_MAX_HP_PCT, // 119 최대생명력 +x% + POINT_MAX_SP_PCT, // 120 최대정신력 +x% - POINT_SKILL_DAMAGE_BONUS, // 121 ų *(100+x)% - POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 Ÿ *(100+x)% + POINT_SKILL_DAMAGE_BONUS, // 121 스킬 데미지 *(100+x)% + POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 평타 데미지 *(100+x)% - POINT_SKILL_DEFEND_BONUS, // 123 ų - POINT_NORMAL_HIT_DEFEND_BONUS, // 124 Ÿ + POINT_SKILL_DEFEND_BONUS, // 123 스킬 방어 데미지 + POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지 POINT_PC_BANG_EXP_BONUS, // 125 - POINT_PC_BANG_DROP_BONUS, // 126 PC ӷ ʽ + POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스 - POINT_ENERGY = 128, // 128 + POINT_ENERGY = 128, // 128 기력 - // ui . - // ̷ ϰ ʾ, - // uiTaskBar affect , - // Ŭ󸮾Ʈ blend_affect ʾ, - // ӽ÷ ̷ д. - POINT_ENERGY_END_TIME = 129, // 129 ð + // 기력 ui 용. + // 이렇게 하고 싶지 않았지만, + // uiTaskBar에서는 affect에 접근할 수 없고, + // 더구나 클라리언트에서는 blend_affect는 관리하지 않아, + // 임시로 이렇게 둔다. + POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간 - // Ŭ̾Ʈ Ʈ + // 클라이언트 포인트 POINT_MIN_WEP = 200, POINT_MAX_WEP, POINT_MIN_MAGIC_WEP, @@ -1668,7 +1668,7 @@ enum EPointTypes POINT_HIT_RATE, - //POINT_MAX_NUM = 255,=>stdafx.h / + //POINT_MAX_NUM = 255,=>stdafx.h 로/ }; typedef struct packet_points @@ -1684,8 +1684,8 @@ typedef struct packet_point_change DWORD dwVID; BYTE Type; - long amount; // ٲ - long value; // + long amount; // 바뀐 값 + long value; // 현재 값 } TPacketGCPointChange; typedef struct packet_motion @@ -1723,7 +1723,7 @@ typedef struct packet_set_item BYTE pos; DWORD vnum; BYTE count; - DWORD flags; // ÷ ߰ + DWORD flags; // 플래그 추가 long alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM]; } TPacketGCItemSet; @@ -1750,8 +1750,8 @@ typedef struct packet_set_item2 TItemPos Cell; DWORD vnum; BYTE count; - DWORD flags; // ÷ ߰ - DWORD anti_flags; // ÷ ߰ + DWORD flags; // 플래그 추가 + DWORD anti_flags; // 플래그 추가 bool highlight; long alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM]; @@ -1832,7 +1832,7 @@ typedef struct packet_shop_start struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM]; } TPacketGCShopStart; -typedef struct packet_shop_start_ex // TSubPacketShopTab* shop_tabs . +typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴. { typedef struct sub_packet_shop_tab { @@ -1975,12 +1975,12 @@ typedef struct packet_move enum { QUEST_SEND_IS_BEGIN = 1 << 0, - QUEST_SEND_TITLE = 1 << 1, // 28 - QUEST_SEND_CLOCK_NAME = 1 << 2, // 16 + QUEST_SEND_TITLE = 1 << 1, // 28자 까지 + QUEST_SEND_CLOCK_NAME = 1 << 2, // 16자 까지 QUEST_SEND_CLOCK_VALUE = 1 << 3, - QUEST_SEND_COUNTER_NAME = 1 << 4, // 16 + QUEST_SEND_COUNTER_NAME = 1 << 4, // 16자 까지 QUEST_SEND_COUNTER_VALUE = 1 << 5, - QUEST_SEND_ICON_FILE = 1 << 6, // 24 + QUEST_SEND_ICON_FILE = 1 << 6, // 24자 까지 }; typedef struct packet_quest_info @@ -2003,8 +2003,8 @@ typedef struct packet_attack { BYTE header; DWORD dwVID; - DWORD dwVictimVID; // VID - BYTE bType; // + DWORD dwVictimVID; // 적 VID + BYTE bType; // 공격 유형 } TPacketGCAttack; typedef struct packet_c2c @@ -2074,7 +2074,7 @@ enum EPVPModes typedef struct packet_duel_start { BYTE header ; - WORD wSize ; // DWORD ? = (wSize - sizeof(TPacketGCPVPList)) / 4 + WORD wSize ; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4 } TPacketGCDuelStart ; typedef struct packet_pvp @@ -2230,7 +2230,7 @@ enum typedef struct packet_guild_sub_grade { - char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 , ̸ + char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름 BYTE auth_flag; } TPacketGCGuildSubGrade; @@ -2271,7 +2271,7 @@ enum EGuildWarState GUILD_WAR_ON_WAR, GUILD_WAR_END, - GUILD_WAR_DURATION = 2*60*60, // 2ð + GUILD_WAR_DURATION = 2*60*60, // 2시간 }; typedef struct packet_guild_war @@ -2347,8 +2347,8 @@ typedef struct SRefineTable DWORD src_vnum; DWORD result_vnum; BYTE material_count; - int cost; // ҿ - int prob; // Ȯ + int cost; // 소요 비용 + int prob; // 확률 TMaterial materials[REFINE_MATERIAL_MAX_NUM]; } TRefineTable; @@ -2383,17 +2383,17 @@ enum SPECIAL_EFFECT SE_SUCCESS, SE_FAIL, SE_FR_SUCCESS, - SE_LEVELUP_ON_14_FOR_GERMANY, // 14϶ ( ) - SE_LEVELUP_UNDER_15_FOR_GERMANY,// 15϶ ( ) + SE_LEVELUP_ON_14_FOR_GERMANY, //레벨업 14일때 ( 독일전용 ) + SE_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 ) SE_PERCENT_DAMAGE1, SE_PERCENT_DAMAGE2, SE_PERCENT_DAMAGE3, SE_AUTO_HPUP, SE_AUTO_SPUP, - SE_EQUIP_RAMADAN_RING, // ʽ´ ϴ ߵϴ Ʈ - SE_EQUIP_HALLOWEEN_CANDY, // ҷ (-_-;) ߵϴ Ʈ - SE_EQUIP_HAPPINESS_RING, // ũ ູ ϴ ߵϴ Ʈ - SE_EQUIP_LOVE_PENDANT, // ߷Ÿ ҴƮ(71145) Ʈ (ߵƮ, Ʈ ƴ) + SE_EQUIP_RAMADAN_RING, // 초승달의 반지를 착용하는 순간에 발동하는 이펙트 + SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트 + SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지를 착용하는 순간에 발동하는 이펙트 + SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님) }; typedef struct SPacketGCSpecialEffect @@ -2696,7 +2696,7 @@ typedef struct packet_hs_check_req AHNHS_TRANS_BUFFER Req; } TPacketHSCheck; -//NOTE : recv/send , bPacketData 븸 ٲ. +//NOTE : recv/send에 공통으로 생김, bPacketData의 내용만 바뀐다. typedef struct packet_xtrap_verify { BYTE bHeader; @@ -2714,7 +2714,7 @@ typedef struct packet_autoban_quiz // END_OF_AUTOBAN #ifdef __AUCTION__ -// Argument 뵵 cmd ٸ. +// Argument의 용도는 cmd에 따라 다르다. typedef struct SPacketCGAuctionCmd { BYTE bHeader; @@ -2740,7 +2740,7 @@ typedef struct SPacketGCSpecificEffect char effect_file[128]; } TPacketGCSpecificEffect; -// ȥ +// 용혼석 enum EDragonSoulRefineWindowRefineType { DragonSoulRefineWindow_UPGRADE, diff --git a/src/UserInterface/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp index a6b2b8a6..5f92da30 100644 --- a/src/UserInterface/PythonApplication.cpp +++ b/src/UserInterface/PythonApplication.cpp @@ -323,7 +323,7 @@ void CPythonApplication::UpdateGame() DWORD t2=ELTimer_GetMSec(); - //!@# Alt+Tab SetTransfor ƨ ذ - [levites] + //!@# Alt+Tab 중 SetTransfor 에서 튕김 현상 해결을 위해 - [levites] //if (m_isActivateWnd) { CScreen s; @@ -357,8 +357,8 @@ void CPythonApplication::UpdateGame() m_pyPlayer.Update(); DWORD t11=ELTimer_GetMSec(); - // NOTE : Update ġ ٲǷ ٽ ɴϴ - [levites] - // κ ɸ Sound ġ ÷ Ǵ ־. + // NOTE : Update 동안 위치 값이 바뀌므로 다시 얻어 옵니다 - [levites] + // 이 부분 때문에 메인 케릭터의 Sound가 이전 위치에서 플레이 되는 현상이 있었음. m_pyPlayer.NEW_GetMainActorPosition(&kPPosMainActor); SetCenterPosition(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z); DWORD t12=ELTimer_GetMSec(); @@ -432,7 +432,7 @@ bool CPythonApplication::Process() m_fGlobalElapsedTime = rkTimer.GetElapsedSecond(); UINT uiFrameTime = rkTimer.GetElapsedMilliecond(); - s_uiNextFrameTime += uiFrameTime; //17 - 1ʴ 60fps. + s_uiNextFrameTime += uiFrameTime; //17 - 1초당 60fps기준. DWORD updatestart = ELTimer_GetMSec(); #ifdef __PERFORMANCE_CHECK__ @@ -468,7 +468,7 @@ bool CPythonApplication::Process() #ifdef __PERFORMANCE_CHECK__ DWORD dwUpdateTime5=ELTimer_GetMSec(); #endif - //!@# Alt+Tab SetTransfor ƨ ذ - [levites] + //!@# Alt+Tab 중 SetTransfor 에서 튕김 현상 해결을 위해 - [levites] //if (m_isActivateWnd) __UpdateCamera(); #ifdef __PERFORMANCE_CHECK__ @@ -511,7 +511,7 @@ bool CPythonApplication::Process() } #endif - //Updateϴµ ɸð.delta + //Update하는데 걸린시간.delta값 m_dwCurUpdateTime = ELTimer_GetMSec() - updatestart; DWORD dwCurrentTime = ELTimer_GetMSec(); @@ -527,7 +527,7 @@ bool CPythonApplication::Process() if ( dt >= 500 ) { s_uiNextFrameTime += nAdjustTime; - printf("FrameSkip %d\n",nAdjustTime); + printf("FrameSkip Calibration %d\n",nAdjustTime); CTimer::Instance().Adjust(nAdjustTime); } @@ -541,15 +541,15 @@ bool CPythonApplication::Process() //{ // int dt = dwCurrentTime - s_uiNextFrameTime; - // //ʹ ʾ ´. - // //׸ m_dwCurUpdateTime deltaε delta absolute time̶ ϸ ¼ڴ°? + // //너무 늦었을 경우 따라잡는다. + // //그리고 m_dwCurUpdateTime는 delta인데 delta랑 absolute time이랑 비교하면 어쩌자는겨? // //if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime) - // //ڵ ϸ 0.5 ̳ · update ӵǸ rendering frame skip߻ + // //기존코드대로 하면 0.5초 이하 차이난 상태로 update가 지속되면 계속 rendering frame skip발생 // if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime) // { // s_uiNextFrameTime += dt / uiFrameTime * uiFrameTime; - // printf("FrameSkip %d\n", dt / uiFrameTime * uiFrameTime); + // printf("FrameSkip Calibration %d\n", dt / uiFrameTime * uiFrameTime); // CTimer::Instance().Adjust((dt / uiFrameTime) * uiFrameTime); // s_bFrameSkip = true; // } @@ -577,13 +577,13 @@ bool CPythonApplication::Process() if (s_bFrameSkip) { - // ӵ ŵ̶.. + // 이전 프레임도 스킵이라면.. if (s_isPrevFrameSkip) { if (s_dwFrameSkipEndTime==0) { - s_dwFrameSkipCount=0; // üũ ε - s_dwFrameSkipEndTime=dwFrameSkipCurTime+ERROR_FRAME_SKIP_TIME; // ð üũ ε ŵ üũ + s_dwFrameSkipCount=0; // 프레임 체크는 로딩 대비 + s_dwFrameSkipEndTime=dwFrameSkipCurTime+ERROR_FRAME_SKIP_TIME; // 시간 체크는 로딩후 프레임 스킵 체크 //printf("FrameSkipCheck Start\n"); } @@ -599,7 +599,7 @@ bool CPythonApplication::Process() // s_dwFrameSkipEndTime); //#ifndef _DEBUG - // ð ŵ Ѵٸ... + // 일정 시간동안 계속 프레임 스킵만 한다면... if (s_dwFrameSkipCount>ERROR_FRAME_SKIP_COUNT && s_dwFrameSkipEndTime 5000) { - // ó + // 프레임 완충 처리 if (dwRenderEndTime > m_dwBufSleepSkipTime) { static float s_fBufRenderTime = 0.0f; @@ -760,7 +760,7 @@ bool CPythonApplication::Process() s_fBufRenderTime = (s_fBufRenderTime * (100.0f - fRatio) + fCurRenderTime * fRatio) / 100.0f; } - // Ѱġ Ѵ + // 한계치를 정한다 if (s_fBufRenderTime > 100.0f) s_fBufRenderTime = 100.0f; @@ -780,8 +780,8 @@ bool CPythonApplication::Process() dwBufRenderTime=8; } - // ӵ ߾ִʿ ϴ - // Ʒ ѹ ϸ . + // 일정 프레임 속도에 맞추어주는쪽에 눈에 편하다 + // 아래에서 한번 하면 됬다. //if (m_dwCurRenderTime 0 && !bCurrentLateUpdate ) { - s_uiLoad -= rest; // ð ε忡 .. + s_uiLoad -= rest; // 쉰 시간은 로드에서 뺀다.. Sleep(rest); } @@ -858,12 +858,12 @@ int CPythonApplication::CheckDeviceState() switch (e_deviceState) { - // ̽ α׷ Ǿ Ѵ. + // 디바이스가 없으면 프로그램이 종료 되어야 한다. case CGraphicDevice::DEVICESTATE_NULL: return DEVICE_STATE_FALSE; - // DEVICESTATE_BROKEN ֵ Ѵ. - // ׳ DrawPrimitive ϸ α׷ . + // DEVICESTATE_BROKEN일 때는 다음 루프에서 복구 될 수 있도록 리턴 한다. + // 그냥 진행할 경우 DrawPrimitive 같은 것을 하면 프로그램이 터진다. case CGraphicDevice::DEVICESTATE_BROKEN: return DEVICE_STATE_SKIP; @@ -1097,9 +1097,9 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi CPythonIME::Instance().UseDefaultIME(); } - // Ǯũ ̰ - // Ʈ IME ϰų ̸ - // Ǯũ 带 Ѵ + // 풀스크린 모드이고 + // 디폴트 IME 를 사용하거나 유럽 버전이면 + // 윈도우 풀스크린 모드를 사용한다 if (!m_pySystem.IsWindowed() && (m_pySystem.IsUseDefaultIME() || LocaleService_IsEUROPE())) { m_isWindowed = false; @@ -1153,7 +1153,7 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi // Sound if (!m_SoundManager.Create()) { - // NOTE : ߱ û + // NOTE : 중국측의 요청으로 생략 // LogBox(ApplicationStringTable_GetStringz(IDS_WARN_NO_SOUND_DEVICE)); } } @@ -1229,14 +1229,14 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi CGraphicImageInstance::CreateSystem(32); - // + // 백업 STICKYKEYS sStickKeys; memset(&sStickKeys, 0, sizeof(sStickKeys)); sStickKeys.cbSize = sizeof(sStickKeys); SystemParametersInfo( SPI_GETSTICKYKEYS, sizeof(sStickKeys), &sStickKeys, 0 ); m_dwStickyKeysFlag = sStickKeys.dwFlags; - // + // 설정 sStickKeys.dwFlags &= ~(SKF_AVAILABLE|SKF_HOTKEYACTIVE); SystemParametersInfo( SPI_SETSTICKYKEYS, sizeof(sStickKeys), &sStickKeys, 0 ); @@ -1283,8 +1283,8 @@ time_t CPythonApplication::GetServerTime() return (ELTimer_GetMSec() - m_dwStartLocalTime) + m_tServerTime; } -// 2005.03.28 - MALL ۿ ִ ð time(0) -// ̱ ߱ ð ó ߰ +// 2005.03.28 - MALL 아이템에 들어있는 시간의 단위가 서버에서 time(0) 으로 만들어지는 +// 값이기 때문에 단위를 맞추기 위해 시간 관련 처리를 별도로 추가 time_t CPythonApplication::GetServerTimeStamp() { return (time(0) - m_tLocalStartTime) + m_tServerTime; @@ -1402,7 +1402,7 @@ void CPythonApplication::Destroy() m_SoundManager.Destroy(); m_grpDevice.Destroy(); - // FIXME : - [levites] + // FIXME : 만들어져 있지 않음 - [levites] //CSpeedTreeForestDirectX8::Instance().Clear(); CAttributeInstance::DestroySystem(); diff --git a/src/UserInterface/PythonApplication.h b/src/UserInterface/PythonApplication.h index 90850381..c511a5f1 100644 --- a/src/UserInterface/PythonApplication.h +++ b/src/UserInterface/PythonApplication.h @@ -80,7 +80,7 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public CURSOR_SHAPE_COUNT, - // ̹ ȯ ӽ enumerate + // 안정적인 네이밍 변환을 위한 임시 enumerate NORMAL = CURSOR_SHAPE_NORMAL, ATTACK = CURSOR_SHAPE_ATTACK, TARGET = CURSOR_SHAPE_TARGET, @@ -254,16 +254,16 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public protected: IGraphBuilder* m_pGraphBuilder; // Graph Builder - IBaseFilter* m_pFilterSG; // Sample Grabber - ISampleGrabber* m_pSampleGrabber; // ̹ ĸó ׷ + IBaseFilter* m_pFilterSG; // Sample Grabber 필터 + ISampleGrabber* m_pSampleGrabber; // 영상 이미지 캡처를 위한 샘플 그래버 IMediaControl* m_pMediaCtrl; // Media Control IMediaEventEx* m_pMediaEvent; // Media Event IVideoWindow* m_pVideoWnd; // Video Window IBasicVideo* m_pBasicVideo; - BYTE* m_pCaptureBuffer; // ̹ ĸó - LONG m_lBufferSize; // Video ũ - CGraphicImageTexture* m_pLogoTex; // ؽ - bool m_bLogoError; // б + BYTE* m_pCaptureBuffer; // 영상 이미지를 캡처한 버퍼 + LONG m_lBufferSize; // Video 버퍼 크기 변수 + CGraphicImageTexture* m_pLogoTex; // 출력할 텍스쳐 + bool m_bLogoError; // 영상 읽기 상태 bool m_bLogoPlay; int m_nLeft, m_nRight, m_nTop, m_nBottom; diff --git a/src/UserInterface/PythonApplicationCamera.cpp b/src/UserInterface/PythonApplicationCamera.cpp index cd201d4a..8668345b 100644 --- a/src/UserInterface/PythonApplicationCamera.cpp +++ b/src/UserInterface/PythonApplicationCamera.cpp @@ -91,7 +91,7 @@ void CPythonApplication::__UpdateCamera() // Sound Setting const D3DXVECTOR3 & c_rv3CameraDirection = pMainCamera->GetView(); const D3DXVECTOR3 & c_rv3CameraUp = pMainCamera->GetUp(); - m_SoundManager.SetPosition(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z); // Listener - ij ġ + m_SoundManager.SetPosition(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z); // Listener - 캐릭터 위치 m_SoundManager.SetDirection(c_rv3CameraDirection.x, c_rv3CameraDirection.y, c_rv3CameraDirection.z, c_rv3CameraUp.x, c_rv3CameraUp.y, c_rv3CameraUp.z); m_SoundManager.Update(); ////////////////////// diff --git a/src/UserInterface/PythonApplicationCursor.cpp b/src/UserInterface/PythonApplicationCursor.cpp index 0b7e2f63..c103c15e 100644 --- a/src/UserInterface/PythonApplicationCursor.cpp +++ b/src/UserInterface/PythonApplicationCursor.cpp @@ -122,9 +122,9 @@ BOOL CPythonApplication::SetCursorNum(int iCursorNum) } else { - if (__IsContinuousChangeTypeCursor(m_iCursorNum)) // Ŀ Ŀ϶ + if (__IsContinuousChangeTypeCursor(m_iCursorNum)) // 현재 커서가 지속 커서일때만 { - m_iContinuousCursorNum = m_iCursorNum; // Ŀ Ѵ. + m_iContinuousCursorNum = m_iCursorNum; // 현재의 커서를 저장한다. } } diff --git a/src/UserInterface/PythonApplicationEvent.cpp b/src/UserInterface/PythonApplicationEvent.cpp index 7919e3b4..88e5d5c8 100644 --- a/src/UserInterface/PythonApplicationEvent.cpp +++ b/src/UserInterface/PythonApplicationEvent.cpp @@ -81,7 +81,7 @@ void CPythonApplication::OnMouseMove(int x, int y) y = Point.y; ClientToScreen(m_hWnd, &Point); - // 2004.07.26.myevan.öHackShield 浹 + // 2004.07.26.myevan.안철수HackShield와 충돌 SetCursorPos(Point.x, Point.y); } diff --git a/src/UserInterface/PythonApplicationLogo.cpp b/src/UserInterface/PythonApplicationLogo.cpp index 5452b7ce..4c4bde1c 100644 --- a/src/UserInterface/PythonApplicationLogo.cpp +++ b/src/UserInterface/PythonApplicationLogo.cpp @@ -23,7 +23,7 @@ int CPythonApplication::OnLogoOpen(char* szName) m_nLeft = 0; m_nRight = 0; m_nTop = 0; m_nBottom = 0; - // ó 1/1 ũ ؽĸ صд. + // 처음에는 1/1 크기의 텍스쳐를 생성해둔다. if(!m_pLogoTex->Create(1, 1, D3DFMT_A8R8G8B8)) { return 0; } // Set GraphBuilder / SampleGrabber @@ -60,7 +60,7 @@ int CPythonApplication::OnLogoOpen(char* szName) // Media Event if(FAILED(m_pGraphBuilder->QueryInterface(IID_IMediaEventEx, (VOID**) &m_pMediaEvent))) { return 0; } - // Window Ⱥ̰ + // Window 안보이게 m_pVideoWnd->SetWindowPosition( 3000, 3000, 0, 0 ); m_pVideoWnd->put_Visible(0); m_pSampleGrabber->SetBufferSamples(TRUE); @@ -80,8 +80,8 @@ int CPythonApplication::OnLogoUpdate() //osvi.dwOSVersionInfoSize = sizeof(osvi); //GetVersionEx(&osvi); - //// windows xp logo skip. - //// m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize, (LONG*)m_pCaptureBuffer) fail . + //// windows xp 이하인 버전은 logo skip. + //// m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize, (LONG*)m_pCaptureBuffer) fail 나기 때문. //if (osvi.dwMajorVersion <= 5) //{ // return 0; @@ -94,10 +94,10 @@ int CPythonApplication::OnLogoUpdate() BYTE* pBuffer = m_pCaptureBuffer; LONG lBufferSize = m_lBufferSize; - // ȉ . + // 재생이 안됬을 경우 재생. if(!m_bLogoPlay) { m_pMediaCtrl->Run(); m_bLogoPlay = true; } - // о ۰ 0ΰ ۸ Ҵ. + // 읽어온 버퍼가 0인경우 버퍼를 재할당. if( lBufferSize == 0 ) { m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize, NULL); @@ -107,8 +107,8 @@ int CPythonApplication::OnLogoUpdate() lBufferSize = m_lBufferSize; } - // ε߿ UpdateǴ , ⿡ ϴ 찡 . - // ϴ Ǵ ƴϹǷ, ߴ ʴ´. + // 영상 로딩중에 Update되는 경우, 버퍼 얻기에 실패하는 경우가 많다. + // 실패하더라도 완전히 종료되는 경우는 아니므로, 실행을 중단하지는 않는다. if(FAILED(m_pSampleGrabber->GetCurrentBuffer(&m_lBufferSize, (LONG*)m_pCaptureBuffer))) { m_bLogoError = true; @@ -117,7 +117,7 @@ int CPythonApplication::OnLogoUpdate() D3DLOCKED_RECT rt; ZeroMemory(&rt, sizeof(rt)); - // 쿡 ؽĸ İ . + // 실패한 경우에는 텍스쳐를 까맣게 비운다. tex->LockRect(0, &rt, 0, 0); BYTE* destb = static_cast(rt.pBits); for(int a = 0; a < 4; a+= 4) @@ -150,14 +150,14 @@ int CPythonApplication::OnLogoUpdate() - // ũⰡ 1, ؽ غ ȵȰ ٽ . + // 크기가 1, 즉 텍스쳐 공간이 제대로 준비 안된경우 다시 만든다. if(m_pLogoTex->GetWidth() == 1) { m_pLogoTex->Destroy(); m_pLogoTex->Create(lWidth, lHeight, D3DFMT_A8R8G8B8); } - // غ ۿ ؽķ ؿ´. + // 준비됬으면 버퍼에서 텍스쳐로 복사해온다. LPDIRECT3DTEXTURE9 tex = m_pLogoTex->GetD3DTexture(); D3DLOCKED_RECT rt; ZeroMemory(&rt, sizeof(rt)); @@ -171,7 +171,7 @@ int CPythonApplication::OnLogoUpdate() } tex->UnlockRect(0); - // üũ (Ǿ) + // 영상의 상태 체크 (종료되었는지) long evCode, param1, param2; while(SUCCEEDED(m_pMediaEvent->GetEvent(&evCode, ¶m1, ¶m2, 0))) { @@ -206,7 +206,7 @@ void CPythonApplication::OnLogoRender() void CPythonApplication::OnLogoClose() { - // NOTE: LOGO ҷ 쿡 OnLogoClose ũð + // NOTE: LOGO 동영상이 한 번도 안 불렸을 경우에는 OnLogoClose 과정에서 크래시가 나는 문제 수정 if (false == bInitializedLogo) return; @@ -239,4 +239,4 @@ void CPythonApplication::OnLogoClose() STATEMANAGER.SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); -} \ No newline at end of file +} diff --git a/src/UserInterface/PythonApplicationModule.cpp b/src/UserInterface/PythonApplicationModule.cpp index a5e0645c..feb2027c 100644 --- a/src/UserInterface/PythonApplicationModule.cpp +++ b/src/UserInterface/PythonApplicationModule.cpp @@ -1356,7 +1356,7 @@ void initapp() PyModule_AddIntConstant(poModule, "VK_DELETE", VK_DELETE); PyModule_AddIntConstant(poModule, "DIK_ESCAPE", DIK_ESCAPE); - PyModule_AddIntConstant(poModule, "DIK_ESC", DIK_ESCAPE); // Ǹ + PyModule_AddIntConstant(poModule, "DIK_ESC", DIK_ESCAPE); // 편의를 위해 PyModule_AddIntConstant(poModule, "DIK_1", DIK_1); PyModule_AddIntConstant(poModule, "DIK_2", DIK_2); PyModule_AddIntConstant(poModule, "DIK_3", DIK_3); diff --git a/src/UserInterface/PythonApplicationProcedure.cpp b/src/UserInterface/PythonApplicationProcedure.cpp index d6ecf8d7..746654c8 100644 --- a/src/UserInterface/PythonApplicationProcedure.cpp +++ b/src/UserInterface/PythonApplicationProcedure.cpp @@ -182,7 +182,7 @@ LRESULT CPythonApplication::WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam case 0x20a: if (WebBrowser_IsVisible()) { - // ϶ ۵ ȵǵ ó + // 웹브라우저 상태일때는 휠 작동 안되도록 처리 } else { diff --git a/src/UserInterface/PythonBackground.cpp b/src/UserInterface/PythonBackground.cpp index fbef52c0..300c4f5f 100644 --- a/src/UserInterface/PythonBackground.cpp +++ b/src/UserInterface/PythonBackground.cpp @@ -144,7 +144,7 @@ void CPythonBackground::SelectViewDistanceNum(int eNum) TEnvironmentData * env = ((TEnvironmentData *) mc_pcurEnvironmentData); - // ⸦ ٲ Ƿ reserve Ǿ ġ ʴ´. + // 게임 분위기를 바꿔놓을 수 있으므로 reserve로 되어있으면 고치지 않는다. if (env->bReserve) { env->m_fFogNearDistance = m_ViewDistanceSet[m_eViewDistanceNum].m_fFogStart; diff --git a/src/UserInterface/PythonBackgroundModule.cpp b/src/UserInterface/PythonBackgroundModule.cpp index ae5dcef1..35f39082 100644 --- a/src/UserInterface/PythonBackgroundModule.cpp +++ b/src/UserInterface/PythonBackgroundModule.cpp @@ -95,7 +95,7 @@ PyObject * backgroundRegisterEnvironmentData(PyObject * poSelf, PyObject * poArg TraceError("background.RegisterEnvironmentData(iIndex=%d, szEnvironmentFileName=%s)", iIndex, pszEnvironmentFileName); // TODO: - // Ʈ ȯ ۾ + // 디폴트 환경 설정 작업을 해주자 } return Py_BuildNone(); @@ -248,7 +248,7 @@ PyObject * backgroundRenderCharacterShadowToTexture(PyObject * poSelf, PyObject PyObject * backgroundRenderDungeon(PyObject * poSelf, PyObject * poArgs) { - assert(!"background.RenderDungeon() - ʴ ԼԴϴ - [levites]"); + assert(!"background.RenderDungeon() - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6\xC0\xD4\xB4\xCF\xB4\xD9 - [levites]"); return Py_BuildNone(); } diff --git a/src/UserInterface/PythonCharacterManager.cpp b/src/UserInterface/PythonCharacterManager.cpp index ee4f0f15..b68f648d 100644 --- a/src/UserInterface/PythonCharacterManager.cpp +++ b/src/UserInterface/PythonCharacterManager.cpp @@ -39,8 +39,8 @@ void CPythonCharacterManager::AdjustCollisionWithOtherObjects(CActorInstance* pI if(pInst->TestPhysicsBlendingCollision(*rkActorEach) ) { - // NOTE : ϴ ġ - // TODO : ݴ óѴٸ physic movementŸ stepingؼ iterationóؾ . + // NOTE : 일단 기존위치로 원복 + // TODO : 향후 조금더 잘 처리한다면 physic movement거리를 steping해서 iteration처리해야 함. TPixelPosition curPos; pInst->GetPixelPosition(&curPos); pInst->SetBlendingPosition(curPos); @@ -276,8 +276,8 @@ void CPythonCharacterManager::UpdateTransform() pSrcInstance->CheckAdvancing(); - // 2004.08.02.myevan.IsAttacked ׾ üũϹǷ, - // Ÿ Ǵ IsPushing϶ üũϵ Ѵ + // 2004.08.02.myevan.IsAttacked 일 경우 죽었을때도 체크하므로, + // 실질적으로 거리가 변경되는 IsPushing일때만 체크하도록 한다 if (pSrcInstance->IsPushing()) rkBG.CheckAdvancing(pSrcInstance); } @@ -688,7 +688,7 @@ void CPythonCharacterManager::__UpdatePickedActorList() for (i=m_kAliveInstMap.begin(); i!=m_kAliveInstMap.end(); ++i) { CInstanceBase* pkInstEach=i->second; - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (pkInstEach->CanPickInstance()) { if (pkInstEach->IsDead()) @@ -751,7 +751,7 @@ void CPythonCharacterManager::__NEW_Pick() } #endif - // üũ + // 정밀한 체크 { std::vector::iterator f; for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f) @@ -773,7 +773,7 @@ void CPythonCharacterManager::__NEW_Pick() } } - // ã + // 못찾겠으면 걍 순서대로 { std::vector::iterator f; for (f=m_kVct_pkInstPicked.begin(); f!=m_kVct_pkInstPicked.end(); ++f) diff --git a/src/UserInterface/PythonCharacterManagerModule.cpp b/src/UserInterface/PythonCharacterManagerModule.cpp index 7d440fda..aca294d3 100644 --- a/src/UserInterface/PythonCharacterManagerModule.cpp +++ b/src/UserInterface/PythonCharacterManagerModule.cpp @@ -5,7 +5,7 @@ #include "../gamelib/RaceManager.h" ////////////////////////////////////////////////////////////////////////// -// RaceData +// RaceData 관련 시작 ////////////////////////////////////////////////////////////////////////// PyObject * chrmgrSetEmpireNameMode(PyObject* poSelf, PyObject* poArgs) @@ -230,7 +230,7 @@ PyObject * chrmgrRegisterNormalAttack(PyObject* poSelf, PyObject* poArgs) } /////////////////////////////////////////////////////////////////////////////////////////////////// -// Լ +// 없어질 함수들 PyObject * chrmgrReserveComboAttack(PyObject* poSelf, PyObject* poArgs) { int iMode; @@ -270,7 +270,7 @@ PyObject * chrmgrRegisterComboAttack(PyObject* poSelf, PyObject* poArgs) pRaceData->RegisterComboAttack(iMode, 0, iComboIndex, iMotionIndex); return Py_BuildNone(); } -// Լ +// 없어질 함수들 /////////////////////////////////////////////////////////////////////////////////////////////////// PyObject * chrmgrReserveComboAttackNew(PyObject* poSelf, PyObject* poArgs) @@ -520,7 +520,7 @@ PyObject * chrmgrAppendShapeSkin(PyObject* poSelf, PyObject* poArgs) return Py_BuildNone(); } ////////////////////////////////////////////////////////////////////////// -// RaceData +// RaceData 관련 끝 ////////////////////////////////////////////////////////////////////////// PyObject * chrmgrSetMovingSpeed(PyObject* poSelf, PyObject* poArgs) @@ -717,7 +717,7 @@ void initchrmgr() { static PyMethodDef s_methods[] = { - // RaceData + // RaceData 관련 { "SetEmpireNameMode", chrmgrSetEmpireNameMode, METH_VARARGS }, { "GetVIDInfo", chrmgrGetVIDInfo, METH_VARARGS }, { "GetPickedVID", chrmgrGetPickedVID, METH_VARARGS }, @@ -826,13 +826,13 @@ void initchrmgr() PyModule_AddIntConstant(poModule, "EFFECT_SUCCESS", CInstanceBase::EFFECT_SUCCESS) ; PyModule_AddIntConstant(poModule, "EFFECT_FAIL", CInstanceBase::EFFECT_FAIL) ; PyModule_AddIntConstant(poModule, "EFFECT_FR_SUCCESS", CInstanceBase::EFFECT_FR_SUCCESS) ; - PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_ON_14_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY ); // 14϶ ( ) - PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_UNDER_15_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY );// 15϶ ( ) + PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_ON_14_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY ); //레벨업 14일때 ( 독일전용 ) + PyModule_AddIntConstant(poModule, "EFFECT_LEVELUP_UNDER_15_FOR_GERMANY", CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY );//레벨업 15일때 ( 독일전용 ) PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE1", CInstanceBase::EFFECT_PERCENT_DAMAGE1); PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE2", CInstanceBase::EFFECT_PERCENT_DAMAGE2); PyModule_AddIntConstant(poModule, "EFFECT_PERCENT_DAMAGE3", CInstanceBase::EFFECT_PERCENT_DAMAGE3); - // ڵ HP, SP + // 자동물약 HP, SP PyModule_AddIntConstant(poModule, "EFFECT_AUTO_HPUP", CInstanceBase::EFFECT_AUTO_HPUP); PyModule_AddIntConstant(poModule, "EFFECT_AUTO_SPUP", CInstanceBase::EFFECT_AUTO_SPUP); diff --git a/src/UserInterface/PythonCharacterModule.cpp b/src/UserInterface/PythonCharacterModule.cpp index bbd95c5e..ad76433f 100644 --- a/src/UserInterface/PythonCharacterModule.cpp +++ b/src/UserInterface/PythonCharacterModule.cpp @@ -219,7 +219,7 @@ PyObject * chrSelect(PyObject* poSelf, PyObject* poArgs) break; default: - // NOTE: ϸ Ⱑ Ƽ ڸƮ Ͽϴ [cronan 040226] + // NOTE: 빨간색으로 나오게 하면 스샷 찍을 때 보기가 안좋아서 코멘트 하였습니다 [cronan 040226] //pkInst->SetAddColor(D3DXCOLOR(0.3f, 0.0f, 0.0f, 1.0f)); break; } @@ -528,7 +528,7 @@ PyObject * chrRefresh(PyObject* poSelf, PyObject* poArgs) if (!pkInst) return Py_BuildNone(); - // Select ȭ鿡 WAIT غ ̱ . + // Select 화면에서는 WAIT 모션이 준비 되지 않은 상태이기 때문에 문제가 생긴다. //pkInst->Refresh(CRaceMotionData::NAME_WAIT, true); return Py_BuildNone(); } diff --git a/src/UserInterface/PythonChat.cpp b/src/UserInterface/PythonChat.cpp index 28acd7e8..177caf1a 100644 --- a/src/UserInterface/PythonChat.cpp +++ b/src/UserInterface/PythonChat.cpp @@ -474,7 +474,7 @@ void CPythonChat::AppendChat(int iType, const char * c_szChat) TChatSet * pChatSet = &(itor->second); //pChatLine->SetColor(itor->first, GetChatColor(iType)); - // Edit Mode ߱ ߰ + // Edit Mode 를 억지로 끼워 맞추기 위해 추가 if (BOARD_STATE_EDIT == pChatSet->m_iBoardState) { ArrangeShowingChat(itor->first); @@ -512,12 +512,12 @@ DWORD CPythonChat::GetChatColor(int iType) void CPythonChat::IgnoreCharacter(const char * c_szName) { TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName); - // NOTE : ̹ ̶.. + // NOTE : 이미 차단 중이라면.. if (m_IgnoreCharacterSet.end() != itor) { m_IgnoreCharacterSet.erase(itor); } - // NOTE : ijͶ.. + // NOTE : 차단이 되지 않은 캐릭터라면.. else { m_IgnoreCharacterSet.insert(c_szName); diff --git a/src/UserInterface/PythonChatModule.cpp b/src/UserInterface/PythonChatModule.cpp index d8fb01ab..47354e9c 100644 --- a/src/UserInterface/PythonChatModule.cpp +++ b/src/UserInterface/PythonChatModule.cpp @@ -436,7 +436,7 @@ PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs) } if (isAttr) - //"item:ȣ:÷:0:1:2" + //"item:번호:플래그:소켓0:소켓1:소켓2" snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); else snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); diff --git a/src/UserInterface/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp index 345a0047..7b4007fb 100644 --- a/src/UserInterface/PythonEventManager.cpp +++ b/src/UserInterface/PythonEventManager.cpp @@ -145,7 +145,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript if (!pEventSet) return -1; - // SCRIPT_PARSING_FAILURE_CLEAR_BUG ũƮ Ľ н __ClearEventSetp ߻ + // SCRIPT_PARSING_FAILURE_CLEAR_BUG 스크립트 파싱 실패시 __ClearEventSetp 에서 에러 발생 pEventSet->pCurrentTextLine = NULL; // END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG @@ -159,7 +159,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript pEventSet->poEventHandler = NULL; __InitEventSet(*pEventSet); - // NOTE : ܼ ũƮ ̺Ʈ Ŀǵ ٽ . + // NOTE : 만약 단순한 스크립트 이벤트 실행 커맨드라면 다시 만든다. script::TCmd ScriptCommand; int pEventPosition; int iEventType; @@ -468,7 +468,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) case EVENT_TYPE_WAIT: { - //ijƽ  /EVENT_TYPE_WAIT ؼ ׽Ʈ ʿ. + //캐틱터 만들기 제국 설명등에서 설명 밑으로 쳐지는 버그 수정/EVENT_TYPE_WAIT 관련해서 테스트 필요. pEventSet->iyLocal = 0; pEventSet->isLock = true; break; @@ -584,8 +584,8 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) int idx = atoi(GetArgument("idx", ScriptCommand.argList)); const char * name = GetArgument("name", ScriptCommand.argList); - // Ʈ UI Ǹ ذ ǹǷ ϴ ȥ by chrislee - if (!strcmp(name, " ȥ?....")) { + // 퀘스트 UI 리뉴얼이 되면 해결 되므로 일단 용혼석만 땜빵 by chrislee + if (!strcmp(name, "\xC1\xB6\xB0\xA2\xB3\xAD \xBF\xEB\xC8\xA5\xBC\xAE?....")) { PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", "")); } else { @@ -1146,7 +1146,7 @@ void CPythonEventManager::SetLeftTimeString(const char * c_szString) } CPythonEventManager::CPythonEventManager() - : m_poInterface(0), m_strLeftTimeString(" ð : %d") + : m_poInterface(0), m_strLeftTimeString("\xB3\xB2\xC0\xBA \xBD\xC3\xB0\xA3 : %d\xC3\xCA") { EventTypeMap["LETTER"]=EVENT_TYPE_LETTER; EventTypeMap["COLOR"]=EVENT_TYPE_COLOR; diff --git a/src/UserInterface/PythonExchange.cpp b/src/UserInterface/PythonExchange.cpp index 4d21dccb..40fd3493 100644 --- a/src/UserInterface/PythonExchange.cpp +++ b/src/UserInterface/PythonExchange.cpp @@ -239,9 +239,9 @@ CPythonExchange::CPythonExchange() Clear(); m_isTrading = false; m_elk_mode = false; - // Clear Ȱܳ ȵ. - // trade_start Ŷ Clear ϴµ - // m_elk_mode Ŭ Ǽ ȵ.; + // Clear로 옴겨놓으면 안됨. + // trade_start 페킷이 오면 Clear를 실행하는데 + // m_elk_mode는 클리어 되선 안됨.; } CPythonExchange::~CPythonExchange() { diff --git a/src/UserInterface/PythonExchange.h b/src/UserInterface/PythonExchange.h index 3e34ba3b..832ec01d 100644 --- a/src/UserInterface/PythonExchange.h +++ b/src/UserInterface/PythonExchange.h @@ -3,7 +3,7 @@ #include "Packet.h" /* - * ȯ â + * 교환 창 관련 */ class CPythonExchange : public CSingleton { @@ -86,7 +86,7 @@ class CPythonExchange : public CSingleton protected: bool m_isTrading; - bool m_elk_mode; // ũ Ŭؼ ȯ . + bool m_elk_mode; // 엘크를 클릭해서 교환했을때를 위한 변종임. TExchangeData m_self; TExchangeData m_victim; }; diff --git a/src/UserInterface/PythonGuild.cpp b/src/UserInterface/PythonGuild.cpp index 4101458e..a65ef94e 100644 --- a/src/UserInterface/PythonGuild.cpp +++ b/src/UserInterface/PythonGuild.cpp @@ -515,7 +515,7 @@ PyObject * guildGetDragonPowerPoint(PyObject * poSelf, PyObject * poArgs) PyObject * guildGetGuildSkillLevel(PyObject * poSelf, PyObject * poArgs) { - assert(FALSE && !"guildGetGuildSkillLevel - ʴ ԼԴϴ."); + assert(FALSE && !"guildGetGuildSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6\xC0\xD4\xB4\xCF\xB4\xD9."); int iSkillIndex; if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex)) diff --git a/src/UserInterface/PythonItem.cpp b/src/UserInterface/PythonItem.cpp index e77a7509..d109d171 100644 --- a/src/UserInterface/PythonItem.cpp +++ b/src/UserInterface/PythonItem.cpp @@ -371,7 +371,7 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x, if (/*f[1].first-f[0].first < (f[2].first-f[0].first)*0.30f*/ bStabGround) { - // + // 뾰족 if (f[2].second == 0) // axis x { rEnd.y = 90.0f + frandom(-15.0f, 15.0f); @@ -393,8 +393,8 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x, } else { - // - // 븻 + // 넓적 + // 땅의 노말의 영향을 받을 것 if (f[0].second == 0) { // y,z = by normal diff --git a/src/UserInterface/PythonItem.h b/src/UserInterface/PythonItem.h index 3b6b4b4d..9824758d 100644 --- a/src/UserInterface/PythonItem.h +++ b/src/UserInterface/PythonItem.h @@ -1,8 +1,8 @@ #pragma once -// Note : ȭ Item Update Rendering å -// Ÿ Icon Image Instance Ŵ ұ ְ -// ⵵ ϴ - 2003. 01. 13. [levites] +// Note : 화면상에 떨어진 Item의 Update와 Rendering을 책임지는 한편 +// 각 아이템의 데이타와 Icon Image Instance의 매니져 역할까지 주관 +// 조금 난잡해진거 같기도 하다 - 2003. 01. 13. [levites] #include "../EterGrnLib/ThingInstance.h" diff --git a/src/UserInterface/PythonItemModule.cpp b/src/UserInterface/PythonItemModule.cpp index 705b19e7..6ea23771 100644 --- a/src/UserInterface/PythonItemModule.cpp +++ b/src/UserInterface/PythonItemModule.cpp @@ -310,7 +310,7 @@ PyObject * itemIsEquipmentVID(PyObject * poSelf, PyObject * poArgs) return Py_BuildValue("i", pItemData->IsEquipment()); } -// 2005.05.20.myevan. USE_TYPE üũ +// 2005.05.20.myevan.통합 USE_TYPE 체크 PyObject* itemGetUseType(PyObject * poSelf, PyObject * poArgs) { int iItemVID; @@ -619,7 +619,7 @@ void initItem() PyModule_AddIntConstant(poModule, "COSTUME_TYPE_BODY", CItemData::COSTUME_BODY); PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR", CItemData::COSTUME_HAIR); - // κ丮 â ȣ + // 인벤토리 및 장비창에서의 슬롯 번호 PyModule_AddIntConstant(poModule, "COSTUME_SLOT_START", c_Costume_Slot_Start); PyModule_AddIntConstant(poModule, "COSTUME_SLOT_COUNT", c_Costume_Slot_Count); PyModule_AddIntConstant(poModule, "COSTUME_SLOT_BODY", c_Costume_Slot_Body); @@ -772,37 +772,37 @@ void initItem() PyModule_AddIntConstant(poModule, "APPLY_POISON_PCT", CItemData::APPLY_POISON_PCT); PyModule_AddIntConstant(poModule, "APPLY_SLOW_PCT", CItemData::APPLY_SLOW_PCT); PyModule_AddIntConstant(poModule, "APPLY_STUN_PCT", CItemData::APPLY_STUN_PCT); - PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_PCT", CItemData::APPLY_CRITICAL_PCT); // n% Ȯ ι Ÿ - PyModule_AddIntConstant(poModule, "APPLY_PENETRATE_PCT", CItemData::APPLY_PENETRATE_PCT); // n% Ȯ - PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ORC", CItemData::APPLY_ATTBONUS_ORC); // Ϳ n% ߰ - PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MILGYO", CItemData::APPLY_ATTBONUS_MILGYO); // б n% ߰ - PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD", CItemData::APPLY_ATTBONUS_UNDEAD); // ü n% ߰ - PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL", CItemData::APPLY_ATTBONUS_DEVIL); // Ǹ n% ߰ - PyModule_AddIntConstant(poModule, "APPLY_STEAL_HP", CItemData::APPLY_STEAL_HP); // n% Ȯ Ÿ 10% - PyModule_AddIntConstant(poModule, "APPLY_STEAL_SP", CItemData::APPLY_STEAL_SP); // n% Ȯ Ÿ 10% ŷ - PyModule_AddIntConstant(poModule, "APPLY_MANA_BURN_PCT", CItemData::APPLY_MANA_BURN_PCT); // n% Ȯ ´ - PyModule_AddIntConstant(poModule, "APPLY_DAMAGE_SP_RECOVER", CItemData::APPLY_DAMAGE_SP_RECOVER); // n% Ȯ ŷ 2 ȸ - PyModule_AddIntConstant(poModule, "APPLY_BLOCK", CItemData::APPLY_BLOCK); // n% Ȯ Ϻ - PyModule_AddIntConstant(poModule, "APPLY_DODGE", CItemData::APPLY_DODGE); // n% Ȯ Ϻ ȸ - PyModule_AddIntConstant(poModule, "APPLY_RESIST_SWORD", CItemData::APPLY_RESIST_SWORD); // Ѽհ˿ ظ n% - PyModule_AddIntConstant(poModule, "APPLY_RESIST_TWOHAND", CItemData::APPLY_RESIST_TWOHAND); // հ˿ ظ n% - PyModule_AddIntConstant(poModule, "APPLY_RESIST_DAGGER", CItemData::APPLY_RESIST_DAGGER); // ܵ ظ n% - PyModule_AddIntConstant(poModule, "APPLY_RESIST_BELL", CItemData::APPLY_RESIST_BELL); // £ ظ n% - PyModule_AddIntConstant(poModule, "APPLY_RESIST_FAN", CItemData::APPLY_RESIST_FAN); // ä ظ n% - PyModule_AddIntConstant(poModule, "APPLY_RESIST_WIND", CItemData::APPLY_RESIST_WIND); // ٶ ظ n% - PyModule_AddIntConstant(poModule, "APPLY_REFLECT_MELEE", CItemData::APPLY_REFLECT_MELEE); // Ÿ n% ǵ - PyModule_AddIntConstant(poModule, "APPLY_REFLECT_CURSE", CItemData::APPLY_REFLECT_CURSE); // n% Ȯ ǵ - PyModule_AddIntConstant(poModule, "APPLY_POISON_REDUCE", CItemData::APPLY_POISON_REDUCE); // - PyModule_AddIntConstant(poModule, "APPLY_KILL_SP_RECOVER", CItemData::APPLY_KILL_SP_RECOVER); // ׿ n% Ȯ ŷ 10 ȸ - PyModule_AddIntConstant(poModule, "APPLY_EXP_DOUBLE_BONUS", CItemData::APPLY_EXP_DOUBLE_BONUS); // n% Ȯ ġ ȹ淮 2 - PyModule_AddIntConstant(poModule, "APPLY_GOLD_DOUBLE_BONUS", CItemData::APPLY_GOLD_DOUBLE_BONUS); // n% Ȯ ȹ淮 2 - PyModule_AddIntConstant(poModule, "APPLY_ITEM_DROP_BONUS", CItemData::APPLY_ITEM_DROP_BONUS); // n% Ȯ ȹ淮 2 - PyModule_AddIntConstant(poModule, "APPLY_POTION_BONUS", CItemData::APPLY_POTION_BONUS); // n% ŭ - PyModule_AddIntConstant(poModule, "APPLY_KILL_HP_RECOVER", CItemData::APPLY_KILL_HP_RECOVER); // ϶ ȸ - PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_STUN", CItemData::APPLY_IMMUNE_STUN); // ʴ´ - PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_SLOW", CItemData::APPLY_IMMUNE_SLOW); // ʴ´ - PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_FALL", CItemData::APPLY_IMMUNE_FALL); // Ѿ ʴ´ - PyModule_AddIntConstant(poModule, "APPLY_MAX_STAMINA", CItemData::APPLY_MAX_STAMINA); // ִ ׹̳ + PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_PCT", CItemData::APPLY_CRITICAL_PCT); // n% 확률로 두배 타격 + PyModule_AddIntConstant(poModule, "APPLY_PENETRATE_PCT", CItemData::APPLY_PENETRATE_PCT); // n% 확률로 적의 방어력 무시 + PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ORC", CItemData::APPLY_ATTBONUS_ORC); // 웅귀에게 n% 추가 데미지 + PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_MILGYO", CItemData::APPLY_ATTBONUS_MILGYO); // 밀교에게 n% 추가 데미지 + PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_UNDEAD", CItemData::APPLY_ATTBONUS_UNDEAD); // 시체에게 n% 추가 데미지 + PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_DEVIL", CItemData::APPLY_ATTBONUS_DEVIL); // 악마에게 n% 추가 데미지 + PyModule_AddIntConstant(poModule, "APPLY_STEAL_HP", CItemData::APPLY_STEAL_HP); // n% 확률로 타격의 10% 를 생명력으로 흡수 + PyModule_AddIntConstant(poModule, "APPLY_STEAL_SP", CItemData::APPLY_STEAL_SP); // n% 확률로 타격의 10% 를 정신력으로 흡수 + PyModule_AddIntConstant(poModule, "APPLY_MANA_BURN_PCT", CItemData::APPLY_MANA_BURN_PCT); // n% 확률로 상대의 마나를 깎는다 + PyModule_AddIntConstant(poModule, "APPLY_DAMAGE_SP_RECOVER", CItemData::APPLY_DAMAGE_SP_RECOVER); // n% 확률로 정신력 2 회복 + PyModule_AddIntConstant(poModule, "APPLY_BLOCK", CItemData::APPLY_BLOCK); // n% 확률로 물리공격 완벽 방어 + PyModule_AddIntConstant(poModule, "APPLY_DODGE", CItemData::APPLY_DODGE); // n% 확률로 물리공격 완벽 회피 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_SWORD", CItemData::APPLY_RESIST_SWORD); // 한손검에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_TWOHAND", CItemData::APPLY_RESIST_TWOHAND); // 양손검에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_DAGGER", CItemData::APPLY_RESIST_DAGGER); // 단도에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_BELL", CItemData::APPLY_RESIST_BELL); // 방울에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_FAN", CItemData::APPLY_RESIST_FAN); // 부채에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_RESIST_WIND", CItemData::APPLY_RESIST_WIND); // 바람에 의한 피해를 n% 감소 + PyModule_AddIntConstant(poModule, "APPLY_REFLECT_MELEE", CItemData::APPLY_REFLECT_MELEE); // 근접 타격 n% 를 적에게 되돌린다 + PyModule_AddIntConstant(poModule, "APPLY_REFLECT_CURSE", CItemData::APPLY_REFLECT_CURSE); // 적이 나에게 저주 사용시 n% 확률로 되돌린다 + PyModule_AddIntConstant(poModule, "APPLY_POISON_REDUCE", CItemData::APPLY_POISON_REDUCE); // 독에 의한 데미지 감소 + PyModule_AddIntConstant(poModule, "APPLY_KILL_SP_RECOVER", CItemData::APPLY_KILL_SP_RECOVER); // 적을 죽였을때 n% 확률로 정신력 10 회복 + PyModule_AddIntConstant(poModule, "APPLY_EXP_DOUBLE_BONUS", CItemData::APPLY_EXP_DOUBLE_BONUS); // n% 확률로 경험치 획득량 2배 + PyModule_AddIntConstant(poModule, "APPLY_GOLD_DOUBLE_BONUS", CItemData::APPLY_GOLD_DOUBLE_BONUS); // n% 확률로 돈 획득량 2배 + PyModule_AddIntConstant(poModule, "APPLY_ITEM_DROP_BONUS", CItemData::APPLY_ITEM_DROP_BONUS); // n% 확률로 아이템 획득량 2배 + PyModule_AddIntConstant(poModule, "APPLY_POTION_BONUS", CItemData::APPLY_POTION_BONUS); // 물약 복용시 n% 만큼 성능 증대 + PyModule_AddIntConstant(poModule, "APPLY_KILL_HP_RECOVER", CItemData::APPLY_KILL_HP_RECOVER); // 죽일때마다 생명력 회복 + PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_STUN", CItemData::APPLY_IMMUNE_STUN); // 기절 하지 않는다 + PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_SLOW", CItemData::APPLY_IMMUNE_SLOW); // 느려지지 않는다 + PyModule_AddIntConstant(poModule, "APPLY_IMMUNE_FALL", CItemData::APPLY_IMMUNE_FALL); // 넘어지지 않는다 + PyModule_AddIntConstant(poModule, "APPLY_MAX_STAMINA", CItemData::APPLY_MAX_STAMINA); // 최대 스테미너 증가 PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_WARRIOR", CItemData::APPLY_ATT_BONUS_TO_WARRIOR); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_ASSASSIN", CItemData::APPLY_ATT_BONUS_TO_ASSASSIN); PyModule_AddIntConstant(poModule, "APPLY_ATTBONUS_SURA", CItemData::APPLY_ATT_BONUS_TO_SURA); @@ -827,7 +827,7 @@ void initItem() PyModule_AddIntConstant(poModule, "APPLY_RESIST_ASSASSIN", CItemData::APPLY_RESIST_ASSASSIN ); PyModule_AddIntConstant(poModule, "APPLY_RESIST_SURA", CItemData::APPLY_RESIST_SURA ); PyModule_AddIntConstant(poModule, "APPLY_RESIST_SHAMAN", CItemData::APPLY_RESIST_SHAMAN ); - PyModule_AddIntConstant(poModule, "APPLY_ENERGY", CItemData::APPLY_ENERGY ); // + PyModule_AddIntConstant(poModule, "APPLY_ENERGY", CItemData::APPLY_ENERGY ); // 기력 PyModule_AddIntConstant(poModule, "APPLY_COSTUME_ATTR_BONUS", CItemData::APPLY_COSTUME_ATTR_BONUS ); PyModule_AddIntConstant(poModule, "APPLY_MAGIC_ATTBONUS_PER", CItemData::APPLY_MAGIC_ATTBONUS_PER ); diff --git a/src/UserInterface/PythonMiniMap.cpp b/src/UserInterface/PythonMiniMap.cpp index 6d794b04..0d57dffd 100644 --- a/src/UserInterface/PythonMiniMap.cpp +++ b/src/UserInterface/PythonMiniMap.cpp @@ -91,11 +91,11 @@ void CPythonMiniMap::Update(float fCenterX, float fCenterY) if (!rkBG.IsMapOutdoor()) return; - // ̴ϸ ׸ + // 미니맵 그림 갱신 if (m_fCenterX != fCenterX || m_fCenterY != fCenterY ) SetCenterPosition(fCenterX, fCenterY); - // ij Ʈ + // 캐릭터 리스트 갱신 m_OtherPCPositionVector.clear(); m_PartyPCPositionVector.clear(); m_NPCPositionVector.clear(); @@ -434,7 +434,7 @@ void CPythonMiniMap::Render(float fScreenX, float fScreenY) STATEMANAGER.SaveSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); STATEMANAGER.SaveSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); - // ij ũ + // 캐릭터 마크 CInstanceBase * pkInst = CPythonCharacterManager::Instance().GetMainInstancePtr(); if (pkInst) @@ -470,7 +470,7 @@ void CPythonMiniMap::Render(float fScreenX, float fScreenY) CCamera* pkCmrCur=CCameraManager::Instance().GetCurrentCamera(); - // ī޶ + // 카메라 방향 if (pkCmrCur) { m_MiniMapCameraraphicImageInstance.SetRotation(pkCmrCur->GetRoll()); @@ -530,7 +530,7 @@ bool CPythonMiniMap::Create() const std::string strPlayerMark = strImageRoot + "minimap/playermark.sub"; const std::string strWhiteMark = strImageRoot + "minimap/whitemark.sub"; - // ̴ϸ Ŀ + // 미니맵 커버 CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageFilter.c_str()); m_MiniMapFilterGraphicImageInstance.SetImagePointer(pImage); pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageCamera.c_str()); @@ -540,7 +540,7 @@ bool CPythonMiniMap::Create() m_matMiniMapCover._22 = 1.0f / ((float)m_MiniMapFilterGraphicImageInstance.GetHeight()); m_matMiniMapCover._33 = 0.0f; - // ij ũ + // 캐릭터 마크 CGraphicSubImage * pSubImage = (CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer(strPlayerMark.c_str()); m_PlayerMark.SetImagePointer(pSubImage); @@ -569,7 +569,7 @@ bool CPythonMiniMap::Create() m_GuildAreaFlagImageInstance.SetImagePointer((CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer("d:/ymir work/ui/minimap/GuildArea01.sub")); - // ׷ + // 그려질 폴리곤 세팅 #pragma pack(push) #pragma pack(1) LPMINIMAPVERTEX lpMiniMapVertex; diff --git a/src/UserInterface/PythonMiniMap.h b/src/UserInterface/PythonMiniMap.h index e6bf29b1..0f7b880d 100644 --- a/src/UserInterface/PythonMiniMap.h +++ b/src/UserInterface/PythonMiniMap.h @@ -148,7 +148,7 @@ class CPythonMiniMap : public CScreen, public CSingleton DWORD dwDstTime; }; - // ij Ʈ + // 캐릭터 리스트 typedef struct { float m_fX; @@ -180,14 +180,14 @@ class CPythonMiniMap : public CScreen, public CSingleton float m_fMiniMapRadius; - // ׸... + // 맵 그림... LPDIRECT3DTEXTURE9 m_lpMiniMapTexture[AROUND_AREA_NUM]; - // ̴ϸ Ŀ + // 미니맵 커버 CGraphicImageInstance m_MiniMapFilterGraphicImageInstance; CGraphicExpandedImageInstance m_MiniMapCameraraphicImageInstance; - // ij ũ + // 캐릭터 마크 CGraphicExpandedImageInstance m_PlayerMark; CGraphicImageInstance m_WhiteMark; diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp index ebaececa..abc97ee0 100644 --- a/src/UserInterface/PythonNetworkStream.cpp +++ b/src/UserInterface/PythonNetworkStream.cpp @@ -239,7 +239,7 @@ void CPythonNetworkStream::AbsoluteExitApplication() bool CPythonNetworkStream::__IsNotPing() { - // ȿö üũ̳ Ȯ ߾ Ѵ. + // 원래는 핑이 안올때 체크이나 서버랑 정확히 맞추어야 한다. return false; } @@ -251,7 +251,7 @@ DWORD CPythonNetworkStream::GetGuildID() UINT CPythonNetworkStream::UploadMark(const char * c_szImageFileName) { // MARK_BUG_FIX - // 带 Ĵ ̵ 0̴. + // 길드를 만든 직후는 길드 아이디가 0이다. if (0 == m_dwGuildID) return ERROR_MARK_UPLOAD_NEED_RECONNECT; @@ -321,13 +321,13 @@ UINT CPythonNetworkStream::UploadSymbol(const char* c_szImageFileName) void CPythonNetworkStream::__DownloadMark() { - // 3 ȿ ٽ ʴ´. + // 3분 안에는 다시 접속하지 않는다. DWORD curTime = ELTimer_GetMSec(); if (curTime < gs_nextDownloadMarkTime) return; - gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3 + gs_nextDownloadMarkTime = curTime + 60000 * 3; // 3분 CGuildMarkDownloader& rkGuildMarkDownloader = CGuildMarkDownloader::Instance(); rkGuildMarkDownloader.Connect(m_kMarkAuth.m_kNetAddr, m_kMarkAuth.m_dwHandle, m_kMarkAuth.m_dwRandomKey); @@ -593,19 +593,19 @@ bool CPythonNetworkStream::RecvPhasePacket() switch (packet_phase.phase) { - case PHASE_CLOSE: // (Ǵ ) + case PHASE_CLOSE: // 끊기는 상태 (또는 끊기 전 상태) ClosePhase(); break; - case PHASE_HANDSHAKE: // Ǽ..;; + case PHASE_HANDSHAKE: // 악수..;; SetHandShakePhase(); break; - case PHASE_LOGIN: // α + case PHASE_LOGIN: // 로그인 중 SetLoginPhase(); break; - case PHASE_SELECT: // ij ȭ + case PHASE_SELECT: // 캐릭터 선택 화면 SetSelectPhase(); BuildProcessCRC(); @@ -615,15 +615,15 @@ bool CPythonNetworkStream::RecvPhasePacket() // END_OF_MARK_BUG_FIX break; - case PHASE_LOADING: // ε ȭ + case PHASE_LOADING: // 선택 후 로딩 화면 SetLoadingPhase(); break; - case PHASE_GAME: // ȭ + case PHASE_GAME: // 게임 화면 SetGamePhase(); break; - case PHASE_DEAD: // ׾ .. ( ȿ ִ ..) + case PHASE_DEAD: // 죽었을 때.. (게임 안에 있는 것일 수도..) break; } @@ -655,7 +655,7 @@ bool CPythonNetworkStream::RecvDefaultPacket(int header) if (!header) return true; - TraceError("ó Ŷ %d, state %s\n", header, m_strPhase.c_str()); + TraceError("Unprocessed packet header %d, state %s\n", header, m_strPhase.c_str()); ClearRecvBuffer(); return true; } diff --git a/src/UserInterface/PythonNetworkStream.h b/src/UserInterface/PythonNetworkStream.h index db38104a..b855d771 100644 --- a/src/UserInterface/PythonNetworkStream.h +++ b/src/UserInterface/PythonNetworkStream.h @@ -154,7 +154,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingletonpush_back(strLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < strLine.length()); @@ -131,7 +131,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char void CPythonNetworkStream::ServerCommand(char * c_szCommand) { - // #0000811: [M2EU] ܼâ + // #0000811: [M2EU] 콘솔창 기능 차단 if (strcmpi(c_szCommand, "ConsoleEnable") == 0) return; @@ -246,7 +246,7 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand) else if ("r_list" == TokenVector[1]) { // result list (/cube r_list npcVNUM resultCount resultText) - // 20383 4 72723,1/72725,1/72730.1/50001,5 <- ̷ "/" ڷ е Ʈ + // 20383 4 72723,1/72725,1/72730.1/50001,5 <- 이런식으로 "/" 문자로 구분된 리스트를 줌 if (5 != TokenVector.size()) { TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5); @@ -260,9 +260,10 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand) else if ("m_info" == TokenVector[1]) { // material list (/cube m_info requestStartIndex resultCount MaterialText) - // ex) requestStartIndex: 0, resultCount : 5 - ش NPC ִ 0~4° شϴ ʿ MaterialText - // ó ټ "@" ڸ - // 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- ̷ Ŭ Ʈ + // ex) requestStartIndex: 0, resultCount : 5 - 해당 NPC가 만들수 있는 아이템 중 0~4번째에 해당하는 아이템을 만드는 데 필요한 모든 재료들이 MaterialText에 들어있음 + // 위 예시처럼 아이템이 다수인 경우 구분자 "@" 문자를 사용 + // 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- 이런식으로 서버에서 클라로 리스트를 줌 + if (5 != TokenVector.size()) { diff --git a/src/UserInterface/PythonNetworkStreamModule.cpp b/src/UserInterface/PythonNetworkStreamModule.cpp index c467c90c..f918f409 100644 --- a/src/UserInterface/PythonNetworkStreamModule.cpp +++ b/src/UserInterface/PythonNetworkStreamModule.cpp @@ -1551,7 +1551,7 @@ PyObject* netSendRequestRefineInfoPacket(PyObject* poSelf, PyObject* poArgs) // CPythonNetworkStream& rns=CPythonNetworkStream::Instance(); // rns.SendRequestRefineInfoPacket(iSlotIndex); - assert(!"netSendRequestRefineInfoPacket - ̻ ʴ Լ Դϴ"); + assert(!"netSendRequestRefineInfoPacket - \xB4\xF5\xC0\xCC\xBB\xF3 \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6 \xC0\xD4\xB4\xCF\xB4\xD9"); return Py_BuildNone(); } diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp index adc65796..5eb4b38b 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp @@ -212,7 +212,7 @@ void CPythonNetworkStream::GamePhase() while (ret) { if(dwRecvCount++ >= MAX_RECV_COUNT-1 && GetRecvBufferSize() < SAFE_RECV_BUFSIZE - && m_strPhase == "Game") //phase_game ƴϾ 찡 ִ. + && m_strPhase == "Game") //phase_game 이 아니어도 여기로 들어오는 경우가 있다. break; if (!CheckPacket(&header)) @@ -239,7 +239,7 @@ void CPythonNetworkStream::GamePhase() case HEADER_GC_PHASE: ret = RecvPhasePacket(); - return; // ߿ Phase ٲ ϴ GamePhase Ż - [levites] + return; // 도중에 Phase 가 바뀌면 일단 무조건 GamePhase 탈출 - [levites] break; case HEADER_GC_PVP: @@ -807,9 +807,9 @@ void CPythonNetworkStream::Warp(LONG lGlobalX, LONG lGlobalY) //rkBgMgr.SetShadowLevel(CPythonBackground::SHADOW_ALL); rkBgMgr.RefreshShadowLevel(); - // NOTE : Warp CenterPosition Height 0̱ ī޶ ٴڿ ְ - // ϶ Height DZ ̹Ƿ ̵ϸ Position ѹ - // ش - [levites] + // NOTE : Warp 했을때 CenterPosition의 Height가 0이기 때문에 카메라가 땅바닥에 박혀있게 됨 + // 움직일때마다 Height가 갱신 되기 때문이므로 맵을 이동하면 Position을 강제로 한번 + // 셋팅해준다 - [levites] LONG lLocalX = lGlobalX; LONG lLocalY = lGlobalY; __GlobalPositionToLocalPosition(lLocalX, lLocalY); @@ -857,7 +857,7 @@ void CPythonNetworkStream::SetGamePhase() m_phaseProcessFunc.Set(this, &CPythonNetworkStream::GamePhase); m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveGamePhase); - // Main Character O + // Main Character 등록O IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton(); rkPlayer.SetMainCharacterIndex(GetMainActorVID()); @@ -972,11 +972,11 @@ bool CPythonNetworkStream::RecvPVPPacket() case PVP_MODE_AGREE: rkChrMgr.RemovePVPKey(kPVPPacket.dwVIDSrc, kPVPPacket.dwVIDDst); - // 밡 (Dst) Ǹ + // 상대가 나(Dst)에게 동의를 구했을때 if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDDst)) rkPlayer.RememberChallengeInstance(kPVPPacket.dwVIDSrc); - // 뿡 Ǹ ȿ Ҵ + // 상대에게 동의를 구한 동안에는 대결 불능 if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDSrc)) rkPlayer.RememberCantFightInstance(kPVPPacket.dwVIDDst); break; @@ -987,11 +987,11 @@ bool CPythonNetworkStream::RecvPVPPacket() DWORD dwKiller = kPVPPacket.dwVIDSrc; DWORD dwVictim = kPVPPacket.dwVIDDst; - // (victim) 뿡 + // 내(victim)가 상대에게 복수할 수 있을때 if (rkPlayer.IsMainCharacterIndex(dwVictim)) rkPlayer.RememberRevengeInstance(dwKiller); - // (victim) ϴ ȿ Ҵ + // 상대(victim)가 나에게 복수하는 동안에는 대결 불능 if (rkPlayer.IsMainCharacterIndex(dwKiller)) rkPlayer.RememberCantFightInstance(dwVictim); break; @@ -1009,7 +1009,7 @@ bool CPythonNetworkStream::RecvPVPPacket() break; } - // NOTE : PVP ۽ TargetBoard Ʈ մϴ. + // NOTE : PVP 토글시 TargetBoard 를 업데이트 합니다. __RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc); __RefreshTargetBoardByVID(kPVPPacket.dwVIDDst); @@ -1072,7 +1072,7 @@ bool CPythonNetworkStream::SendMessengerAddByNamePacket(const char * c_szName) return false; char szName[CHARACTER_NAME_MAX_LEN]; strncpy(szName, c_szName, CHARACTER_NAME_MAX_LEN-1); - szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: ޽ ̸ ÷ο + szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: 메신저 이름 관련 버퍼 오버플로우 버그 수정 if (!Send(sizeof(szName), &szName)) return false; @@ -1106,7 +1106,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP else if (fDstRot > 360.0f) fDstRot = fmodf(fDstRot, 360.0f); - // TODO: ߿ Ŷ̸ ٲ + // TODO: 나중에 패킷이름을 바꾸자 TPacketCGMove kStatePacket; kStatePacket.bHeader = HEADER_CG_CHARACTER_MOVE; kStatePacket.bFunc = eFunc; @@ -1135,7 +1135,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP return SendSequence(); } -// NOTE : SlotIndex ӽ +// NOTE : SlotIndex는 임시 bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID) { TPacketCGUseSkill UseSkillPacket; @@ -1277,9 +1277,9 @@ bool CPythonNetworkStream::RecvChatPacket() buf[uChatSize]='\0'; - // ƶ ó - // "̸: " Է ": ̸" ϱ (0x08) - // ƶ ȣ ó (1) : (2) ԷµǾ (2) : (1) ϰ + // 유럽 아랍 버전 처리 + // "이름: 내용" 입력을 "내용: 이름" 순서로 출력하기 위해 탭(0x08)을 넣음 + // 탭을 아랍어 기호로 처리해 (영어1) : (영어2) 로 입력되어도 (영어2) : (영어1) 로 출력하게 만든다 if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256) { char * p = strchr(buf, ':'); @@ -1305,11 +1305,11 @@ bool CPythonNetworkStream::RecvChatPacket() switch (kChat.type) { - case CHAT_TYPE_TALKING: /* ׳ ä */ - case CHAT_TYPE_PARTY: /* Ƽ */ - case CHAT_TYPE_GUILD: /* 帻 */ - case CHAT_TYPE_SHOUT: /* ġ */ - case CHAT_TYPE_WHISPER: // ʹ ʴ Only Client Enum + case CHAT_TYPE_TALKING: /* 그냥 채팅 */ + case CHAT_TYPE_PARTY: /* 파티말 */ + case CHAT_TYPE_GUILD: /* 길드말 */ + case CHAT_TYPE_SHOUT: /* 외치기 */ + case CHAT_TYPE_WHISPER: // 서버와는 연동되지 않는 Only Client Enum { char * p = strchr(buf, ':'); @@ -1347,9 +1347,9 @@ bool CPythonNetworkStream::RecvChatPacket() } } break; - case CHAT_TYPE_COMMAND: /* */ - case CHAT_TYPE_INFO: /* ( , ġ . ) */ - case CHAT_TYPE_NOTICE: /* */ + case CHAT_TYPE_COMMAND: /* 명령 */ + case CHAT_TYPE_INFO: /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */ + case CHAT_TYPE_NOTICE: /* 공지사항 */ case CHAT_TYPE_BIG_NOTICE: case CHAT_TYPE_MAX_NUM: default: @@ -1461,7 +1461,7 @@ bool CPythonNetworkStream::RecvPointChange() CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr(); - // ڽ Point Ǿ .. + // 자신의 Point가 변경되었을 경우.. if (pInstance) if (PointChange.dwVID == pInstance->GetVirtualID()) { @@ -1558,7 +1558,7 @@ bool CPythonNetworkStream::RecvDeadPacket() CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (pkInstMain==pkChrInstSel) { - Tracenf("ΰ "); + Tracenf("Player Dead"); if (false == pkInstMain->GetDuelMode()) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()")); @@ -2149,7 +2149,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket() return SendSequence(); } -// PointReset ӽ +// PointReset 개임시 bool CPythonNetworkStream::SendPointResetPacket() { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()")); @@ -2303,7 +2303,6 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd() bool CPythonNetworkStream::RecvSkillLevel() { - assert(!"CPythonNetworkStream::RecvSkillLevel - ʴ Լ"); TPacketGCSkillLevel packet; if (!Recv(sizeof(TPacketGCSkillLevel), &packet)) { @@ -2529,7 +2528,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket() __GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY); - Tracef("VID [%d] Ÿ ߰ \n",kPacket.dwShooterVID); + Tracef("VID [%d] Set up additional targets\n",kPacket.dwShooterVID); CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance(); @@ -2927,7 +2926,7 @@ bool CPythonNetworkStream::RecvPartyUpdate() PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "UpdatePartyMemberInfo", Py_BuildValue("(i)", kPartyUpdatePacket.pid)); - // ٲٸ, TargetBoard ư Ʈ Ѵ. + // 만약 리더가 바뀌었다면, TargetBoard 의 버튼을 업데이트 한다. DWORD dwVID; if (CPythonPlayer::Instance().PartyMemberPIDToVID(kPartyUpdatePacket.pid, &dwVID)) if (byOldState != kPartyUpdatePacket.state) @@ -3291,7 +3290,7 @@ bool CPythonNetworkStream::RecvGuild() if (!Recv(sizeof(dwPID), &dwPID)) return false; - // Main Player DeleteGuild + // Main Player 일 경우 DeleteGuild if (CPythonGuild::Instance().IsMainPlayer(dwPID)) { CPythonGuild::Instance().Destroy(); @@ -4110,7 +4109,7 @@ bool CPythonNetworkStream::SendClientVersionPacket() TPacketCGClientVersion2 kVersionPacket; kVersionPacket.header = HEADER_CG_CLIENT_VERSION2; strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1); - strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time ڸ + strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time 앞자리 //strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver //strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future //strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past @@ -4251,7 +4250,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ Ǿϴ [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); +// _snprintf(szBuf, sizeof(szBuf), "Target created [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName); //#endif @@ -4280,7 +4279,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "ij Ÿ Ǿϴ [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); +// _snprintf(szBuf, sizeof(szBuf), "Character Target created [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID); //#endif @@ -4303,7 +4302,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ ġ Ǿϴ [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); +// _snprintf(szBuf, sizeof(szBuf), "The target's location has been updated [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); //#endif @@ -4382,7 +4381,7 @@ bool CPythonNetworkStream::RecvDigMotionPacket() } -// ȥ ȭ +// 용혼석 강화 bool CPythonNetworkStream::SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos) { TPacketCGDragonSoulRefine pk; diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp index 48ab65aa..b1597d2d 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp @@ -62,8 +62,8 @@ void __SetWeaponPower(IAbstractPlayer& rkPlayer, DWORD dwWeaponID) rkPlayer.SetWeaponPower(minPower, maxPower, minMagicPower, maxMagicPower, addPower); } -//̺ ̸ "." ͵ -//Ŀ ʰ Ǹ Լ..(Բ !!; ) +//테이블에서 이름이 "." 인 것들 +//차후에 서버에서 보내주지 않게 되면 없어질 함수..(서버님께 꼭!!협박; ) bool IsInvisibleRace(WORD raceNum) { switch(raceNum) @@ -115,7 +115,7 @@ bool CPythonNetworkStream::RecvCharacterAppendPacket() kNetActorData.m_dwHair=0;/*chrAddPacket.awPart[CHR_EQUIPPART_HAIR]*/; kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/; - kNetActorData.m_dwLevel = 0; // ǥ + kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함 if(kNetActorData.m_bType != CActorInstance::TYPE_PC && kNetActorData.m_bType != CActorInstance::TYPE_NPC) @@ -173,7 +173,7 @@ bool CPythonNetworkStream::RecvCharacterAdditionalInfo() bool CPythonNetworkStream::RecvCharacterAppendPacketNew() { - TraceError("TPacketGCCharacterAdd2 ʴ ŶԴϴ."); + TraceError("TPacketGCCharacterAdd2 is an unwritten packet."); TPacketGCCharacterAdd2 chrAddPacket; if (!Recv(sizeof(chrAddPacket), &chrAddPacket)) return false; @@ -260,10 +260,10 @@ bool CPythonNetworkStream::RecvCharacterUpdatePacketNew() void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData) { - // NOTE : ī޶ ذ ijͰ ÷ - // Ʈ ̸ ֵ سƾ մϴ. - // ,  ƴ ̹ ijͰ ߰ Ŀ մϴ. - // 嵥 ̵ε Move ϰ Append ϴ..? - [levites] + // NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기 + // 전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다. + // 단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다. + // 헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites] IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton(); if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID)) { @@ -276,7 +276,7 @@ void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNet CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f); CPythonCharacterManager::Instance().Update(); - // NOTE : Ÿ GOTO ̵ÿ ̸ ϵ ó + // NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리 { std::string strMapName = CPythonBackground::Instance().GetWarpMapName(); if (strMapName == "metin2_map_deviltower1") @@ -335,8 +335,8 @@ bool CPythonNetworkStream::RecvCharacterDeletePacket() m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID); - // ijͰ ݴϴ. - // Key Check ϱ⶧  ϴ. + // 캐릭터가 사라질때 개인 상점도 없애줍니다. + // Key Check 를 하기때문에 없어도 상관은 없습니다. PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_PrivateShop_Disappear", Py_BuildValue("(i)", chrDelPacket.dwVID) diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp index eee1d81f..19d0e546 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp @@ -13,7 +13,7 @@ bool CPythonNetworkStream::SendSafeBoxMoneyPacket(BYTE byState, DWORD dwMoney) { - assert(!"CPythonNetworkStream::SendSafeBoxMoneyPacket - ʴ Լ"); + assert(!"CPythonNetworkStream::SendSafeBoxMoneyPacket - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6"); return false; // TPacketCGSafeboxMoney kSafeboxMoney; @@ -772,8 +772,8 @@ bool CPythonNetworkStream::RecvSpecialEffect() return false; DWORD effect = -1; - bool bPlayPotionSound = false; // 带 .!! - bool bAttachEffect = true; //ijͿ ٴ ġ Ʈ Ϲ Ʈ .!! + bool bPlayPotionSound = false; //포션을 먹을 경우는 포션 사운드를 출력하자.!! + bool bAttachEffect = true; //캐리터에 붙는 어태치 이펙트와 일반 이펙트 구분.!! switch (kSpecialEffect.type) { case SE_HPUP_RED: @@ -823,11 +823,11 @@ bool CPythonNetworkStream::RecvSpecialEffect() effect = CInstanceBase::EFFECT_FR_SUCCESS; bAttachEffect = false ; break; - case SE_LEVELUP_ON_14_FOR_GERMANY: // 14϶ ( ) + case SE_LEVELUP_ON_14_FOR_GERMANY: //레벨업 14일때 ( 독일전용 ) effect = CInstanceBase::EFFECT_LEVELUP_ON_14_FOR_GERMANY; bAttachEffect = false ; break; - case SE_LEVELUP_UNDER_15_FOR_GERMANY: // 15϶ ( ) + case SE_LEVELUP_UNDER_15_FOR_GERMANY: //레벨업 15일때 ( 독일전용 ) effect = CInstanceBase::EFFECT_LEVELUP_UNDER_15_FOR_GERMANY; bAttachEffect = false ; break; @@ -861,7 +861,7 @@ bool CPythonNetworkStream::RecvSpecialEffect() default: - TraceError("%d Ʈ ȣԴϴ.TPacketGCSpecialEffect",kSpecialEffect.type); + TraceError("%d is a special effect number that does not exist. TPacketGCSpecialEffect",kSpecialEffect.type); break; } diff --git a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp index d951be11..9d933653 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp @@ -110,7 +110,7 @@ void CPythonNetworkStream::SetLoginPhase() else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str()); - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkAccountConnector.ClearLoginInfo(); @@ -122,7 +122,7 @@ void CPythonNetworkStream::SetLoginPhase() else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str()); - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkAccountConnector.ClearLoginInfo(); diff --git a/src/UserInterface/PythonNonPlayer.cpp b/src/UserInterface/PythonNonPlayer.cpp index e54e44b0..63edfdfd 100644 --- a/src/UserInterface/PythonNonPlayer.cpp +++ b/src/UserInterface/PythonNonPlayer.cpp @@ -84,7 +84,7 @@ bool CPythonNonPlayer::GetInstanceType(DWORD dwVnum, BYTE* pbType) { const TMobTable * p = GetTable(dwVnum); - // dwVnum ã ÷̾ ijͷ Ѵ. ڵ -_- [cronan] + // dwVnum를 찾을 수 없으면 플레이어 캐릭터로 간주 한다. 문제성 코드 -_- [cronan] if (!p) return false; diff --git a/src/UserInterface/PythonNonPlayer.h b/src/UserInterface/PythonNonPlayer.h index 7c3a9a6d..cdba8f83 100644 --- a/src/UserInterface/PythonNonPlayer.h +++ b/src/UserInterface/PythonNonPlayer.h @@ -1,7 +1,7 @@ #pragma once /* - * NPC Ÿ Ѵ. + * NPC 데이터 프로토 타잎을 관리 한다. */ class CPythonNonPlayer : public CSingleton { diff --git a/src/UserInterface/PythonPackModule.cpp b/src/UserInterface/PythonPackModule.cpp index e3bad81a..ad58d3da 100644 --- a/src/UserInterface/PythonPackModule.cpp +++ b/src/UserInterface/PythonPackModule.cpp @@ -55,9 +55,9 @@ PyObject * packGet(PyObject * poSelf, PyObject * poArgs) if (!PyTuple_GetString(poArgs, 0, &strFileName)) return Py_BuildException(); - // ̽㿡 о帮 ŷ python ϰ txt Ͽ Ѵ + // 파이썬에서 읽어드리는 패킹 파일은 python 파일과 txt 파일에 한정한다 const char* pcExt = strrchr(strFileName, '.'); - if (pcExt) // Ȯڰ ְ + if (pcExt) // 확장자가 있고 { if ((stricmp(pcExt, ".py") == 0) || (stricmp(pcExt, ".pyc") == 0) || diff --git a/src/UserInterface/PythonPlayer.cpp b/src/UserInterface/PythonPlayer.cpp index ae12e446..be48be6b 100644 --- a/src/UserInterface/PythonPlayer.cpp +++ b/src/UserInterface/PythonPlayer.cpp @@ -213,7 +213,7 @@ void CPythonPlayer::__Update_AutoAttack() if (!pkInstMain) return; - // źȯ ޷ ߿ ŵ + // 탄환격 쓰고 달려가는 도중에는 스킵 if (__IsUsingChargeSkill()) return; @@ -978,7 +978,7 @@ float CPythonPlayer::GetSkillNextEfficientPercentage(DWORD dwSlotIndex) void CPythonPlayer::SetSkillLevel(DWORD dwSlotIndex, DWORD dwSkillLevel) { - assert(!"CPythonPlayer::SetSkillLevel - ʴ Լ"); + assert(!"CPythonPlayer::SetSkillLevel - \xBB\xE7\xBF\xEB\xC7\xCF\xC1\xF6 \xBE\xCA\xB4\xC2 \xC7\xD4\xBC\xF6"); if (dwSlotIndex >= SKILL_MAX_NUM) return; @@ -1191,7 +1191,7 @@ void CPythonPlayer::SendClickItemPacket(DWORD dwIID) void CPythonPlayer::__SendClickActorPacket(CInstanceBase& rkInstVictim) { - // Ÿ ij Ϳ ó + // 말을 타고 광산을 캐는 것에 대한 예외 처리 CInstanceBase* pkInstMain=NEW_GetMainActorPtr(); if (pkInstMain) if (pkInstMain->IsHoldingPickAxe()) @@ -1566,7 +1566,7 @@ void CPythonPlayer::NEW_ClearSkillData(bool bAll) for (int j = 0; j < SKILL_MAX_NUM; ++j) { - // 2004.09.30.myevan.ųŽ ų Ʈ[+] ư ȳ ó + // 2004.09.30.myevan.스킬갱신시 스킬 포인트업[+] 버튼이 안나와 처리 m_playerStatus.aSkill[j].iGrade = 0; m_playerStatus.aSkill[j].fcurEfficientPercentage=0.0f; m_playerStatus.aSkill[j].fnextEfficientPercentage=0.05f; diff --git a/src/UserInterface/PythonPlayer.h b/src/UserInterface/PythonPlayer.h index 50a61898..1da22bd4 100644 --- a/src/UserInterface/PythonPlayer.h +++ b/src/UserInterface/PythonPlayer.h @@ -7,13 +7,13 @@ class CInstanceBase; /* - * ij (ڽ ϴ ij) Ѵ. + * 메인 캐릭터 (자신이 조정하는 캐릭터) 가 가진 정보들을 관리한다. * - * 2003-01-12 Levites CPythonCharacter ־ Ը ʹ Ŀ - * ġ ָؼ и - * 2003-07-19 Levites ij ̵ ó CharacterInstance - * Ÿ ҿ Ϻ ÷̾ Ŭ - * Żٲ . + * 2003-01-12 Levites 본래는 CPythonCharacter가 가지고 있었지만 규모가 너무 커져 버린데다 + * 위치도 애매해서 따로 분리 + * 2003-07-19 Levites 메인 캐릭터의 이동 처리 CharacterInstance에서 떼어다 붙임 + * 기존의 데이타 보존의 역할에서 완벽한 메인 플레이어 제어 클래스로 + * 탈바꿈 함. */ class CPythonPlayer : public CSingleton, public IAbstractPlayer @@ -88,8 +88,8 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer float fnextEfficientPercentage; BOOL isCoolTime; - float fCoolTime; // NOTE : Ÿ ų - float fLastUsedTime; // â ϴ + float fCoolTime; // NOTE : 쿨타임 중인 스킬 슬롯을 + float fLastUsedTime; // 퀵창에 등록할 때 사용하는 변수 BOOL bActive; } TSkillInstance; @@ -161,15 +161,15 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer SKILL_PERFECT_MASTER, }; - // ڵ Ưȭ ü.. ̷ Ưȭ ó ۾ Ϸ ִ ϰ ᱹ Ưȭó. + // 자동물약 상태 관련 특화 구조체.. 이런식의 특화 처리 작업을 안 하려고 최대한 노력했지만 실패하고 결국 특화처리. struct SAutoPotionInfo { SAutoPotionInfo() : bActivated(false), totalAmount(0), currentAmount(0) {} - bool bActivated; // Ȱȭ Ǿ°? - long currentAmount; // - long totalAmount; // ü - long inventorySlotIndex; // κ丮 ε + bool bActivated; // 활성화 되었는가? + long currentAmount; // 현재 남은 양 + long totalAmount; // 전체 양 + long inventorySlotIndex; // 사용중인 아이템의 인벤토리상 슬롯 인덱스 }; enum EAutoPotionType @@ -227,7 +227,7 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer // Reserved - bool NEW_IsEmptyReservedDelayTime(float fElapsedtime); // ̹ ʿ - [levites] + bool NEW_IsEmptyReservedDelayTime(float fElapsedtime); // 네이밍 교정 논의 필요 - [levites] // Dungeon @@ -240,7 +240,7 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer // flying target set void Clear(); - void ClearSkillDict(); // ų ClearGame Ե Լ + void ClearSkillDict(); // 없어지거나 ClearGame 쪽으로 포함될 함수 void NEW_ClearSkillData(bool bAll = false); void Update(); diff --git a/src/UserInterface/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp index 72d22eb4..af9e8672 100644 --- a/src/UserInterface/PythonPlayerEventHandler.cpp +++ b/src/UserInterface/PythonPlayerEventHandler.cpp @@ -171,7 +171,7 @@ void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim if (!rkActorVictim.IsPushing()) return; - // Ŵ и + // 거대 몬스터 밀림 제외 extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkActorVictim.GetRace())) return; @@ -196,7 +196,7 @@ void CPythonPlayerEventHandler::FlushVictimList() if (m_kVctkVictim.empty()) return; - // #0000682: [M2EU] ų ƨ + // #0000682: [M2EU] 대진각 스킬 사용시 튕김 unsigned int SYNC_POSITION_COUNT_LIMIT = 16; unsigned int uiVictimCount = m_kVctkVictim.size(); @@ -260,7 +260,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx { return; - Tracef("Shoot : ٸ target ¾ҽϴ : %d, %d\n", dwSkillIndex, dwVID); + Tracef("Shoot : Hit a different target : %d, %d\n", dwSkillIndex, dwVID); CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance(); rkStream.SendAttackPacket(dwSkillIndex, dwVID); @@ -274,7 +274,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx } void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtTarget(DWORD dwSkillIndex) { -// Tracef("Shoot : ϴ target ¾ҽϴ : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID()); +// Tracef("Shoot : Hit the desired target : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID()); // CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance(); // rkStream.SendAttackPacket(dwSkillIndex, m_pInstTarget->GetVirtualID()); } diff --git a/src/UserInterface/PythonPlayerEventHandler.h b/src/UserInterface/PythonPlayerEventHandler.h index d8fd73d5..b1fa3675 100644 --- a/src/UserInterface/PythonPlayerEventHandler.h +++ b/src/UserInterface/PythonPlayerEventHandler.h @@ -63,9 +63,9 @@ class CPythonPlayerEventHandler : public CActorInstance::IEventHandler virtual void OnSetFlyTarget(); virtual void OnShoot(DWORD dwSkillIndex); - virtual void OnNoTarget() { /*Tracenf("Shoot : target ϴ.");*/ } - virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : Ÿ ϴ.");*/ } - virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : 濡 ¾ҽϴ.");*/ } + virtual void OnNoTarget() { /*Tracenf("Shoot : target이 없습니다.");*/ } + virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : 사정거리가 끝났습니다.");*/ } + virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : 배경에 맞았습니다.");*/ } virtual void OnExplodingAtAnotherTarget(DWORD dwSkillIndex, DWORD dwVID); virtual void OnExplodingAtTarget(DWORD dwSkillIndex); diff --git a/src/UserInterface/PythonPlayerInput.cpp b/src/UserInterface/PythonPlayerInput.cpp index c5bd4b57..444786f5 100644 --- a/src/UserInterface/PythonPlayerInput.cpp +++ b/src/UserInterface/PythonPlayerInput.cpp @@ -115,7 +115,7 @@ void CPythonPlayer::SetTarget(DWORD dwVID, BOOL bForceChange) if (!pkInstMain) return; - // 2004. 07. 07. [levites] - ų Ÿ ٲ ذ ڵ + // 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드 if (!pkInstMain->CanChangeTarget()) { return; @@ -259,15 +259,15 @@ void CPythonPlayer::__OnClickItem(CInstanceBase& rkInstMain, DWORD dwItemID) void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActorID, bool isAuto) { - // ų Ἥ ̶.. + // 만약 스킬을 써서 접근중이라면.. if (MODE_USE_SKILL == m_eReservedMode) { - // ij͸ Ŭ + // 같은 캐릭터를 클릭 했으면 리턴 if (__GetTargetVID() == dwPickedActorID) return; // 2005.03.25.levites - // źȯ ޷ ִ ٸ Ÿ Ŭϸ + // 탄환격을 쓰고 달려가는중 공격할 수 있는 다른 타겟을 클릭하면 if (__CheckDashAffect(rkInstMain)) { m_dwVIDReserved = dwPickedActorID; @@ -283,7 +283,7 @@ void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActo return; // 2005.01.28.myevan - // ʱ޸ ¿ ȵdz NPC Ŭ̵Ǿ + // 초급말 상태에서는 공격이 안되나 NPC 클릭이되어야함 if (rkInstMain.IsAttackableInstance(*pkInstVictim)) if (!__CanAttack()) return; @@ -305,15 +305,15 @@ void CPythonPlayer::__OnClickActor(CInstanceBase& rkInstMain, DWORD dwPickedActo void CPythonPlayer::__OnPressActor(CInstanceBase& rkInstMain, DWORD dwPickedActorID, bool isAuto) { - // ų Ἥ ̶.. + // 만약 스킬을 써서 접근중이라면.. if (MODE_USE_SKILL == m_eReservedMode) { - // ij͸ Ŭ + // 같은 캐릭터를 클릭 했으면 리턴 if (__GetTargetVID() == dwPickedActorID) return; // 2005.03.25.levites - // źȯ ޷ ִ ٸ Ÿ Ŭϸ + // 탄환격을 쓰고 달려가는중 공격할 수 있는 다른 타겟을 클릭하면 if (__CheckDashAffect(rkInstMain)) { m_dwVIDReserved = dwPickedActorID; @@ -335,7 +335,7 @@ void CPythonPlayer::__OnPressActor(CInstanceBase& rkInstMain, DWORD dwPickedActo if (isAuto) { - // 2004.10.21.myevan.ݰ 븸 ڵ + // 2004.10.21.myevan.공격가능한 상대만 자동 공격 if (rkInstMain.IsAttackableInstance(rkInstVictim)) __SetAutoAttackTargetActorID(rkInstVictim.GetVirtualID()); } @@ -463,7 +463,7 @@ bool CPythonPlayer::NEW_MoveToDirection(float fDirRot) { float fCmrCurRot=CameraRotationToCharacterRotation(pkCmrCur->GetRoll()); - // + // 현재 if (m_isCmrRot) { float fSigDirRot=fDirRot; @@ -612,7 +612,7 @@ void CPythonPlayer::NEW_Attack() } else { - //!@# ź ¿ Ǽ ʴ´ - [levites] + //!@# 말에 탄 상태에서 맨손 공격은 지원되지 않는다 - [levites] if (pkInstMain->IsMountingHorse()) { if (pkInstMain->IsHandMode()) @@ -752,10 +752,10 @@ bool CPythonPlayer::__CanAttack() return false; // Fix me - // Ʈ 25 ̻ 35 ̸ ߱ Ʈ Ÿ ݸϵ ϵ ڵ... - // ߿ ð can attack üũ ... - // _ unique Կ Ż ̶ ־ Ѵ _ - // _ Ʈ üũ ϰ ... ____ + // 뉴마운트 25레벨 이상 35레벨 미만인 경우 중급 마운트를 타고 공격못하도록 하드 코딩... + // 나중에 시간 나면 can attack 체크를 서버에서 해주자... + // ㅡ_ㅡ unique 슬롯에 차는 탈것은 이 조건이랑 관계없이 공격할 수 있어야 한다 ㅡ_ㅡ + // ㅡ_ㅡ 뉴마운트만 이 체크를 하게 함... ㅡ_ㅡ_ㅡ_ㅡ_ㅡ if (pkInstMain->IsMountingHorse() && pkInstMain->IsNewMount() && (GetSkillGrade(109) < 1 && GetSkillLevel(109) < 11)) { return false; @@ -858,7 +858,7 @@ void CPythonPlayer::__ReserveUseSkill(DWORD dwActorID, DWORD dwSkillSlotIndex, D m_dwSkillSlotIndexReserved=dwSkillSlotIndex; m_dwSkillRangeReserved=dwRange; - // NOTE : ƽƽϰ Ÿ ̴ ־ ణ ϰ.. + // NOTE : 아슬아슬하게 거리가 꼬이는 문제가 있어서 약간 느슨하게.. if (m_dwSkillRangeReserved > 100) m_dwSkillRangeReserved -= 10; } @@ -920,7 +920,7 @@ void CPythonPlayer::__ReserveProcess_ClickActor() return; } - // źȯ ޷ ߿ ʴ´. + // 탄환격 쓰고 달려가는 도중에는 공격하지 않는다. if (__CheckDashAffect(*pkInstMain)) { return; diff --git a/src/UserInterface/PythonPlayerInputMouse.cpp b/src/UserInterface/PythonPlayerInputMouse.cpp index 85c47df9..c42ebd28 100644 --- a/src/UserInterface/PythonPlayerInputMouse.cpp +++ b/src/UserInterface/PythonPlayerInputMouse.cpp @@ -100,7 +100,7 @@ void CPythonPlayer::NEW_SetMouseSmartState(int eMBS, bool isAuto) // PrivateShop if (IsOpenPrivateShop()) { - // ShopPacket + // ShopPacket 이 오기전 잠깐 동안 m_isSmtMov=false; return; } @@ -111,7 +111,7 @@ void CPythonPlayer::NEW_SetMouseSmartState(int eMBS, bool isAuto) return; } - // AFFECT_STUN ó + // AFFECT_STUN 처리 if (pkInstMain->IsSleep()) { return; @@ -346,16 +346,16 @@ void CPythonPlayer::NEW_RefreshMouseWalkingDirection() { float fDistance=pkInstMain->GetDistance(pkInstReserved); - // #0000806: [M2EU] 濡 (ѱ) źȯ ų ȵ + // #0000806: [M2EU] 수룡에게 무사(나한군) 탄환격 스킬 사용 안됨 extern bool IS_HUGE_RACE(unsigned int vnum); - if (IS_HUGE_RACE(pkInstReserved->GetRace())) // Ŵ + if (IS_HUGE_RACE(pkInstReserved->GetRace())) // 거대 종족은 근접을 못함 { - fDistance -= 200.0f; // TEMP: ϴ ϵ ڵ ó. δ ٿ Ǿ ؾ + fDistance -= 200.0f; // TEMP: 일단 하드 코딩 처리. 정석적으로는 바운드 스피어를 고려해야함 } if (fDistance < float(m_dwSkillRangeReserved)) { - // Target ٲ ִ - [levites] + // 접근 도중 Target 이 바뀌어 있을 수도 있다 - [levites] SetTarget(m_dwVIDReserved); if (__UseSkill(m_dwSkillSlotIndexReserved)) __ClearReservedAction(); diff --git a/src/UserInterface/PythonPlayerModule.cpp b/src/UserInterface/PythonPlayerModule.cpp index 25fa502f..c786ebbe 100644 --- a/src/UserInterface/PythonPlayerModule.cpp +++ b/src/UserInterface/PythonPlayerModule.cpp @@ -24,7 +24,7 @@ enum EMOTION_DANCE_3, EMOTION_DANCE_4, EMOTION_DANCE_5, - EMOTION_DANCE_6, // Ÿ + EMOTION_DANCE_6, // 강남스타일 EMOTION_CONGRATULATION, EMOTION_FORGIVE, EMOTION_ANGRY, @@ -57,7 +57,7 @@ public: { static TGradeUnit beltGradeByLevelTable[] = { - 0, // Ʈ+0 + 0, // 벨트+0 1, // +1 1, // +2 2, // +3 @@ -72,20 +72,20 @@ public: return beltGradeByLevelTable[refineLevel]; } - // Ʈ ,  ̿ ִ + // 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴 static const TGradeUnit* GetAvailableRuleTableByGrade() { /** - Ʈ +0 ~ +9 , 7ܰ еǾ κ丮 Ȱ ȭ ȴ. - Ʈ Ʒ ׸ . >= Ȱ ̸ . - (, 0̸ Ұ, ȣ ڴ ) + 벨트는 총 +0 ~ +9 레벨을 가질 수 있으며, 레벨에 따라 7단계 등급으로 구분되어 인벤토리가 활성 화 된다. + 벨트 레벨에 따른 사용 가능한 셀은 아래 그림과 같음. 현재 등급 >= 활성가능 등급이면 사용 가능. + (단, 현재 레벨이 0이면 무조건 사용 불가, 괄호 안의 숫자는 등급) 2(1) 4(2) 6(4) 8(6) 5(3) 5(3) 6(4) 8(6) 7(5) 7(5) 7(5) 8(6) 9(7) 9(7) 9(7) 9(7) - Ʈ κ丮 ũ 4x4 (16ĭ) + 벨트 인벤토리의 크기는 4x4 (16칸) */ static TGradeUnit availableRuleByGrade[c_Belt_Inventory_Slot_Count] = { @@ -100,7 +100,7 @@ public: static bool IsAvailableCell(WORD cell, int beltGrade /*int beltLevel*/) { - // ȹ ٲ.. Ƴ... + // 기획 또 바뀜.. 아놔... //const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel); const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade(); @@ -1051,13 +1051,13 @@ PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs) if( GetDefaultCodePage() == CP_ARABIC ) { if (isAttr) - //"item:ȣ:÷:0:1:2" + //item:item:number:flags:socket0:socket1:socket2" snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink); else snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink); } else { if (isAttr) - //"item:ȣ:÷:0:1:2" + //item:item:number:flags:socket0:socket1:socket2" snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); else snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); @@ -2077,7 +2077,7 @@ PyObject * playerSlotTypeToInvenType(PyObject* poSelf, PyObject* poArgs) } #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM -// ÷̾ Ʈ ? +// 플레이어가 벨트를 착용 중인지? PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs) { const CPythonPlayer* player = CPythonPlayer::InstancePtr(); @@ -2092,7 +2092,7 @@ PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs) } -// ˻Ϸ Ʈ κ丮 Cell ĭ? (밡 δ Ʈ ȭ ޶) +// 검사하려는 벨트 인벤토리 Cell이 사용 가능한 칸인지? (사용가능 여부는 착용 중인 벨트의 강화 정도에 따라 달라짐) PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs) { const CPythonPlayer* player = CPythonPlayer::InstancePtr(); @@ -2116,7 +2116,7 @@ PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs #endif -// ȥ ȭ +// 용혼석 강화 PyObject* playerSendDragonSoulRefine(PyObject* poSelf, PyObject* poArgs) { BYTE bSubHeader; @@ -2528,7 +2528,7 @@ void initPlayer() PyModule_AddIntConstant(poModule, "EMOTION_DANCE_3", EMOTION_DANCE_3); PyModule_AddIntConstant(poModule, "EMOTION_DANCE_4", EMOTION_DANCE_4); PyModule_AddIntConstant(poModule, "EMOTION_DANCE_5", EMOTION_DANCE_5); - PyModule_AddIntConstant(poModule, "EMOTION_DANCE_6", EMOTION_DANCE_6); // PSY Ÿ + PyModule_AddIntConstant(poModule, "EMOTION_DANCE_6", EMOTION_DANCE_6); // PSY 강남스타일 PyModule_AddIntConstant(poModule, "EMOTION_CONGRATULATION", EMOTION_CONGRATULATION); PyModule_AddIntConstant(poModule, "EMOTION_FORGIVE", EMOTION_FORGIVE); PyModule_AddIntConstant(poModule, "EMOTION_ANGRY", EMOTION_ANGRY); @@ -2543,11 +2543,11 @@ void initPlayer() PyModule_AddIntConstant(poModule, "EMOTION_FRENCH_KISS", EMOTION_FRENCH_KISS); PyModule_AddIntConstant(poModule, "EMOTION_SLAP", EMOTION_SLAP); - //// ڵ Ÿ + //// 자동물약 타입 PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_HP", CPythonPlayer::AUTO_POTION_TYPE_HP); PyModule_AddIntConstant(poModule, "AUTO_POTION_TYPE_SP", CPythonPlayer::AUTO_POTION_TYPE_SP); - // ȥ + // 용혼석 PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_SIZE", c_DragonSoul_Inventory_Box_Size); PyModule_AddIntConstant(poModule, "DRAGON_SOUL_PAGE_COUNT", DRAGON_SOUL_GRADE_MAX); PyModule_AddIntConstant(poModule, "DRAGON_SOUL_SLOT_COUNT", c_DragonSoul_Inventory_Count); @@ -2555,7 +2555,7 @@ void initPlayer() PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_PAGE_COUNT", DS_DECK_MAX_NUM); PyModule_AddIntConstant(poModule, "DRAGON_SOUL_EQUIPMENT_FIRST_SIZE", c_DragonSoul_Equip_Slot_Max); - // ȥ â + // 용혼석 개량창 PyModule_AddIntConstant(poModule, "DRAGON_SOUL_REFINE_CLOSE", DS_SUB_HEADER_CLOSE); PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_UPGRADE", DS_SUB_HEADER_DO_UPGRADE); PyModule_AddIntConstant(poModule, "DS_SUB_HEADER_DO_IMPROVEMENT", DS_SUB_HEADER_DO_IMPROVEMENT); diff --git a/src/UserInterface/PythonPlayerSkill.cpp b/src/UserInterface/PythonPlayerSkill.cpp index 5e82696d..b4870785 100644 --- a/src/UserInterface/PythonPlayerSkill.cpp +++ b/src/UserInterface/PythonPlayerSkill.cpp @@ -38,7 +38,7 @@ void CPythonPlayer::SetAffect(UINT uAffect) void CPythonPlayer::ResetAffect(UINT uAffect) { - // 2004.07.17.myevan.ų ƴ Ʈ + // 2004.07.17.myevan.스킬 아닌 이펙트가 안 사라지는 문제 PyCallClassMemberFunc(m_ppyGameWindow, "ResetAffect", Py_BuildValue("(i)", uAffect)); DWORD dwSkillIndex; @@ -196,8 +196,8 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // 2004.07.26.levites - 뿡 ϵ - // NOTE : ų 뿡 մϴ - [levites] + // 2004.07.26.levites - 안전지대에서 공격 못하도록 수정 + // NOTE : 공격 스킬은 안전지대에서 사용하지 못합니다 - [levites] if (pSkillData->IsAttackSkill()) { if (pkInstMain->IsInSafe()) @@ -208,13 +208,13 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : нú ų մϴ - [levites] + // NOTE : 패시브 스킬은 사용하지 못합니다 - [levites] if (!pSkillData->IsCanUseSkill()) return false; // if (CPythonSkill::SKILL_TYPE_PASSIVE == pSkillData->byType) // return false; - // NOTE : [Only Assassin] ִ üũ մϴ. + // NOTE : [Only Assassin] 빈병이 있는지 체크 합니다. if (pSkillData->IsNeedEmptyBottle()) { if (!__HasItem(27995)) @@ -224,7 +224,7 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : [Only Assassin] ִ üũ մϴ. + // NOTE : [Only Assassin] 독병이 있는지 체크 합니다. if (pSkillData->IsNeedPoisonBottle()) { if (!__HasItem(27996)) @@ -234,14 +234,14 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : ϶ ų մϴ. + // NOTE : 낚시 중일때는 스킬을 사용하지 못합니다. if (pkInstMain->IsFishingMode()) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "REMOVE_FISHING_ROD")); return false; } - // NOTE : üũ + // NOTE : 레벨 체크 if (m_sysIsLevelLimit) { if (rkSkillInst.iLevel <= 0) @@ -251,19 +251,19 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : ִ üũ + // NOTE : 들고 있는 무기 체크 if (!pSkillData->CanUseWeaponType(pkInstMain->GetWeaponType())) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "NOT_MATCHABLE_WEAPON")); return false; } - if (!pSkillData->IsHorseSkill()) // HORSE ų ߿ ȭ ʴ ų ֱ + if (!pSkillData->IsHorseSkill()) // HORSE 스킬 중에 화살을 쓰지 않는 스킬이 있기 때문에 { if (__CheckShortArrow(rkSkillInst, *pSkillData)) return false; - // NOTE : Ȱ ʿ ȭ üũ + // NOTE : 활이 필요할 경우 화살 개수 체크 if (pSkillData->IsNeedBow()) { if (!__HasEnoughArrow()) @@ -326,7 +326,7 @@ bool CPythonPlayer::__CheckShortMana(TSkillInstance& rkSkillInst, CPythonSkill:: int iNeedSP = rkSkillData.GetNeedSP(rkSkillInst.fcurEfficientPercentage); int icurSP = GetStatus(POINT_SP); - // NOTE : ToggleSkill ƴѵ Ҹ SP 0 ̴. + // NOTE : ToggleSkill 이 아닌데 소모 SP 가 0 이다. if (!rkSkillData.IsToggleSkill()) { if (iNeedSP == 0) @@ -400,13 +400,13 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI if (fSkillTargetRange <= 0.0f) return true; - // #0000806: [M2EU] 濡 (ѱ) źȯ ų ȵ + // #0000806: [M2EU] 수룡에게 무사(나한군) 탄환격 스킬 사용 안됨 float fTargetDistance = rkInstMain.GetDistance(&rkInstTarget); extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkInstTarget.GetRace())) { - fTargetDistance -= 200.0f; // TEMP: ϴ ϵ ڵ ó. δ ٿ Ǿ ؾ + fTargetDistance -= 200.0f; // TEMP: 일단 하드 코딩 처리. 정석적으로는 바운드 스피어를 고려해야함 } if (fTargetDistance >= fSkillTargetRange) @@ -422,7 +422,7 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI return false; } - // 2004.07.05.myevan. ýź ʿ . ϱ ִ° üũ + // 2004.07.05.myevan. 궁신탄영 사용시 맵에 끼임. 사용하기전 갈수 있는곳 체크 TPixelPosition kPPosTarget; rkInstTarget.NEW_GetPixelPosition(&kPPosTarget); @@ -446,8 +446,8 @@ bool CPythonPlayer::__CanUseSkill() return false; // Fix me - // Ʈ. ¸ų 20 ̸ , Ʈ Ÿ ¸ ų ϵ ϵ ڵ... - // ߿ ð can use skill üũ ... + // 뉴마운트. 승마스킬레벨 20 미만인 경우, 고급 마운트를 타고 승마 관련 스킬 못 쓰도록 못하도록 하드 코딩... + // 나중에 시간 나면 can use skill 체크를 서버에서 해주자... if (pkInstMain->IsMountingHorse() && (GetSkillGrade(109) < 1 && GetSkillLevel(109) < 20)) { return false; @@ -518,7 +518,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) CInstanceBase * pkInstTarget = NULL; - // NOTE : Ÿ ʿ + // NOTE : 타겟이 필요한 경우 if (pSkillData->IsNeedTarget() || pSkillData->CanChangeDirection() || pSkillData->IsAutoSearchTarget()) @@ -528,13 +528,13 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) else pkInstTarget=__GetAliveTargetInstancePtr(); - // Ÿ .. + // 현재 타겟이 없으면.. if (!pkInstTarget) { - // Ʈϰ.. + // 업데이트하고.. __ChangeTargetToPickedInstance(); - // ٽ . + // 다시 얻어낸다. if (pSkillData->IsNeedCorpse()) pkInstTarget=__GetDeadTargetInstancePtr(); else @@ -572,7 +572,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) if (pSkillData->CanUseForMe()) { pkInstTarget = pkInstMain; - Tracef(" [ALERT] ῡ ϴ ӿ Ÿ Ǿ־ ڽſԷ 缳\n"); + Tracef(" [ALERT] Reset to yourself because the skill is targeted at an enemy even though you're using it on a teammate\n"); } else { @@ -636,7 +636,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) { pkInstTarget = pkInstMain; pkInstMain->SetFlyTargetInstance(*pkInstMain); - Tracef(" [ALERT] Ÿ  ÷̾ մϴ\n"); + Tracef(" [ALERT] Use on player because there are no targets\n"); } else if (pSkillData->IsNeedCorpse()) { @@ -672,11 +672,11 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) } else { - Tracenf("CPythonPlayer::__UseSkill(%d) - ȭ ؾ", dwSlotIndex); + Tracenf("CPythonPlayer::__UseSkill(%d) - Need to set the orientation relative to the screen", dwSlotIndex); } } - // ݼ ó + // 관격술 처리 DWORD dwTargetMaxCount = pSkillData->GetTargetCount(rkSkillInst.fcurEfficientPercentage); DWORD dwRange = __GetSkillTargetRange(*pSkillData); if (dwTargetMaxCount>0 && pkInstTarget) @@ -748,7 +748,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) } ///// - // NOTE : ָ Ŭس ų ų ٷ ϴ ϱ ڵ - [levites] + // NOTE : 멀리서 적을 클릭해놓고 스킬을 쓰면 스킬을 쓴뒤 바로 적을 공격하는 문제를 수정하기 위한 코드 - [levites] __ClearReservedAction(); ///// diff --git a/src/UserInterface/PythonQuest.cpp b/src/UserInterface/PythonQuest.cpp index cd7e35e5..1cf1f747 100644 --- a/src/UserInterface/PythonQuest.cpp +++ b/src/UserInterface/PythonQuest.cpp @@ -140,8 +140,8 @@ void CPythonQuest::__Initialize() test.dwIndex = i; test.strIconFileName = ""; test.strTitle = _getf("test%d", i); - test.strClockName = " ð"; - test.strCounterName = " "; + test.strClockName = "\xB3\xB2\xC0\xBA \xBD\xC3\xB0\xA3"; + test.strCounterName = "\xB3\xB2\xC0\xBA \xB8\xB6\xB8\xAE\xBC\xF6"; test.iClockValue = 1000; test.iCounterValue = 1000; test.iStartTime = 0; @@ -196,7 +196,7 @@ PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs) else { { - // Ʈ ̹ ִ´. + // 비어있을 경우 디폴트 이미지를 넣는다. std::string strIconFileName = "season1/icon/scroll_open.tga"; pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str()); } @@ -238,7 +238,7 @@ PyObject * questGetQuestLastTime(PyObject * poSelf, PyObject * poArgs) iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond()); } - // ð ó ڵ + // 시간 증가 처리 코드 // else // { // iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime; diff --git a/src/UserInterface/PythonShop.h b/src/UserInterface/PythonShop.h index 40ecbf6c..d285acbc 100644 --- a/src/UserInterface/PythonShop.h +++ b/src/UserInterface/PythonShop.h @@ -3,12 +3,12 @@ #include "Packet.h" /* - * ó + * 상점 처리 * - * 2003-01-16 anoa Ϸ - * 2003-12-26 levites + * 2003-01-16 anoa 일차 완료 + * 2003-12-26 levites 수정 * - * 2012-10-29 rtsummit ο ȭ tab ߰ shop Ȯ. + * 2012-10-29 rtsummit 새로운 화폐 출현 및 tab 기능 추가로 인한 shop 확장. * */ typedef enum diff --git a/src/UserInterface/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp index 0a1f3aed..94568773 100644 --- a/src/UserInterface/PythonSkill.cpp +++ b/src/UserInterface/PythonSkill.cpp @@ -50,7 +50,7 @@ int SplitLine(const char * c_szText, CTokenVector* pstTokenVector, const char * pstTokenVector->push_back(stLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(stLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < stLine.length()); @@ -226,7 +226,7 @@ bool CPythonSkill::RegisterSkillTable(const char * c_szFileName) switch (iVnum) { - case 1: // ↓ + case 1: // 삼연참 affect.strAffectMinFormula += "* 3"; affect.strAffectMaxFormula += "* 3"; break; @@ -405,7 +405,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName) const std::string & c_rstrJob = TokenVector[DESC_TOKEN_TYPE_JOB]; const std::string & c_rstrIconName = TokenVector[DESC_TOKEN_TYPE_ICON_NAME]; - // NOTE : Support ųӿ 3ܰ踦 ؾ ؼ ó - [levites] + // NOTE : Support 스킬임에도 3단계를 지원해야 해서 예외 처리 - [levites] if (c_iSkillIndex_Riding == iSkillIndex) { char szIconFileNameHeader[64+1]; @@ -496,7 +496,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName) int numGrade = atoi(TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str()); if (SKILL_EFFECT_COUNT < numGrade) { - TraceError("%s[%s] [%d] Ѿϴ.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT); + TraceError("%s[%s] has exceeded its rating limit [%d].",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT); return false; } for (int iGrade = 0; iGrade < numGrade; iGrade++) @@ -1231,7 +1231,7 @@ bool CPythonSkill::SSkillData::GetState(const char * c_szStateName, int * piStat { *piState = 0; - // ӽ + // 증지술 임시 제외 /* if (0 != ms_dwTimeIncreaseSkillNumber) { @@ -1307,7 +1307,7 @@ const char * CPythonSkill::SSkillData::GetAffectDescription(DWORD dwIndex, float if (CP_ARABIC == ::GetDefaultCodePage()) { - // #0000870: [M2AE] ѱ ϶ Ư ƶ 忡 ũ ߻ + // #0000870: [M2AE] 한국어 모드일때 특정 아랍어 문장에서 크래쉬 발생 static std::string strDescription; strDescription = c_rstrAffectDescription; int first = strDescription.find("%.0f"); @@ -1990,7 +1990,7 @@ PyObject * skillIsLevelUpSkill(PyObject * poSelf, PyObject * poArgs) if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) return Py_BuildException("skill.IsLevelUpSkill - Failed to find skill by %d", iSkillIndex); - // + // 모두 레벨업 가능 return Py_BuildValue("i", TRUE); } @@ -2016,7 +2016,7 @@ PyObject * skillGetIconImage(PyObject * poSelf, PyObject * poArgs) CPythonSkill::SSkillData * c_pSkillData; if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) - return Py_BuildValue("i", 0); // ͼ 0 Ѵ. + return Py_BuildValue("i", 0); // 익셉션을 내는 대신 0을 리턴한다. return Py_BuildValue("i", c_pSkillData->pImage); } @@ -2051,7 +2051,7 @@ PyObject * skillGetIconImageNew(PyObject * poSelf, PyObject * poArgs) CPythonSkill::SSkillData * c_pSkillData; if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) - return Py_BuildValue("i", 0); // ͼ 0 Ѵ. + return Py_BuildValue("i", 0); // 익셉션을 내는 대신 0을 리턴한다. if (iGradeIndex < 0) iGradeIndex = 0; diff --git a/src/UserInterface/PythonSkill.h b/src/UserInterface/PythonSkill.h index 8b11109c..9e9b7427 100644 --- a/src/UserInterface/PythonSkill.h +++ b/src/UserInterface/PythonSkill.h @@ -104,7 +104,7 @@ class CPythonSkill : public CSingleton SKILL_ATTRIBUTE_NEED_EMPTY_BOTTLE = (1 << 12), SKILL_ATTRIBUTE_NEED_POISON_BOTTLE = (1 << 13), SKILL_ATTRIBUTE_ATTACK_SKILL = (1 << 14), - SKILL_ATTRIBUTE_TIME_INCREASE_SKILL = (1 << 15), // attribute + SKILL_ATTRIBUTE_TIME_INCREASE_SKILL = (1 << 15), // 증지술 전용 attribute SKILL_ATTRIBUTE_CHARGE_ATTACK = (1 << 16), SKILL_ATTRIBUTE_PASSIVE = (1 << 17), SKILL_ATTRIBUTE_CANNOT_LEVEL_UP = (1 << 18), @@ -138,7 +138,7 @@ class CPythonSkill : public CSingleton enum { SKILL_GRADE_COUNT = 3, - SKILL_EFFECT_COUNT = 4, //ų ,, ̿ܿ ϶ Ʈ ߰. + SKILL_EFFECT_COUNT = 4, //스킬은 초,중,고급 이외에 마스터일때 이펙트 추가. SKILL_GRADE_STEP_COUNT = 20, SKILL_GRADEGAP = 25, }; @@ -243,8 +243,8 @@ class CPythonSkill : public CSingleton DWORD dwSkillAttribute; DWORD dwNeedWeapon; DWORD dwTargetRange; - WORD wMotionIndex; // - WORD wMotionIndexForMe; // + WORD wMotionIndex; // 없어질 변수 + WORD wMotionIndexForMe; // 없어질 변수 BOOL isRequirement; std::string strRequireSkillName; diff --git a/src/UserInterface/PythonSystem.cpp b/src/UserInterface/PythonSystem.cpp index ce02a8a3..3c8b86da 100644 --- a/src/UserInterface/PythonSystem.cpp +++ b/src/UserInterface/PythonSystem.cpp @@ -6,8 +6,8 @@ void CPythonSystem::SetInterfaceHandler(PyObject * poHandler) { -// NOTE : ۷ īƮ ٲ ʴ´. ۷ ־ Python ʱ . -// ſ __del__ Destroy ȣ Handler NULL Ѵ. - [levites] +// NOTE : 레퍼런스 카운트는 바꾸지 않는다. 레퍼런스가 남아 있어 Python에서 완전히 지워지지 않기 때문. +// 대신에 __del__때 Destroy를 호출해 Handler를 NULL로 셋팅한다. - [levites] // if (m_poInterfaceHandler) // Py_DECREF(m_poInterfaceHandler); @@ -44,7 +44,7 @@ void CPythonSystem::GetDisplaySettings() lpD3D->GetAdapterIdentifier(D3DADAPTER_DEFAULT, D3DENUM_WHQL_LEVEL, &d3dAdapterIdentifier); lpD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddmDesktop); - // Ͱ ִ ÷ 尹 Ѵ.. + // 이 어뎁터가 가지고 있는 디스플래이 모드갯수를 나열한다.. DWORD dwNumAdapterModes = lpD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_UNKNOWN); for (UINT iMode = 0; iMode < dwNumAdapterModes; iMode++) @@ -53,12 +53,12 @@ void CPythonSystem::GetDisplaySettings() lpD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_UNKNOWN, iMode, &DisplayMode); DWORD bpp = 0; - // 800 600 ̻ ɷ. + // 800 600 이상만 걸러낸다. if (DisplayMode.Width < 800 || DisplayMode.Height < 600) continue; - // ϴ 16bbp 32bbp . - // 16bbp óϰԲ - [levites] + // 일단 16bbp 와 32bbp만 취급하자. + // 16bbp만 처리하게끔 했음 - [levites] if (DisplayMode.Format == D3DFMT_R5G6B5) bpp = 16; else if (DisplayMode.Format == D3DFMT_X8R8G8B8) @@ -77,7 +77,7 @@ void CPythonSystem::GetDisplaySettings() int check_fre = false; - // ø ٸǷ ø ش. + // 프리퀀시만 다르므로 프리퀀시만 셋팅해준다. for (int j = 0; j < m_ResolutionList[i].frequency_count; ++j) { if (m_ResolutionList[i].frequency[j] == DisplayMode.RefreshRate) @@ -96,7 +96,7 @@ void CPythonSystem::GetDisplaySettings() if (!check_res) { - // ο Ŵϱ ߰. + // 새로운 거니까 추가해주자. if (m_ResolutionCount < RESOLUTION_MAX_NUM) { m_ResolutionList[m_ResolutionCount].width = DisplayMode.Width; @@ -586,7 +586,7 @@ const CPythonSystem::TWindowStatus & CPythonSystem::GetWindowStatusReference(int return m_WindowStatus[iIndex]; } -void CPythonSystem::ApplyConfig() // ؼ ٲ Ѵ. +void CPythonSystem::ApplyConfig() // 이전 설정과 현재 설정을 비교해서 바뀐 설정을 적용 한다. { if (m_OldConfig.gamma != m_Config.gamma) { diff --git a/src/UserInterface/PythonTextTail.cpp b/src/UserInterface/PythonTextTail.cpp index 29865954..30dd0c6e 100644 --- a/src/UserInterface/PythonTextTail.cpp +++ b/src/UserInterface/PythonTextTail.cpp @@ -1,5 +1,5 @@ // -// ij͸ ٴϴ ؽƮ ҽ (̸, ̸, 帶ũ ) +// 캐릭터를 따라다니는 텍스트 관련 소스 (이름, 길드이름, 길드마크 등) // #include "stdafx.h" #include "InstanceBase.h" @@ -75,7 +75,7 @@ void CPythonTextTail::UpdateAllTextTail() { UpdateDistance(pixelPos, itorChat->second); - // NOTE : Chat TextTail ij ̸ Ѵ. + // NOTE : Chat TextTail이 있으면 캐릭터 이름도 출력한다. if (itorChat->second->bNameFlag) { DWORD dwVID = itorChat->first; @@ -104,7 +104,7 @@ void CPythonTextTail::UpdateShowingTextTail() TTextTail * pTextTail = *itor; UpdateTextTail(pTextTail); - // NOTE : Chat TextTail ġ ٲ۴. + // NOTE : Chat TextTail이 있을 경우 위치를 바꾼다. TChatTailMap::iterator itor = m_ChatTailMap.find(pTextTail->dwVirtualID); if (m_ChatTailMap.end() != itor) { @@ -138,7 +138,7 @@ void CPythonTextTail::UpdateTextTail(TTextTail * pTextTail) pTextTail->x = floorf(pTextTail->x); pTextTail->y = floorf(pTextTail->y); - // NOTE : 13m ۿ ̸ ֽϴ - [levites] + // NOTE : 13m 밖에 있을때만 깊이를 넣습니다 - [levites] if (pTextTail->fDistanceFromPlayer < 1300.0f) { pTextTail->z = 0.0f; @@ -215,7 +215,7 @@ void CPythonTextTail::ArrangeTextTail() float fxAdd = 0.0f; - // Mark ġ Ʈ + // Mark 위치 업데이트 CGraphicMarkInstance * pMarkInstance = pTextTail->pMarkInstance; CGraphicTextInstance * pGuildNameInstance = pTextTail->pGuildNameTextInstance; if (pMarkInstance && pGuildNameInstance) @@ -232,7 +232,7 @@ void CPythonTextTail::ArrangeTextTail() int iNameWidth, iNameHeight; pTextTail->pTextInstance->GetTextSize(&iNameWidth, &iNameHeight); - // Title ġ Ʈ + // Title 위치 업데이트 CGraphicTextInstance * pTitle = pTextTail->pTitleTextInstance; if (pTitle) { @@ -241,7 +241,7 @@ void CPythonTextTail::ArrangeTextTail() fxAdd = 8.0f; - if (LocaleService_IsEUROPE()) // Ͼ Ī + if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬 { if( GetDefaultCodePage() == CP_ARABIC ) { @@ -258,14 +258,14 @@ void CPythonTextTail::ArrangeTextTail() } pTitle->Update(); - // Level ġ Ʈ + // Level 위치 업데이트 CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance; if (pLevel) { int iLevelWidth, iLevelHeight; pLevel->GetTextSize(&iLevelWidth, &iLevelHeight); - if (LocaleService_IsEUROPE()) // Ͼ Ī + if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬 { if( GetDefaultCodePage() == CP_ARABIC ) { @@ -288,14 +288,14 @@ void CPythonTextTail::ArrangeTextTail() { fxAdd = 4.0f; - // Level ġ Ʈ + // Level 위치 업데이트 CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance; if (pLevel) { int iLevelWidth, iLevelHeight; pLevel->GetTextSize(&iLevelWidth, &iLevelHeight); - if (LocaleService_IsEUROPE()) // Ͼ Ī + if (LocaleService_IsEUROPE()) // 독일어는 명칭이 길어 오른정렬 { if( GetDefaultCodePage() == CP_ARABIC ) { @@ -382,7 +382,7 @@ void CPythonTextTail::Render() void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail) { - // ׵θ + // 검은색 테두리 CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f); CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart, pTextTail->y + pTextTail->yStart, @@ -390,7 +390,7 @@ void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail) pTextTail->y + pTextTail->yEnd, pTextTail->z); - // ڽ + // 검은색 투명박스 CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f); CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart, pTextTail->y + pTextTail->yStart, @@ -406,8 +406,8 @@ void CPythonTextTail::RenderTextTailName(TTextTail * pTextTail) void CPythonTextTail::HideAllTextTail() { - // NOTE : Show All ص Hide All ߻ ɼ - // ü ׷ ϰ ʾ - [levites] + // NOTE : Show All을 해준뒤 Hide All을 해주지 않으면 문제 발생 가능성 있음 + // 디자인 자체가 그렇게 깔끔하게 되지 않았음 - [levites] m_CharacterTextTailList.clear(); m_ItemTextTailList.clear(); } @@ -447,12 +447,12 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID) if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail)) { - //Tracef("̹ Ʈ : %d\n", VirtualID); + //Tracef("Already in the list : %d\n", VirtualID); return; } - // NOTE : ShowAll ÿ Instance Pointer ãƼ üũϹǷ ϰ ɸ ɼ ִ. - // CInstanceBase TextTail ִ .. + // NOTE : ShowAll 시에는 모든 Instance 의 Pointer 를 찾아서 체크하므로 부하가 걸릴 가능성도 있다. + // CInstanceBase 가 TextTail 을 직접 가지고 있는 것이 가장 좋은 형태일 듯.. if (!pTextTail->pOwner->isShow()) return; @@ -478,7 +478,7 @@ void CPythonTextTail::ShowItemTextTail(DWORD VirtualID) if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail)) { - //Tracef("̹ Ʈ : %d\n", VirtualID); + //Tracef("Already in the list : %d\n", VirtualID); return; } diff --git a/src/UserInterface/PythonTextTail.h b/src/UserInterface/PythonTextTail.h index ea59a0c0..ee14a4ad 100644 --- a/src/UserInterface/PythonTextTail.h +++ b/src/UserInterface/PythonTextTail.h @@ -3,7 +3,7 @@ #include "../eterBase/Singleton.h" /* - * ٴϴ ؽƮ ó + * 따라다니는 텍스트 처리 */ class CPythonTextTail : public CSingleton { @@ -20,8 +20,8 @@ class CPythonTextTail : public CSingleton CGraphicTextInstance* pLevelTextInstance; - // Todo : ̰ VID ٲٵ Ѵ. - // ijͰ ƨ ɼ + // Todo : 이건 전부 VID로 바꾸도록 한다. + // 도중 캐릭터가 없어질 경우 튕길 가능성이 있음 CGraphicObjectInstance * pOwner; DWORD dwVirtualID; @@ -29,7 +29,7 @@ class CPythonTextTail : public CSingleton float x, y, z; float fDistanceFromPlayer; D3DXCOLOR Color; - BOOL bNameFlag; // ̸ Բ Ӱ ÷ + BOOL bNameFlag; // 이름도 함께 켤것인지의 플래그 float xStart, yStart; float xEnd, yEnd; diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp index 122f191c..9eede980 100644 --- a/src/UserInterface/UserInterface.cpp +++ b/src/UserInterface/UserInterface.cpp @@ -239,20 +239,20 @@ bool PackInitialize(const char * c_pszFolder) } #ifdef _DISTRIBUTE - Tracef("˸: Դϴ.\n"); + Tracef("You are in pack mode.\n"); //if (0 == strPackType.compare("FILE")) //{ // bPackFirst = FALSE; - // Tracef("˸: Դϴ.\n"); + // Tracef("You are in file mode.\n"); //} //else //{ - // Tracef("˸: Դϴ.\n"); + // Tracef("You are in pack mode.\n"); //} #else bPackFirst = FALSE; - Tracef("˸: Դϴ.\n"); + Tracef("You are in file mode.\n"); #endif CTextFileLoader::SetCacheMode(); @@ -262,7 +262,7 @@ bool PackInitialize(const char * c_pszFolder) CEterPackManager::Instance().SetCacheMode(); CEterPackManager::Instance().SetSearchMode(bPackFirst); - CSoundData::SetPackMode(); // Miles ݹ + CSoundData::SetPackMode(); // Miles 파일 콜백을 셋팅 std::string strPackName, strTexCachePackName; for (DWORD i = 1; i < TextLoader.GetLineCount() - 1; i += 2) @@ -353,7 +353,7 @@ bool RunMainScript(CPythonLauncher& pyLauncher, const char* lpCmdLine) SplitLine(lpCmdLine,seperator,&stVec); if (CmdSize == stVec.size() && stVec[0]==loginMark) { - char buf[MAX_PATH]; //TODO Ʒ Լ string · + char buf[MAX_PATH]; //TODO 아래 함수 string 형태로 수정 base64_decode(stVec[2].c_str(),buf); stVec[2] = buf; string_join(seperator,stVec,&stCmdLine); @@ -462,12 +462,12 @@ bool Main(HINSTANCE hInstance, LPSTR lpCmdLine) if (pyLauncher.Create()) { - ret=RunMainScript(pyLauncher, lpCmdLine); // ߿ Լ ʴ´. + ret=RunMainScript(pyLauncher, lpCmdLine); //게임 실행중엔 함수가 끝나지 않는다. } //ProcessScanner_ReleaseQuitEvent(); - // . + //게임 종료시. app->Clear(); timeEndPeriod(1); @@ -538,14 +538,14 @@ bool __IsLocaleVersion(LPSTR lpCmdLine) } #ifdef USE_OPENID -//2012.07.16 -//Ϻ OpenID . Ű ߰ +//2012.07.16 김용욱 +//일본 OpenID 지원. 인증키 인자 추가 bool __IsOpenIDAuthKeyOption(LPSTR lpCmdLine) { return (strcmp(lpCmdLine, "--openid-authkey") == 0); } -bool __IsOpenIDTestOption(LPSTR lpCmdLine) //Ŭ̾Ʈ α ϴ. +bool __IsOpenIDTestOption(LPSTR lpCmdLine) //클라이언트에서 로그인이 가능하다. { return (strcmp(lpCmdLine, "--openid-test") == 0); } @@ -567,14 +567,14 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi SetDefaultCodePage(LocaleService_GetCodePage()); bool bQuit = false; - bool bAuthKeyChecked = false; //OpenID Ű Դ ˱ . + bool bAuthKeyChecked = false; //OpenID 버전에서 인증키가 들어왔는지 알기 위한 인자. int nArgc = 0; PCHAR* szArgv = CommandLineToArgv( lpCmdLine, &nArgc ); for( int i=0; i < nArgc; i++ ) { if(szArgv[i] == 0) continue; - if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] ׻ ʵ + if (__IsLocaleVersion(szArgv[i])) // #0000829: [M2EU] 버전 파일이 항상 생기지 않도록 수정 { char szModuleName[MAX_PATH]; char szVersionPath[MAX_PATH]; @@ -601,7 +601,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi bQuit = true; } else if ((strcmp(szArgv[i], "--force-set-locale") == 0)) { - // locale ڰ ʿ ( Ī, ) + // locale 설정엔 인자가 두 개 더 필요함 (로케일 명칭, 데이터 경로) if (nArgc <= i + 2) { MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP); @@ -614,9 +614,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi LocaleService_ForceSetLocale(localeName, localePath); } #ifdef USE_OPENID - else if (__IsOpenIDAuthKeyOption(szArgv[i])) //2012.07.16 OpenID : + else if (__IsOpenIDAuthKeyOption(szArgv[i])) //2012.07.16 OpenID : 김용욱 { - // Ű ڰ ʿ (Ű) + // 인증키 설정엔 인자가 한 개 더 필요함 (인증키) if (nArgc <= i + 1) { MessageBox(NULL, "Invalid arguments", ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP); @@ -626,7 +626,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi const char* authKey = szArgv[++i]; //ongoing (2012.07.16) - //Ű ϴ κ + //인증키 저장하는 부분 LocaleService_SetOpenIDAuthKey(authKey); bAuthKeyChecked = true; @@ -641,7 +641,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi #ifdef USE_OPENID //OpenID - //OpenID Ŭ̾Ʈ Ű ޾ƿ ( ϰ ) Ŭ̾Ʈ . + //OpenID 클라이언트의 경우인증키를 받아오지 않을 경우 (웹을 제외하고 실행 시) 클라이언트 종료. if (false == bAuthKeyChecked && !openid_test) { @@ -655,7 +655,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi goto Clean; #if defined(NEEDED_COMMAND_ARGUMENT) - // ɼ , α׷ + // 옵션이 없으면 비정상 실행으로 간주, 프로그램 종료 if (strstr(lpCmdLine, NEEDED_COMMAND_ARGUMENT) == 0) { MessageBox(NULL, ApplicationStringTable_GetStringz(IDS_ERR_MUST_LAUNCH_FROM_PATCHER, "ERR_MUST_LAUNCH_FROM_PATCHER"), ApplicationStringTable_GetStringz(IDS_APP_NAME, "APP_NAME"), MB_ICONSTOP); goto Clean; @@ -713,7 +713,7 @@ static void GrannyError(granny_log_message_type Type, int Setup(LPSTR lpCmdLine) { /* - * Ÿ̸ е ø. + * 타이머 정밀도를 올린다. */ TIMECAPS tc; UINT wTimerRes; @@ -725,7 +725,7 @@ int Setup(LPSTR lpCmdLine) timeBeginPeriod(wTimerRes); /* - * ׷ ڵ鸵 + * 그래니 에러 핸들링 */ granny_log_callback Callback;