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/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/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/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/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/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/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/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 d028e7a6..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); 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/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 443efcc7..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,8 +274,8 @@ 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); } 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/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/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/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/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/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/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/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/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/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 395238a0..c3676431 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 "\xB1\xBC\xB8\xB2" Ʈ ⺻ 12 ε - // :18.fnt "\xB1\xBC\xB8\xB2" Ʈ 18 ε - // :14i.fnt "\xB1\xBC\xB8\xB2" Ʈ 14 & Ÿ ε + // 굴림.fnt "\xB1\xBC\xB8\xB2" 폰트 기본 사이즈 12 로 로딩 + // 굴림:18.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 18 로 로딩 + // 굴림:14i.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 14 & 이탤릭으로 로딩 const char * p = strrchr(GetFileName(), ':'); if (p) diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp index aa93bbb7..e520ea58 100644 --- a/src/EterLib/GrpTextInstance.cpp +++ b/src/EterLib/GrpTextInstance.cpp @@ -121,7 +121,7 @@ int ReadToken(const char* token) void CGraphicTextInstance::Update() { - if (m_isUpdate) // ڿ ٲ Ʈ Ѵ. + if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다. return; if (m_roText.IsNull()) @@ -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/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/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/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/Util.cpp b/src/EterLib/Util.cpp index d7913374..cccd5715 100644 --- a/src/EterLib/Util.cpp +++ b/src/EterLib/Util.cpp @@ -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/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 110376f2..9dd31ce3 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/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/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/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp index 66d91d58..5e3a7690 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 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" , __IsShowing "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" üũѴ - // ڽ Show Tree Parent ϳ Hide Ƿ.. - [levites] + // NOTE : IsShow는 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" 이지만, __IsShowing은 "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" 를 체크한다 + // 자신은 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/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 47d092cc..4301cc02 100644 --- a/src/EterPythonLib/PythonWindowManagerModule.cpp +++ b/src/EterPythonLib/PythonWindowManagerModule.cpp @@ -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/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 38d11517..25c50e8b 100644 --- a/src/GameLib/ActorInstanceBattle.cpp +++ b/src/GameLib/ActorInstanceBattle.cpp @@ -170,10 +170,10 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) } else if (m_pkCurRaceMotionData->IsComboInputTimeData()) { - // ð + // 동작 경과 시간 float fElapsedTime = GetAttackingElapsedTime(); - // ̹ Է Ѱ ð ٸ.. + // 이미 입력 한계 시간이 지났다면.. if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime()) { //Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2"); @@ -182,14 +182,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) return false; } - if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면 { //Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB"); // args : BlendingTime __RunNextCombo(); return true; } - else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // Է ð .. + else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면.. { //Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4"); m_isPreInput = TRUE; @@ -199,7 +199,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) else { float fElapsedTime = GetAttackingElapsedTime(); - if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면 { //Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB"); // args : BlendingTime @@ -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 586b3459..3af4004d 100644 --- a/src/GameLib/ActorInstanceMotion.cpp +++ b/src/GameLib/ActorInstanceMotion.cpp @@ -69,7 +69,7 @@ void CActorInstance::ReservingMotionProcess() SetEndStopMotion(); - // 1ʾ + // 이후의 모션 전부 1초씩 딜레이 TMotionDeque::iterator itor = m_MotionDeque.begin(); for (; itor != m_MotionDeque.end(); ++itor) { @@ -99,11 +99,11 @@ void CActorInstance::ReservingMotionProcess() if (IsDead()) { //Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1"); - // ͷ + // 예전 데이터로 복구 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 @@ -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,11 +752,11 @@ 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 ʱȭ Ǿ . + // NOTE : ClearCombo() 를 수행해서는 안된다. + // 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다. //Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\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 a95070a1..4572a61d 100644 --- a/src/GameLib/ActorInstanceRotation.cpp +++ b/src/GameLib/ActorInstanceRotation.cpp @@ -62,7 +62,7 @@ void CActorInstance::RotationProcess() m_fcurRotation = m_rotEnd; } - // FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9" ٲ۴. - [levites] + // FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [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/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/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/ItemData.cpp b/src/GameLib/ItemData.cpp index 48f64fde..fb6efaee 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)) @@ -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/MapBase.cpp b/src/GameLib/MapBase.cpp index c27c615d..347b7712 100644 --- a/src/GameLib/MapBase.cpp +++ b/src/GameLib/MapBase.cpp @@ -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]; diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp index 0d7128c7..3cb3ebe3 100644 --- a/src/GameLib/MapManager.cpp +++ b/src/GameLib/MapManager.cpp @@ -8,7 +8,7 @@ #include "PropertyLoader.h" ////////////////////////////////////////////////////////////////////////// -// ⺻ Լ +// 기본 함수 ////////////////////////////////////////////////////////////////////////// bool CMapManager::IsMapOutdoor() 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/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp index 55835996..708904b1 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,14 +390,14 @@ 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 Ǿ ʾƵ + // TextureSet 이 적용되어 있지 않아도 진행 LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9."); #else TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str()); 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 7337f05a..33191e84 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); /* 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/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/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 f5a11841..ea34b781 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,7 +219,7 @@ 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+"); 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/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/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/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 eb1ea1c1..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 diff --git a/src/MilesLib/SoundManager.cpp b/src/MilesLib/SoundManager.cpp index 7d8ce91c..159f6aac 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; @@ -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 29258d6a..a717fd2b 100644 --- a/src/MilesLib/Type.cpp +++ b/src/MilesLib/Type.cpp @@ -77,11 +77,11 @@ bool NSound::LoadSoundInformationPiece(const char * c_szFileName, NSound::TSound 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; } diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp index 0bf0f780..a7eac9b2 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) @@ -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/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/CameraProcedure.cpp b/src/UserInterface/CameraProcedure.cpp index 79bb0783..de16b46d 100644 --- a/src/UserInterface/CameraProcedure.cpp +++ b/src/UserInterface/CameraProcedure.cpp @@ -3,7 +3,7 @@ #include "../eterlib/Camera.h" ////////////////////////////////////////////////////////////////////////// -// ޼ +// 메세지 extern void SetHeightLog(bool isLog); @@ -135,7 +135,7 @@ void CCamera::ProcessBuildingCollision() Vector3d aVector3d; aVector3d.Set(m_v3Eye.x, m_v3Eye.y, m_v3Eye.z); - // + // 뒤 CCullingManager & rkCullingMgr = CCullingManager::Instance(); @@ -186,7 +186,7 @@ void CCamera::ProcessBuildingCollision() } } - // + // 위 { v3CheckVector = m_v3Eye + 2.0f * m_fObjectCollisionRadius * m_v3Up; s.v3Position = v3CheckVector; @@ -203,7 +203,7 @@ void CCamera::ProcessBuildingCollision() } } - // + // 좌 { v3CheckVector = m_v3Eye + 3.0f * m_fObjectCollisionRadius * m_v3Cross; s.v3Position = v3CheckVector; @@ -223,7 +223,7 @@ void CCamera::ProcessBuildingCollision() } } - // + // 우 { v3CheckVector = m_v3Eye - 3.0f * m_fObjectCollisionRadius * m_v3Cross; s.v3Position = v3CheckVector; @@ -243,7 +243,7 @@ void CCamera::ProcessBuildingCollision() } } - // Ʒ + // 아래 { v3CheckVector = m_v3Eye - 2.0f * m_fTerrainCollisionRadius * m_v3Up; s.v3Position = v3CheckVector; @@ -263,7 +263,7 @@ void CCamera::ProcessBuildingCollision() } } - // + // 앞 { v3CheckVector = m_v3Eye + 4.0f * m_fObjectCollisionRadius * m_v3View; s.v3Position = v3CheckVector; diff --git a/src/UserInterface/GameType.cpp b/src/UserInterface/GameType.cpp index fc3114b5..7dd2fc43 100644 --- a/src/UserInterface/GameType.cpp +++ b/src/UserInterface/GameType.cpp @@ -97,9 +97,9 @@ BYTE c_aSlotTypeToInvenType[SLOT_TYPE_MAX] = RESERVED_WINDOW, // SLOT_TYPE_EXCHANGE_OWNER RESERVED_WINDOW, // SLOT_TYPE_EXCHANGE_TARGET RESERVED_WINDOW, // SLOT_TYPE_QUICK_SLOT - RESERVED_WINDOW, // SLOT_TYPE_SAFEBOX <- SAFEBOX, MALL ϵ ڵǾִ LEGACY ڵ带 . + RESERVED_WINDOW, // SLOT_TYPE_SAFEBOX <- SAFEBOX, MALL의 경우 하드 코딩되어있는 LEGACY 코드를 유지함. RESERVED_WINDOW, // SLOT_TYPE_PRIVATE_SHOP - RESERVED_WINDOW, // SLOT_TYPE_MALL <- SAFEBOX, MALL ϵ ڵǾִ LEGACY ڵ带 . + RESERVED_WINDOW, // SLOT_TYPE_MALL <- SAFEBOX, MALL의 경우 하드 코딩되어있는 LEGACY 코드를 유지함. DRAGON_SOUL_INVENTORY, // SLOT_TYPE_DRAGON_SOUL_INVENTORY }; diff --git a/src/UserInterface/GuildMarkDownloader.cpp b/src/UserInterface/GuildMarkDownloader.cpp index fb0c9712..2f931b16 100644 --- a/src/UserInterface/GuildMarkDownloader.cpp +++ b/src/UserInterface/GuildMarkDownloader.cpp @@ -158,7 +158,7 @@ UINT CGuildMarkDownloader::__GetPacketSize(UINT header) return sizeof(TPacketGCMarkBlock); case HEADER_GC_GUILD_SYMBOL_DATA: return sizeof(TPacketGCGuildSymbolData); - case HEADER_GC_MARK_DIFF_DATA: // + case HEADER_GC_MARK_DIFF_DATA: // 사용하지 않음 return sizeof(BYTE); } return 0; @@ -180,7 +180,7 @@ bool CGuildMarkDownloader::__DispatchPacket(UINT header) return __LoginState_RecvMarkBlock(); case HEADER_GC_GUILD_SYMBOL_DATA: return __LoginState_RecvSymbolData(); - case HEADER_GC_MARK_DIFF_DATA: // + case HEADER_GC_MARK_DIFF_DATA: // 사용하지 않음 return true; } return false; @@ -289,11 +289,11 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkIndex() Recv(sizeof(WORD), &guildID); Recv(sizeof(WORD), &markID); - // ID -> ũ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 316623f3..805459fe 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: @@ -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) @@ -1571,7 +1571,7 @@ void CInstanceBase::MovementProcess() TPixelPosition kPPosCur; NEW_GetPixelPosition(&kPPosCur); - // ǥ̹Ƿ y -ȭؼ Ѵ. + // 렌더링 좌표계이므로 y를 -화해서 더한다. TPixelPosition kPPosNext; { @@ -1629,7 +1629,7 @@ void CInstanceBase::MovementProcess() SetAdvancingRotation(fDstRot); - // Ͻð ʾ ʹ ̵ߴٸ.. + // 만약 렌턴시가 늦어 너무 많이 이동했다면.. if (fRestLen < -100.0f) { NEW_SetSrcPixelPosition(kPPosCur); @@ -1638,13 +1638,13 @@ void CInstanceBase::MovementProcess() SetAdvancingRotation(fDstRot); //Tracenf("VID %d \xBF\xC0\xB9\xF6 \xB9\xE6\xC7\xE2\xBC\xB3\xC1\xA4 (%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()) @@ -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/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp index 37160d1f..5e8942b9 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__ @@ -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(); //////////////////////////////////////// diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp index c183d678..13c22259 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 { @@ -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/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/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/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/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/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp index 449052c8..2e96ce22 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(); @@ -541,11 +541,11 @@ 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; @@ -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/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 44c9983d..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(); 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/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp index 1a48e1f6..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,7 +584,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) int idx = atoi(GetArgument("idx", ScriptCommand.argList)); const char * name = GetArgument("name", ScriptCommand.argList); - // Ʈ UI Ǹ ذ ǹǷ ϴ ȥ by chrislee + // 퀘스트 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", "")); } 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/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/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/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp index 70217199..e0179917 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; } diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp index 44c1472a..efa11f4d 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'; - // ƶ ó - // "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" Է "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" ϱ (0x08) - // ƶ ȣ ó (1) : (2) ԷµǾ (2) : (1) ϰ + // 유럽 아랍 버전 처리 + // "\xC0\xCC\xB8\xA7: \xB3\xBB\xBF\xEB" 입력을 "\xB3\xBB\xBF\xEB: \xC0\xCC\xB8\xA7" 순서로 출력하기 위해 탭(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()) { @@ -2149,7 +2149,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket() return SendSequence(); } -// PointReset ӽ +// PointReset 개임시 bool CPythonNetworkStream::SendPointResetPacket() { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()")); @@ -2927,7 +2927,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 +3291,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 +4110,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 @@ -4382,7 +4382,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 c11f2224..82c1aa8b 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) @@ -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 5606eee2..cab142a6 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp @@ -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; 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/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 b0a13458..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; @@ -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/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp index 615bd4f5..25898557 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(); 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 790e5973..f20dd23d 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(); @@ -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 bbc6bea0..2d1c8750 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 @@ -676,7 +676,7 @@ bool CPythonPlayer::__UseSkill(DWORD 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 174d6838..1cf1f747 100644 --- a/src/UserInterface/PythonQuest.cpp +++ b/src/UserInterface/PythonQuest.cpp @@ -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/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp index d2b98b9e..9e8906d3 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]; @@ -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/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 86a5c3c8..b05ab052 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(); } @@ -451,8 +451,8 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID) return; } - // NOTE : ShowAll ÿ Instance Pointer ãƼ üũϹǷ ϰ ɸ ɼ ִ. - // CInstanceBase TextTail ִ .. + // NOTE : ShowAll 시에는 모든 Instance 의 Pointer 를 찾아서 체크하므로 부하가 걸릴 가능성도 있다. + // CInstanceBase 가 TextTail 을 직접 가지고 있는 것이 가장 좋은 형태일 듯.. if (!pTextTail->pOwner->isShow()) return; diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp index b3e0a999..2a6aee3a 100644 --- a/src/UserInterface/UserInterface.cpp +++ b/src/UserInterface/UserInterface.cpp @@ -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;