From ea712bec83734806d4c6043a2c83561ce9987ed5 Mon Sep 17 00:00:00 2001 From: d1str4ught <> Date: Tue, 19 Aug 2025 00:30:50 +0200 Subject: [PATCH] file encoding to utf-8 --- src/EffectLib/EffectData.h | 4 +- src/EffectLib/EffectInstance.cpp | 2 +- src/EffectLib/EffectManager.cpp | 6 +- src/EffectLib/EffectManager.h | 4 +- src/EffectLib/EffectMeshInstance.h | 2 +- src/EffectLib/ParticleInstance.cpp | 16 +- src/EffectLib/ParticleSystemInstance.cpp | 10 +- src/EffectLib/Type.h | 8 +- src/EterBase/CPostIt.h | 34 +- src/EterBase/FileDir.cpp | 6 +- src/EterBase/FileLoader.cpp | 4 +- src/EterBase/FileLoader.h | 2 +- src/EterBase/MappedFile.cpp | 8 +- src/EterBase/StdAfx.h | 2 +- src/EterBase/Timer.cpp | 6 +- src/EterBase/Utils.cpp | 2 +- src/EterBase/Utils.h | 6 +- src/EterBase/error.cpp | 2 +- src/EterBase/lzo.cpp | 12 +- src/EterBase/lzo.h | 6 +- src/EterBase/tea.cpp | 18 +- src/EterGrnLib/LODController.cpp | 10 +- src/EterGrnLib/LODController.h | 2 +- src/EterGrnLib/Material.cpp | 8 +- src/EterGrnLib/Mesh.cpp | 4 +- src/EterGrnLib/Model.cpp | 2 +- src/EterGrnLib/ModelInstance.h | 16 +- .../ModelInstanceCollisionDetection.cpp | 2 +- src/EterGrnLib/ModelInstanceModel.cpp | 8 +- src/EterGrnLib/ModelInstanceMotion.cpp | 2 +- src/EterGrnLib/ModelInstanceRender.cpp | 4 +- src/EterGrnLib/StdAfx.h | 2 +- src/EterGrnLib/ThingInstance.cpp | 6 +- src/EterGrnLib/ThingInstance.h | 2 +- src/EterImageLib/Image.h | 8 +- src/EterImageLib/TGAImage.cpp | 14 +- src/EterLib/AttributeData.cpp | 2 +- src/EterLib/AttributeInstance.h | 2 +- src/EterLib/Camera.cpp | 4 +- src/EterLib/Camera.h | 44 +-- src/EterLib/CollisionData.cpp | 8 +- src/EterLib/ColorTransitionHelper.h | 6 +- src/EterLib/CullingManager.cpp | 2 +- src/EterLib/Decal.h | 6 +- src/EterLib/FileLoaderThread.cpp | 2 +- src/EterLib/GrpBase.cpp | 4 +- src/EterLib/GrpBase.h | 6 +- src/EterLib/GrpCollisionObject.h | 4 +- src/EterLib/GrpDevice.cpp | 6 +- src/EterLib/GrpDevice.h | 4 +- src/EterLib/GrpExpandedImageInstance.cpp | 2 +- src/EterLib/GrpFontTexture.cpp | 2 +- src/EterLib/GrpImage.cpp | 2 +- src/EterLib/GrpImageInstance.cpp | 4 +- src/EterLib/GrpImageTexture.cpp | 4 +- src/EterLib/GrpLightManager.cpp | 12 +- src/EterLib/GrpLightManager.h | 4 +- src/EterLib/GrpMarkInstance.cpp | 2 +- src/EterLib/GrpScreen.cpp | 8 +- src/EterLib/GrpText.cpp | 6 +- src/EterLib/GrpTextInstance.cpp | 90 ++--- src/EterLib/GrpVertexBufferStatic.cpp | 2 +- src/EterLib/IME.cpp | 8 +- src/EterLib/Input.cpp | 4 +- src/EterLib/LensFlare.cpp | 2 +- src/EterLib/LensFlare.h | 2 +- src/EterLib/NetStream.h | 4 +- src/EterLib/Profiler.h | 4 +- src/EterLib/Resource.cpp | 4 +- src/EterLib/ResourceManager.cpp | 16 +- src/EterLib/ResourceManager.h | 4 +- src/EterLib/SkyBox.cpp | 6 +- src/EterLib/SkyBox.h | 12 +- src/EterLib/StdAfx.h | 2 +- src/EterLib/TextTag.cpp | 16 +- src/EterLib/Thread.h | 4 +- src/EterLib/Util.cpp | 16 +- src/EterLib/parser.cpp | 10 +- src/EterLib/parser.h | 20 +- src/EterLocale/Arabic.cpp | 4 +- src/EterPack/EterPack.cpp | 58 ++-- src/EterPack/EterPack.h | 8 +- src/EterPack/EterPackManager.cpp | 12 +- src/EterPack/EterPackManager.h | 4 +- src/EterPythonLib/PythonGraphicTextModule.cpp | 8 +- src/EterPythonLib/PythonGridSlotWindow.cpp | 22 +- src/EterPythonLib/PythonSlotWindow.cpp | 18 +- src/EterPythonLib/PythonSlotWindow.h | 8 +- src/EterPythonLib/PythonWindow.cpp | 16 +- src/EterPythonLib/PythonWindow.h | 28 +- src/EterPythonLib/PythonWindowManager.cpp | 16 +- .../PythonWindowManagerModule.cpp | 6 +- src/GameLib/ActorInstance.cpp | 18 +- src/GameLib/ActorInstance.h | 72 ++-- src/GameLib/ActorInstanceAttach.cpp | 10 +- src/GameLib/ActorInstanceBattle.cpp | 52 +-- .../ActorInstanceCollisionDetection.cpp | 50 +-- src/GameLib/ActorInstanceData.cpp | 2 +- src/GameLib/ActorInstanceFly.cpp | 2 +- src/GameLib/ActorInstanceMotion.cpp | 46 +-- src/GameLib/ActorInstanceMotionEvent.cpp | 4 +- src/GameLib/ActorInstanceRender.cpp | 4 +- src/GameLib/ActorInstanceRotation.cpp | 2 +- src/GameLib/Area.cpp | 18 +- src/GameLib/Area.h | 6 +- src/GameLib/AreaLoaderThread.cpp | 2 +- src/GameLib/AreaTerrain.cpp | 10 +- src/GameLib/FlyTrace.cpp | 4 +- src/GameLib/FlyingInstance.cpp | 8 +- src/GameLib/FlyingInstance.h | 8 +- src/GameLib/GameEventManager.h | 6 +- src/GameLib/GameType.cpp | 4 +- src/GameLib/GameUtil.cpp | 14 +- src/GameLib/Interface.h | 2 +- src/GameLib/ItemData.cpp | 14 +- src/GameLib/ItemData.h | 150 ++++---- src/GameLib/MapBase.cpp | 8 +- src/GameLib/MapBase.h | 14 +- src/GameLib/MapManager.cpp | 8 +- src/GameLib/MapManager.h | 10 +- src/GameLib/MapOutdoor.cpp | 4 +- src/GameLib/MapOutdoor.h | 22 +- src/GameLib/MapOutdoorLoad.cpp | 20 +- src/GameLib/MapOutdoorQuadtree.cpp | 2 +- src/GameLib/MapOutdoorRender.cpp | 16 +- src/GameLib/MapOutdoorRenderHTP.cpp | 8 +- src/GameLib/MapOutdoorRenderSTP.cpp | 2 +- src/GameLib/MapOutdoorUpdate.cpp | 6 +- src/GameLib/MapOutdoorWater.cpp | 6 +- src/GameLib/MapType.h | 2 +- src/GameLib/MonsterAreaInfo.cpp | 6 +- src/GameLib/MonsterAreaInfo.h | 6 +- src/GameLib/PhysicsObject.cpp | 8 +- src/GameLib/PhysicsObject.h | 4 +- src/GameLib/Property.cpp | 16 +- src/GameLib/PropertyLoader.cpp | 4 +- src/GameLib/PropertyManager.cpp | 10 +- src/GameLib/RaceData.cpp | 8 +- src/GameLib/RaceData.h | 4 +- src/GameLib/RaceDataFile.cpp | 4 +- src/GameLib/RaceManager.cpp | 6 +- src/GameLib/RaceMotionData.h | 78 ++--- src/GameLib/SnowEnvironment.cpp | 2 +- src/GameLib/StdAfx.h | 2 +- src/GameLib/WeaponTrace.cpp | 4 +- src/PRTerrainLib/Terrain.h | 4 +- src/PRTerrainLib/TextureSet.cpp | 10 +- src/PRTerrainLib/TextureSet.h | 2 +- src/ScriptLib/PythonUtils.cpp | 12 +- src/SpeedTreeLib/SpeedTreeForest.cpp | 4 +- src/SpeedTreeLib/SpeedTreeForestDirectX8.cpp | 4 +- src/SpeedTreeLib/SpeedTreeWrapper.cpp | 4 +- src/SpeedTreeLib/SpeedTreeWrapper.h | 4 +- src/UserInterface/AccountConnector.cpp | 26 +- src/UserInterface/AccountConnector.h | 4 +- src/UserInterface/CameraProcedure.cpp | 14 +- src/UserInterface/CheckLatestFiles.cpp | 2 +- src/UserInterface/GameType.cpp | 8 +- src/UserInterface/GameType.h | 36 +- src/UserInterface/GuildMarkDownloader.cpp | 22 +- src/UserInterface/GuildMarkUploader.cpp | 6 +- src/UserInterface/HackShield.cpp | 66 ++-- src/UserInterface/Hackshield.h | 2 +- src/UserInterface/InstanceBase.cpp | 138 ++++---- src/UserInterface/InstanceBase.h | 102 +++--- src/UserInterface/InstanceBaseBattle.cpp | 32 +- src/UserInterface/InstanceBaseEffect.cpp | 38 +- src/UserInterface/InstanceBaseMovement.cpp | 2 +- src/UserInterface/Locale.cpp | 2 +- src/UserInterface/Locale_inc.h | 2 +- src/UserInterface/Locale_inc_BR.h | 2 +- src/UserInterface/Locale_inc_CA.h | 2 +- src/UserInterface/Locale_inc_EU.h | 2 +- src/UserInterface/Locale_inc_EU2.h | 2 +- src/UserInterface/Locale_inc_HK.h | 2 +- src/UserInterface/Locale_inc_JP.h | 4 +- src/UserInterface/Locale_inc_NEWCIBN.h | 2 +- src/UserInterface/Locale_inc_SG.h | 2 +- src/UserInterface/Locale_inc_VI.h | 2 +- src/UserInterface/MarkImage.cpp | 14 +- src/UserInterface/MarkImage.h | 14 +- src/UserInterface/MarkManager.cpp | 10 +- src/UserInterface/MarkManager.h | 8 +- src/UserInterface/MovieMan.cpp | 84 ++--- src/UserInterface/MovieMan.h | 4 +- src/UserInterface/NProtectGameGuard.cpp | 36 +- src/UserInterface/NetworkActorManager.cpp | 4 +- src/UserInterface/NetworkActorManager.h | 2 +- src/UserInterface/Packet.h | 326 +++++++++--------- src/UserInterface/PythonApplication.cpp | 74 ++-- src/UserInterface/PythonApplication.h | 14 +- src/UserInterface/PythonApplicationCamera.cpp | 2 +- src/UserInterface/PythonApplicationCursor.cpp | 4 +- src/UserInterface/PythonApplicationEvent.cpp | 2 +- src/UserInterface/PythonApplicationLogo.cpp | 24 +- src/UserInterface/PythonApplicationModule.cpp | 2 +- .../PythonApplicationProcedure.cpp | 2 +- src/UserInterface/PythonBackground.cpp | 2 +- src/UserInterface/PythonBackgroundModule.cpp | 4 +- src/UserInterface/PythonCharacterManager.cpp | 14 +- .../PythonCharacterManagerModule.cpp | 16 +- src/UserInterface/PythonCharacterModule.cpp | 4 +- src/UserInterface/PythonChat.cpp | 6 +- src/UserInterface/PythonChatModule.cpp | 2 +- src/UserInterface/PythonEventManager.cpp | 12 +- src/UserInterface/PythonExchange.cpp | 6 +- src/UserInterface/PythonExchange.h | 4 +- src/UserInterface/PythonGuild.cpp | 2 +- src/UserInterface/PythonItem.cpp | 6 +- src/UserInterface/PythonItem.h | 6 +- src/UserInterface/PythonItemModule.cpp | 68 ++-- src/UserInterface/PythonMiniMap.cpp | 14 +- src/UserInterface/PythonMiniMap.h | 8 +- src/UserInterface/PythonNetworkStream.cpp | 24 +- src/UserInterface/PythonNetworkStream.h | 16 +- .../PythonNetworkStreamCommand.cpp | 12 +- .../PythonNetworkStreamModule.cpp | 2 +- .../PythonNetworkStreamPhaseGame.cpp | 76 ++-- .../PythonNetworkStreamPhaseGameActor.cpp | 22 +- .../PythonNetworkStreamPhaseGameItem.cpp | 10 +- .../PythonNetworkStreamPhaseHandShake.cpp | 6 +- .../PythonNetworkStreamPhaseLogin.cpp | 4 +- src/UserInterface/PythonNonPlayer.cpp | 2 +- src/UserInterface/PythonNonPlayer.h | 2 +- src/UserInterface/PythonPackModule.cpp | 4 +- src/UserInterface/PythonPlayer.cpp | 8 +- src/UserInterface/PythonPlayer.h | 30 +- .../PythonPlayerEventHandler.cpp | 8 +- src/UserInterface/PythonPlayerEventHandler.h | 6 +- src/UserInterface/PythonPlayerInput.cpp | 34 +- src/UserInterface/PythonPlayerInputMouse.cpp | 12 +- src/UserInterface/PythonPlayerModule.cpp | 34 +- src/UserInterface/PythonPlayerSkill.cpp | 52 +-- src/UserInterface/PythonQuest.cpp | 8 +- src/UserInterface/PythonShop.h | 8 +- src/UserInterface/PythonSkill.cpp | 18 +- src/UserInterface/PythonSkill.h | 8 +- src/UserInterface/PythonSystem.cpp | 18 +- src/UserInterface/PythonTextTail.cpp | 38 +- src/UserInterface/PythonTextTail.h | 8 +- src/UserInterface/UserInterface.cpp | 42 +-- 241 files changed, 1753 insertions(+), 1753 deletions(-) diff --git a/src/EffectLib/EffectData.h b/src/EffectLib/EffectData.h index b452727..9f1baa2 100644 --- a/src/EffectLib/EffectData.h +++ b/src/EffectLib/EffectData.h @@ -42,8 +42,8 @@ class CEffectData void __ClearLightDataVector(); void __ClearMeshDataVector(); - // FIXME : κ ״ ʴ´. ̵ ãƳ ġ. - // (Ưȭ) ̽ ٲ Ѵٴ ϴ. - [levites] + // FIXME : 이 부분은 그다지 맘에 들지 않는다. 좋은 아이디어를 찾아내어 고치자. + // 상위가 (특화된) 상위의 인터페이스 때문에 모양이 바뀌어야 한다는 것은 옳지 못하다. - [levites] virtual CParticleSystemData * AllocParticle(); virtual CEffectMeshScript * AllocMesh(); virtual CLightData * AllocLight(); diff --git a/src/EffectLib/EffectInstance.cpp b/src/EffectLib/EffectInstance.cpp index 6f4c5fa..a3228fd 100644 --- a/src/EffectLib/EffectInstance.cpp +++ b/src/EffectLib/EffectInstance.cpp @@ -56,7 +56,7 @@ void CEffectInstance::UpdateSound() m_matGlobal._42, m_matGlobal._43, false); - // NOTE : Ʈ ġ ´ - [levites] + // NOTE : 매트릭스에서 위치를 직접 얻어온다 - [levites] } ++m_dwFrame; } diff --git a/src/EffectLib/EffectManager.cpp b/src/EffectLib/EffectManager.cpp index 480f825..165ba3c 100644 --- a/src/EffectLib/EffectManager.cpp +++ b/src/EffectLib/EffectManager.cpp @@ -48,7 +48,7 @@ bool CEffectManager::IsAliveEffect(DWORD dwInstanceIndex) void CEffectManager::Update() { - // 2004. 3. 1. myevan. Ʈ ͸ ϴ ڵ + // 2004. 3. 1. myevan. 이펙트 모니터링 하는 코드 /* if (GetAsyncKeyState(VK_F9)) { @@ -173,8 +173,8 @@ BOOL CEffectManager::RegisterEffect(const char * c_szFileName,bool isExistDelete return TRUE; } -// CEffectData ϰ ϰ.. -// CEffectData CRC ְ Ѵ +// CEffectData 를 포인터형으로 리턴하게 하고.. +// CEffectData에서 CRC를 얻을수 있게 한다 BOOL CEffectManager::RegisterEffect2(const char * c_szFileName, DWORD* pdwRetCRC, bool isNeedCache) { std::string strFileName; diff --git a/src/EffectLib/EffectManager.h b/src/EffectLib/EffectManager.h index 682f1fd..a395a85 100644 --- a/src/EffectLib/EffectManager.h +++ b/src/EffectLib/EffectManager.h @@ -62,8 +62,8 @@ class CEffectManager : public CScreen, public CSingleton bool GetEffectData(DWORD dwID, CEffectData ** ppEffect); bool GetEffectData(DWORD dwID, const CEffectData ** c_ppEffect); - // Area Effect Լ... EffectInstance Pointer ȯѴ. - // EffectManager EffectInstanceMap ̿ ʴ´. + // Area에 직접 찍는 Effect용 함수... EffectInstance의 Pointer를 반환한다. + // EffectManager 내부 EffectInstanceMap을 이용하지 않는다. void CreateUnsafeEffectInstance(DWORD dwEffectDataID, CEffectInstance ** ppEffectInstance); bool DestroyUnsafeEffectInstance(CEffectInstance * pEffectInstance); diff --git a/src/EffectLib/EffectMeshInstance.h b/src/EffectLib/EffectMeshInstance.h index eaf17d1..185d433 100644 --- a/src/EffectLib/EffectMeshInstance.h +++ b/src/EffectLib/EffectMeshInstance.h @@ -9,7 +9,7 @@ class CEffectMeshInstance : public CEffectElementBaseInstance { public: - // NOTE : Mesh ؽ Ÿ νϽ̴. + // NOTE : Mesh 단위 텍스춰 데이타의 인스턴스이다. typedef struct STextureInstance { CFrameController TextureFrameController; diff --git a/src/EffectLib/ParticleInstance.cpp b/src/EffectLib/ParticleInstance.cpp index 748936a..fdec9f0 100644 --- a/src/EffectLib/ParticleInstance.cpp +++ b/src/EffectLib/ParticleInstance.cpp @@ -186,9 +186,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; @@ -240,7 +240,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) { @@ -344,9 +344,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; @@ -376,7 +376,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 698b221..6b6975c 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 @@ -214,8 +214,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; @@ -495,7 +495,7 @@ void CParticleSystemInstance::OnInitialize() void CParticleSystemInstance::OnDestroy() { - // 2004. 3. 1. myevan. ƼŬ ƾ + // 2004. 3. 1. myevan. 파티클 제거 루틴 TParticleInstanceListVector::iterator i; for(i = m_ParticleInstanceListVector.begin(); i!=m_ParticleInstanceListVector.end(); ++i) { diff --git a/src/EffectLib/Type.h b/src/EffectLib/Type.h index ecbd20e..18c0f2f 100644 --- a/src/EffectLib/Type.h +++ b/src/EffectLib/Type.h @@ -71,12 +71,12 @@ enum EBillBoardType BILLBOARD_TYPE_ALL, BILLBOARD_TYPE_Y, - BILLBOARD_TYPE_LIE, // ٴڿ + BILLBOARD_TYPE_LIE, // 바닥에 누은 형상 BILLBOARD_TYPE_2FACE, // / and \ BILLBOARD_TYPE_3FACE, // / and \ and - - //BILLBOARD_TYPE_RAY, // ܻ + //BILLBOARD_TYPE_RAY, // 잔상 }; @@ -220,8 +220,8 @@ typedef std::vector TTimeEventTableVector2; typedef std::vector TTimeEventTableVector3; -// NOTE : TimeEventValue Լ Ѱ ƾ ϴ Ƿ -// ƴ ۼ ߽ϴ. - [levites] +// NOTE : TimeEventValue 함수들은 값을 넘겨 받지 말아야 하는 때도 있으므로 +// 값의 직접 리턴이 아닌 포인터 리턴으로 작성 했습니다. - [levites] template __forceinline void GetTimeEventBlendValue(float fElapsedTime, std::vector >& rVector, T * pReturnValue) diff --git a/src/EterBase/CPostIt.h b/src/EterBase/CPostIt.h index d5f00cc..ca9a2b4 100644 --- a/src/EterBase/CPostIt.h +++ b/src/EterBase/CPostIt.h @@ -6,14 +6,14 @@ class _CPostItMemoryBlock; /** * @class CPostIt - * @brief ӷó Ŭ̾Ʈ Ŭ̾Ʈ ϱ Ͽ Ǵ Ŭ + * @brief 게임런처에서 게임 클라이언트로 정보를 전달 및 클라이언트에서 수신하기 위하여 사용되는 클래스 */ class CPostIt { public: /** * @brief CPostIt constructor - * @param [in] szAppName : ̸ . + * @param [in] szAppName : 게임의 이름이 들어간다. */ explicit CPostIt( LPCSTR szAppName ); @@ -23,45 +23,45 @@ public: ~CPostIt( void ); /** - * @brief CPostIt class ϰ ִ Ÿ Ŭ忡 Ѵ. + * @brief CPostIt class에서 보유하고 있는 데이타를 클립보드에 저장한다. */ BOOL Flush( void ); /** - * @brief CPostIt class ϰ ִ Ÿ Ŭ忡 ִ . + * @brief CPostIt class에서 보유하고 있는 데이타 및 클립보드에 있는 내용을 지운다. */ void Empty( void ); /** - * @brief Ÿ о´. - * @param [in] lpszKeyName : ҷ Ÿ Ű. "KEY" ִ´. - * @param [in] lpszData : ҷ Ÿ - * @param [in] nSize : lpszData ִ + * @brief 데이타를 읽어온다. + * @param [in] lpszKeyName : 불러올 데이타의 키. "KEY" 식의 내용을 넣는다. + * @param [in] lpszData : 불러올 데이타의 버퍼 + * @param [in] nSize : lpszData 버퍼의 최대사이즈 */ BOOL Get( LPCSTR lpszKeyName, LPSTR lpszData, DWORD nSize ); /** - * @brief Ÿ ִ´. - * @param [in] lpBuffer : Ÿ. "KEY=DATA" ִ´. + * @brief 저장할 데이타를 넣는다. + * @param [in] lpBuffer : 저장할 데이타. "KEY=DATA" 식의 내용을 넣는다. */ BOOL Set( LPCSTR lpszData ); /** - * @brief Ÿ ִ´. - * @param [in] lpszKeyName : Ÿ Ű. "KEY" ִ´. - * @param [in] lpszData : Ÿ. "DATA" ִ´. + * @brief 저장할 데이타를 넣는다. + * @param [in] lpszKeyName : 저장할 데이타의 키. "KEY" 식의 내용을 넣는다. + * @param [in] lpszData : 저장할 데이타. "DATA" 식의 내용을 넣는다. */ BOOL Set( LPCSTR lpszKeyName, LPCSTR lpszData ); /** - * @brief Ÿ(DWORD) ִ´. - * @param [in] lpBuffer : Ÿ. "KEY=DATA" Ÿ ִ´. - * @param [in] dwValue : Ÿ. (DWORD) + * @brief 저장할 데이타(DWORD)를 넣는다. + * @param [in] lpBuffer : 저장할 데이타. "KEY=DATA" 식의 데이타를 넣는다. + * @param [in] dwValue : 저장할 데이타. (DWORD) */ BOOL Set( LPCSTR lpszKeyName, DWORD dwValue ); /** - * @brief CPostIt class Ѵ. (Ŭ constructor ̸ ڰ ֱ , ̸ ؾ) + * @brief CPostIt class를 복사한다. (클래스 constructor에 이름 인자가 있기 때문에, 새 이름을 지정해야함) * @param [in] pPostIt : Destination class * @param [in] lpszKeyName : Destination class's new app-name */ diff --git a/src/EterBase/FileDir.cpp b/src/EterBase/FileDir.cpp index 8a20745..9c1412b 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 8414436..8a2c279 100644 --- a/src/EterBase/FileLoader.cpp +++ b/src/EterBase/FileLoader.cpp @@ -72,7 +72,7 @@ int CMemoryTextFileLoader::SplitLine2(DWORD dwLine, CTokenVector* pstTokenVector pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < c_rstLine.length()); @@ -116,7 +116,7 @@ bool CMemoryTextFileLoader::SplitLine(DWORD dwLine, CTokenVector* pstTokenVector pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < c_rstLine.length()); diff --git a/src/EterBase/FileLoader.h b/src/EterBase/FileLoader.h index 90d8b7d..39915bd 100644 --- a/src/EterBase/FileLoader.h +++ b/src/EterBase/FileLoader.h @@ -1,6 +1,6 @@ #pragma once -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #include #include diff --git a/src/EterBase/MappedFile.cpp b/src/EterBase/MappedFile.cpp index cc826e4..904ba6f 100644 --- a/src/EterBase/MappedFile.cpp +++ b/src/EterBase/MappedFile.cpp @@ -85,7 +85,7 @@ BYTE* CMappedFile::AppendDataBlock( const void* pBlock, DWORD dwBlockSize ) void CMappedFile::Destroy() { - if (m_pLZObj) // Ͱ ͷ ȴ + if (m_pLZObj) // 압축된 데이터가 이 포인터로 연결 된다 { delete m_pLZObj; m_pLZObj = NULL; @@ -144,7 +144,7 @@ int CMappedFile::Seek(DWORD offset, int iSeekType) return m_seekPosition; } -// 2004.09.16.myevan.MemoryMappedFile 98/ME üũ +// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //DWORD g_dwCount=0; int CMappedFile::Map(const void **dest, int offset, int size) @@ -192,7 +192,7 @@ int CMappedFile::Map(const void **dest, int offset, int size) return 0; } - // 2004.09.16.myevan.MemoryMappedFile 98/ME üũ + // 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //g_dwCount++; //Tracenf("MAPFILE %d", g_dwCount); @@ -247,7 +247,7 @@ void CMappedFile::Unmap(LPCVOID data) { if (UnmapViewOfFile(data)) { - // 2004.09.16.myevan.MemoryMappedFile 98/ME üũ + // 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크 //g_dwCount--; //Tracenf("UNMAPFILE %d", g_dwCount); } diff --git a/src/EterBase/StdAfx.h b/src/EterBase/StdAfx.h index aa52451..0d15410 100644 --- a/src/EterBase/StdAfx.h +++ b/src/EterBase/StdAfx.h @@ -6,7 +6,7 @@ #endif #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #include diff --git a/src/EterBase/Timer.cpp b/src/EterBase/Timer.cpp index f1ec5f6..923b829 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 4889581..e05abef 100644 --- a/src/EterBase/Utils.cpp +++ b/src/EterBase/Utils.cpp @@ -433,7 +433,7 @@ void MyCreateDirectory(const char* path) if (strlen(path) >= 3) { - if (*(path + 1) == ':') // C:, D: 츦 üũ + if (*(path + 1) == ':') // C:, D: 같은 경우를 체크 path += 3; } diff --git a/src/EterBase/Utils.h b/src/EterBase/Utils.h index cfaacc8..518b290 100644 --- a/src/EterBase/Utils.h +++ b/src/EterBase/Utils.h @@ -64,9 +64,9 @@ extern void GetExceptionPathName(const char * sz_Name, std::string & OnlyFileN extern void GetWorkingFolder(std::string & strFileName); extern void StringLowers(char * pString); extern void StringPath(std::string & rString); -extern void StringPath(char * pString); // ҹڷ , \ / ٲ۴. -extern void StringPath(const char * c_szSrc, char * szDest); // ҹڷ , \ / ٲ۴. -extern void StringPath(const char * c_szSrc, std::string & rString); // ҹڷ , \ / ٲ۴. +extern void StringPath(char * pString); // 모두 소문자로 만들고, \는 /로 바꾼다. +extern void StringPath(const char * c_szSrc, char * szDest); // 모두 소문자로 만들고, \는 /로 바꾼다. +extern void StringPath(const char * c_szSrc, std::string & rString); // 모두 소문자로 만들고, \는 /로 바꾼다. extern void PrintAsciiData(const void* data, int bytes); bool IsFile(const char* filename); bool IsGlobalFileName(const char * c_szFileName); diff --git a/src/EterBase/error.cpp b/src/EterBase/error.cpp index 7c80c0b..7737884 100644 --- a/src/EterBase/error.cpp +++ b/src/EterBase/error.cpp @@ -145,7 +145,7 @@ LONG __stdcall EterExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo) //WinExec() /*CreateProcess("cmd.exe",NULL,NULL,NULL,FALSE, CREATE_NEW_PROCESS_GROUP|DETACHED_PROCESS,NULL,NULL,NULL,NULL); - MessageBox(NULL," ࿡ ġ ߻Ͽϴ.\n ϰ α׸ ϴ.\n α׸ ðڽϱ?"," ߻!",MB_YESNO);*/ + MessageBox(NULL,"게임 실행에 치명적인 문제가 발생하였습니다.\n게임을 종료하고 에러 로그를 남깁니다.\n에러 로그를 서버에 보내시겠습니까?","에러 발생!",MB_YESNO);*/ /* __l.BeginCompressInBuffer(__msg,__idx,__cmsg); diff --git a/src/EterBase/lzo.cpp b/src/EterBase/lzo.cpp index 00d31af..3c51264 100644 --- a/src/EterBase/lzo.cpp +++ b/src/EterBase/lzo.cpp @@ -120,9 +120,9 @@ void CLZObject::BeginCompress(const void * pvIn, UINT uiInLen) m_pbIn = (const BYTE *) pvIn; // sizeof(SHeader) + - // ȣȭ fourCC 4Ʈ - // ִ ִ 뷮 + - // ȣȭ 8 Ʈ + // 암호화를 위한 fourCC 4바이트 + // 압축된 후 만들어질 수 있는 최대 용량 + + // 암호화를 위한 8 바이트 m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8; m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize); @@ -139,9 +139,9 @@ void CLZObject::BeginCompressInBuffer(const void * pvIn, UINT uiInLen, void * /* m_pbIn = (const BYTE *) pvIn; // sizeof(SHeader) + - // ȣȭ fourCC 4Ʈ - // ִ ִ 뷮 + - // ȣȭ 8 Ʈ + // 암호화를 위한 fourCC 4바이트 + // 압축된 후 만들어질 수 있는 최대 용량 + + // 암호화를 위한 8 바이트 m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8; m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize); diff --git a/src/EterBase/lzo.h b/src/EterBase/lzo.h index 21810cd..c2877ea 100644 --- a/src/EterBase/lzo.h +++ b/src/EterBase/lzo.h @@ -12,9 +12,9 @@ class CLZObject typedef struct SHeader { DWORD dwFourCC; - DWORD dwEncryptSize; // ȣȭ ũ - DWORD dwCompressedSize; // ũ - DWORD dwRealSize; // ũ + DWORD dwEncryptSize; // 암호화된 크기 + DWORD dwCompressedSize; // 압축된 데이터 크기 + DWORD dwRealSize; // 실제 데이터 크기 } THeader; #pragma pack() diff --git a/src/EterBase/tea.cpp b/src/EterBase/tea.cpp index 5d03bde..6c48c0b 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 0692300..ddc0a85 100644 --- a/src/EterGrnLib/LODController.cpp +++ b/src/EterGrnLib/LODController.cpp @@ -282,8 +282,8 @@ void CGrannyLODController::AddModel(CGraphicThing * pThing, int iSrcModel, CGran } else { - // FIXME : CModelInstance::m_pgrnWorldPose Update ϴµ, - // Deform NULL Դϴ. ٲ .. - [levites] + // FIXME : CModelInstance::m_pgrnWorldPose를 Update에서 사용하는데, + // Deform을 하지 않으면 NULL 입니다. 구조가 조금 바뀌어야 할지도.. - [levites] pModelInstance->DeformNoSkin(&ms_matIdentity); } @@ -460,10 +460,10 @@ void CGrannyLODController::UpdateLODLevel(float fDistanceFromCenter, float fDist assert(m_pCurrentModelInstance != NULL); - if (fDistanceFromCenter > LOD_APPLY_MIN) // ߽ LOD + if (fDistanceFromCenter > LOD_APPLY_MIN) // 중심 LOD 예외 취소 { - // ī޶ ־ fLODRate ۾ - // 3 LOD .. հ 0, ڰ Ŀ + // 카메라부터 멀어질 수록 fLODRate가 작아진다 + // 3개 LOD가 있을때.. 가장 먼게 0, 가까울 수록 숫자가 커진다 // 100fps 50fps 33fps 25fps 20fps // 10ms 20ms 30ms 40ms 50ms diff --git a/src/EterGrnLib/LODController.h b/src/EterGrnLib/LODController.h index 93d896d..84f6466 100644 --- a/src/EterGrnLib/LODController.h +++ b/src/EterGrnLib/LODController.h @@ -269,7 +269,7 @@ class CGrannyLODController : public CGraphicBase BOOL isModelInstance(); CGrannyModelInstance* GetModelInstance(); - bool HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; } // NOTE: GetModelInstance() == 0 Ŭ ũ (2012. 05. 07) + bool HaveBlendThing() { return 0 != GetModelInstance() ? GetModelInstance()->HaveBlendThing() : false; } // NOTE: GetModelInstance() == 0일 때 클라 크래쉬나는 문제 수정(2012. 05. 07) protected: void SetCurrentModelInstance(CGrannyModelInstance * pgrnModelInstance); diff --git a/src/EterGrnLib/Material.cpp b/src/EterGrnLib/Material.cpp index d17d9b2..529b6a6 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 94fdcb1..c0b2736 100644 --- a/src/EterGrnLib/Mesh.cpp +++ b/src/EterGrnLib/Mesh.cpp @@ -159,7 +159,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal) assert(m_triGroupNodes == NULL); int mtrlCount = m_pgrnMesh->MaterialBindingCount; - if (mtrlCount <= 0) // õ 2 ũ ߻ + if (mtrlCount <= 0) // 천의 동굴 2층 크래쉬 발생 return true; int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh); @@ -199,7 +199,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal) void CGrannyMesh::RebuildTriGroupNodeList() { - assert(!"CGrannyMesh::RebuildTriGroupNodeList() - 带 ϴ°- -?"); + assert(!"CGrannyMesh::RebuildTriGroupNodeList() - 왜 리빌드를 하는가- -?"); /* int mtrlCount = m_pgrnMesh->MaterialBindingCount; int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh); diff --git a/src/EterGrnLib/Model.cpp b/src/EterGrnLib/Model.cpp index b8d53af..a91315b 100644 --- a/src/EterGrnLib/Model.cpp +++ b/src/EterGrnLib/Model.cpp @@ -155,7 +155,7 @@ bool CGrannyModel::LoadMeshs() assert(m_meshs == NULL); assert(m_pgrnModel != NULL); - if (m_pgrnModel->MeshBindingCount <= 0) // ޽ + if (m_pgrnModel->MeshBindingCount <= 0) // 메쉬가 없는 모델 return true; granny_skeleton * pgrnSkeleton = m_pgrnModel->Skeleton; diff --git a/src/EterGrnLib/ModelInstance.h b/src/EterGrnLib/ModelInstance.h index c7a9a33..1c64d57 100644 --- a/src/EterGrnLib/ModelInstance.h +++ b/src/EterGrnLib/ModelInstance.h @@ -55,12 +55,12 @@ class CGrannyModelInstance : public CGraphicCollisionObject void DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix); void Deform(const D3DXMATRIX * c_pWorldMatrix); - // FIXME : ϵ Ѱ 2 ؽ Ǿִ ̱⿡ ̷ - // Ҿ Ű簡 , ñ ( ؽ ) + (ȿ ؽ) - // ̷ ڵ ̷ ʳ մϴ. - [levites] - // NOTE : ο if Ű ٴ ŷ ̷ Լ ü и - // Ű ս 鿡 ϴ. - [levites] - // NOTE : ǹ OneTexture. ijʹ 쿡 TwoTexture. + // FIXME : 현재는 하드웨어의 한계로 2장의 텍스춰로 제한이 되어있는 상태이기에 이런 + // 불안정한 아키텍춰가 가능하지만, 궁극적인 방향은 (모델 텍스춰 전부) + (효과용 텍스춰) + // 이런식의 자동 셋팅이 이뤄져야 되지 않나 생각합니다. - [levites] + // NOTE : 내부에 if문을 포함 시키기 보다는 조금은 번거롭지만 이렇게 함수 콜 자체를 분리 + // 시키는 것이 퍼포먼스 적인 측면에서는 더 나은 것 같습니다. - [levites] + // NOTE : 건물은 무조건 OneTexture. 캐릭터는 경우에 따라 TwoTexture. void RenderWithOneTexture(); void RenderWithTwoTexture(); void BlendRenderWithOneTexture(); @@ -160,7 +160,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject // Granny Data granny_model_instance * m_pgrnModelInstance; - //granny_world_pose * m_pgrnWorldPose; // + //granny_world_pose * m_pgrnWorldPose; // 현재 월드 포즈 포인터 granny_control * m_pgrnCtrl; granny_animation * m_pgrnAni; @@ -182,7 +182,7 @@ class CGrannyModelInstance : public CGraphicCollisionObject CGrannyMaterialPalette m_kMtrlPal; // WORK - granny_world_pose* m_pgrnWorldPoseReal; // ޸𸮴 ⿡ Ҵ + granny_world_pose* m_pgrnWorldPoseReal; // 실제 메모리는 여기에 할당 std::vector m_vct_pgrnMeshBinding; // Dynamic Vertex Buffer diff --git a/src/EterGrnLib/ModelInstanceCollisionDetection.cpp b/src/EterGrnLib/ModelInstanceCollisionDetection.cpp index f3350a2..14a78a1 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 d7f25d5..1ed3183 100644 --- a/src/EterGrnLib/ModelInstanceModel.cpp +++ b/src/EterGrnLib/ModelInstanceModel.cpp @@ -161,7 +161,7 @@ void CGrannyModelInstance::__CreateMeshMatrices() { assert(m_pModel != NULL); - if (m_pModel->GetMeshCount() <= 0) // ޽ (ī޶ ) 𵨵 Ȥ ִ.. + if (m_pModel->GetMeshCount() <= 0) // 메쉬가 없는 (카메라 같은) 모델도 간혹 있다.. return; int meshCount = m_pModel->GetMeshCount(); @@ -274,14 +274,14 @@ const float * CGrannyModelInstance::GetBoneMatrixPointer(int iBone) const const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) const { - // NOTE : GrannyGetWorldPose4x4 ߸ .. ׷ϰ ӵ - // GrannyGetWorldPose4x4 matrix Ҹ + // NOTE : GrannyGetWorldPose4x4는 스케일 값등이 잘못나올 수 있음.. 그래니가 속도를 위해 + // GrannyGetWorldPose4x4에 모든 matrix 원소를 제 값으로 넣지 않음 return GrannyGetWorldPoseComposite4x4(__GetWorldPosePtr(), iBone); } void CGrannyModelInstance::ReloadTexture() { - assert(" - CGrannyModelInstance::ReloadTexture()"); + assert("현재 사용하지 않음 - CGrannyModelInstance::ReloadTexture()"); /* assert(m_pModel != NULL); const CGrannyMaterialPalette & c_rGrannyMaterialPalette = m_pModel->GetMaterialPalette(); diff --git a/src/EterGrnLib/ModelInstanceMotion.cpp b/src/EterGrnLib/ModelInstanceMotion.cpp index 3c19e88..70adb1c 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 33fcdde..42f3c7e 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; @@ -106,7 +106,7 @@ void CGrannyModelInstance::BlendRenderWithOneTexture() // With Two Texture void CGrannyModelInstance::RenderWithTwoTexture() { - // FIXME : Deform, Render, BlendRender ɷִ - [levites] + // FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites] if (IsEmpty()) return; diff --git a/src/EterGrnLib/StdAfx.h b/src/EterGrnLib/StdAfx.h index 0ef18bc..86205b9 100644 --- a/src/EterGrnLib/StdAfx.h +++ b/src/EterGrnLib/StdAfx.h @@ -1,6 +1,6 @@ #pragma once -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 //#include #include diff --git a/src/EterGrnLib/ThingInstance.cpp b/src/EterGrnLib/ThingInstance.cpp index e14ab2c..78a449d 100644 --- a/src/EterGrnLib/ThingInstance.cpp +++ b/src/EterGrnLib/ThingInstance.cpp @@ -342,8 +342,8 @@ bool CGraphicThingInstance::GetBonePosition(int iModelIndex, int iBoneIndex, flo *pfz = pfMatrix[14]; return true; } -//iSkelInstance ⺻ Link( ٴ°)Ű, -// ⺻ attach(ǥ °) ˴ϴ. +//iSkelInstance 가 있으면 기본 본에 Link(본이 붙는것)시키고, +//없으면 기본 본에 attach(좌표만 가져다 쓰는것) 됩니다. bool CGraphicThingInstance::SetModelInstance(int iDstModelInstance, int iSrcModelThing, int iSrcModel,int iSkelInstance) { if (!CheckModelInstanceIndex(iDstModelInstance)) @@ -735,7 +735,7 @@ void CGraphicThingInstance::UpdateLODLevel() const D3DXVECTOR3 & c_rv3CameraPosition = pcurCamera->GetEye(); const D3DXVECTOR3 & c_v3Position = GetPosition(); - // NOTE : ߽κ Ÿ 꿡 z ̴ ʴ´. - [levites] + // NOTE : 중심으로부터의 거리 계산에 z값 차이는 사용하지 않는다. - [levites] CGrannyLODController::FUpdateLODLevel update; update.fDistanceFromCenter = sqrtf((c_rv3TargetPosition.x - c_v3Position.x) * (c_rv3TargetPosition.x - c_v3Position.x) + (c_rv3TargetPosition.y - c_v3Position.y) * (c_rv3TargetPosition.y - c_v3Position.y)); diff --git a/src/EterGrnLib/ThingInstance.h b/src/EterGrnLib/ThingInstance.h index 857558a..1b896b9 100644 --- a/src/EterGrnLib/ThingInstance.h +++ b/src/EterGrnLib/ThingInstance.h @@ -34,7 +34,7 @@ class CGraphicThingInstance : public CGraphicObjectInstance void UpdateLODLevel(); void UpdateTime(); - void DeformAll(); // LOD + void DeformAll(); // 모든 LOD 디폼 bool LessRenderOrder(CGraphicThingInstance* pkThingInst); diff --git a/src/EterImageLib/Image.h b/src/EterImageLib/Image.h index a9f5c3e..45f5a34 100644 --- a/src/EterImageLib/Image.h +++ b/src/EterImageLib/Image.h @@ -9,11 +9,11 @@ struct TGA_HEADER { char idLen; // 0 - char palType; // ķƮ 1, 0 - char imgType; // ķƮ 1, 2 + char palType; // 파레트있으면 1, 없음 0 + char imgType; // 파레트있으면 1, 없음 2 WORD colorBegin; // 0 - WORD colorCount; // ķƮ 256, 0 - char palEntrySize; // ķƮ 24, 0 + WORD colorCount; // 파레트 있으면 256, 없음 0 + char palEntrySize; // 파레트 있으면 24, 없음 0 WORD left; WORD top; WORD width; diff --git a/src/EterImageLib/TGAImage.cpp b/src/EterImageLib/TGAImage.cpp index 6126139..dfcbfc1 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 61e0e19..786f20b 100644 --- a/src/EterLib/AttributeData.cpp +++ b/src/EterLib/AttributeData.cpp @@ -61,7 +61,7 @@ bool CAttributeData::OnLoad(int /*iSize*/, const void * c_pvBuf) { if (!c_pvBuf) { - // NOTE: ٸ ׷ 浹 ͸ ϴ ҽ ı ʰ Ŵ. + // NOTE: 파일이 존재하지 않으면 다른곳에서 그래픽 모델을 기반으로 충돌 데이터를 생성하니 리소스를 파괴하지 않고 유지시킴. return true; } diff --git a/src/EterLib/AttributeInstance.h b/src/EterLib/AttributeInstance.h index 22b3914..b347cf3 100644 --- a/src/EterLib/AttributeInstance.h +++ b/src/EterLib/AttributeInstance.h @@ -15,7 +15,7 @@ class CAttributeInstance const char * GetDataFileName() const; - // NOTE : Object + // NOTE : Object 전용 void SetObjectPointer(CAttributeData * pAttributeData); void RefreshObject(const D3DXMATRIX & c_rmatGlobal); CAttributeData * GetObjectPointer() const; diff --git a/src/EterLib/Camera.cpp b/src/EterLib/Camera.cpp index 8537951..b209bab 100644 --- a/src/EterLib/Camera.cpp +++ b/src/EterLib/Camera.cpp @@ -437,7 +437,7 @@ void CCamera::RotateEyeAroundTarget(float fPitchDegree, float fRollDegree) D3DXMATRIX matRot, matRotPitch, matRotRoll; - // Ӹ Ѿ ... + // 머리위로 넘어가기 막기... if (m_fPitch + fPitchDegree > 80.0f) { fPitchDegree = 80.0f - m_fPitch; @@ -594,7 +594,7 @@ bool CCameraManager::isCurrentCamera(unsigned char ucCameraNum) return false; } -// ⽺ Լ... +// 잡스러운 함수들... bool CCameraManager::AddCamera(unsigned char ucCameraNum) { if(m_CameraMap.end() != m_CameraMap.find(ucCameraNum)) diff --git a/src/EterLib/Camera.h b/src/EterLib/Camera.h index 4ef3cea..f557805 100644 --- a/src/EterLib/Camera.h +++ b/src/EterLib/Camera.h @@ -51,8 +51,8 @@ class CCamera void SetResistance(float fResistance); private: - const CCamera & operator = (const CCamera &) ; // - CCamera (const CCamera & ) ; // + const CCamera & operator = (const CCamera &) ; // 지원하지 않음 + CCamera (const CCamera & ) ; //지원하지 않음 // Camera Update eCameraState m_eCameraState; @@ -85,14 +85,14 @@ class CCamera D3DXMATRIX m_matInverseView; D3DXMATRIX m_matBillboard; // Special matrix for billboarding effects - //߰ + //추가분 float m_fPitch; float m_fRoll; float m_fDistance; - // ī޶ AI Ray + // 카메라 AI를 위한 Ray 들 - // ī޶ ѷ Ray + // 카메라를 둘러싼 Ray CRay m_kCameraBottomToTerrainRay; CRay m_kCameraFrontToTerrainRay; CRay m_kCameraBackToTerrainRay; @@ -124,14 +124,14 @@ class CCamera bool m_bDrag; // protected: - // + // 물리 D3DXVECTOR3 m_v3AngularAcceleration; D3DXVECTOR3 m_v3AngularVelocity; float m_fResistance; public: ////////////////////////////////////////////////////////////////////////// - // + // 물리 ////////////////////////////////////////////////////////////////////////// void SetAngularAcceleration(D3DXVECTOR3 v3AngularAcceleration) { m_v3AngularAcceleration = v3AngularAcceleration; } @@ -185,7 +185,7 @@ class CCamera float GetRoll() const { return m_fRoll; } float GetDistance() const { return m_fDistance; } - void Pitch(const float fPitchDelta); //ư ִ´. + void Pitch(const float fPitchDelta); //돌아가는 각도를 넣는다. void Roll(const float fRollDelta); void SetDistance(const float fdistance); @@ -193,35 +193,35 @@ class CCamera // camera movement ////////////////////////////////////////////////////////////////////////// - // ״ ̵... ī޶ ġ Ÿ ġ ޶. + // 말그대로 이동... 카메라 위치와 타겟 위치가 모두 달라진다. void Move(const D3DXVECTOR3 & v3Displacement); - // .. ī޶ ġ ̵.. Ÿ ġ ... + // 줌.. 카메라 위치만 이동.. 타겟 위치는 고정... void Zoom(float fRatio); - // ̵.. Ÿġ ޶Ƿ ܰ ٸ... + // 뷰 방향으로 이동.. 타겟위치가 달라지므로 줌과는 다르다... void MoveAlongView(float fDistance); - // ī޶ ̵.. + // 카메라 옆 방향으로 이동.. void MoveAlongCross(float fDistance); - // ī޶ ̵... + // 카메라 업벡터 방향으로 이동... void MoveAlongUp(float fDistance); - // ī޶ ̵... MoveAlongCross .. + // 카메라 옆 방향으로 이동... MoveAlongCross과 동일.. void MoveLateral(float fDistance); - // Z XY ̵.. + // 뷰 방향의 Z 성분을 무시한 XY평면 방향으로 이동.. void MoveFront(float fDistance); - // Z( ) ̵... + // Z방향(연직 방향)으로 이동... void MoveVertical(float fDistance); - // //ī޶ ġ Ű Ӹ . Ÿ ޶? - // //ȸ ƴ "(Degree)" ִ´. + // //카메라 위치는 고정시키고 머리만 든다. 타겟이 달라지겠죠? + // //회전각을 라디안이 아닌 "도(Degree)"로 넣는다. // void RotateUpper(float fDegree); - // Ÿ ߽ . Eterlib SetAroundCamera ɰ ... - // fPitchDegree (0)κ Ʒ ... - // fRollDegree Ÿ ߽ ð ... + // 타겟 중심으로 돈다. Eterlib의 SetAroundCamera의 기능과 유사... + // fPitchDegree는 수평(0도)로부터 아랫쪽으로 꺽어지는 각도... + // fRollDegree는 타겟 중심으로 시계방향으로 도는 각도... void RotateEyeAroundTarget(float fPitchDegree, float fRollDegree); - // ߽ ߽ . Ÿ ޶? + // 도는 중심점을 따로 지정 그 점을 중심으로 돈다. 타겟 점도 달라지겠죠? void RotateEyeAroundPoint(const D3DXVECTOR3 & v3Point, float fPitchDegree, float fRollDegree); protected: diff --git a/src/EterLib/CollisionData.cpp b/src/EterLib/CollisionData.cpp index 96e4653..4f97f0b 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; @@ -324,7 +324,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] const auto _vv__3 = (s.v3Position - m_attribute.v3Position); const auto _vv__4 = (s.v3LastPosition - m_attribute.v3Position); if (fabs(D3DXVec3Dot(&_vv__3, &m_attribute.v3Normal)) < @@ -478,14 +478,14 @@ bool CCylinderCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamic { if (CollideCylinderVSDynamicSphere(m_attribute, s)) { - // NOTE : Ÿ .. - [levites] + // NOTE : 거리가 가까워 졌을때만.. - [levites] if (GetVector3Distance(s.v3Position, m_attribute.v3Position) < GetVector3Distance(s.v3LastPosition, m_attribute.v3Position)) return true; } - // NOTE : ̵ Ÿ Ŭ ƴ ( ũ ) ̵ϸ鼭 üũ - [levites] + // NOTE : 이동 거리가 클 경우 빈틈없이 (원 크기 단위로) 이동하면서 전부 체크 해 본다 - [levites] D3DXVECTOR3 v3Distance = s.v3Position - s.v3LastPosition; float fDistance = D3DXVec3Length(&v3Distance); if (s.fRadius<=0.0001f) diff --git a/src/EterLib/ColorTransitionHelper.h b/src/EterLib/ColorTransitionHelper.h index deb7a60..b531967 100644 --- a/src/EterLib/ColorTransitionHelper.h +++ b/src/EterLib/ColorTransitionHelper.h @@ -27,10 +27,10 @@ class CColorTransitionHelper bool isTransitionStarted() { return m_bTransitionStarted; } private: - D3DCOLOR m_dwCurColor; // + D3DCOLOR m_dwCurColor; // 현재 색 - DWORD m_dwStartTime; // ٲ ϴ ð - DWORD m_dwDuration; // ȿ ٲ°? + DWORD m_dwStartTime; // 바뀌기 시작하는 시간 + DWORD m_dwDuration; // 얼마 동안에 바뀌는가? bool m_bTransitionStarted; diff --git a/src/EterLib/CullingManager.cpp b/src/EterLib/CullingManager.cpp index 86c89ec..c5affff 100644 --- a/src/EterLib/CullingManager.cpp +++ b/src/EterLib/CullingManager.cpp @@ -93,7 +93,7 @@ void CCullingManager::Reset() void CCullingManager::Update() { // TODO : update each object - // ϰ غ + // 하지말고 각자 하게 해보자 //DWORD time = ELTimer_GetMSec(); //Reset(); diff --git a/src/EterLib/Decal.h b/src/EterLib/Decal.h index a19ba98..f5533b5 100644 --- a/src/EterLib/Decal.h +++ b/src/EterLib/Decal.h @@ -42,15 +42,15 @@ protected: D3DXPLANE m_v4FrontPlane; D3DXPLANE m_v4BackPlane; - // + // 개수 DWORD m_dwVertexCount; DWORD m_dwPrimitiveCount; - // ý ۿ δ콺 + // 버택스 버퍼와 인댁스 버퍼 // CGraphicVertexBuffer m_GraphicVertexBuffer; // CGraphicIndexBuffer m_GraphicIndexBuffer; - // ý ۿ δ콺 ſ 迭 DrawIndexedPrimitiveUP ׸. + // 버택스 버퍼와 인댁스 버퍼 대신에 배열 만들고 DrawIndexedPrimitiveUP로 그리자. typedef struct { WORD m_wMinIndex; diff --git a/src/EterLib/FileLoaderThread.cpp b/src/EterLib/FileLoaderThread.cpp index 3b5c067..e7fcb64 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 b843e37..f59ae24 100644 --- a/src/EterLib/GrpBase.cpp +++ b/src/EterLib/GrpBase.cpp @@ -75,13 +75,13 @@ int CGraphicBase::ms_iWavingPower; DWORD CGraphicBase::ms_dwFlashingEndTime; D3DXCOLOR CGraphicBase::ms_FlashingColor; -// Terrain picking Ray... CCamera ̿ϴ .. Ray ʿ... +// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요... CRay CGraphicBase::ms_Ray; bool CGraphicBase::ms_bSupportDXT = true; bool CGraphicBase::ms_isLowTextureMemory = false; bool CGraphicBase::ms_isHighTextureMemory = false; -// 2004.11.18.myevan.DynamicVertexBuffer ü +// 2004.11.18.myevan.DynamicVertexBuffer로 교체 /* std::vector CGraphicBase::ms_lineIdxVector; std::vector CGraphicBase::ms_lineTriIdxVector; diff --git a/src/EterLib/GrpBase.h b/src/EterLib/GrpBase.h index 543ca5c..880d86d 100644 --- a/src/EterLib/GrpBase.h +++ b/src/EterLib/GrpBase.h @@ -230,7 +230,7 @@ class CGraphicBase void UpdatePipeLineMatrix(); protected: - // D3DX Mesh (÷ ǥȰ ) + // 각종 D3DX Mesh 들 (컬루젼 데이터 등을 표시활 때 쓴다) static LPD3DXMESH ms_lpSphereMesh; static LPD3DXMESH ms_lpCylinderMesh; @@ -274,7 +274,7 @@ class CGraphicBase static float ms_fNearY; static float ms_fFarY; - // 2004.11.18.myevan.DynamicVertexBuffer ü + // 2004.11.18.myevan.DynamicVertexBuffer로 교체 /* static std::vector ms_lineIdxVector; static std::vector ms_lineTriIdxVector; @@ -292,7 +292,7 @@ class CGraphicBase static DWORD ms_dwFlashingEndTime; static D3DXCOLOR ms_FlashingColor; - // Terrain picking Ray... CCamera ̿ϴ .. Ray ʿ... + // Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요... static CRay ms_Ray; // diff --git a/src/EterLib/GrpCollisionObject.h b/src/EterLib/GrpCollisionObject.h index 94f9018..b82d995 100644 --- a/src/EterLib/GrpCollisionObject.h +++ b/src/EterLib/GrpCollisionObject.h @@ -18,8 +18,8 @@ class CGraphicCollisionObject : public CGraphicBase bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection); bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight, const D3DXVECTOR3 & c_rv3RayOriginal, const D3DXVECTOR3 & c_rv3RayDirection); - // NOTE : ms_vtPickRayOrig ms_vtPickRayDir CGraphicBGase ִµ - // ڷ ־ ϴ ִ°? Customize ؼ? - [levites] + // NOTE : ms_vtPickRayOrig와 ms_vtPickRayDir를 CGraphicBGase가 가지고 있는데 + // 굳이 인자로 넣어줘야 하는 이유가 있는가? Customize를 위해서? - [levites] bool IntersectSphere(const D3DXVECTOR3 & c_rv3Position, float fRadius); bool IntersectCylinder(const D3DXVECTOR3 & c_rv3Position, float fRadius, float fHeight); }; diff --git a/src/EterLib/GrpDevice.cpp b/src/EterLib/GrpDevice.cpp index 22ef0b4..3c598e6 100644 --- a/src/EterLib/GrpDevice.cpp +++ b/src/EterLib/GrpDevice.cpp @@ -261,7 +261,7 @@ static DWORD s_MaxTextureWidth, s_MaxTextureHeight; BOOL EL3D_ConfirmDevice(D3DCAPS8& rkD3DCaps, UINT uBehavior, D3DFORMAT /*eD3DFmt*/) { - // PUREDEVICE GetTransform / GetViewport ʴ´. + // PUREDEVICE는 GetTransform / GetViewport 등이 되지 않는다. if (uBehavior & D3DCREATE_PUREDEVICE) return FALSE; @@ -447,7 +447,7 @@ RETRY: ms_iD3DAdapterInfo, D3DDEVTYPE_HAL, hWnd, - // 2004. 1. 9 myevan ؽ μ ڵ ߰ + // 2004. 1. 9 myevan 버텍스 프로세싱 방식 자동 선택 추가 pkD3DModeInfo->m_dwD3DBehavior, &ms_d3dPresentParameter, &ms_lpd3dDevice))) @@ -471,7 +471,7 @@ RETRY: if (ErrorCorrection) return CREATE_DEVICE; - // 2004. 1. 9 myevan ūǹ ڵε.. ǥϰ + // 2004. 1. 9 myevan 큰의미 없는 코드인듯.. 에러나면 표시하고 종료하자 iReflashRate = 0; ++ErrorCorrection; iRet = CREATE_REFRESHRATE; diff --git a/src/EterLib/GrpDevice.h b/src/EterLib/GrpDevice.h index 7015274..4d7abbf 100644 --- a/src/EterLib/GrpDevice.h +++ b/src/EterLib/GrpDevice.h @@ -23,8 +23,8 @@ public: CREATE_GET_DEVICE_CAPS2 = (1 << 3), CREATE_DEVICE = (1 << 4), CREATE_REFRESHRATE = (1 << 5), - CREATE_ENUM = (1 << 6), // 2003. 01. 09. myevan Ʈ - CREATE_DETECT = (1 << 7), // 2003. 01. 09. myevan + CREATE_ENUM = (1 << 6), // 2003. 01. 09. myevan 모드 리스트 얻기 실패 + CREATE_DETECT = (1 << 7), // 2003. 01. 09. myevan 모드 선택 실패 CREATE_NO_TNL = (1 << 8), CREATE_BAD_DRIVER = (1 << 9), CREATE_FORMAT = (1 << 10), diff --git a/src/EterLib/GrpExpandedImageInstance.cpp b/src/EterLib/GrpExpandedImageInstance.cpp index 1398b86..14becb9 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 b5a3782..a55ee5d 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 13d0fff..cfd3b4b 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 31a903f..09e7e8b 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 488fa5e..65a3d9d 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))) return false; } @@ -209,7 +209,7 @@ bool CGraphicImageTexture::CreateFromMemoryFile(UINT bufSize, const void * c_pvB static CDXTCImage image; - if (image.LoadHeaderFromMemory((const BYTE *) c_pvBuf)) // DDSΰ Ȯ + if (image.LoadHeaderFromMemory((const BYTE *) c_pvBuf)) // DDS인가 확인 { return (CreateDDSTexture(image, (const BYTE *) c_pvBuf)); } diff --git a/src/EterLib/GrpLightManager.cpp b/src/EterLib/GrpLightManager.cpp index 398245b..e4fa682 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 < std::min((size_t)m_dwLimitLightCount, m_LightSortVector.size()); ++k) diff --git a/src/EterLib/GrpLightManager.h b/src/EterLib/GrpLightManager.h index 7000678..494cd34 100644 --- a/src/EterLib/GrpLightManager.h +++ b/src/EterLib/GrpLightManager.h @@ -93,8 +93,8 @@ class CLightManager : public CGraphicBase, public CLightBase, public CSingleton< void Initialize(); - // NOTE : FlushLight - // ݵ RestoreLight ߸ Ѵ. + // NOTE : FlushLight후 렌더링 + // 그 후 반드시 RestoreLight를 해줘야만 한다. void Update(); void FlushLight(); void RestoreLight(); diff --git a/src/EterLib/GrpMarkInstance.cpp b/src/EterLib/GrpMarkInstance.cpp index 1a64cec..24c1288 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 cae80bd..0223fee 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 a47d64f..1c24ce0 100644 --- a/src/EterLib/GrpText.cpp +++ b/src/EterLib/GrpText.cpp @@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/) bool bItalic = false; // format - // .fnt "" Ʈ ⺻ 12 ε - // :18.fnt "" Ʈ 18 ε - // :14i.fnt "" Ʈ 14 & Ÿ ε + // 굴림.fnt "굴림" 폰트 기본 사이즈 12 로 로딩 + // 굴림:18.fnt "굴림" 폰트 사이즈 18 로 로딩 + // 굴림:14i.fnt "굴림" 폰트 사이즈 14 & 이탤릭으로 로딩 const char * p = strrchr(GetFileName(), ':'); if (p) diff --git a/src/EterLib/GrpTextInstance.cpp b/src/EterLib/GrpTextInstance.cpp index 48be075..80f88a6 100644 --- a/src/EterLib/GrpTextInstance.cpp +++ b/src/EterLib/GrpTextInstance.cpp @@ -121,12 +121,12 @@ int ReadToken(const char* token) void CGraphicTextInstance::Update() { - if (m_isUpdate) // ڿ ٲ Ʈ Ѵ. + if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다. return; if (m_roText.IsNull()) { - Tracef("CGraphicTextInstance::Update - Ʈ ʾҽϴ\n"); + Tracef("CGraphicTextInstance::Update - 폰트가 설정되지 않았습니다\n"); return; } @@ -139,7 +139,7 @@ void CGraphicTextInstance::Update() UINT defCodePage = GetDefaultCodePage(); - UINT dataCodePage = defCodePage; // ƶ Ʈ ͸ UTF8 Ϸ + UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패 CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' '); @@ -185,7 +185,7 @@ void CGraphicTextInstance::Update() bool isEnglish = true; int nEnglishBase = wArabicTextLen - 1; - //<< ũ>> + //<<하이퍼 링크>> int x = 0; int len; @@ -194,7 +194,7 @@ void CGraphicTextInstance::Update() std::wstring hyperlinkBuffer; int no_hyperlink = 0; - // ɺ ƶ ؾѴ + // 심볼로 끝나면 아랍어 모드로 시작해야한다 if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1])) { isEnglish = false; @@ -208,24 +208,24 @@ void CGraphicTextInstance::Update() if (isEnglish) { - // <<ɺ (ex. ȣ, )>> -> . - // <<(ɺ ƴ ͵ : , , ƶ)>> - // (1) ɺ or + // <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지. + // <<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>> + // (1) 맨 앞의 심볼 or // (2) - // 1) ڰ ƶ ƴ && - // 2) ڰ ƶ ƴ && - // 3) ڰ ɺ'|' ƴ && + // 1) 앞 글자가 아랍어 아님 && + // 2) 뒷 글자가 아랍어 아님 && + // 3) 뒷 글자가 심볼'|'이 아님 && // or - // (3) ɺ '|' - // <<ƶ Ѿ : ɺ.>> - // 1) ձ ƶ - // 2) ޱ ƶ + // (3) 현재 심볼이 '|' + // <<아랍어 모드로 넘어가는 경우 : 심볼에서.>> + // 1) 앞글자 아랍어 + // 2) 뒷글자 아랍어 // // if (Arabic_IsInSymbol(wArabicChar) && ( (i == 0) || (i > 0 && - !(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //ձ, ޱڰ ƶ ƴ. + !(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //앞글자, 뒷글자가 아랍어 아님. wArabicText[i+1] != '|' ) || wArabicText[i] == '|' @@ -234,10 +234,10 @@ void CGraphicTextInstance::Update() // pass int temptest = 1; } - // (1)ƶ̰ų (2)ƶ ɺ̶ ƶ ȯ + // (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환 else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar)) { - //  ׸. + //그 전까지의 영어를 그린다. for (int e = i + 1; e <= nEnglishBase;) { int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer); @@ -251,7 +251,7 @@ void CGraphicTextInstance::Update() kHyperlink.ex += charWidth; //x += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -279,7 +279,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = 0; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치 } else { @@ -299,7 +299,7 @@ void CGraphicTextInstance::Update() int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor); kHyperlink.ex += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -313,16 +313,16 @@ void CGraphicTextInstance::Update() isEnglish = false; } } - else //[[[ƶ ]]] + else //[[[아랍어 모드]]] { - // ƶ̰ų ƶ ɺ̶ + // 아랍어이거나 아랍어 출력중 나오는 심볼이라면 if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar)) { int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor); kHyperlink.ex += charWidth; x += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -333,7 +333,7 @@ void CGraphicTextInstance::Update() tempLink.sx += charWidth; } } - else //̰ų, ɺ̶, + else //영어이거나, 영어 다음에 나오는 심볼이라면, { nEnglishBase = i; isEnglish = true; @@ -355,7 +355,7 @@ void CGraphicTextInstance::Update() int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor); kHyperlink.ex += charWidth; - // ߰ ۸ũ ǥ . + //기존 추가한 하이퍼링크의 좌표 수정. for (int j = 1; j <= no_hyperlink; j++) { if(m_hyperlinkVector.size() < j) @@ -383,7 +383,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = 0; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치 } else { @@ -401,7 +401,7 @@ void CGraphicTextInstance::Update() } } - else // ƶ ٸ . + else // 아랍외 다른 지역. { int x = 0; int len; @@ -440,7 +440,7 @@ void CGraphicTextInstance::Update() if (hyperlinkStep == 1) { ++hyperlinkStep; - kHyperlink.ex = kHyperlink.sx = x; // ؽƮ ۵Ǵ ġ + kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치 } else { @@ -460,7 +460,7 @@ void CGraphicTextInstance::Update() if (token < end) { int newCodePage = ReadToken(token); - dataCodePage = newCodePage; // ƶ Ʈ ͸ UTF8 Ϸ + dataCodePage = newCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패 begin = token + 5; } else @@ -570,7 +570,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) CGraphicFontTexture::TCharacterInfomation* pCurCharInfo; - // ׵θ + // 테두리 if (m_isOutline) { fCurX=fStanX; @@ -586,7 +586,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) fFontHeight=float(pCurCharInfo->height); fFontAdvance=float(pCurCharInfo->advance); - // NOTE : Ʈ ¿ Width Ӵϴ. - [levites] + // NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites] if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth) { if (m_isMultiLine) @@ -636,7 +636,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) akVertex[2].y=fFontSy-feather; akVertex[3].y=fFontEy+feather; - // + // 왼 akVertex[0].x=fFontSx-fFontHalfWeight-feather; akVertex[1].x=fFontSx-fFontHalfWeight-feather; akVertex[2].x=fFontEx-fFontHalfWeight+feather; @@ -646,7 +646,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); - // + // 오른 akVertex[0].x=fFontSx+fFontHalfWeight-feather; akVertex[1].x=fFontSx+fFontHalfWeight-feather; akVertex[2].x=fFontEx+fFontHalfWeight+feather; @@ -660,7 +660,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) akVertex[2].x=fFontEx+feather; akVertex[3].x=fFontEx+feather; - // + // 위 akVertex[0].y=fFontSy-fFontHalfWeight-feather; akVertex[1].y=fFontEy-fFontHalfWeight+feather; akVertex[2].y=fFontSy-fFontHalfWeight-feather; @@ -670,7 +670,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4)) STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); - // Ʒ + // 아래 akVertex[0].y=fFontSy+fFontHalfWeight-feather; akVertex[1].y=fFontEy+fFontHalfWeight+feather; akVertex[2].y=fFontSy+fFontHalfWeight-feather; @@ -684,7 +684,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) } } - // Ʈ + // 메인 폰트 fCurX=fStanX; fCurY=fStanY; fFontMaxHeight=0.0f; @@ -698,7 +698,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect) fFontMaxHeight=std::max(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) @@ -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 780450f..669b6c1 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 69f1d24..2507e90 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 = std::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 07decf1..47a528b 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 c9e5d0b..5440aee 100644 --- a/src/EterLib/LensFlare.cpp +++ b/src/EterLib/LensFlare.cpp @@ -206,7 +206,7 @@ void CLensFlare::DrawBeforeFlare() STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); /* - if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // false? + if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // ¿Ø false? { glColor4f(1.0f, 1.0f, 1.0f, m_fBeforeBright); glDisable(GL_TEXTURE_2D); diff --git a/src/EterLib/LensFlare.h b/src/EterLib/LensFlare.h index 7522cbf..c53ef2b 100644 --- a/src/EterLib/LensFlare.h +++ b/src/EterLib/LensFlare.h @@ -81,7 +81,7 @@ public: CLensFlare(); virtual ~CLensFlare(); - void Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW ī޶ Ƿ, ī޶ ڿ ؾ . + void Compute(const D3DXVECTOR3 & c_rv3LightDirection); // D3DTS_VIEW로 부터 카메라 방향을 얻어오므로, 카메라 설정 뒤에 해야 함. void DrawBeforeFlare(); void DrawAfterFlare(); diff --git a/src/EterLib/NetStream.h b/src/EterLib/NetStream.h index e15efcd..67471ec 100644 --- a/src/EterLib/NetStream.h +++ b/src/EterLib/NetStream.h @@ -98,8 +98,8 @@ class CNetworkStream #else // Obsolete encryption stuff here bool m_isSecurityMode; - char m_szEncryptKey[TEA_KEY_LENGTH]; // Client Ŷ Encrypt Ҷ ϴ Key - char m_szDecryptKey[TEA_KEY_LENGTH]; // Server ۵ Ŷ Decrypt Ҷ ϴ Key + char m_szEncryptKey[TEA_KEY_LENGTH]; // Client 에서 보낼 패킷을 Encrypt 할때 사용하는 Key + char m_szDecryptKey[TEA_KEY_LENGTH]; // Server 에서 전송된 패킷을 Decrypt 할때 사용하는 Key #endif SOCKET m_sock; diff --git a/src/EterLib/Profiler.h b/src/EterLib/Profiler.h index a9cc7a7..b89db87 100644 --- a/src/EterLib/Profiler.h +++ b/src/EterLib/Profiler.h @@ -74,7 +74,7 @@ class CProfiler : public CSingleton { CGraphicTextInstance * pGraphicTextInstance = CGraphicTextInstance::New(); - CResource * pResource = CResourceManager::Instance().GetResourcePointer("ü.fnt"); + CResource * pResource = CResourceManager::Instance().GetResourcePointer("굴림체.fnt"); pGraphicTextInstance->Clear(); pGraphicTextInstance->SetTextPointer(static_cast(pResource)); @@ -114,7 +114,7 @@ class CProfiler : public CSingleton CGraphicTextInstance * pGraphicTextInstance = m_GraphicTextInstancePool.Alloc(); - CResource * pResource = CResourceManager::Instance().GetResourcePointer("ü.fnt"); + CResource * pResource = CResourceManager::Instance().GetResourcePointer("굴림체.fnt"); pGraphicTextInstance->Clear(); pGraphicTextInstance->SetTextPointer(static_cast(pResource)); diff --git a/src/EterLib/Resource.cpp b/src/EterLib/Resource.cpp index 1dbe7d0..a37003c 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 d40dfa9..c917caa 100644 --- a/src/EterLib/ResourceManager.cpp +++ b/src/EterLib/ResourceManager.cpp @@ -10,9 +10,9 @@ int g_iLoadingDelayTime = 20; -const long c_Deleting_Wait_Time = 30000; // ð (30) -const long c_DeletingCountPerFrame = 30; // Ӵ üũ ҽ -const long c_Reference_Decrease_Wait_Time = 30000; // ε ҽ ð (30) +const long c_Deleting_Wait_Time = 30000; // 삭제 대기 시간 (30초) +const long c_DeletingCountPerFrame = 30; // 프레임당 체크 리소스 갯수 +const long c_Reference_Decrease_Wait_Time = 30000; // 선로딩 리소스의 해제 대기 시간 (30초) CFileLoaderThread CResourceManager::ms_loadingThread; @@ -56,7 +56,7 @@ void CResourceManager::ProcessBackgroundLoading() ms_loadingThread.Request(stFileName); m_WaitingMap.insert(TResourceRequestMap::value_type(dwFileCRC, stFileName)); itor = m_RequestMap.erase(itor); - //break; // NOTE: ⼭ break ϸ õõ ε ȴ. + //break; // NOTE: 여기서 break 하면 천천히 로딩 된다. } DWORD dwCurrentTime = ELTimer_GetMSec(); @@ -74,7 +74,7 @@ void CResourceManager::ProcessBackgroundLoading() pResource->OnLoad(pData->dwSize, pData->pvBuf); pResource->AddReferenceOnly(); - // ⼭ ö ۷ īƮ ð ڿ Ǯֱ Ͽ + // 여기서 올라간 레퍼런스 카운트를 일정 시간이 지난 뒤에 풀어주기 위하여 m_pResRefDecreaseWaitingMap.insert(TResourceRefDecreaseWaitingMap::value_type(dwCurrentTime, pResource)); } } @@ -85,7 +85,7 @@ void CResourceManager::ProcessBackgroundLoading() delete pData; } - // DO : ð ̸ ε ξ ҽ ۷ īƮ Ų - [levites] + // DO : 일정 시간이 지나고 난뒤 미리 로딩해 두었던 리소스의 레퍼런스 카운트를 감소 시킨다 - [levites] long lCurrentTime = ELTimer_GetMSec(); TResourceRefDecreaseWaitingMap::iterator itorRef = m_pResRefDecreaseWaitingMap.begin(); @@ -233,7 +233,7 @@ CResource * CResourceManager::GetTypeResourcePointer(const char * c_szFileName, DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile); CResource * pResource = FindResourcePointer(dwFileCRC); - if (pResource) // ̹ ҽ Ѵ. + if (pResource) // 이미 리소스가 있으면 리턴 한다. return pResource; CResource * (*newFunc) (const char *) = NULL; @@ -283,7 +283,7 @@ CResource * CResourceManager::GetResourcePointer(const char * c_szFileName) DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile); CResource * pResource = FindResourcePointer(dwFileCRC); - if (pResource) // ̹ ҽ Ѵ. + if (pResource) // 이미 리소스가 있으면 리턴 한다. return pResource; const char * pcFileExt = strrchr(c_pszFile, '.'); diff --git a/src/EterLib/ResourceManager.h b/src/EterLib/ResourceManager.h index 143cff1..22308a5 100644 --- a/src/EterLib/ResourceManager.h +++ b/src/EterLib/ResourceManager.h @@ -26,7 +26,7 @@ class CResourceManager : public CSingleton CResource * GetResourcePointer(const char * c_szFileName); CResource * GetTypeResourcePointer(const char * c_szFileName, int iType=-1); - // ߰ + // 추가 bool isResourcePointerData(DWORD dwFileCRC); void RegisterResourceNewFunctionPointer(const char* c_szFileExt, CResource* (*pResNewFunc)(const char* c_szFileName)); @@ -63,7 +63,7 @@ class CResourceManager : public CSingleton TResourceNewFunctionPointerMap m_pResNewFuncMap; TResourceNewFunctionByTypePointerMap m_pResNewFuncByTypeMap; TResourceDeletingMap m_ResourceDeletingMap; - TResourceRequestMap m_RequestMap; // ε û Ʈ + TResourceRequestMap m_RequestMap; // 쓰레드로 로딩 요청한 리스트 TResourceRequestMap m_WaitingMap; TResourceRefDecreaseWaitingMap m_pResRefDecreaseWaitingMap; diff --git a/src/EterLib/SkyBox.cpp b/src/EterLib/SkyBox.cpp index b80994b..defd88c 100644 --- a/src/EterLib/SkyBox.cpp +++ b/src/EterLib/SkyBox.cpp @@ -272,7 +272,7 @@ void CSkyBox::SetCloudTexture(const char * c_szFileName) CGraphicImageInstance * pGraphicImageInstance = GenerateTexture(c_szFileName); m_GraphicImageInstanceMap.insert(TGraphicImageInstanceMap::value_type(m_FaceCloud.m_strfacename, pGraphicImageInstance)); - // ̰ Ⱦ° ? [cronan] + // 이거 안쓰는거 같은데요? [cronan] // CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer("D:\\Ymir Work\\special/cloudalpha.tga"); // m_CloudAlphaImageInstance.SetImagePointer(pImage); } @@ -803,7 +803,7 @@ void CSkyBox::Update() void CSkyBox::Render() { - // 2004.01.25 myevan ó Ĺ ű, DepthTest ó + // 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리 STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE); STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE); STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE); @@ -872,7 +872,7 @@ void CSkyBox::RenderCloud() if (!pCloudGraphicImageInstance) return; - // 2004.01.25 myevan ó Ĺ ű, DepthTest ó + // 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리 STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE); STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE); STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE); diff --git a/src/EterLib/SkyBox.h b/src/EterLib/SkyBox.h index 8707968..dcdf94f 100644 --- a/src/EterLib/SkyBox.h +++ b/src/EterLib/SkyBox.h @@ -63,7 +63,7 @@ public: private: TPDTVertex m_Vertex[4]; - TIndex m_Indices[4]; // ε ... + TIndex m_Indices[4]; // 인덱스 버퍼... CColorTransitionHelper m_Helper[4]; }; @@ -99,7 +99,7 @@ protected: protected: ////////////////////////////////////////////////////////////////////////// - // Ÿ + // 타입 정의 typedef std::vector TSkyObjectQuadVector; typedef TSkyObjectQuadVector::iterator TSkyObjectQuadIterator; @@ -118,8 +118,8 @@ protected: ////////////////////////////////////////////////////////////////////////// - // ... - TSkyObjectFace m_FaceCloud; // ϴ ... + // 구름... + TSkyObjectFace m_FaceCloud; // 구름 일단 한장... D3DXMATRIX m_matWorldCloud, m_matTranslationCloud, m_matTextureCloud; D3DXVECTOR3 m_v3PositionCloud; float m_fCloudScaleX, m_fCloudScaleY, m_fCloudHeight; @@ -129,7 +129,7 @@ protected: DWORD m_dwlastTime; - // ī ڽ ̹... + // 스카이 박스 이미지... TGraphicImageInstanceMap m_GraphicImageInstanceMap; // Transform... @@ -137,7 +137,7 @@ protected: D3DXVECTOR3 m_v3Position; float m_fScaleX, m_fScaleY, m_fScaleZ; - // ... ӽ .. + // 랜더링 관련... 임시 변수.. unsigned char m_ucRenderMode; std::string m_strCurTime; diff --git a/src/EterLib/StdAfx.h b/src/EterLib/StdAfx.h index 99dcc2a..cb8c025 100644 --- a/src/EterLib/StdAfx.h +++ b/src/EterLib/StdAfx.h @@ -8,7 +8,7 @@ #define _WIN32_DCOM #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #pragma warning(disable:4018) diff --git a/src/EterLib/TextTag.cpp b/src/EterLib/TextTag.cpp index ca6311d..de17172 100644 --- a/src/EterLib/TextTag.cpp +++ b/src/EterLib/TextTag.cpp @@ -19,7 +19,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext extraInfo.assign(++cur, 8); return TEXT_TAG_COLOR; } - else if (*cur == L'|') // || | ǥѴ. + else if (*cur == L'|') // ||는 |로 표시한다. { tagLen = 2; return TEXT_TAG_TAG; @@ -29,7 +29,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext tagLen = 2; return TEXT_TAG_RESTORE_COLOR; } - else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[̸]|h + else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h { tagLen = 2; return TEXT_TAG_HYPERLINK_START; @@ -154,20 +154,20 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len) const wchar_t * cur = src; - // |r + // |r의 경우 if (*cur == L'r' && *(cur - 1) == L'|') { int len = src_len; - // ||r + // ||r은 무시 if (len >= 2 && *(cur - 2) == L'|') return 1; cur -= 2; len -= 2; - // |c ãƼ |ġ Ѵ. - while (len > 1) // ּ 2ڸ ˻ؾ ȴ. + // |c까지 찾아서 |위치까지 리턴한다. + while (len > 1) // 최소 2자를 검사해야 된다. { if (*cur == L'c' && *(cur - 1) == L'|') return (src - cur) + 1; @@ -175,9 +175,9 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len) --cur; --len; } - return (src_len); // ã ;; + return (src_len); // 못찾으면 전부;; } - // || + // ||의 경우 else if (*cur == L'|' && *(cur - 1) == L'|') return 1; diff --git a/src/EterLib/Thread.h b/src/EterLib/Thread.h index ce09698..6b4225a 100644 --- a/src/EterLib/Thread.h +++ b/src/EterLib/Thread.h @@ -10,8 +10,8 @@ class CThread protected: static UINT CALLBACK EntryPoint(void * pThis); - virtual UINT Setup() = 0; // Execute ҷ ҷ. - virtual UINT Execute(void * arg) = 0; // 尡 ϴ  + virtual UINT Setup() = 0; // Execute이 불려지기 전에 불려진다. + virtual UINT Execute(void * arg) = 0; // 실제 쓰레드가 하는 일이 들어가는 곳 UINT Run(void * arg); diff --git a/src/EterLib/Util.cpp b/src/EterLib/Util.cpp index 73b5247..787ee32 100644 --- a/src/EterLib/Util.cpp +++ b/src/EterLib/Util.cpp @@ -214,13 +214,13 @@ const char* GetFontFaceFromCodePage9x(WORD codePage) switch( codePage ) { case CP_932: - return "lr oSVbN"; + return "굃굍 굊긕긘긞긏"; case CP_949: - return "ü"; + return "굴림체"; case CP_936: - return ""; + return "芥竟"; case CP_950: - return "ө"; + return "꾄ⁿ톱"; case CP_874: return "Tahoma"; case CP_1252: @@ -332,7 +332,7 @@ void base64_decode(const char * str,char * resultStr) { i=0; strcpy(szDest, ""); - while(nCount= length ) // ߴ. + if( nCount+3 >= length ) // 데이터의 끝에 도달했다. { if( szDest[1] == '@' ) { diff --git a/src/EterLib/parser.cpp b/src/EterLib/parser.cpp index 2e86c37..110806b 100644 --- a/src/EterLib/parser.cpp +++ b/src/EterLib/parser.cpp @@ -220,11 +220,11 @@ bool Group::GetArg(const char *c_arg_base, int arg_len, TArgList & argList) { isValue = true; } - // ƴϰ, ̸ ۵ ʾ ĭ dz ڴ. + // 값이 아니고, 이름이 시작되지 않았을 경우 빈칸은 건너 뛴다. else if (!isValue && iNameLen == 0 && isspace((unsigned char) c)) { } - // ʹ dz ڴ + // 엔터는 건너 뛴다 else if (c == '\r' || c == '\n') { } @@ -350,12 +350,12 @@ bool Group::Create(const std::string & stSource) memcpy(box_data, data_begin, data_len); box_data[data_len] = '\0'; - data_len = LocaleString_RightTrim(box_data, data_len); // ĭ ڸ + data_len = LocaleString_RightTrim(box_data, data_len); // 오른쪽 빈칸 자르기 } { const char* space = LocaleString_FindChar(box_data, data_len, ' '); - if (space) // ڰ + if (space) // 인자가 있음 { int name_len = space - box_data; cmd.name.assign(box_data, name_len); @@ -371,7 +371,7 @@ bool Group::Create(const std::string & stSource) return false; } } - else // ڰ Ƿ Ʈ ɾ. + else // 인자가 없으므로 모든 스트링이 명령어다. { cmd.name.assign(box_data); cmd.argList.clear(); diff --git a/src/EterLib/parser.h b/src/EterLib/parser.h index 2952f6b..1578a2f 100644 --- a/src/EterLib/parser.h +++ b/src/EterLib/parser.h @@ -55,30 +55,30 @@ namespace script ~Group(); public: - /** Ʈ ũƮ ׷ . + /** 스트링으로 부터 스크립트 그룹을 만든다. * - * ϸ GetError ޼ҵ Ȯ ִ. + * 실패하면 GetError 메소드로 확인할 수 있다. * - * @param stSource Ʈ ׷ . - * @return true, ϸ false + * @param stSource 이 스트링으로 부터 그룹이 만들어 진다. + * @return 성공시 true, 실패하면 false */ bool Create(const std::string & stSource); - /** ɾ ޴ ޼ҵ + /** 명령어를 받는 메소드 * - * @param cmd ÿ ü ɾ ȴ. - * @return ɾ ִٸ true, ٸ false + * @param cmd 성공시에 이 구조체로 명령어가 복사 된다. + * @return 명령어가 남아 있다면 true, 없다면 false */ bool GetCmd(TCmd & cmd); /* - ɾ ʴ´. + 명령어를 가져오되 꺼내지는 않는다. */ bool ReadCmd(TCmd & cmd); - /** ޴ ޼ҵ + /** 에러를 출력 받는 메소드 * - * @return stError ȴ. + * @return stError 이 곳으로 에러가 출력 된다. */ std::string & GetError(); diff --git a/src/EterLocale/Arabic.cpp b/src/EterLocale/Arabic.cpp index 1cd08df..e735e7e 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/EterPack/EterPack.cpp b/src/EterPack/EterPack.cpp index 316e5a3..34ac612 100644 --- a/src/EterPack/EterPack.cpp +++ b/src/EterPack/EterPack.cpp @@ -257,7 +257,7 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha m_bReadOnly = bReadOnly; - // bReadOnly 尡 ƴϰ ̽ ٸ + // bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패 if (!CreateIndexFile()) return false; @@ -286,7 +286,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]; @@ -477,7 +477,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); @@ -495,7 +495,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; @@ -519,8 +519,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 || @@ -1030,15 +1030,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) ) @@ -1070,13 +1070,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; @@ -1125,7 +1125,7 @@ bool CEterPack::CreateIndexFile() return false; // - // Ƿ . + // 파일이 없으므로 새로 만든다. // fp = fopen(m_indexFileName, "wb"); @@ -1155,16 +1155,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) { @@ -1201,7 +1201,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); @@ -1371,7 +1371,7 @@ const char * CEterPack::GetDBName() void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize) { - // Ű ȣȭ + // 키 암호화 if (keySize != 32) return; @@ -1413,7 +1413,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) @@ -1442,14 +1442,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 @@ -1471,7 +1471,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; @@ -1506,7 +1506,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 @@ -1520,7 +1520,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T __CreateFileNameKey_Panama(filename, key, sizeof(key)); Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32); - // MandatoryBlockSize ִ 2048 Ʈ + // MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만 DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize()); cryptSize = cryptSize > 2048 ? 2048 : cryptSize; diff --git a/src/EterPack/EterPack.h b/src/EterPack/EterPack.h index 6664f03..502c747 100644 --- a/src/EterPack/EterPack.h +++ b/src/EterPack/EterPack.h @@ -139,7 +139,7 @@ class CEterPack bool EncryptIndexFile(); bool DecryptIndexFile(); - DWORD DeleteUnreferencedData(); //  Ǿ Ѵ. + DWORD DeleteUnreferencedData(); // 몇개가 삭제 되었는지 리턴 한다. bool GetNames(std::vector* retNames); @@ -182,7 +182,7 @@ class CEterPack std::unordered_map m_map_indexRefCount; TDataPositionMap m_DataPositionMap; - TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX \ ϹǷ + 1 ũ⸸ŭ . + TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX 도 억세스 하므로 + 1 크기만큼 만든다. std::string m_stDataFileName; std::string m_stPathName; @@ -198,8 +198,8 @@ class CEterPack //private: // bool m_bIsDataLoaded; - // // ׳ time_t , 32bit time_t ϴ ҽ, - // // CEterPack size size - 4 νϱ ߻ ִ. + // // 그냥 time_t를 쓰면, 32bit time_t를 사용하는 소스에서는, + // // CEterPack의 size를 실제 size - 4로 인식하기 때문에 문제가 발생할 수 있다. // __time64_t m_tLastAccessTime; //public: // __time64_t GetLastAccessTime() { return m_tLastAccessTime; } diff --git a/src/EterPack/EterPackManager.cpp b/src/EterPack/EterPackManager.cpp index 48fdc4f..5531057 100644 --- a/src/EterPack/EterPackManager.cpp +++ b/src/EterPack/EterPackManager.cpp @@ -53,7 +53,7 @@ void CEterPackManager::SetRelativePathMode() } -// StringPath std::string +// StringPath std::string 버전 int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName) { rstrFileName = c_szFileName; @@ -231,7 +231,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); @@ -255,8 +255,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 // ) //{ @@ -294,7 +294,7 @@ bool CEterPackManager::isExistInPack(const char * c_szFileName) return pkFileItem->pkPack->IsExist(strFileName.c_str()); } - // NOTE : ġ Ǵ ٸ false - [levites] + // NOTE : 매치 되는 팩이 없다면 false - [levites] return false; } @@ -452,7 +452,7 @@ void CEterPackManager::RetrieveHybridCryptPackKeys(const BYTE *pStream) { int iRecvedCryptKeySize = 0; memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) ); - iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // key stream filename hash ԵǾ Ƿ, hash ŭ . + iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌. iMemOffset += sizeof(iRecvedCryptKeySize); memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) ); diff --git a/src/EterPack/EterPackManager.h b/src/EterPack/EterPackManager.h index dbc813a..152efed 100644 --- a/src/EterPack/EterPackManager.h +++ b/src/EterPack/EterPackManager.h @@ -66,12 +66,12 @@ class CEterPackManager : public CSingleton //THEMIDA void RetrieveHybridCryptPackSDB( const BYTE* pStream ); - // ޸𸮿 ε ѵ , ؾ ͵ . + // 메모리에 매핑된 팩들 가운데, 정리해야할 것들 정리. public: void ArrangeMemoryMappedPack(); protected: - int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string + int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string 버전 bool CompareName(const char * c_szDirectoryName, DWORD iLength, const char * c_szFileName); CEterPack* FindPack(const char* c_szPathName); diff --git a/src/EterPythonLib/PythonGraphicTextModule.cpp b/src/EterPythonLib/PythonGraphicTextModule.cpp index 060bf0c..2378bbb 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 cfc4f90..125fae0 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 586873a..6edd77e 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 = std::max(rSlot.ixCellSize, int(rSlot.byxPlacedItemSize * ITEM_WIDTH)); diff --git a/src/EterPythonLib/PythonSlotWindow.h b/src/EterPythonLib/PythonSlotWindow.h index 4c7e82e..ba45ac7 100644 --- a/src/EterPythonLib/PythonSlotWindow.h +++ b/src/EterPythonLib/PythonSlotWindow.h @@ -24,7 +24,7 @@ namespace UI SLOT_STATE_LOCK = (1 << 0), SLOT_STATE_CANT_USE = (1 << 1), SLOT_STATE_DISABLE = (1 << 2), - SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3), // Cover ư Կ ϴµ, flag ̾ Ŀ + SLOT_STATE_ALWAYS_RENDER_COVER = (1 << 3), // 현재 Cover 버튼은 슬롯에 무언가 들어와 있을 때에만 렌더링 하는데, 이 flag가 있으면 빈 슬롯이어도 커버 렌더링 }; class CSlotWindow : public CWindow @@ -44,9 +44,9 @@ namespace UI { DWORD dwState; DWORD dwSlotNumber; - DWORD dwCenterSlotNumber; // NOTE :  ū ġ ȣ - DWORD dwItemIndex; // NOTE : ⼭ Ǵ Item̶ ܾ ƴ, - BOOL isItem; // " 빰"̶ . ? - [levites] + DWORD dwCenterSlotNumber; // NOTE : 사이즈가 큰 아이템의 경우 아이템의 실제 위치 번호 + DWORD dwItemIndex; // NOTE : 여기서 사용되는 Item이라는 단어는 좁은 개념의 것이 아닌, + BOOL isItem; // "슬롯의 내용물"이라는 포괄적인 개념어. 더 좋은 것이 있을까? - [levites] // CoolTime float fCoolTime; diff --git a/src/EterPythonLib/PythonWindow.cpp b/src/EterPythonLib/PythonWindow.cpp index 73de670..b7ce50f 100644 --- a/src/EterPythonLib/PythonWindow.cpp +++ b/src/EterPythonLib/PythonWindow.cpp @@ -66,10 +66,10 @@ namespace UI void CWindow::Clear() { - // FIXME : Children Delete ʴ´. - // Pythonʿ Destroy ϳ ٽ ȣ ̹Ƿ.. - // ũ ´. - // ´ ִ°? - [levites] + // FIXME : Children을 즉시 Delete하지는 않는다. + // 어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로.. + // 하지만 만약을 위해 링크는 끊어 놓는다. + // 더 좋은 형태는 있는가? - [levites] std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear()); m_pChildList.clear(); @@ -93,8 +93,8 @@ namespace UI m_bShow = false; } - // NOTE : IsShow "ڽ ̴°?" , __IsShowing "ڽ ׷ ִ°?" üũѴ - // ڽ Show Tree Parent ϳ Hide Ƿ.. - [levites] + // NOTE : IsShow는 "자신이 보이는가?" 이지만, __IsShowing은 "자신이 그려지고 있는가?" 를 체크한다 + // 자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites] bool CWindow::IsRendering() { if (!IsShow()) @@ -577,7 +577,7 @@ namespace UI BOOL CWindow::OnMouseLeftButtonUp() { PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple()); - return TRUE; // NOTE : ButtonUp ܷ TRUE + return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE } BOOL CWindow::OnMouseLeftButtonDoubleClick() @@ -1291,7 +1291,7 @@ namespace UI } /////////////////////////////////////////////////////////////////////////////////////////////// - // MarkBox - ũ ¿ UI + // MarkBox - 마크 출력용 UI 윈도우 /////////////////////////////////////////////////////////////////////////////////////////////// CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject) { diff --git a/src/EterPythonLib/PythonWindow.h b/src/EterPythonLib/PythonWindow.h index ef8cb8a..e125530 100644 --- a/src/EterPythonLib/PythonWindow.h +++ b/src/EterPythonLib/PythonWindow.h @@ -28,16 +28,16 @@ namespace UI enum EFlags { - FLAG_MOVABLE = (1 << 0), // ִ â - FLAG_LIMIT = (1 << 1), // â ȭ  - FLAG_SNAP = (1 << 2), // ִ â + FLAG_MOVABLE = (1 << 0), // 움직일 수 있는 창 + FLAG_LIMIT = (1 << 1), // 창이 화면을 벗어나지 않음 + FLAG_SNAP = (1 << 2), // 스냅 될 수 있는 창 FLAG_DRAGABLE = (1 << 3), - FLAG_ATTACH = (1 << 4), // θ پ ִ â (For Drag / ex. ScriptWindow) - FLAG_RESTRICT_X = (1 << 5), // ¿ ̵ - FLAG_RESTRICT_Y = (1 << 6), // ̵ + FLAG_ATTACH = (1 << 4), // 완전히 부모에 붙어 있는 창 (For Drag / ex. ScriptWindow) + FLAG_RESTRICT_X = (1 << 5), // 좌우 이동 제한 + FLAG_RESTRICT_Y = (1 << 6), // 상하 이동 제한 FLAG_NOT_CAPTURE = (1 << 7), - FLAG_FLOAT = (1 << 8), // ߿ ־ ġ Ǵ â - FLAG_NOT_PICK = (1 << 9), // 콺 Pick ʴ â + FLAG_FLOAT = (1 << 8), // 공중에 떠있어서 순서 재배치가 되는 창 + FLAG_NOT_PICK = (1 << 9), // 마우스에 의해 Pick되지 않는 창 FLAG_IGNORE_SIZE = (1 << 10), FLAG_RTL = (1 << 11), // Right-to-left }; @@ -91,8 +91,8 @@ namespace UI bool IsIn(long x, long y); bool IsIn(); CWindow * PickWindow(long x, long y); - CWindow * PickTopWindow(long x, long y); // NOTE : Children ʰ - // üũ ϴ Ưȭ Լ + CWindow * PickTopWindow(long x, long y); // NOTE : Children으로 내려가지 않고 상위에서만 + // 체크 하는 특화된 함수 void __RemoveReserveChildren(); @@ -166,10 +166,10 @@ namespace UI EHorizontalAlign m_HorizontalAlign; EVerticalAlign m_VerticalAlign; - long m_x, m_y; // X,Y ǥ - long m_lWidth, m_lHeight; // ũ - RECT m_rect; // Global ǥ - RECT m_limitBiasRect; // limit bias + long m_x, m_y; // X,Y 상대좌표 + long m_lWidth, m_lHeight; // 크기 + RECT m_rect; // Global 좌표 + RECT m_limitBiasRect; // limit bias 값 bool m_bMovable; bool m_bShow; diff --git a/src/EterPythonLib/PythonWindowManager.cpp b/src/EterPythonLib/PythonWindowManager.cpp index 1b48e84..2e5c3cc 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 269e29a..4ad219b 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 e9f0f02..bd66f0d 100644 --- a/src/GameLib/ActorInstance.cpp +++ b/src/GameLib/ActorInstance.cpp @@ -112,7 +112,7 @@ void CActorInstance::OnUpdate() } -// 2004.07.05.myevan. ýź ʿ ̴ ذ +// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결 IBackground& CActorInstance::GetBackground() { return IBackground::Instance(); @@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position) m_v3FishingPosition = rv3Position; } -// ActorInstanceMotion.cpp ֵ +// ActorInstanceMotion.cpp 에 넣도록 하자 void CActorInstance::Move() { if (m_isWalking) @@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess() void CActorInstance::__AccumulationMovement(float fRot) { - // NOTE - ϴ WAIT ̲ - // Ŀ RaceMotionData ̵Ǵ Flag ְԲ Ѵ. - [levites] + // NOTE - 일단은 WAIT로 미끄러짐 방지 + // 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites] if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex()) return; @@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc return; } - // NOTE : Sphere Overlap ó ⸦ ϸ Penetration Ƽ ( ε ԰ --) - // Sphere Collision ġ RollBackϴ ٲ. - // BGObject ؼ. + // NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --) + // Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다. + // 단 BGObject에 대해서만. if (isAttacking() ) return; @@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc { BlockMovement(); - //Movementʱȭ + //Movement초기화 /* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f); TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin(); @@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_ return; } - // Body ϳ մϴ. + // Body는 하나임을 가정합니다. if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f) return; diff --git a/src/GameLib/ActorInstance.h b/src/GameLib/ActorInstance.h index 0011a58..7ff67ad 100644 --- a/src/GameLib/ActorInstance.h +++ b/src/GameLib/ActorInstance.h @@ -2,8 +2,8 @@ // class CActorInstance -// Note : ij Lighting, Local Point Light, Weapon Trace ȿ ޺ Ÿ, Ÿ, -// Ÿ ߻, ü ϴ Ŵ ̴. +// Note : 캐릭터의 Lighting, Local Point Light, Weapon Trace 등의 효과와 콤보 데이타, 사운드 데이타, +// 모션 데이타 들을 추상적, 총체적으로 관리하는 개별 매니저가 될 것이다. #include "FlyTarget.h" #include "RaceData.h" @@ -64,7 +64,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject virtual void OnChangeShape() = 0; }; - // 2004.07.05.myevan.ýź ʿ ̴ ذ + // 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결 private: static IBackground& GetBackground(); @@ -217,7 +217,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject CActorInstance(); virtual ~CActorInstance(); - // 20041201.myevan.νϽ̽ Լ + // 20041201.myevan.인스턴스베이스용 함수 void INSTANCEBASE_Transform(); void INSTANCEBASE_Deform(); @@ -294,13 +294,13 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject ///////////////////////////////////////////////////////////////////////////////////// // Motion Queueing System - void SetMotionMode(int iMotionMode); // FIXME : ð ϰԲ Ѵ. + void SetMotionMode(int iMotionMode); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. int GetMotionMode(); void SetLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); bool InterceptOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f); bool InterceptLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f); - bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ð ϰԲ Ѵ. - bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : ð ϰԲ Ѵ. + bool PushOnceMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. + bool PushLoopMotion(DWORD dwMotion, float fBlendTime = 0.1f, float fSpeedRatio=1.0f); // FIXME : 모드의 시간차 적용이 가능하게끔 한다. void SetMotionLoopCount(int iCount); bool IsPushing(); @@ -346,9 +346,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject ///////////////////////////////////////////////////////////////////////////////////// // Battle // Input - // ű ɼ ִ ڵ - // Ʈ ÷̾ ϰ ܼ Showing Type̱ - // ˻簡 ʿ . + // 하위로 옮길 가능성이 있는 코드들 + // 네트웍 연동시 전투 관련은 플레이어를 제외하곤 단순히 Showing Type이기 때문에 + // 조건 검사가 필요 없다. void InputNormalAttackCommand(float fDirRot); // Process input - Only used by player's character bool InputComboAttackCommand(float fDirRot); // Process input - Only used by player's character @@ -524,7 +524,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void ClearFlyEventHandler(); void SetFlyEventHandler(IFlyEventHandler * pHandler); - // 2004. 07. 07. [levites] - ų Ÿ ٲ ذ ڵ + // 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드 bool CanChangeTarget(); protected: @@ -567,7 +567,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void CurrentMotionProcess(); MOTION_KEY GetRandomMotionKey(MOTION_KEY dwMotionKey); - float GetLastMotionTime(float fBlendTime); // NOTE : ڵ BlendTimeŭ մ ð + float GetLastMotionTime(float fBlendTime); // NOTE : 자동으로 BlendTime만큼을 앞당긴 시간을 리턴 float GetMotionDuration(DWORD dwMotionKey); bool InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime = 0.1f, UINT uSkill=0, float fSpeedRatio=1.0f); @@ -637,31 +637,31 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject protected: float __GetAttackSpeed(); - DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // + DWORD __SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dwRandMotKey=0); // 모션 데이터 설정 void __ClearMotion(); - bool __BindMotionData(DWORD dwMotionKey); // ͸ ε - void __ClearHittedActorInstanceMap(); // νϽ + bool __BindMotionData(DWORD dwMotionKey); // 모션 데이터를 바인딩 + void __ClearHittedActorInstanceMap(); // 때려진 액터 인스턴스 맵을 지운다 - UINT __GetMotionType(); // Ÿ + UINT __GetMotionType(); // 모션 타입 얻기 - bool __IsNeedFlyTargetMotion(); // FlyTarget ʿ ΰ? - bool __HasMotionFlyEvent(); // 𰡸 °? - bool __IsWaitMotion(); // ΰ? - bool __IsMoveMotion(); // ̵ ΰ? - bool __IsAttackMotion(); // ΰ? - bool __IsComboAttackMotion(); // ޺ ΰ? - bool __IsDamageMotion(); // ΰ? - bool __IsKnockDownMotion(); // ˴ٿ ΰ? - bool __IsDieMotion(); // ΰ? - bool __IsStandUpMotion(); // Ͼ ΰ? + bool __IsNeedFlyTargetMotion(); // FlyTarget 이 필요한 모션인가? + bool __HasMotionFlyEvent(); // 무언가를 쏘는가? + bool __IsWaitMotion(); // 대기 모션 인가? + bool __IsMoveMotion(); // 이동 모션 인가? + bool __IsAttackMotion(); // 공격 모션 인가? + bool __IsComboAttackMotion(); // 콤보 공격 모션 인가? + bool __IsDamageMotion(); // 데미지 모션인가? + bool __IsKnockDownMotion(); // 넉다운 모션인가? + bool __IsDieMotion(); // 사망 모션 인가? + bool __IsStandUpMotion(); // 일어서기 모션인가? bool __IsMountingHorse(); - bool __CanAttack(); // Ҽ ִ°? - bool __CanNextComboAttack(); // ޺ Ѱ? + bool __CanAttack(); // 공격 할수 있는가? + bool __CanNextComboAttack(); // 다음 콤보 어택이 가능한가? - bool __IsComboAttacking(); // ޺ ΰ? - void __CancelComboAttack(); // ޺ + bool __IsComboAttacking(); // 콤보 공격중인가? + void __CancelComboAttack(); // 콤보 공격 취소 WORD __GetCurrentMotionIndex(); DWORD __GetCurrentMotionKey(); @@ -683,9 +683,9 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject D3DXVECTOR3 __GetFlyTargetPosition(); protected: - void __DestroyWeaponTrace(); // ܻ Ѵ - void __ShowWeaponTrace(); // ܻ δ - void __HideWeaponTrace(); // ܻ + void __DestroyWeaponTrace(); // 무기 잔상을 제거한다 + void __ShowWeaponTrace(); // 무기 잔상을 보인다 + void __HideWeaponTrace(); // 무기 잔상을 감춘다 protected: // collision data @@ -705,7 +705,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject // For Collision Detection TCollisionPointInstanceList m_BodyPointInstanceList; TCollisionPointInstanceList m_DefendingPointInstanceList; - SSplashArea m_kSplashArea; // TODO : ؾѴ - [levites] + SSplashArea m_kSplashArea; // TODO : 복수에 대한 고려를 해야한다 - [levites] CAttributeInstance * m_pAttributeInstance; ///////////////////////////////////////////////////////////////////////////////////// @@ -736,7 +736,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject float m_fInvisibleTime; BOOL m_isHiding; - // TODO : State ų ִ + // TODO : State로 통합 시킬 수 있는지 고려해 볼것 BOOL m_isResistFallen; BOOL m_isSleep; BOOL m_isFaint; @@ -822,7 +822,7 @@ class CActorInstance : public IActorInstance, public IFlyTargetableObject void __InitializeRotationData(); void __InitializePositionData(); - public: // InstanceBase ӽ÷ public + public: // InstanceBase 통합전 임시로 public IEventHandler* __GetEventHandlerPtr(); IEventHandler& __GetEventHandlerRef(); diff --git a/src/GameLib/ActorInstanceAttach.cpp b/src/GameLib/ActorInstanceAttach.cpp index 23ed42e..c585122 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 5fc0062..e8a2e4a 100644 --- a/src/GameLib/ActorInstanceBattle.cpp +++ b/src/GameLib/ActorInstanceBattle.cpp @@ -171,28 +171,28 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) } else if (m_pkCurRaceMotionData->IsComboInputTimeData()) { - // ð + // 동작 경과 시간 float fElapsedTime = GetAttackingElapsedTime(); - // ̹ Է Ѱ ð ٸ.. + // 이미 입력 한계 시간이 지났다면.. if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime()) { - //Tracen("Է Ѱ ð "); + //Tracen("입력 한계 시간 지남"); if (IsBowMode()) m_isNextPreInput = TRUE; return false; } - if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면 { - //Tracen(" ޺ "); + //Tracen("다음 콤보 동작"); // args : BlendingTime __RunNextCombo(); return true; } - else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // Է ð .. + else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면.. { - //Tracen(" Է "); + //Tracen("선 입력 설정"); m_isPreInput = TRUE; return false; } @@ -200,9 +200,9 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot) else { float fElapsedTime = GetAttackingElapsedTime(); - if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // ޺ ߵ ð Ķ + if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면 { - //Tracen(" ޺ "); + //Tracen("다음 콤보 동작"); // args : BlendingTime __RunNextCombo(); return true; @@ -230,7 +230,7 @@ void CActorInstance::ComboProcess() // Process PreInput if (m_isPreInput) { - //Tracenf("Է %f ޺ð %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime()); + //Tracenf("선입력 %f 다음콤보시간 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime()); if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) { __RunNextCombo(); @@ -244,8 +244,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; @@ -289,7 +289,7 @@ void CActorInstance::__RunNextCombo() ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f); //////////////////////////////// - // ޺ ٸ + // 콤보가 끝났다면 if (m_dwcurComboIndex == pComboData->ComboIndexVector.size()) { __OnEndCombo(); @@ -303,8 +303,8 @@ void CActorInstance::__OnEndCombo() m_dwcurComboIndex = 1; } - // ⼭ ޺ ʱȭ ؼ ȵȴ. - // ޺ ʱȭ Ǵ ޺ Motion ڵ Wait ư ̴. + // 여기서 콤보를 초기화 해선 안된다. + // 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다. } void CActorInstance::__ClearCombo() @@ -567,7 +567,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; @@ -588,15 +588,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; @@ -624,13 +624,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; } @@ -641,7 +641,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())) { @@ -652,7 +652,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; @@ -674,7 +674,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 59791a0..eea22ff 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 0eb7069..4119ff9 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 44d2643..25724de 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 338c7ff..3f7d1d7 100644 --- a/src/GameLib/ActorInstanceMotion.cpp +++ b/src/GameLib/ActorInstanceMotion.cpp @@ -65,11 +65,11 @@ void CActorInstance::ReservingMotionProcess() case CRaceMotionData::NAME_STAND_UP_BACK: if (IsFaint()) { - //Tracenf("Ͼ "); + //Tracenf("일어서려고 했으나 기절중"); SetEndStopMotion(); - // 1ʾ + // 이후의 모션 전부 1초씩 딜레이 TMotionDeque::iterator itor = m_MotionDeque.begin(); for (; itor != m_MotionDeque.end(); ++itor) { @@ -98,12 +98,12 @@ void CActorInstance::ReservingMotionProcess() case CRaceMotionData::NAME_STAND_UP_BACK: if (IsDead()) { - //Tracenf("Ͼ "); - // ͷ + //Tracenf("일어서려고 했으나 사망"); + // 예전 데이터로 복구 m_kCurMotNode=kPrevMotionNode; __ClearMotion(); - // + // 이전 동작 마지막 상태 유지 SetEndStopMotion(); return; } @@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess() if (0 == dwRealMotionKey) return; - // FIX: ȣ __SetMotion Լ ȿ ٸ ɼ Ƿ duration ' ' duration ؾ . + // FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함. //float fDurationTime=rReservingMotionNode.fDuration; float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio; float fStartTime = rReservingMotionNode.fStartTime; @@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess() void CActorInstance::CurrentMotionProcess() { - if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // ӽô. ǥ Once Ѿ ȵȴ. - [levites] + if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites] if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount) m_kCurMotNode.dwcurFrame = 0; @@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess() bool isLooping=false; - // ٸ Playing Flag + // 끝났다면 Playing Flag를 끈다 if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion()) { if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1) @@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee m_kCurMotNode.uSkill = 0; } -// ϰ == SetMotion ϰ == ִϸ̼ ͸ ÷ ߴ? +// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐? bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio) { if (!m_pkCurRaceData) @@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, assert(NULL != m_pkCurRaceMotionData); - // FIX : ȣ __SetMotion Լ ٸ ֱ dwMotionKey ȿ ʰ - // ش Ű duration ȿ . 翬 play ð ؾ .. -_-;; + // FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고 + // 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;; // float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio; float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio; @@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey) MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey) { - // NOTE : ȣ Ǵ κ ƴ ȭ - [levites] - // FIXME : ó õ Ϳ ó Ǿ ʴ. + // NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites] + // FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다. WORD wMode = GET_MOTION_MODE(dwMotionKey); WORD wIndex = GET_MOTION_INDEX(dwMotionKey); @@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey) dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i); // Temporary - // NOTE: μ ⼭ غ ǹ̾. ü Ȯΰ Ʒ ڵ ٸ ذؾ ϹǷ ϴ ּó. ߿ ä .. + // NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자.. // m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey); // Temporary @@ -668,7 +668,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw { if (!m_isMain) { - Logn(0, "ΰ ƴ϶ ̵̶ "); + Logn(0, "주인공이 아니라면 이동중이라 데미지 동작을 취하지 않음"); return false; } } @@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw } - // NOTE : ų ġ - [levites] + // NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites] if (__IsHiding()) { __ShowEvent(); @@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw m_pkHorse->__BindMotionData(dwChildMotKey); if (c_rkSetMotData.iLoopCount) - m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // Ÿ ǰ ־ + m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음 else m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP; @@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw if (__CanAttack()) { - // ⼭ ó մϴ - [levites] + // 여기서 공격 모션일 경우의 처리를 합니다 - [levites] __ShowWeaponTrace(); m_HitDataMap.clear(); @@ -752,12 +752,12 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw { if (!__CanNextComboAttack()) { - // 2004.11.19.myevan. Ž ̺κп ٷ µǾ ȳ´ - m_dwcurComboIndex = 0; // ޺ - [levites] + // 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다 + m_dwcurComboIndex = 0; // 콤보 리셋 - [levites] - // NOTE : ClearCombo() ؼ ȵȴ. - // ޺ ų ̾ m_pkCurRaceMotionData ʱȭ Ǿ . - //Tracef("MotionData ޺ Ÿ ʽϴ.\n"); + // NOTE : ClearCombo() 를 수행해서는 안된다. + // 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다. + //Tracef("MotionData에 콤보 데이타가 들어 있지 않습니다.\n"); } } } diff --git a/src/GameLib/ActorInstanceMotionEvent.cpp b/src/GameLib/ActorInstanceMotionEvent.cpp index a7fed1b..32a21d0 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 ff588a3..c2ed8f4 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 3d052ee..6d3761a 100644 --- a/src/GameLib/ActorInstanceRotation.cpp +++ b/src/GameLib/ActorInstanceRotation.cpp @@ -62,7 +62,7 @@ void CActorInstance::RotationProcess() m_fcurRotation = m_rotEnd; } - // FIXME : "ǹ϶ üũ" ٲ۴. - [levites] + // FIXME : "건물일때만 체크"로 바꾼다. - [levites] if (0.0f != m_rotX || 0.0f != m_rotY) { CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation); diff --git a/src/GameLib/Area.cpp b/src/GameLib/Area.cpp index c4e3675..95139db 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); @@ -733,7 +733,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz std::transform(attrFileName.begin(), attrFileName.end(), attrFileName.begin(), [](unsigned char c) { return std::tolower(c); }); 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) @@ -775,7 +775,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); @@ -803,7 +803,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; @@ -827,7 +827,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); @@ -937,7 +937,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) { @@ -1037,7 +1037,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; @@ -1271,7 +1271,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance) ////////////////////////////////////////////////////////////////////////// -// Coordination +// Coordination 관련 void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY) { *usCoordX = m_wX; diff --git a/src/GameLib/Area.h b/src/GameLib/Area.h index aa04201..1dd386a 100644 --- a/src/GameLib/Area.h +++ b/src/GameLib/Area.h @@ -157,7 +157,7 @@ class CArea typedef std::vector TDungeonBlockInstanceVector; typedef std::vector TObjectInstanceVector; typedef std::vector TAmbienceInstanceVector; - typedef std::map TGraphicThingInstanceCRCMap; // ȭ by + typedef std::map TGraphicThingInstanceCRCMap; // 최적화용 by 동현 typedef std::set TShowingPortalIDSet; typedef struct SCRCWithNumber @@ -264,7 +264,7 @@ class CArea protected: // Static Data - TObjectDataVector m_ObjectDataVector; // Area ִ Ʈ + TObjectDataVector m_ObjectDataVector; // Area 상에 있는 오브젝트들 // Rendering Instances TObjectInstanceVector m_ObjectInstanceVector; @@ -280,7 +280,7 @@ class CArea TCRCWithNumberVector m_kRenderedThingInstanceCRCWithNumberVector; TThingInstanceVector m_kRenderedGrapphicThingInstanceVector; - // ǥ : ɸ ü ߿ ǥ... Ѵ 0~999 + // 좌표 : 심리스 맵 전체 중에서의 좌표... 둘다 0~999 WORD m_wX; WORD m_wY; diff --git a/src/GameLib/AreaLoaderThread.cpp b/src/GameLib/AreaLoaderThread.cpp index 4b21d82..5c63104 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 0083207..3256f96 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() @@ -893,7 +893,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; } @@ -1000,11 +1000,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 f559999..919af41 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 e8e1e06..16d213d 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; @@ -463,7 +463,7 @@ bool CFlyingInstance::Update() if (m_pData->m_bHitOnBackground) { - // 浹 + // 지형 충돌 if (CFlyingManager::Instance().GetMapManagerPtr()) { @@ -478,7 +478,7 @@ bool CFlyingInstance::Update() } } - // ǹ+ 浹 + // 건물+나무 충돌 FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position); rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying); diff --git a/src/GameLib/FlyingInstance.h b/src/GameLib/FlyingInstance.h index 33db165..5541fdf 100644 --- a/src/GameLib/FlyingInstance.h +++ b/src/GameLib/FlyingInstance.h @@ -11,8 +11,8 @@ class CActorInstance; class CFlyingInstance { public: - // 2004. 3. 26. myevan. ̹ ʿ. ӿ ʴ´ٸ ӹ޾ 鵵 - void Clear(); // Destroy + // 2004. 3. 26. myevan. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자 + void Clear(); // Destroy와 같다 void SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition); void SetFlyTarget(const CFlyTarget & cr_Target); // Shot at Target @@ -56,7 +56,7 @@ public: void SetOwner(IActorInstance * pOwner) { m_pOwner = pOwner; } void SetSkillIndex(DWORD dwIndex) { m_dwSkillIndex = dwIndex; } - // FIXME : ϰ ֽϴ. ӽ÷ .. - [levites] + // FIXME : 툴에서 사용하고 있습니다. 임시로 위로.. - [levites] void __Explode(bool bBomb=true); void __Bomb(); @@ -67,7 +67,7 @@ protected: void __SetDataPointer(CFlyingData * pData, const D3DXVECTOR3 & v3StartPosition); void __SetTargetDirection(const CFlyTarget& c_rkTarget); - void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // Ÿ + void __SetTargetNormalizedDirection(const D3DXVECTOR3 & v3NormalizedDirection ); // 시작 타겟 방향 설정 protected: diff --git a/src/GameLib/GameEventManager.h b/src/GameLib/GameEventManager.h index 8fe95a7..801fd06 100644 --- a/src/GameLib/GameEventManager.h +++ b/src/GameLib/GameEventManager.h @@ -6,10 +6,10 @@ // // CGameEventManager // -// Note : Game󿡼 Ͼ , ȭ 鸲, Range Ӱ Ÿ Event -// ϴ Ŭ. - [levites] +// Note : Game상에서 일어나는 폭발, 화면 흔들림, Range 무기들의 움직임과 타격 등의 Event +// 를 종합적으로 관리하는 클래스. - [levites] // -// Note : ӻ Cinematic Event Ʈϴ Ŵ Ѵ. 2004.07.19 - [levites] +// Note : 게임상의 Cinematic Event 를 컨트롤하는 매니져로 사용한다. 2004.07.19 - [levites] // class CGameEventManager : public CSingleton, public CScreen diff --git a/src/GameLib/GameType.cpp b/src/GameLib/GameType.cpp index 4ffc3d5..ce11069 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 3e0eea9..7538dfb 100644 --- a/src/GameLib/GameUtil.cpp +++ b/src/GameLib/GameUtil.cpp @@ -99,7 +99,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; @@ -148,7 +148,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance & //*/ /* - // NOTE : AABB üũ + // NOTE : AABB 체크 할 것 /////////////////////////////////////////////////////////////////////////////////////////////// D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position; float fDistance = D3DXVec3Length(&v3Distance); @@ -275,15 +275,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; } @@ -299,7 +299,7 @@ bool IsCCWRotation(float begin, float end) // 270 90 // 0 // - // ð ݴ + // 시계 반대 return (begin - end < 0); } diff --git a/src/GameLib/Interface.h b/src/GameLib/Interface.h index 78cf53c..5e25255 100644 --- a/src/GameLib/Interface.h +++ b/src/GameLib/Interface.h @@ -1,6 +1,6 @@ #pragma once -// 2004.07.05.myevan.ýź ʿ ̴ ذ +// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결 class IBackground : public CSingleton { public: diff --git a/src/GameLib/ItemData.cpp b/src/GameLib/ItemData.cpp index c0afb27..7afc96d 100644 --- a/src/GameLib/ItemData.cpp +++ b/src/GameLib/ItemData.cpp @@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName) } // Attaching Data - // Item Attaching Data ϴ . + // Item 에 Attaching Data 일단 없음. // if (TextFileLoader.SetChildNode("attachingdata")) // { // if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector)) @@ -203,7 +203,7 @@ void CItemData::__SetIconImage(const char * c_szFileName) { if (!CResourceManager::Instance().IsFileExist(c_szFileName)) { - TraceError("%s ϴ.CItemData::__SetIconImage",c_szFileName); + TraceError("%s 파일이 없습니다.CItemData::__SetIconImage",c_szFileName); m_pIconImage = NULL; } else if (m_pIconImage == NULL) @@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const return m_ItemTable.alSockets[byIndex]; } -// Լ !!(Ŀ ģ) -//SocketCount = 1 ̸ ʱ޹ -//SocketCount = 2 ̸ ߱޹ -//SocketCount = 3 ̸ ޹ +//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다) +//SocketCount = 1 이면 초급무기 +//SocketCount = 2 이면 중급무기 +//SocketCount = 3 이면 고급무기 int CItemData::GetSocketCount() const { return m_ItemTable.bGainSocketPct; @@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const return float(uSpecularPower) / 100.0f; } -//refine ۹ȣ ڸ ġѴ-_-(̺̿ ٲ ) +//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정) UINT CItemData::GetRefine() const { return GetIndex()%10; diff --git a/src/GameLib/ItemData.h b/src/GameLib/ItemData.h index a8b7b28..c05d7ec 100644 --- a/src/GameLib/ItemData.h +++ b/src/GameLib/ItemData.h @@ -1,6 +1,6 @@ #pragma once -// NOTE : Item Ŭ. +// NOTE : Item의 통합 관리 클래스다. // Icon, Model (droped on ground), Game Data #include "../eterLib/GrpSubImage.h" @@ -22,18 +22,18 @@ class CItemData enum EItemType { ITEM_TYPE_NONE, //0 - ITEM_TYPE_WEAPON, //1// - ITEM_TYPE_ARMOR, //2// - ITEM_TYPE_USE, //3// + ITEM_TYPE_WEAPON, //1//무기 + ITEM_TYPE_ARMOR, //2//갑옷 + ITEM_TYPE_USE, //3//아이템 사용 ITEM_TYPE_AUTOUSE, //4 ITEM_TYPE_MATERIAL, //5 - ITEM_TYPE_SPECIAL, //6 // + ITEM_TYPE_SPECIAL, //6 //스페셜 아이템 ITEM_TYPE_TOOL, //7 - ITEM_TYPE_LOTTERY, //8// - ITEM_TYPE_ELK, //9// + ITEM_TYPE_LOTTERY, //8//복권 + ITEM_TYPE_ELK, //9//돈 ITEM_TYPE_METIN, //10 ITEM_TYPE_CONTAINER, //11 - ITEM_TYPE_FISH, //12// + ITEM_TYPE_FISH, //12//낚시 ITEM_TYPE_ROD, //13 ITEM_TYPE_RESOURCE, //14 ITEM_TYPE_CAMPFIRE, //15 @@ -41,21 +41,21 @@ class CItemData ITEM_TYPE_SKILLBOOK, //17 ITEM_TYPE_QUEST, //18 ITEM_TYPE_POLYMORPH, //19 - ITEM_TYPE_TREASURE_BOX, //20// - ITEM_TYPE_TREASURE_KEY, //21// + ITEM_TYPE_TREASURE_BOX, //20//보물상자 + ITEM_TYPE_TREASURE_KEY, //21//보물상자 열쇠 ITEM_TYPE_SKILLFORGET, //22 ITEM_TYPE_GIFTBOX, //23 ITEM_TYPE_PICK, //24 - ITEM_TYPE_HAIR, //25//Ӹ - ITEM_TYPE_TOTEM, //26// - ITEM_TYPE_BLEND, //27//ɶ ϰ Ӽ ٴ ๰ - ITEM_TYPE_COSTUME, //28//ڽ (2011 8 ߰ ڽ ýۿ ) - ITEM_TYPE_DS, //29 //ȥ - ITEM_TYPE_SPECIAL_DS, //30 // Ư ȥ (DS_SLOT ϴ UNIQUE ̶ ϸ ) - ITEM_TYPE_EXTRACT, //31 ⵵. - ITEM_TYPE_SECONDARY_COIN, //32 . - ITEM_TYPE_RING, //33 (ũ ƴ ) - ITEM_TYPE_BELT, //34 Ʈ + ITEM_TYPE_HAIR, //25//머리 + ITEM_TYPE_TOTEM, //26//토템 + ITEM_TYPE_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물 + ITEM_TYPE_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템) + ITEM_TYPE_DS, //29 //용혼석 + ITEM_TYPE_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨) + ITEM_TYPE_EXTRACT, //31 추출도구. + ITEM_TYPE_SECONDARY_COIN, //32 명도전. + ITEM_TYPE_RING, //33 반지 (유니크 슬롯이 아닌 순수 반지 슬롯) + ITEM_TYPE_BELT, //34 벨트 ITEM_TYPE_MAX_NUM, }; @@ -63,7 +63,7 @@ class CItemData enum EWeaponSubTypes { WEAPON_SWORD, - WEAPON_DAGGER, //̵ + WEAPON_DAGGER, //이도류 WEAPON_BOW, WEAPON_TWO_HANDED, WEAPON_BELL, @@ -100,8 +100,8 @@ class CItemData enum ECostumeSubTypes { - COSTUME_BODY, //0 (main look) - COSTUME_HAIR, //1 (Ż) + COSTUME_BODY, //0 갑옷(main look) + COSTUME_HAIR, //1 헤어(탈착가능) COSTUME_NUM_TYPES, }; @@ -136,8 +136,8 @@ class CItemData USE_UNBIND, USE_TIME_CHARGE_PER, USE_TIME_CHARGE_FIX, // 28 - USE_PUT_INTO_BELT_SOCKET, // 29 Ʈ Ͽ ִ - USE_PUT_INTO_RING_SOCKET, // 30 Ͽ ִ (ũ , ߰ ) + USE_PUT_INTO_BELT_SOCKET, // 29 벨트 소켓에 사용할 수 있는 아이템 + USE_PUT_INTO_RING_SOCKET, // 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯) }; enum EDragonSoulSubType @@ -168,16 +168,16 @@ class CItemData LIMIT_CON, LIMIT_PCBANG, - /// ο ǽð ð (socket0 Ҹ ð : unix_timestamp Ÿ) + /// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입) LIMIT_REAL_TIME, - /// ó (Ȥ ) Ÿ Ÿ̸ - /// socket0 밡ɽð(ʴ, 0̸ limit value ) ִٰ - /// socket1 Ƚ socket0 unix_timestamp Ÿ Ҹð . + /// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작 + /// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가 + /// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘. LIMIT_REAL_TIME_START_FIRST_USE, - /// ð Ǵ - /// socket0 ð ʴ . ( ش 0̸ limit value socket0 ) + /// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템 + /// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사) LIMIT_TIMER_BASED_ON_WEAR, LIMIT_MAX_NUM @@ -185,41 +185,41 @@ class CItemData enum EItemAntiFlag { - ITEM_ANTIFLAG_FEMALE = (1 << 0), // Ұ - ITEM_ANTIFLAG_MALE = (1 << 1), // Ұ - ITEM_ANTIFLAG_WARRIOR = (1 << 2), // Ұ - ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // ڰ Ұ - ITEM_ANTIFLAG_SURA = (1 << 4), // Ұ - ITEM_ANTIFLAG_SHAMAN = (1 << 5), // Ұ - ITEM_ANTIFLAG_GET = (1 << 6), // - ITEM_ANTIFLAG_DROP = (1 << 7), // - ITEM_ANTIFLAG_SELL = (1 << 8), // - ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A Ұ - ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B Ұ - ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C Ұ - ITEM_ANTIFLAG_SAVE = (1 << 12), // - ITEM_ANTIFLAG_GIVE = (1 << 13), // ŷ Ұ - ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK - ITEM_ANTIFLAG_STACK = (1 << 15), // ĥ - ITEM_ANTIFLAG_MYSHOP = (1 << 16), // ø + ITEM_ANTIFLAG_FEMALE = (1 << 0), // 여성 사용 불가 + ITEM_ANTIFLAG_MALE = (1 << 1), // 남성 사용 불가 + ITEM_ANTIFLAG_WARRIOR = (1 << 2), // 무사 사용 불가 + ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // 자객 사용 불가 + ITEM_ANTIFLAG_SURA = (1 << 4), // 수라 사용 불가 + ITEM_ANTIFLAG_SHAMAN = (1 << 5), // 무당 사용 불가 + ITEM_ANTIFLAG_GET = (1 << 6), // 집을 수 없음 + ITEM_ANTIFLAG_DROP = (1 << 7), // 버릴 수 없음 + ITEM_ANTIFLAG_SELL = (1 << 8), // 팔 수 없음 + ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A 제국 사용 불가 + ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B 제국 사용 불가 + ITEM_ANTIFLAG_EMPIRE_R = (1 << 11), // C 제국 사용 불가 + ITEM_ANTIFLAG_SAVE = (1 << 12), // 저장되지 않음 + ITEM_ANTIFLAG_GIVE = (1 << 13), // 거래 불가 + ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK시 떨어지지 않음 + ITEM_ANTIFLAG_STACK = (1 << 15), // 합칠 수 없음 + ITEM_ANTIFLAG_MYSHOP = (1 << 16), // 개인 상점에 올릴 수 없음 }; enum EItemFlag { - ITEM_FLAG_REFINEABLE = (1 << 0), // + ITEM_FLAG_REFINEABLE = (1 << 0), // 개량 가능 ITEM_FLAG_SAVE = (1 << 1), - ITEM_FLAG_STACKABLE = (1 << 2), // ĥ - ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // / - ITEM_FLAG_SLOW_QUERY = (1 << 4), // ÿ SQL + ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음 + ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // 가격이 개수 / 가격으로 변함 + ITEM_FLAG_SLOW_QUERY = (1 << 4), // 게임 종료시에만 SQL에 쿼리함 ITEM_FLAG_RARE = (1 << 5), ITEM_FLAG_UNIQUE = (1 << 6), ITEM_FLAG_MAKECOUNT = (1 << 7), ITEM_FLAG_IRREMOVABLE = (1 << 8), ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 9), - ITEM_FLAG_QUEST_USE = (1 << 10), // Ʈ ũƮ ? - ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // Ʈ ũƮ ? + ITEM_FLAG_QUEST_USE = (1 << 10), // 퀘스트 스크립트 돌리는지? + ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // 퀘스트 스크립트 돌리는지? ITEM_FLAG_UNUSED03 = (1 << 12), // UNUSED03 - ITEM_FLAG_LOG = (1 << 13), // α׸ ΰ? + ITEM_FLAG_LOG = (1 << 13), // 사용시 로그를 남기는 아이템인가? ITEM_FLAG_APPLICABLE = (1 << 14), }; @@ -319,17 +319,17 @@ class CItemData APPLY_ATT_BONUS_TO_SURA, // 61 APPLY_ATT_BONUS_TO_SHAMAN, // 62 APPLY_ATT_BONUS_TO_MONSTER, // 63 - APPLY_MALL_ATTBONUS, // 64 ݷ +x% - APPLY_MALL_DEFBONUS, // 65 +x% - APPLY_MALL_EXPBONUS, // 66 ġ +x% - APPLY_MALL_ITEMBONUS, // 67 x/10 - APPLY_MALL_GOLDBONUS, // 68 x/10 - APPLY_MAX_HP_PCT, // 69 ִ +x% - APPLY_MAX_SP_PCT, // 70 ִ ŷ +x% - APPLY_SKILL_DAMAGE_BONUS, // 71 ų * (100+x)% - APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 Ÿ * (100+x)% - APPLY_SKILL_DEFEND_BONUS, // 73 ų * (100-x)% - APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 Ÿ * (100-x)% + APPLY_MALL_ATTBONUS, // 64 공격력 +x% + APPLY_MALL_DEFBONUS, // 65 방어력 +x% + APPLY_MALL_EXPBONUS, // 66 경험치 +x% + APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배 + APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배 + APPLY_MAX_HP_PCT, // 69 최대 생명력 +x% + APPLY_MAX_SP_PCT, // 70 최대 정신력 +x% + APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)% + APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)% + APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)% + APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)% APPLY_EXTRACT_HP_PCT, //75 APPLY_PC_BANG_EXP_BONUS, //76 APPLY_PC_BANG_DROP_BONUS, //77 @@ -338,17 +338,17 @@ class CItemData APPLY_RESIST_SURA, //80 APPLY_RESIST_SHAMAN, //81 APPLY_ENERGY, //82 - APPLY_DEF_GRADE, // 83 . DEF_GRADE_BONUS Ŭ󿡼 ι ǵ (...) ִ. - APPLY_COSTUME_ATTR_BONUS, // 84 ڽƬ ۿ Ӽġ ʽ - APPLY_MAGIC_ATTBONUS_PER, // 85 ݷ +x% - APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 + и ݷ +x% + APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다. + APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스 + APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x% + APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x% - APPLY_RESIST_ICE, // 87 ñ - APPLY_RESIST_EARTH, // 88 - APPLY_RESIST_DARK, // 89 + APPLY_RESIST_ICE, // 87 냉기 저항 + APPLY_RESIST_EARTH, // 88 대지 저항 + APPLY_RESIST_DARK, // 89 어둠 저항 - APPLY_ANTI_CRITICAL_PCT, //90 ũƼ - APPLY_ANTI_PENETRATE_PCT, //91 Ÿ + APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항 + APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항 MAX_APPLY_NUM, // }; diff --git a/src/GameLib/MapBase.cpp b/src/GameLib/MapBase.cpp index b1957f1..143681e 100644 --- a/src/GameLib/MapBase.cpp +++ b/src/GameLib/MapBase.cpp @@ -57,7 +57,7 @@ bool CMapBase::LoadProperty() if (!LoadMultipleTextData(strFileName.c_str(), stTokenVectorMap)) { - TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR ɼ ϴ.", strFileName.c_str()); + TraceError("CMapBase::LoadProperty(FileName=%s) - LoadMultipleTextData ERROR 파일이 없을 가능성이 많습니다.", strFileName.c_str()); return false; } @@ -73,9 +73,9 @@ bool CMapBase::LoadProperty() return false; } - // NOTE: ̹ ϴ Ϳ ͸ ϴ ߰ , 뷮 ̱ ۾. - // MapProperty.txt Ͽ ParentMapName Ǿ ִٸ, ʹ ParentMap о´. - // κа(κ Ʈ?) ʿ 뼭, Parent Map ͸ о. + // NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업. + // MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다. + // 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴. if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname")) { m_strParentMapName = stTokenVectorMap["parentmapname"][0]; diff --git a/src/GameLib/MapBase.h b/src/GameLib/MapBase.h index 2784efd..8a4e8ef 100644 --- a/src/GameLib/MapBase.h +++ b/src/GameLib/MapBase.h @@ -22,13 +22,13 @@ class CMapBase : public CScreen virtual bool Update(float fX, float fY, float fZ) = 0; virtual void UpdateAroundAmbience(float fX, float fY, float fZ) = 0; virtual float GetHeight(float fx, float fy) = 0; - virtual void OnBeginEnvironment() = 0; // ҷ ⼭ Environment ִ ͵ Ѵ. + virtual void OnBeginEnvironment() = 0; // 렌더링 할 때 불려지며 여기서 Environment에 관련 있는 것들을 셋팅 한다. virtual void ApplyLight(DWORD dwVersion, const D3DLIGHT8& c_rkLight) = 0; protected: virtual void OnRender() = 0; - virtual void OnSetEnvironmentDataPtr() = 0; // Environment Ͱ ҷ. + virtual void OnSetEnvironmentDataPtr() = 0; // Environment 데이터가 설정될 때 불려진다. virtual void OnResetEnvironmentDataPtr() = 0; public: @@ -50,14 +50,14 @@ class CMapBase : public CScreen const std::string & GetName() const { return m_strName; } void SetName(const std::string & cr_strName) { m_strName = cr_strName; } - bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // " ʹ ִ" ΰ? - const std::string& GetParentMapName() const { return m_strParentMapName; } // ͸ ִ ̸ ( ʼ õǾ ) + bool IsCopiedMap() const { return m_strParentMapName.length() > 0; } // "원본 데이터는 따로 있는" 복사 맵인가? + const std::string& GetParentMapName() const { return m_strParentMapName; } // 원본 데이터를 갖고있는 맵의 이름을 리턴 (복사맵의 경우 필수로 세팅되어야 함) const std::string& GetMapDataDirectory() const { return IsCopiedMap() ? m_strParentMapName : m_strName; } protected: - EMAPTYPE m_eType; // ... Indoor Ourdoor ִ. - std::string m_strName; // ̸. ̸ ĺڰ ? - std::string m_strParentMapName; // ̸. õǾ ִٸ ʹ ParentMap/* ο о´. Ϻθ о ʿ뼭 н. + EMAPTYPE m_eType; // 맵 종류... 현재는 Indoor와 Ourdoor가 있다. + std::string m_strName; // 맵 이름. 맵 이름이 맵 식별자가 될 수 있을까? + std::string m_strParentMapName; // 원본 맵의 이름. 이 값이 세팅되어 있다면 실제 모든 맵 데이터는 ParentMap/* 경로에서 읽어온다. 맵의 일부만 읽어오는 기능은 필요없대서 패스. bool m_bReady; const TEnvironmentData * mc_pEnvironmentData; diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp index 6cb0110..c15c0e9 100644 --- a/src/GameLib/MapManager.cpp +++ b/src/GameLib/MapManager.cpp @@ -8,7 +8,7 @@ #include "PropertyLoader.h" ////////////////////////////////////////////////////////////////////////// -// ⺻ Լ +// 기본 함수 ////////////////////////////////////////////////////////////////////////// bool CMapManager::IsMapOutdoor() @@ -184,7 +184,7 @@ float CMapManager::GetHeight(float fx, float fy) { if (!m_pkMap) { - TraceError("CMapManager::GetHeight(%f, %f) - ¿ ", fx, fy); + TraceError("CMapManager::GetHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy); return 0.0f; } CMapOutdoor& rkMap=GetMapOutdoorRef(); @@ -195,7 +195,7 @@ float CMapManager::GetTerrainHeight(float fx, float fy) { if (!m_pkMap) { - TraceError("CMapManager::GetTerrainHeight(%f, %f) - ¿ ", fx, fy); + TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", fx, fy); return 0.0f; } CMapOutdoor& rkMap=GetMapOutdoorRef(); @@ -206,7 +206,7 @@ bool CMapManager::GetWaterHeight(int iX, int iY, long * plWaterHeight) { if (!m_pkMap) { - TraceError("CMapManager::GetTerrainHeight(%f, %f) - ¿ ", iX, iY); + TraceError("CMapManager::GetTerrainHeight(%f, %f) - 맵이 생성되지 않은 상태에서 접근", iX, iY); return false; } diff --git a/src/GameLib/MapManager.h b/src/GameLib/MapManager.h index 5078fae..d9859dc 100644 --- a/src/GameLib/MapManager.h +++ b/src/GameLib/MapManager.h @@ -27,13 +27,13 @@ class CMapManager : public CScreen, public IPhysicsWorld void Initialize(); void Destroy(); - void Create(); // AllocMap ȣ ؼ m_pMap + void Create(); // AllocMap 호출 해서 m_pMap 을 만듬 virtual void Clear(); virtual CMapBase * AllocMap(); ////////////////////////////////////////////////////////////////////////// - // Map Լ + // Map 관리 함수 ////////////////////////////////////////////////////////////////////////// bool IsMapReady(); @@ -51,9 +51,9 @@ class CMapManager : public CScreen, public IPhysicsWorld ////////////////////////////////////////////////////////////////////////// // Environment /// - // NOTE : Environment Ų - // Ǿ . Լ Protected ְ, - // MapManager TimeControl κ ϵ Ѵ. - [levites] + // NOTE : 다음 Environment로 서서히 블렌딩 시킨다 + // 아직 세부 구현은 되어있지 않음. 이 함수들은 Protected로 넣고, + // MapManager에 TimeControl 부분을 구현하도록 한다. - [levites] void SetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData); void ResetEnvironmentDataPtr(const TEnvironmentData * c_pEnvironmentData); void SetEnvironmentData(int nEnvDataIndex); diff --git a/src/GameLib/MapOutdoor.cpp b/src/GameLib/MapOutdoor.cpp index 47f69af..154f1fd 100644 --- a/src/GameLib/MapOutdoor.cpp +++ b/src/GameLib/MapOutdoor.cpp @@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy() void CMapOutdoor::Clear() { UnloadWaterTexture(); - Destroy(); // - Initialize(); // ʱȭ + Destroy(); // 해제 + Initialize(); // 초기화 } bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY) diff --git a/src/GameLib/MapOutdoor.h b/src/GameLib/MapOutdoor.h index 2fa4508..485e6b2 100644 --- a/src/GameLib/MapOutdoor.h +++ b/src/GameLib/MapOutdoor.h @@ -27,7 +27,7 @@ typedef struct SOutdoorMapCoordinate { - short m_sTerrainCoordX; // Terrain ǥ + short m_sTerrainCoordX; // Terrain 좌표 short m_sTerrainCoordY; } TOutdoorMapCoordinate; @@ -161,7 +161,7 @@ class CMapOutdoor : public CMapBase bool isTerrainLoaded(WORD wX, WORD wY); bool isAreaLoaded(WORD wX, WORD wY); - void AssignTerrainPtr(); // ǥ (ex. 3x3) ִ ͵ ͸ Ѵ. (Ʈ ҷ) + void AssignTerrainPtr(); // 현재 좌표에서 주위(ex. 3x3)에 있는 것들의 포인터를 연결한다. (업데이트 시 불려짐) void SaveAlphaFogOperation(); void RestoreAlphaFogOperation(); @@ -169,7 +169,7 @@ class CMapOutdoor : public CMapBase ////////////////////////////////////////////////////////////////////////// // New ////////////////////////////////////////////////////////////////////////// - // ʵ ´. + // 여러가지 맵들을 얻는다. void GetHeightMap(const BYTE & c_rucTerrainNum, WORD ** pwHeightMap); void GetNormalMap(const BYTE & c_rucTerrainNum, char ** pucNormalMap); @@ -182,19 +182,19 @@ class CMapOutdoor : public CMapBase // Terrain ////////////////////////////////////////////////////////////////////////// protected: - // + // 데이터 CTerrain * m_pTerrain[AROUND_AREA_NUM]; // Terrain - CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain Ҷ ϴ ġ... Seamless Map CTerrainκ ... + CTerrainPatchProxy * m_pTerrainPatchProxyList; // CTerrain을 랜더링 할때 실제로 랜더링하는 폴리곤 패치들... Seamless Map 을 위해 CTerrain으로부터 독립... - long m_lViewRadius; // þ Ÿ.. .. - float m_fHeightScale; // ... 1.0϶ 0~655.35ͱ ǥ . + long m_lViewRadius; // 시야 거리.. 셀단위임.. + float m_fHeightScale; // 높이 스케일... 1.0일때 0~655.35미터까지 표현 가능. - short m_sTerrainCountX, m_sTerrainCountY; // seamless map ȿ  Terrain + short m_sTerrainCountX, m_sTerrainCountY; // seamless map 안에 들어가는 Terrain개수 - TOutdoorMapCoordinate m_CurCoordinate; // ǥ + TOutdoorMapCoordinate m_CurCoordinate; // 현재의 좌표 long m_lCurCoordStartX, m_lCurCoordStartY; - TOutdoorMapCoordinate m_PrevCoordinate; // ǥ + TOutdoorMapCoordinate m_PrevCoordinate; // 현재의 좌표 TOutdoorMapCoordinateMap m_EntryPointMap; WORD m_wPatchCount; @@ -316,7 +316,7 @@ class CMapOutdoor : public CMapBase ////////////////////////////////////////////////////////////////////////// // New ////////////////////////////////////////////////////////////////////////// - long m_lCenterX, m_lCenterY; // Terrain ǥ ǥ... + long m_lCenterX, m_lCenterY; // Terrain 좌표 내의 셀 좌표... long m_lOldReadX, m_lOldReadY; /* Last center */ ////////////////////////////////////////////////////////////////////////// diff --git a/src/GameLib/MapOutdoorLoad.cpp b/src/GameLib/MapOutdoorLoad.cpp index 8d51899..987dcde 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; @@ -38,7 +38,7 @@ bool CMapOutdoor::Load(float x, float y, float z) m_lOldReadX = -1; - // TODO: SetRenderingDevice Environment Ʈ Ӽ Ѱ ƽ Ʈ ۵Ѵ. + // TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다. CSpeedTreeForestDirectX8::Instance().SetRenderingDevice(ms_lpd3dDevice); Update(x, y, z); @@ -102,13 +102,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; @@ -392,15 +392,15 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName) std::string stTextureSetFileName = strTextureSet; - // TextureSet ̹ پ Ⱥδ. + // TextureSet 이 이미 붙어 있을 경우 안붙인다. if (0 != stTextureSetFileName.find_first_of("textureset", 0)) stTextureSetFileName = "textureset\\"+strTextureSet; if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase)) { #ifdef WORLD_EDITOR - // TextureSet Ǿ ʾƵ - LogBox("TextureSet Ǿ Դϴ.\n ؽ ۾ Ͻñ ٶϴ."); + // TextureSet 이 적용되어 있지 않아도 진행 + LogBox("TextureSet 이 적용되어있지 않은 맵 입니다.\n지형 텍스춰 작업에 주의하시기 바랍니다."); #else TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str()); return false; diff --git a/src/GameLib/MapOutdoorQuadtree.cpp b/src/GameLib/MapOutdoorQuadtree.cpp index 8c35f0b..d7a7226 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 b13972b..f81d4be 100644 --- a/src/GameLib/MapOutdoorRender.cpp +++ b/src/GameLib/MapOutdoorRender.cpp @@ -43,10 +43,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 @@ -134,13 +134,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT8& 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(); @@ -391,7 +391,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 ffdbd37..bbb6672 100644 --- a/src/GameLib/MapOutdoorRenderHTP.cpp +++ b/src/GameLib/MapOutdoorRenderHTP.cpp @@ -101,7 +101,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(); @@ -120,7 +120,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); @@ -380,7 +380,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD } else { - // 0 ؽó + // 0번 텍스처 if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] ) { DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR); @@ -603,7 +603,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 e7ad6b9..9fe9a2d 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 1a99ab9..a507c62 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: @@ -241,7 +241,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); /* @@ -744,7 +744,7 @@ void CMapOutdoor::UpdateTerrain(float fX, float fY) ConvertTerrainToTnL(lRealCenterX, lRealCenterY); UpdateAreaList(lRealCenterX, lRealCenterY); - //Tracef("ϴ Area, Terrain : (%d, %d), Area, Terrain : (%d, %d)\n", + //Tracef("사용하는 Area, Terrain : (%d, %d), 지울 Area, Terrain : (%d, %d)\n", // m_AreaVector.size(), m_TerrainVector.size(), m_AreaDeleteVector.size(), m_TerrainDeleteVector.size()); } } diff --git a/src/GameLib/MapOutdoorWater.cpp b/src/GameLib/MapOutdoorWater.cpp index a56a9b9..758c539 100644 --- a/src/GameLib/MapOutdoorWater.cpp +++ b/src/GameLib/MapOutdoorWater.cpp @@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater() // RenderState ////////////////////////////////////////////////////////////////////////// - // Ʒ ִϽŰ... + // 물 위 아래 애니시키기... static float s_fWaterHeightCurrent = 0; static float s_fWaterHeightBegin = 0; static float s_fWaterHeightEnd = 0; static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond(); static DWORD s_dwBlendtime = 300; - // 1.5 + // 1.5초 마다 변경 if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime) { s_dwBlendtime = random_range(1000, 3000); @@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater() DrawWater(i->second); } - // Ŀ z ġ + // 렌더링 한 후에는 물 z 위치를 복구 m_matWorldForCommonUse._43 = 0.0f; ////////////////////////////////////////////////////////////////////////// diff --git a/src/GameLib/MapType.h b/src/GameLib/MapType.h index 1a1d01a..328aa13 100644 --- a/src/GameLib/MapType.h +++ b/src/GameLib/MapType.h @@ -182,7 +182,7 @@ typedef struct SEnvironmentData std::string strMainFlareTextureFileName; float fMainFlareSize; - BOOL bReserve; // ܺο ġ + BOOL bReserve; // 외부에서 설정을 고치지 않음 } TEnvironmentData; typedef std::map TEnvironmentDataMap; diff --git a/src/GameLib/MonsterAreaInfo.cpp b/src/GameLib/MonsterAreaInfo.cpp index e7f0054..ce30da7 100644 --- a/src/GameLib/MonsterAreaInfo.cpp +++ b/src/GameLib/MonsterAreaInfo.cpp @@ -126,12 +126,12 @@ void CMonsterAreaInfo::RemoveAllMonsters() SetMonsterGroupID(0); - m_strGroupName.assign("̸"); - m_strLeaderName.assign("̸"); + m_strGroupName.assign("이름없음"); + m_strLeaderName.assign("이름없음"); SetMonsterGroupFollowerCount(0); SetMonsterVID(0); - m_strMonsterName.assign("̸"); + m_strMonsterName.assign("이름없음"); SetMonsterCount(0); SetMonsterDirection(DIR_NORTH); diff --git a/src/GameLib/MonsterAreaInfo.h b/src/GameLib/MonsterAreaInfo.h index 8f31472..e118ba5 100644 --- a/src/GameLib/MonsterAreaInfo.h +++ b/src/GameLib/MonsterAreaInfo.h @@ -89,17 +89,17 @@ protected: protected: EMonsterAreaInfoType m_eMonsterAreaInfoType; - // Group Type + // Group Type 정보 DWORD m_dwGroupID; std::string m_strGroupName; std::string m_strLeaderName; DWORD m_dwFollowerCount; - // Monster Type + // Monster Type 정보 DWORD m_dwVID; std::string m_strMonsterName; - // + // 공통 정보 DWORD m_dwMonsterCount; EMonsterDir m_eMonsterDir; D3DXVECTOR2 m_v2Monsterdirection; diff --git a/src/GameLib/PhysicsObject.cpp b/src/GameLib/PhysicsObject.cpp index 2373ce3..ab2fa8f 100644 --- a/src/GameLib/PhysicsObject.cpp +++ b/src/GameLib/PhysicsObject.cpp @@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition, m_v3Acceleration.y, m_v3Acceleration.z); */ - // NOTE : ġ صд. ٵ 100 ũٸ? ; + // NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ; const int LoopValue = 100; D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f); @@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition, //for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f) //{ - // // ϰ üũѴ + // // 좀더 정밀하게 체크한다 // if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio)) // { // v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f); @@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement() bool CPhysicsObject::isBlending() { - // NOTE : IncreaseExternalForce() и óΰ? + // NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가? if (0.0f != D3DXVec3Length(&m_v3Velocity)) return true; - // NOTE : SetLastPosition() и óΰ? + // NOTE : SetLastPosition() 에 의해 밀리는 처리중인가? if (m_xPushingPosition.isPlaying() || m_yPushingPosition.isPlaying()) return true; diff --git a/src/GameLib/PhysicsObject.h b/src/GameLib/PhysicsObject.h index 302e51b..69c2bca 100644 --- a/src/GameLib/PhysicsObject.h +++ b/src/GameLib/PhysicsObject.h @@ -29,8 +29,8 @@ private: }; class CActorInstance; -//NOTE : ȵ Dependency Inversion interface ϱ ؼ ̹Ĵ -// 踦 Ѵٸ world live object ݴ base project (gamelib̳ base project ؾ Ѵ ) +//NOTE : 맘에 안들지만 Dependency Inversion을 막고 이전과 동일한 interface를 유지하기 위해서 이방식대로 간다 +//하지만 제대로 설계를 한다면 world와 live object들의 관리는 조금더 base project에서 (gamelib이나 더 base project에서 해야 한다 ) class IObjectManager { public: diff --git a/src/GameLib/Property.cpp b/src/GameLib/Property.cpp index abafe14..ef40882 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 4a1520e..4407042 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 7aa8e85..5cbd3e2 100644 --- a/src/GameLib/PropertyManager.cpp +++ b/src/GameLib/PropertyManager.cpp @@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName) else { m_isFileMode = true; - // NOTE : ⼭ Property ϽŰ WorldEditor ̻ ; - // , Property Tree List Ѿ DZ ٱʿ.. - [levites] + // NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ; + // 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites] } return true; @@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE)) return false; - if (!m_isFileMode) // Ͽ + if (!m_isFileMode) // 팩 파일에도 넣음 { if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,"")) { @@ -219,13 +219,13 @@ bool CPropertyManager::Erase(DWORD dwCRC) DeleteFile(pProperty->GetFileName()); ReserveCRC(pProperty->GetCRC()); - if (!m_isFileMode) // 尡 ƴϸ ѿ + if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움 m_pack.Delete(pProperty->GetFileName()); FILE * fp = fopen("property/reserve", "a+"); if (!fp) - LogBox(" CRC ϴ."); + LogBox("예약 CRC 파일을 열 수 없습니다."); else { char szCRC[64 + 1]; diff --git a/src/GameLib/RaceData.cpp b/src/GameLib/RaceData.cpp index b321236..de48b19 100644 --- a/src/GameLib/RaceData.cpp +++ b/src/GameLib/RaceData.cpp @@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex return NULL; } - // 2004. 3. 15. myevan. dz ε ־ Ѵ. + // 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다. pRaceMotionData->SetName(wMotionIndex); ///// - // FIXME : ̹ GR2 ε Ǿ 쿡  ؾ ϴ°? - // Ȱ ϳ ߰ Ǿ . - [levites] + // FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가? + // 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites] return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage); - // 2004.09.03.myevan.οԼ ó + // 2004.09.03.myevan.새로운함수로 대처 //TMotion Motion; //Motion.byPercentage = byPercentage; //Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName()); diff --git a/src/GameLib/RaceData.h b/src/GameLib/RaceData.h index 94d43d0..61becf2 100644 --- a/src/GameLib/RaceData.h +++ b/src/GameLib/RaceData.h @@ -16,8 +16,8 @@ class CRaceData enum EParts { // Share index with server - // ECharacterEquipmentPart ּ. - //Ŷ ũⰡ մϴ ּ߰. + // ECharacterEquipmentPart도 수정해주세요. + //패킷 크기가 변합니다 서버와 상의후 추가해주세요. PART_MAIN, PART_WEAPON, PART_HEAD, diff --git a/src/GameLib/RaceDataFile.cpp b/src/GameLib/RaceDataFile.cpp index 809965e..ee05fa9 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 9a28aa3..5860169 100644 --- a/src/GameLib/RaceManager.cpp +++ b/src/GameLib/RaceManager.cpp @@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector & vec_stPat vec_stPathes.push_back ("d:/ymir work/guild/"); } } - // ̺Ʈ + // 만우절 이벤트용 예외 몬스터 else if (8507 == race || 8510 == race) { vec_stPathes.push_back ("d:/ymir work/monster2/"); @@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN if (s_kMap_stType_dwIndex.end() == fTypeIndex) { - // Ͽ WAIT, WAIT4, WAIT20 ̷ ϵǾ , - // WAIT4, WAIT20 WAIT ν ֵ ó + // 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때, + // WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리 const size_t c_cutLengthLimit = 2; bool bFound = false; diff --git a/src/GameLib/RaceMotionData.h b/src/GameLib/RaceMotionData.h index 96e0ba2..262202c 100644 --- a/src/GameLib/RaceMotionData.h +++ b/src/GameLib/RaceMotionData.h @@ -56,41 +56,41 @@ class CRaceMotionData enum EName { - NAME_NONE, // 0 - NAME_WAIT, // 1 (00.msa) - NAME_WALK, // 2 ȱ (02.msa) - NAME_RUN, // 3 ٱ (03.msa) - NAME_CHANGE_WEAPON, // 4 ٲٱ - NAME_DAMAGE, // 5 ± (30.msa) - NAME_DAMAGE_FLYING, // 6 鳯ư (32.msa) - NAME_STAND_UP, // 7 Ͼ (33.msa) - NAME_DAMAGE_BACK, // 8 ĸ± (34.msa) - NAME_DAMAGE_FLYING_BACK, // 9 ĸ鳯ư (35.msa) - NAME_STAND_UP_BACK, // 10 ĸϾ (36.msa) - NAME_DEAD, // 11 ױ (31.msa) - NAME_DEAD_BACK, // 12 ĸױ (37.msa) - NAME_NORMAL_ATTACK, // 13 (20.msa) - NAME_COMBO_ATTACK_1, // 14 ޺ - NAME_COMBO_ATTACK_2, // 15 ޺ - NAME_COMBO_ATTACK_3, // 16 ޺ - NAME_COMBO_ATTACK_4, // 17 ޺ - NAME_COMBO_ATTACK_5, // 18 ޺ - NAME_COMBO_ATTACK_6, // 19 ޺ - NAME_COMBO_ATTACK_7, // 20 ޺ - NAME_COMBO_ATTACK_8, // 21 ޺ - NAME_INTRO_WAIT, // 22 ȭ - NAME_INTRO_SELECTED, // 23 ȭ - NAME_INTRO_NOT_SELECTED, // 24 ȭ - NAME_SPAWN, // 25 ȯ - NAME_FISHING_THROW, // 26 - NAME_FISHING_WAIT, // 27 - NAME_FISHING_STOP, // 28 ׸α - NAME_FISHING_REACT, // 29 - NAME_FISHING_CATCH, // 30 - NAME_FISHING_FAIL, // 31 - NAME_STOP, // 32 ߱ - NAME_SPECIAL_1, // 33 /NPC Ư (24.msa) - NAME_SPECIAL_2, // 34 /NPC Ư (25.msa) + NAME_NONE, // 0 없음 + NAME_WAIT, // 1 대기 (00.msa) + NAME_WALK, // 2 걷기 (02.msa) + NAME_RUN, // 3 뛰기 (03.msa) + NAME_CHANGE_WEAPON, // 4 무기바꾸기 + NAME_DAMAGE, // 5 정면맞기 (30.msa) + NAME_DAMAGE_FLYING, // 6 정면날아가기 (32.msa) + NAME_STAND_UP, // 7 정면일어나기 (33.msa) + NAME_DAMAGE_BACK, // 8 후면맞기 (34.msa) + NAME_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa) + NAME_STAND_UP_BACK, // 10 후면일어나기 (36.msa) + NAME_DEAD, // 11 죽기 (31.msa) + NAME_DEAD_BACK, // 12 후면죽기 (37.msa) + NAME_NORMAL_ATTACK, // 13 공격 (20.msa) + NAME_COMBO_ATTACK_1, // 14 콤보 공격 + NAME_COMBO_ATTACK_2, // 15 콤보 공격 + NAME_COMBO_ATTACK_3, // 16 콤보 공격 + NAME_COMBO_ATTACK_4, // 17 콤보 공격 + NAME_COMBO_ATTACK_5, // 18 콤보 공격 + NAME_COMBO_ATTACK_6, // 19 콤보 공격 + NAME_COMBO_ATTACK_7, // 20 콤보 공격 + NAME_COMBO_ATTACK_8, // 21 콤보 공격 + NAME_INTRO_WAIT, // 22 선택화면 대기 + NAME_INTRO_SELECTED, // 23 선택화면 선택 + NAME_INTRO_NOT_SELECTED, // 24 선택화면 비선택 + NAME_SPAWN, // 25 소환 + NAME_FISHING_THROW, // 26 낚시 던지기 + NAME_FISHING_WAIT, // 27 낚시 대기 + NAME_FISHING_STOP, // 28 낚시 그만두기 + NAME_FISHING_REACT, // 29 낚시 반응 + NAME_FISHING_CATCH, // 30 낚시 잡기 + NAME_FISHING_FAIL, // 31 낚시 실패 + NAME_STOP, // 32 말 멈추기 + NAME_SPECIAL_1, // 33 몬스터/NPC 특수 동작 (24.msa) + NAME_SPECIAL_2, // 34 몬스터/NPC 특수 동작 (25.msa) NAME_SPECIAL_3, NAME_SPECIAL_4, NAME_SPECIAL_5, @@ -139,7 +139,7 @@ class CRaceMotionData NAME_DANCE_3, NAME_DANCE_4, NAME_DANCE_5, - NAME_DANCE_6, // Ÿ + NAME_DANCE_6, // 강남스타일 NAME_DANCE_END = NAME_DANCE_1 + 16, @@ -210,8 +210,8 @@ class CRaceMotionData void SetName(UINT eName); - UINT GetType() const; // Ÿ - bool IsLock() const; // ΰ? (ٸ ǿ ĵ ) + UINT GetType() const; // 모션 타입 얻기 + bool IsLock() const; // 락된 모션 인가? (다른 모션에 캔슬되지 않음) int GetLoopCount() const; @@ -225,7 +225,7 @@ class CRaceMotionData void SetAccumulationPosition(const TPixelPosition & c_rPos); const TPixelPosition & GetAccumulationPosition() { return m_accumulationPosition; } - BOOL IsComboInputTimeData() const; // ޺ Է Ÿ̹ Ͱ ִ°? + BOOL IsComboInputTimeData() const; // 콤보 입력 타이밍 데이터가 있는가? float GetComboInputStartTime() const; float GetNextComboTime() const; diff --git a/src/GameLib/SnowEnvironment.cpp b/src/GameLib/SnowEnvironment.cpp index 465e6bc..f0f44e4 100644 --- a/src/GameLib/SnowEnvironment.cpp +++ b/src/GameLib/SnowEnvironment.cpp @@ -123,7 +123,7 @@ void CSnowEnvironment::__ApplyBlur() // BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) , // BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) , // BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) }; -// // ؽĸ ´. +// //누적 블러 텍스쳐를 찍는다. // STATEMANAGER.SetTexture(0,m_lpAccumTexture); // STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 ); // STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex)); diff --git a/src/GameLib/StdAfx.h b/src/GameLib/StdAfx.h index 1e1287a..90268e0 100644 --- a/src/GameLib/StdAfx.h +++ b/src/GameLib/StdAfx.h @@ -6,7 +6,7 @@ #endif #pragma warning(disable:4710) // not inlined -#pragma warning(disable:4786) // character 255 Ѿ° +#pragma warning(disable:4786) // character 255 넘어가는거 끄기 #pragma warning(disable:4244) // type conversion possible lose of data #pragma warning(disable:4018) diff --git a/src/GameLib/WeaponTrace.cpp b/src/GameLib/WeaponTrace.cpp index aeaa048..bc34877 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/PRTerrainLib/Terrain.h b/src/PRTerrainLib/Terrain.h index fdaeb6a..2f9d4b9 100644 --- a/src/PRTerrainLib/Terrain.h +++ b/src/PRTerrainLib/Terrain.h @@ -74,7 +74,7 @@ class CTerrainImpl public: static void SetTextureSet(CTextureSet * pTextureSet); - static CTextureSet * GetTextureSet(); // ؾ + static CTextureSet * GetTextureSet(); // 무조건 성공해야 함 protected: static CTextureSet * ms_pTextureSet; @@ -134,7 +134,7 @@ class CTerrainImpl ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// - // TileMap HeightMap + // TileMap과 HeightMap 비율 // int m_iHeightTileRatio; ////////////////////////////////////////////////////////////////////////// diff --git a/src/PRTerrainLib/TextureSet.cpp b/src/PRTerrainLib/TextureSet.cpp index a429d86..0016cc7 100644 --- a/src/PRTerrainLib/TextureSet.cpp +++ b/src/PRTerrainLib/TextureSet.cpp @@ -19,7 +19,7 @@ void CTextureSet::Create() { CResource * pResource = CResourceManager::Instance().GetResourcePointer("d:/ymir work/special/error.tga"); m_ErrorTexture.ImageInstance.SetImagePointer(static_cast (pResource)); - AddEmptyTexture(); // 찳 ؽ縦 ó ߰ ؾ + AddEmptyTexture(); // 지우개 텍스춰를 처음에 추가 해야 함 } bool CTextureSet::Load(const char * c_szTextureSetFileName, float fTerrainTexCoordBase) @@ -194,7 +194,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, { if (GetTextureCount() >= 256) { - LogBox("ؽó ̻ ߰ ϴ.", "ִ ؽó 255"); + LogBox("텍스처를 더 이상 추가할 수 없습니다.", "최대 텍스처 개수 255개"); return false; } @@ -202,7 +202,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, { if (0 == m_Textures[i].stFilename.compare(c_szFileName)) { - LogBox(" ̸ ؽó ̹ ֽϴ.", "ߺ"); + LogBox("동일한 이름의 텍스처가 이미 있습니다.", "중복"); return false; } } @@ -211,7 +211,7 @@ bool CTextureSet::AddTexture(const char * c_szFileName, if (!pResource->IsType(CGraphicImage::Type())) { - LogBox("CTerrainImpl::GenerateTexture : ̹ ƴմϴ. %s", pResource->GetFileName()); + LogBox("CTerrainImpl::GenerateTexture : 이미지 파일이 아닙니다. %s", pResource->GetFileName()); return false; } @@ -251,7 +251,7 @@ bool CTextureSet::Save(const char * c_pszFileName) fprintf(pFile, "TextureSet\n"); fprintf(pFile, "\n"); - fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1); // -1 ϴ 찳 + fprintf(pFile, "TextureCount %ld\n", GetTextureCount() - 1); // -1 을 하는 이유는 지우개 때문임 fprintf(pFile, "\n"); for (DWORD i = 1; i < GetTextureCount(); ++i) diff --git a/src/PRTerrainLib/TextureSet.h b/src/PRTerrainLib/TextureSet.h index 731a79b..9e9fc0c 100644 --- a/src/PRTerrainLib/TextureSet.h +++ b/src/PRTerrainLib/TextureSet.h @@ -28,7 +28,7 @@ typedef struct STerrainTexture float UOffset; float VOffset; bool bSplat; - unsigned short Begin, End; // 0 ~ 65535 16bit heightfield ̰. + unsigned short Begin, End; // 0 ~ 65535 의 16bit heightfield 높이값. D3DXMATRIX m_matTransform; } TTerrainTexture; diff --git a/src/ScriptLib/PythonUtils.cpp b/src/ScriptLib/PythonUtils.cpp index 2941559..890fd27 100644 --- a/src/ScriptLib/PythonUtils.cpp +++ b/src/ScriptLib/PythonUtils.cpp @@ -200,7 +200,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, PyObject* poFunc, PyObject* poArgs { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -218,7 +218,7 @@ bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* po { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -236,7 +236,7 @@ bool PyCallClassMemberFunc_ByPyString(PyObject* poClass, PyObject* poFuncName, P { PyObject* poRet; - // NOTE : NULL üũ ߰.. - [levites] + // NOTE : NULL 체크 추가.. - [levites] if (!poClass) { Py_XDECREF(poArgs); @@ -285,9 +285,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 b7342de..02f0e8e 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; @@ -126,7 +126,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/SpeedTreeLib/SpeedTreeForestDirectX8.cpp b/src/SpeedTreeLib/SpeedTreeForestDirectX8.cpp index 1b2e3a1..410e8ab 100644 --- a/src/SpeedTreeLib/SpeedTreeForestDirectX8.cpp +++ b/src/SpeedTreeLib/SpeedTreeForestDirectX8.cpp @@ -329,8 +329,8 @@ void CSpeedTreeForestDirectX8::Render(unsigned long ulRenderBitVector) STATEMANAGER.SetRenderState(D3DRS_COLORVERTEX, dwColorVertexState); STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, dwFogVertexMode); - // TextureStage 1 COLOROP ALPHAOP - // ´. (ȱ׷ ˰ ɼ..) + // 셀프섀도우로 쓰는 TextureStage 1의 COLOROP와 ALPHAOP를 꺼줘야 다음 렌더링 할 놈들이 + // 제대로 나온다. (안그러면 검게 나올 가능성이..) if (!(ulRenderBitVector & Forest_RenderToShadow)) { STATEMANAGER.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); diff --git a/src/SpeedTreeLib/SpeedTreeWrapper.cpp b/src/SpeedTreeLib/SpeedTreeWrapper.cpp index f3820c6..d62be90 100644 --- a/src/SpeedTreeLib/SpeedTreeWrapper.cpp +++ b/src/SpeedTreeLib/SpeedTreeWrapper.cpp @@ -103,7 +103,7 @@ void CSpeedTreeWrapper::OnRenderPCBlocker() CSpeedTreeForestDirectX8::Instance().UpdateSystem(ELTimer_GetMSec() / 1000.0f); - // ϳ LOD + // 하나만 렌더링 할 때는 LOD 사용하지 않음 m_pSpeedTree->SetLodLevel(1.0f); //Advance(); @@ -250,7 +250,7 @@ void CSpeedTreeWrapper::OnRender() CSpeedTreeForestDirectX8::Instance().UpdateSystem(ELTimer_GetMSec() / 1000.0f); - // ϳ LOD + // 하나만 렌더링 할 때는 LOD 사용하지 않음 m_pSpeedTree->SetLodLevel(1.0f); //Advance(); diff --git a/src/SpeedTreeLib/SpeedTreeWrapper.h b/src/SpeedTreeLib/SpeedTreeWrapper.h index ea9e9ce..d55efa6 100644 --- a/src/SpeedTreeLib/SpeedTreeWrapper.h +++ b/src/SpeedTreeLib/SpeedTreeWrapper.h @@ -87,8 +87,8 @@ public: virtual void SetPosition(float x, float y, float z); virtual void CalculateBBox(); - virtual void OnRender(); // Render ÿ ޼ҵ, ׷ 䳪 Ư 쿡 Render θ - // ̿ܿ RenderBranches, RenderFronds ޼ҵ带 CSpeedTreeForest ȣѴ. + virtual void OnRender(); // Render 시에 메소드, 그러나 프리뷰나 특수한 경우에만 직접 Render 콜을 부르며 + // 그 이외에는 RenderBranches, RenderFronds 등의 메소드를 CSpeedTreeForest에서 호출한다. virtual void OnBlendRender() {} virtual void OnRenderToShadowMap() {} virtual void OnRenderShadow() {} diff --git a/src/UserInterface/AccountConnector.cpp b/src/UserInterface/AccountConnector.cpp index 00ecfbe..333ff8d 100644 --- a/src/UserInterface/AccountConnector.cpp +++ b/src/UserInterface/AccountConnector.cpp @@ -148,7 +148,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; @@ -211,7 +211,7 @@ bool CAccountConnector::__AuthState_Process() return false; #endif - // TODO : ϰ data serialize & deserialize ۾ؾ Ѵ. + // TODO : 차후 서버와 동일하게 가변길이 data serialize & deserialize 작업해야 한다. if (!__AnalyzeVarSizePacket(HEADER_GC_HYBRIDCRYPT_KEYS, &CAccountConnector::__AuthState_RecvHybridCryptKeys)) return false; @@ -248,11 +248,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; @@ -283,7 +283,7 @@ bool CAccountConnector::__AuthState_RecvPhase() LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); @@ -322,7 +322,7 @@ bool CAccountConnector::__AuthState_RecvPhase() LoginPacket.name[ID_MAX_NUM] = '\0'; LoginPacket.pwd[PASS_MAX_NUM] = '\0'; - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.ClearLoginInfo(); @@ -493,7 +493,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); } @@ -581,7 +581,7 @@ bool CAccountConnector::__AuthState_RecvKeyAgreement() size_t agreedLength = Prepare(packetToSend.data, &dataLength); if (agreedLength == 0) { - // ʱȭ + // 초기화 실패 Disconnect(); return false; } @@ -589,7 +589,7 @@ bool CAccountConnector::__AuthState_RecvKeyAgreement() if (Activate(packet.wAgreedLength, packet.data, packet.wDataLength)) { - // Key agreement , + // Key agreement 성공, 응답 전송 packetToSend.bHeader = HEADER_CG_KEY_AGREEMENT; packetToSend.wAgreedLength = (WORD)agreedLength; packetToSend.wDataLength = (WORD)dataLength; @@ -603,7 +603,7 @@ bool CAccountConnector::__AuthState_RecvKeyAgreement() } else { - // Ű + // 키 협상 실패 Disconnect(); return false; } @@ -692,7 +692,7 @@ void CAccountConnector::OnConnectSuccess() void CAccountConnector::OnRemoteDisconnect() { - // Matrix Card Number Ҵµ close Ǹ α׷ Ѵ. + // Matrix Card Number 를 보내 놓았는데 close 되면 프로그램을 종료 한다. if (m_isWaitKey) { if (m_poHandler) diff --git a/src/UserInterface/AccountConnector.h b/src/UserInterface/AccountConnector.h index d7be7fa..0b243b1 100644 --- a/src/UserInterface/AccountConnector.h +++ b/src/UserInterface/AccountConnector.h @@ -68,8 +68,8 @@ class CAccountConnector : public CNetworkStream, public CSingleton ũID ε + // 길드ID -> 마크ID 인덱스 등록 CGuildMarkManager::Instance().AddMarkIDByGuildID(guildID, markID); } - // ũ ̹ εѴ. ( ) + // 모든 마크 이미지 파일을 로드한다. (파일이 없으면 만들어짐) CGuildMarkManager::Instance().LoadMarkImages(); m_currentRequestingImageIndex = 0; @@ -380,17 +380,17 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock() else { Recv(compSize, compBuf); - // ̹ Ѵ. CRC Բ ȴ. + // 압축된 이미지를 실제로 저장한다. CRC등 여러가지 정보가 함께 빌드된다. CGuildMarkManager::Instance().SaveBlockFromCompressedData(kPacket.imgIdx, posBlock, (const uint8_t *) compBuf, compSize); } } if (kPacket.count > 0) { - // ũ ̹ + // 마크 이미지 저장 CGuildMarkManager::Instance().SaveMarkImage(kPacket.imgIdx); - // ҽ ε ( ص ΰ ̰ ) + // 리소스 리로딩 (재접속을 안해도 본인것은 잘 보이게 함) std::string imagePath; if (CGuildMarkManager::Instance().GetMarkImageFilename(kPacket.imgIdx, imagePath)) @@ -404,7 +404,7 @@ bool CGuildMarkDownloader::__LoginState_RecvMarkBlock() } } - // û ûϰ ƴϸ ̹ ϰ + // 더 요청할 것이 있으면 요청하고 아니면 이미지를 저장하고 종료 if (m_currentRequestingImageIndex < CGuildMarkManager::Instance().GetMarkImageCount()) __SendMarkCRCList(); else @@ -430,7 +430,7 @@ bool CGuildMarkDownloader::__LoginState_RecvKeyAgreement() size_t agreedLength = Prepare(packetToSend.data, &dataLength); if (agreedLength == 0) { - // ʱȭ + // 초기화 실패 Disconnect(); return false; } @@ -438,7 +438,7 @@ bool CGuildMarkDownloader::__LoginState_RecvKeyAgreement() if (Activate(packet.wAgreedLength, packet.data, packet.wDataLength)) { - // Key agreement , + // Key agreement 성공, 응답 전송 packetToSend.bHeader = HEADER_CG_KEY_AGREEMENT; packetToSend.wAgreedLength = (WORD)agreedLength; packetToSend.wDataLength = (WORD)dataLength; @@ -452,7 +452,7 @@ bool CGuildMarkDownloader::__LoginState_RecvKeyAgreement() } else { - // Ű + // 키 협상 실패 Disconnect(); return false; } diff --git a/src/UserInterface/GuildMarkUploader.cpp b/src/UserInterface/GuildMarkUploader.cpp index 553472f..4089c8f 100644 --- a/src/UserInterface/GuildMarkUploader.cpp +++ b/src/UserInterface/GuildMarkUploader.cpp @@ -401,7 +401,7 @@ bool CGuildMarkUploader::__LoginState_RecvKeyAgreement() size_t agreedLength = Prepare(packetToSend.data, &dataLength); if (agreedLength == 0) { - // ʱȭ + // 초기화 실패 Disconnect(); return false; } @@ -409,7 +409,7 @@ bool CGuildMarkUploader::__LoginState_RecvKeyAgreement() if (Activate(packet.wAgreedLength, packet.data, packet.wDataLength)) { - // Key agreement , + // Key agreement 성공, 응답 전송 packetToSend.bHeader = HEADER_CG_KEY_AGREEMENT; packetToSend.wAgreedLength = (WORD)agreedLength; packetToSend.wDataLength = (WORD)dataLength; @@ -423,7 +423,7 @@ bool CGuildMarkUploader::__LoginState_RecvKeyAgreement() } else { - // Ű + // 키 협상 실패 Disconnect(); return false; } diff --git a/src/UserInterface/HackShield.cpp b/src/UserInterface/HackShield.cpp index 8db43ce..6219c14 100644 --- a/src/UserInterface/HackShield.cpp +++ b/src/UserInterface/HackShield.cpp @@ -8,7 +8,7 @@ #elif #define METIN2HS_MONITORING_SERVER_ADDR "79.110.88.84" // GF #endif -//#define METIN2HS_MONITORING_SERVER_ADDR "119.192.130.160" // pc +//#define METIN2HS_MONITORING_SERVER_ADDR "119.192.130.160" //김용욱 pc #include METIN2HS_INCLUDE_HSUPCHK #include METIN2HS_INCLUDE_HSUSERUTIL @@ -56,7 +56,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) gs_isHackDetected = true; break; } - //â ŷ + //창모드 해킹툴 감지 case AHNHS_ENGINE_DETECT_WINDOWED_HACK: { //MA_StringFormat(gs_szHackMsg, MA_ARRAYCOUNT(gs_szHackMsg), MA_T("DETECT_WINDOWED_HACK")); @@ -64,7 +64,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) break; } - //Speed + //Speed 관련 case AHNHS_ACTAPC_DETECT_SPEEDHACK: { MA_StringFormat(gs_szHackMsg, MA_ARRAYCOUNT(gs_szHackMsg), MA_T("DETECT_SPEED_HACK")); @@ -72,7 +72,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) break; } - // + //디버깅 방지 case AHNHS_ACTAPC_DETECT_KDTRACE: // case AHNHS_ACTAPC_DETECT_KDTRACE_CHANGED: { @@ -88,7 +88,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) break; } - // ڵ ġ + // 코드 패치 감지 case AHNHS_ACTAPC_DETECT_ABNORMAL_MEMORY_ACCESS: { MA_StringFormat(gs_szHackMsg, MA_ARRAYCOUNT(gs_szHackMsg), MA_T("DETECT_MEMORY_ACCESS\n%s"), (char*)pParam); @@ -96,8 +96,8 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) break; } - //޸ . - case AHNHS_ACTAPC_DETECT_MEM_MODIFY_FROM_LMP: // ּ (Randomized Base Address) Ȯغ. Linker->Advanced->(/DYNAMICBASE:NO) + //메모리 변조 감지. + case AHNHS_ACTAPC_DETECT_MEM_MODIFY_FROM_LMP: //임의 기준 주소 (Randomized Base Address) 확인해보기. Linker->Advanced->(/DYNAMICBASE:NO) { MA_StringFormat(gs_szHackMsg, MA_ARRAYCOUNT(gs_szHackMsg), MA_T("DETECT_MEMORY_MODIFY")); gs_isHackDetected = true; @@ -105,7 +105,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) } break; - // ٽ ޸ ȣ ʽϴ. + // 핵쉴드 로컬 메모리 보호 기능이 정상적이지 않습니다. case AHNHS_ACTAPC_DETECT_LMP_FAILED: { MA_StringFormat(gs_szHackMsg, MA_ARRAYCOUNT(gs_szHackMsg), MA_T("LOCAL_MEMORY_PROTECT_FAILED")); @@ -114,7 +114,7 @@ int __stdcall AhnHS_Callback(long lCode, long lParamSize, void* pParam) } break; - //׿ ŷ ̻ + //그외 해킹 방지 기능 이상 // case AHNHS_ACTAPC_DETECT_AUTOMOUSE: case AHNHS_ACTAPC_DETECT_DRIVERFAILED: case AHNHS_ACTAPC_DETECT_HOOKFUNCTION: @@ -145,27 +145,27 @@ bool HackShield_Init() ::GetCurrentDirectory(MA_ARRAYCOUNT(szModuleDirPath), szModuleDirPath); #ifndef _DEBUG - //ٽ Ʈ + //핵쉴드 업데이트 DWORD dwUpRet = 0; MA_TCHAR szFullFilePath[MA_MAX_PATH]; - // ٽ ġ մϴ. + // 핵쉴드 폴더 위치를 지정합니다. MA_PathMerge(szFullFilePath, MA_ARRAYCOUNT(szFullFilePath), szModuleDirPath, "hshield"); AHNHS_EXT_ERRORINFO HsExtError = {0,}; - // _AhnHS_HSUpdate Լ ȣ - dwUpRet = _AhnHS_HSUpdateEx( szFullFilePath, // ٽ - 1000 * 600, // Ʈ ü Ÿ ƿ - METIN2HS_CODE, // ڵ + // _AhnHS_HSUpdate 함수 호출 + dwUpRet = _AhnHS_HSUpdateEx( szFullFilePath, // 핵쉴드 폴더 경로 + 1000 * 600, // 업데이트 전체 타임 아웃 + METIN2HS_CODE, // 게임 코드 AHNHSUPDATE_CHKOPT_HOSTFILE| AHNHSUPDATE_CHKOPT_GAMECODE, HsExtError, - 1000* 20 ); // ŸӾƿ + 1000* 20 ); // 서버 연결 타임아웃 - // Ex Լ ϽǶ ݵ HSUpSetEnv.exe env Ͽ - // ڵ带 Էϼž մϴ. + // Ex 함수를 사용하실때는 반드시 HSUpSetEnv.exe 설정 툴로 env 파일에 + // 게임 코드를 입력하셔야 합니다. if ( dwUpRet != ERROR_SUCCESS) { - // ó + // 에러 처리 switch ( dwUpRet ) { case HSERROR_ENVFILE_NOTREAD: @@ -206,9 +206,9 @@ bool HackShield_Init() { case HSUSERUTIL_ERR_OK: // pass break; - case HSUSERUTIL_ERR_NOT_ADMIN: // ϹǷ ƴ + case HSUSERUTIL_ERR_NOT_ADMIN: // 유저 실행을 허용하므로 에러 아님 break; - case HSUSERUTIL_ERR_NOT_NT: // 98 ϹǷ ƴ + case HSUSERUTIL_ERR_NOT_NT: // 98 유저 실행을 허용하므로 에러 아님 break; case HSUSERUTIL_ERR_DELHIDEIDINFO_FAIL: MessageBox(NULL, MA_T("DEL_SHADOW_HIDDEN_ERROR"), "HACK_SHIELD", MB_OK); @@ -233,9 +233,9 @@ bool HackShield_Init() #ifndef _DEBUG { AHNHS_EXT_ERRORINFO HsExtError = { 0, }; - strcpy(HsExtError.szServer, METIN2HS_MONITORING_SERVER_ADDR); //͸ ּ - strcpy(HsExtError.szGameVersion, "1.0.0.0"); //Game - strcpy(HsExtError.szUserId, "Metin2User_test"); // ID + strcpy(HsExtError.szServer, METIN2HS_MONITORING_SERVER_ADDR); //모니터링 주소 + strcpy(HsExtError.szGameVersion, "1.0.0.0"); //Game 버전 + strcpy(HsExtError.szUserId, "Metin2User_test"); //유저 ID DWORD dwRet = _AhnHS_StartMonitor (HsExtError, szInterfaceFilePath); if( dwRet != ERROR_SUCCESS ) @@ -256,24 +256,24 @@ bool HackShield_Init() | AHNHS_CHKOPT_AUTOMOUSE | AHNHS_CHKOPT_MESSAGEHOOK | AHNHS_CHKOPT_PROTECT_D3DX - | AHNHS_CHKOPT_LOCAL_MEMORY_PROTECTION // ڵ ε ȣ - //| AHNHS_CHKOPT_ANTIFREESERVER // + | AHNHS_CHKOPT_LOCAL_MEMORY_PROTECTION // 코드 영역 로딩 보호 + //| AHNHS_CHKOPT_ANTIFREESERVER // 프리 서버 접속 방지 | AHNHS_USE_LOG_FILE // | AHNHS_ALLOW_SVCHOST_OPENPROCESS - //| AHNHS_ALLOW_LSASS_OPENPROCESS // ſ ī - //| AHNHS_ALLOW_CSRSS_OPENPROCESS // ſ ī - //| AHNHS_CHKOPT_SELF_DESTRUCTION // ó: ݹ ó + //| AHNHS_ALLOW_LSASS_OPENPROCESS // 신용 카드 결제 관련 + //| AHNHS_ALLOW_CSRSS_OPENPROCESS // 신용 카드 결제 관련 + //| AHNHS_CHKOPT_SELF_DESTRUCTION // 강제 종료 처리: 콜백 처리 주의 | AHNHS_CHKOPT_PROCESSSCAN | AHNHS_CHKOPT_UPDATED_FILE_CHECK - | AHNHS_CHKOPT_SEND_MONITOR_ONCE // ͸: 1ȸ - | AHNHS_CHKOPT_SEND_MONITOR_DELAY // ͸: ̵ õõ - | AHNHS_DONOT_TERMINATE_PROCESS, // ˸ + | AHNHS_CHKOPT_SEND_MONITOR_ONCE // 모니터링용: 1회만 보냄 + | AHNHS_CHKOPT_SEND_MONITOR_DELAY // 모니터링용: 아이디를 천천히 보냄 + | AHNHS_DONOT_TERMINATE_PROCESS, // 서버 알림 AHNHS_SPEEDHACK_SENSING_RATIO_NORMAL ); if (nRet != HS_ERR_OK) { - //Error ó + //Error 처리 switch(nRet) { case HS_ERR_ANOTHER_SERVICE_RUNNING: diff --git a/src/UserInterface/Hackshield.h b/src/UserInterface/Hackshield.h index 0deb861..998a34b 100644 --- a/src/UserInterface/Hackshield.h +++ b/src/UserInterface/Hackshield.h @@ -6,7 +6,7 @@ #ifndef METIN2HS_INCLUDE //#define METIN2HS_INCLUDE hshield-5.4.8.1 -#define METIN2HS_INCLUDE hackshield //2012 3 +#define METIN2HS_INCLUDE hackshield //2012년 3월 #endif #define METIN2HS_INCLUDE_HSUPCHK diff --git a/src/UserInterface/InstanceBase.cpp b/src/UserInterface/InstanceBase.cpp index d562f0f..66f60aa 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,27 +155,27 @@ 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) || // 난폭한 전갑순순록, 난폭한 전갑암순록 (20224 == mount) || (20229 == mount) ) return 2; - // Ż 3 ( , ų ) + // 고급 탈것은 레벨3 (공격 가능, 스킬 가능) if ((20209 <= mount && 20212 >= mount) || - (20215 == mount) || (20218 == mount) || // , ϼ + (20215 == mount) || (20218 == mount) || // 용맹한 전갑순순록, 용맹한 전갑암순록 (20220 == mount) || (20225 == mount) || (20230 == mount) ) return 3; @@ -191,13 +191,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; @@ -206,7 +206,7 @@ bool CInstanceBase::SHORSE::IsNewMount() } bool CInstanceBase::SHORSE::CanUseSkill() { - // ų 3 ̻̾߸ . + // 마상스킬은 말의 레벨이 3 이상이어야만 함. if (IsMounting()) return 2 < GetLevel(); @@ -304,7 +304,7 @@ bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape) return true; } -// 2004.07.05.myevan.ýź ̴ +// 2004.07.05.myevan.궁신탄영 끼이는 문제 class CActorInstanceBackground : public IBackground { public: @@ -411,7 +411,7 @@ void CInstanceBase::__EnableSkipCollision() { if (__IsMainInstance()) { - TraceError("CInstanceBase::__EnableSkipCollision - ڽ 浹˻罺ŵ Ǹ ȵȴ!!"); + TraceError("CInstanceBase::__EnableSkipCollision - 자신은 충돌검사스킵이 되면 안된다!!"); return; } m_GraphicThingInstance.EnableSkipCollision(); @@ -667,7 +667,7 @@ void CInstanceBase::__ClearMainInstance() rkChrMgr.ClearMainInstance(); } -/* ÷̾ ij .*/ +/* 실제 플레이어 캐릭터인지 조사.*/ bool CInstanceBase::__IsMainInstance() { if (this==__GetMainInstancePtr()) @@ -772,10 +772,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); } @@ -785,7 +785,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData) SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags); } - // NOTE : ݵ Affect Ŀ ؾ + // NOTE : 반드시 Affect 셋팅 후에 해야 함 AttachTextTail(); RefreshTextTail(); @@ -831,7 +831,7 @@ bool CInstanceBase::Create(const SCreateData& c_rkCreateData) __AttachHorseSaddle(); - // ɺ ӽ ڵ, ġ ã + // 길드 심볼을 위한 임시 코드, 적정 위치를 찾는 중 const int c_iGuildSymbolRace = 14200; if (c_iGuildSymbolRace == GetRace()) { @@ -900,7 +900,7 @@ bool CInstanceBase::SetRace(DWORD eRace) BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID) { - // 巹 ԰ ɿ ʰ.. + // 드레스 입고 있을때는 부케외의 장비는 나오지 않게.. if (IsWearingDress()) { const int c_iBouquets[] = @@ -909,7 +909,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) @@ -1190,8 +1190,8 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos { if (__IsMainInstance()) { - //assert(!"CInstanceBase::PushTCPState ÷̾ ڽſ ̵Ŷ ȵȴ!"); - TraceError("CInstanceBase::PushTCPState ÷̾ ڽſ ̵Ŷ ȵȴ!"); + //assert(!"CInstanceBase::PushTCPState 플레이어 자신에게 이동패킷은 오면 안된다!"); + TraceError("CInstanceBase::PushTCPState 플레이어 자신에게 이동패킷은 오면 안된다!"); return; } @@ -1205,7 +1205,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap; m_dwBaseCmdTime = dwCmdTime; - Tracenf("VID[%d] Ʈ [%d]", GetVirtualID(), nNetworkGap); + Tracenf("VID[%d] 네트웍갭 [%d]", GetVirtualID(), nNetworkGap); } */ @@ -1223,7 +1223,7 @@ void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPos //int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec(); //if (nApplyGap<-500 || nApplyGap>500) - // Tracenf("VID[%d] NAME[%s] Ʈ [cur:%d ave:%d] ۵ð (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap); + // Tracenf("VID[%d] NAME[%s] 네트웍갭 [cur:%d ave:%d] 작동시간 (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap); } /* @@ -1314,11 +1314,11 @@ void CInstanceBase::StateProcess() TPixelPosition kPPosDir = kPPosDst - kPPosCur; float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y); - //Tracenf("Ÿ %f", fDirLen); + //Tracenf("거리 %f", fDirLen); if (!__CanProcessNetworkStatePacket()) { - Lognf(0, "vid=%d ¶ ŵ IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown()); + Lognf(0, "vid=%d 움직일 수 없는 상태라 스킵 IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown()); return; } @@ -1331,7 +1331,7 @@ void CInstanceBase::StateProcess() { case FUNC_WAIT: { - //Tracenf("%s (%f, %f) -> (%f, %f) Ÿ %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen); + //Tracenf("%s (%f, %f) -> (%f, %f) 남은거리 %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen); if (fDirLen > 1.0f) { //NEW_GetSrcPixelPositionRef() = kPPosCur; @@ -1349,11 +1349,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ǥ"); + //Tracen("목표정지"); } else { - //Tracen(" "); + //Tracen("현재 정지"); m_isGoing = FALSE; @@ -1382,12 +1382,12 @@ void CInstanceBase::StateProcess() if (!IsWalking()) { - //Tracen("Ȱ ʾ ȱ "); + //Tracen("걷고 있지 않아 걷기 시작"); StartWalking(); } else { - //Tracen("̹ ȴ "); + //Tracen("이미 걷는중 "); } break; } @@ -1410,7 +1410,7 @@ void CInstanceBase::StateProcess() } else { - //Tracen(" "); + //Tracen("대기 공격 정지"); m_isGoing = FALSE; @@ -1441,11 +1441,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ʹ ־ ̵ "); + //Tracen("너무 멀어서 이동 후 공격"); } else { - //Tracen("븻 "); + //Tracen("노말 공격 정지"); m_isGoing = FALSE; @@ -1457,7 +1457,7 @@ void CInstanceBase::StateProcess() RunNormalAttack(fRotDst); - //Tracen(" "); + //Tracen("가깝기 때문에 워프 공격"); } break; } @@ -1541,11 +1541,11 @@ void CInstanceBase::StateProcess() if (!IsWalking()) StartWalking(); - //Tracen("ʹ ־ ̵ "); + //Tracen("너무 멀어서 이동 후 공격"); } else { - //Tracen("ų "); + //Tracen("스킬 정지"); m_isGoing = FALSE; @@ -1557,7 +1557,7 @@ void CInstanceBase::StateProcess() SetRotation(fRotDst); NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false); - //Tracen(" "); + //Tracen("가깝기 때문에 워프 공격"); } } break; @@ -1572,7 +1572,7 @@ void CInstanceBase::MovementProcess() TPixelPosition kPPosCur; NEW_GetPixelPosition(&kPPosCur); - // ǥ̹Ƿ y -ȭؼ Ѵ. + // 렌더링 좌표계이므로 y를 -화해서 더한다. TPixelPosition kPPosNext; { @@ -1605,7 +1605,7 @@ void CInstanceBase::MovementProcess() if (IsWalking()) EndWalking(); - //Tracen("ǥ "); + //Tracen("목표 도달 정지"); m_isGoing = FALSE; @@ -1630,33 +1630,33 @@ void CInstanceBase::MovementProcess() SetAdvancingRotation(fDstRot); - // Ͻð ʾ ʹ ̵ߴٸ.. + // 만약 렌턴시가 늦어 너무 많이 이동했다면.. if (fRestLen < -100.0f) { NEW_SetSrcPixelPosition(kPPosCur); float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef()); SetAdvancingRotation(fDstRot); - //Tracenf("VID %d ⼳ (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen); + //Tracenf("VID %d 오버 방향설정 (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen); - // ̵̶ ߰ Ѵ + // 이동중이라면 다음번에 멈추게 한다 if (FUNC_MOVE == m_kMovAfterFunc.eFunc) { m_kMovAfterFunc.eFunc = FUNC_WAIT; } } - // ߴٸ... + // 도착했다면... else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen) { if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown()) { __DisableSkipCollision(); - //Tracen(" ¶ ŵ"); + //Tracen("사망 상태라 동작 스킵"); m_isGoing = FALSE; - //Tracen("ൿ Ҵ ¶ ŵ"); + //Tracen("행동 불능 상태라 이후 동작 스킵"); } else { @@ -1738,7 +1738,7 @@ void CInstanceBase::MovementProcess() } else { - //Tracenf("VID %d ų (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot); + //Tracenf("VID %d 스킬 공격 (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot); __DisableSkipCollision(); m_isGoing = FALSE; @@ -1752,7 +1752,7 @@ void CInstanceBase::MovementProcess() EndWalking(); } - //Tracenf("VID %d (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking()); + //Tracenf("VID %d 정지 (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking()); } break; } @@ -1937,7 +1937,7 @@ void CInstanceBase::Transform() void CInstanceBase::Deform() { - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (!__CanRender()) return; @@ -1961,7 +1961,7 @@ void CInstanceBase::RenderTrace() void CInstanceBase::Render() { - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 if (!__CanRender()) return; @@ -2253,13 +2253,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()) @@ -2328,7 +2328,7 @@ BOOL CInstanceBase::IsStone() } -BOOL CInstanceBase::IsGuildWall() //IsBuilding ǹü IsGuildWall 庮( ) +BOOL CInstanceBase::IsGuildWall() //IsBuilding 길드건물전체 IsGuildWall은 담장벽만(문은 제외) { return IsWall(m_dwRace); } @@ -2392,9 +2392,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; @@ -2448,7 +2448,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(); @@ -2690,7 +2690,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()) { @@ -2719,7 +2719,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) case CItemData::ITEM_TYPE_ARMOR: __ClearArmorRefineEffect(); - // Ưȭ Ʈ + // 갑옷 특화 이펙트 if (pItem->GetSubType() == CItemData::ARMOR_BODY) { DWORD vnum = pItem->GetIndex(); @@ -2731,7 +2731,7 @@ UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) } } - if (refine < 7) // õ 7 ̻ Ʈ ֽϴ. + if (refine < 7) //현재 제련도 7 이상만 이펙트가 있습니다. return 0; if (pItem->GetSubType() == CItemData::ARMOR_BODY) @@ -2798,7 +2798,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor) if (IsWalking()) EndWalking(); - // 2004.07.25.myevan.Ʈ ٴ + // 2004.07.25.myevan.이펙트 안 붙는 문제 ////////////////////////////////////////////////////// __ClearAffects(); ////////////////////////////////////////////////////// @@ -2820,7 +2820,7 @@ bool CInstanceBase::ChangeArmor(DWORD dwArmor) RefreshState(CRaceMotionData::NAME_WAIT, TRUE); - // 2004.07.25.myevan.Ʈ ٴ + // 2004.07.25.myevan.이펙트 안 붙는 문제 ///////////////////////////////////////////////// SetAffectFlagContainer(kAffectFlagContainer); ///////////////////////////////////////////////// @@ -2975,9 +2975,9 @@ void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop) void CInstanceBase::RegisterBoundingSphere() { - // Stone DeforomNoSkin ϸ - // ϴ ִϸ̼ ִϸ̼ - // ٿ ڽ ø ̷ ʴ´. + // Stone 일 경우 DeforomNoSkin 을 하면 + // 낙하하는 애니메이션 같은 경우 애니메이션이 + // 바운드 박스에 영향을 미쳐 컬링이 제대로 이루어지지 않는다. if (!IsStone()) { m_GraphicThingInstance.DeformNoSkin(); diff --git a/src/UserInterface/InstanceBase.h b/src/UserInterface/InstanceBase.h index 9df0c81..0b9c2ec 100644 --- a/src/UserInterface/InstanceBase.h +++ b/src/UserInterface/InstanceBase.h @@ -73,8 +73,8 @@ class CInstanceBase AFFECT_SLOW, AFFECT_STUN, - AFFECT_DUNGEON_READY, // غ - AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE (Ŭ̾Ʈ ø) + AFFECT_DUNGEON_READY, // 던전에서 준비 상태 + AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE 에서 변경(클라이언트에서 컬링되지않음) AFFECT_BUILDING_CONSTRUCTION_SMALL, AFFECT_BUILDING_CONSTRUCTION_LARGE, @@ -85,34 +85,34 @@ class CInstanceBase AFFECT_FISH_MIND, // 13 - AFFECT_JEONGWI, // 14 ȥ - AFFECT_GEOMGYEONG, // 15 ˰ - AFFECT_CHEONGEUN, // 16 õ - AFFECT_GYEONGGONG, // 17 - AFFECT_EUNHYEONG, // 18 - AFFECT_GWIGEOM, // 19 Ͱ - AFFECT_GONGPO, // 20 - AFFECT_JUMAGAP, // 21 ָ - AFFECT_HOSIN, // 22 ȣ - AFFECT_BOHO, // 23 ȣ - AFFECT_KWAESOK, // 24 - AFFECT_HEUKSIN, // 25 żȣ - AFFECT_MUYEONG, // 26 - AFFECT_REVIVE_INVISIBILITY, // 27 Ȱ - AFFECT_FIRE, // 28 - AFFECT_GICHEON, // 29 õ - AFFECT_JEUNGRYEOK, // 30 ¼ - AFFECT_DASH, // 31 뽬 - AFFECT_PABEOP, // 32 Ĺ - AFFECT_FALLEN_CHEONGEUN, // 33 ٿ ׷̵ õ - AFFECT_POLYMORPH, // 34 + AFFECT_JEONGWI, // 14 전귀혼 + AFFECT_GEOMGYEONG, // 15 검경 + AFFECT_CHEONGEUN, // 16 천근추 + AFFECT_GYEONGGONG, // 17 경공술 + AFFECT_EUNHYEONG, // 18 은형법 + AFFECT_GWIGEOM, // 19 귀검 + AFFECT_GONGPO, // 20 공포 + AFFECT_JUMAGAP, // 21 주마갑 + AFFECT_HOSIN, // 22 호신 + AFFECT_BOHO, // 23 보호 + AFFECT_KWAESOK, // 24 쾌속 + AFFECT_HEUKSIN, // 25 흑신수호 + AFFECT_MUYEONG, // 26 무영진 + AFFECT_REVIVE_INVISIBILITY, // 27 부활 무적 + AFFECT_FIRE, // 28 지속 불 + AFFECT_GICHEON, // 29 기천 대공 + AFFECT_JEUNGRYEOK, // 30 증력술 + AFFECT_DASH, // 31 대쉬 + AFFECT_PABEOP, // 32 파법술 + AFFECT_FALLEN_CHEONGEUN, // 33 다운 그레이드 천근추 + AFFECT_POLYMORPH, // 34 폴리모프 AFFECT_WAR_FLAG1, // 35 AFFECT_WAR_FLAG2, // 36 AFFECT_WAR_FLAG3, // 37 AFFECT_CHINA_FIREWORK, // 38 AFFECT_PREMIUM_SILVER, AFFECT_PREMIUM_GOLD, - AFFECT_RAMADAN_RING, // 41 ʽ´ Affect + AFFECT_RAMADAN_RING, // 41 초승달 반지 착용 Affect AFFECT_NUM = 64, @@ -154,31 +154,31 @@ class CInstanceBase NEW_AFFECT_BOW_DISTANCE, // 225 - NEW_AFFECT_EXP_BONUS = 500, // - NEW_AFFECT_ITEM_BONUS = 501, // 尩 + NEW_AFFECT_EXP_BONUS = 500, // 경험의 반지 + NEW_AFFECT_ITEM_BONUS = 501, // 도둑의 장갑 NEW_AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX, NEW_AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT, NEW_AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND, - NEW_AFFECT_MARRIAGE_FAST = 505, // (ݽ), + NEW_AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털 (금슬), NEW_AFFECT_GOLD_BONUS = 506, - NEW_AFFECT_MALL = 510, // Ʈ - NEW_AFFECT_NO_DEATH_PENALTY = 511, // ȣ (ġ гƼ ѹ ش) - NEW_AFFECT_SKILL_BOOK_BONUS = 512, // (å Ȯ 50% ) - NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // ־ (å ) + NEW_AFFECT_MALL = 510, // 몰 아이템 에펙트 + NEW_AFFECT_NO_DEATH_PENALTY = 511, // 용신의 가호 (경험치 패널티를 한번 막아준다) + NEW_AFFECT_SKILL_BOOK_BONUS = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가) + NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // 주안 술서 (책 수련 딜레이 없음) - NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // ( 14 ⺻ ȿ) + NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과) NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517, - NEW_AFFECT_AUTO_HP_RECOVERY = 534, // ڵ HP - NEW_AFFECT_AUTO_SP_RECOVERY = 535, // ڵ SP + NEW_AFFECT_AUTO_HP_RECOVERY = 534, // 자동물약 HP + NEW_AFFECT_AUTO_SP_RECOVERY = 535, // 자동물약 SP NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540, NEW_AFFECT_DRAGON_SOUL_DECK1 = 541, NEW_AFFECT_DRAGON_SOUL_DECK2 = 542, NEW_AFFECT_RAMADAN_ABILITY = 300, - NEW_AFFECT_RAMADAN_RING = 301, // 󸶴 ̺Ʈ Ư ʽ´ + NEW_AFFECT_RAMADAN_RING = 301, // 라마단 이벤트용 특수아이템 초승달의 반지 착용 유무 NEW_AFFECT_NOG_POCKET_ABILITY = 302, @@ -263,7 +263,7 @@ class CInstanceBase TITLE_NONE = 4, }; - enum //Ʒ ȣ ٲ registerEffect ʵ ٲپ Ѵ. + enum //아래 번호가 바뀌면 registerEffect 쪽도 바꾸어 줘야 한다. { EFFECT_REFINED_NONE, @@ -291,8 +291,8 @@ class CInstanceBase EFFECT_BODYARMOR_REFINED8, EFFECT_BODYARMOR_REFINED9, - EFFECT_BODYARMOR_SPECIAL, // 4-2-1 - EFFECT_BODYARMOR_SPECIAL2, // 4-2-2 + EFFECT_BODYARMOR_SPECIAL, // 갑옷 4-2-1 + EFFECT_BODYARMOR_SPECIAL2, // 갑옷 4-2-2 EFFECT_REFINED_NUM, }; @@ -305,7 +305,7 @@ class CInstanceBase DAMAGE_BLOCK = (1<<3), DAMAGE_PENETRATE= (1<<4), DAMAGE_CRITICAL = (1<<5), - // -_- + // 반-_-사 }; enum @@ -359,17 +359,17 @@ class CInstanceBase EFFECT_SUCCESS, EFFECT_FAIL, EFFECT_FR_SUCCESS, - EFFECT_LEVELUP_ON_14_FOR_GERMANY, // 14϶ ( ) - EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,// 15϶ ( ) + EFFECT_LEVELUP_ON_14_FOR_GERMANY, //레벨업 14일때 ( 독일전용 ) + EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 ) EFFECT_PERCENT_DAMAGE1, EFFECT_PERCENT_DAMAGE2, EFFECT_PERCENT_DAMAGE3, EFFECT_AUTO_HPUP, EFFECT_AUTO_SPUP, - EFFECT_RAMADAN_RING_EQUIP, // ʽ´ ߵϴ Ʈ - EFFECT_HALLOWEEN_CANDY_EQUIP, // ҷ ߵϴ Ʈ - EFFECT_HAPPINESS_RING_EQUIP, // ູ ߵϴ Ʈ - EFFECT_LOVE_PENDANT_EQUIP, // ູ ߵϴ Ʈ + EFFECT_RAMADAN_RING_EQUIP, // 초승달 반지 착용 순간에 발동하는 이펙트 + EFFECT_HALLOWEEN_CANDY_EQUIP, // 할로윈 사탕 착용 순간에 발동하는 이펙트 + EFFECT_HAPPINESS_RING_EQUIP, // 행복의 반지 착용 순간에 발동하는 이펙트 + EFFECT_LOVE_PENDANT_EQUIP, // 행복의 반지 착용 순간에 발동하는 이펙트 EFFECT_TEMP, EFFECT_NUM, }; @@ -434,7 +434,7 @@ class CInstanceBase void MountHorse(UINT eRace); void DismountHorse(); - // ũƮ ׽Ʈ Լ. ߿ + // 스크립트용 테스트 함수. 나중에 없에자 void SCRIPT_SetAffect(UINT eAffect, bool isVisible); float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst); @@ -604,7 +604,7 @@ class CInstanceBase BOOL CanAttackHorseLevel(); #ifdef __MOVIE_MODE__ - BOOL IsMovieMode(); // ڿ Ⱥ̴° + BOOL IsMovieMode(); // 운영자용 완전히 안보이는거 #endif bool NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst); @@ -750,8 +750,8 @@ class CInstanceBase //void SetParts(const WORD * c_pParts); void Refresh(DWORD dwMotIndex, bool isLoop); - //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // msԴϴ. - //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // msԴϴ. + //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다. + //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // 수명은 ms단위입니다. float GetDistance(CInstanceBase * pkTargetInst); float GetDistance(const TPixelPosition & c_rPixelPosition); @@ -763,7 +763,7 @@ class CInstanceBase bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos); bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight); - // 2004.07.25.myevan.Ʈ ȳ + // 2004.07.25.myevan.이펙트 안나오는 문제 ///////////////////////////////////////////////////////////// void __ClearAffectFlagContainer(); void __ClearAffects(); @@ -817,7 +817,7 @@ class CInstanceBase void __DisableChangingTCPState(); BOOL __IsEnableTCPProcess(UINT eCurFunc); - // 2004.07.17.levites.isShow ViewFrustumCheck + // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경 bool __CanRender(); bool __IsInViewFrustum(); diff --git a/src/UserInterface/InstanceBaseBattle.cpp b/src/UserInterface/InstanceBaseBattle.cpp index 062e00d..842a23c 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=std::min(NEW_GetDistanceFromDestInstance(*pkInstEach), HALF_FAN_ROT_MIN_DISTANCE); @@ -253,11 +253,11 @@ bool CInstanceBase::NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std { CInstanceBase* pkInstEach=*i; - // ڽ ߰ ʴ´ + // 자신인 경우 추가하지 않는다 if (pkInstEach==this) continue; - // 츸 ߰Ѵ + // 적인 경우만 추가한다 if (!IsAttackableInstance(*pkInstEach)) continue; @@ -423,7 +423,7 @@ void CInstanceBase::AttackProcess() CInstanceBase* pkInstEach=*i; ++i; - // ΰ InstanceType + // 서로간의 InstanceType 비교 if (!IsAttackableInstance(*pkInstEach)) continue; @@ -465,7 +465,7 @@ void CInstanceBase::RunComboAttack(float fAtkDirRot, DWORD wMotionIndex) m_GraphicThingInstance.ComboAttack(wMotionIndex, fAtkDirRot); } -// ϰ TRUE ΰ ִ +// 리턴값 TRUE가 무엇인가가 있다 BOOL CInstanceBase::CheckAdvancing() { #ifdef __MOVIE_MODE__ @@ -497,7 +497,7 @@ BOOL CInstanceBase::CheckAdvancing() if (m_GraphicThingInstance.CanSkipCollision()) { - //Tracenf("%x VID %d 浹 ŵ", ELTimer_GetMSec(), GetVirtualID()); + //Tracenf("%x VID %d 충돌 스킵", ELTimer_GetMSec(), GetVirtualID()); return FALSE; } @@ -517,11 +517,11 @@ BOOL CInstanceBase::CheckAdvancing() CActorInstance& rkActorSelf=m_GraphicThingInstance; CActorInstance& rkActorEach=pkInstEach->GetGraphicThingInstanceRef(); - //NOTE : Skil Door Type Collisionüũ Ѵ. + //NOTE : Skil을 쓰더라도 Door Type과는 Collision체크 한다. if( bUsingSkill && !rkActorEach.IsDoor() ) continue; - // Ҽ ִ°? + // 앞으로 전진할수 있는가? if (rkActorSelf.TestActorCollision(rkActorEach)) { uCollisionCount++; @@ -544,13 +544,13 @@ BOOL CInstanceBase::CheckAdvancing() } } - // ʼӼ üũ + // 맵속성 체크 CPythonBackground& rkBG=CPythonBackground::Instance(); const D3DXVECTOR3 & rv3Position = m_GraphicThingInstance.GetPosition(); const D3DXVECTOR3 & rv3MoveDirection = m_GraphicThingInstance.GetMovementVectorRef(); - // NOTE : ̵ Ÿ ũٸ ɰ Ӽ üũ - // 10.0f Ÿ - [levites] + // NOTE : 만약 이동 거리가 크다면 쪼개서 구간 별로 속성을 체크해 본다 + // 현재 설정해 놓은 10.0f는 임의의 거리 - [levites] int iStep = int(D3DXVec3Length(&rv3MoveDirection) / 10.0f); D3DXVECTOR3 v3CheckStep = rv3MoveDirection / float(iStep); D3DXVECTOR3 v3CheckPosition = rv3Position; @@ -695,7 +695,7 @@ void CInstanceBase::Die() if (IsAffect(AFFECT_SPAWN)) __AttachEffect(EFFECT_SPAWN_DISAPPEAR); - // 2004.07.25.Ʈ Ⱥٴ ذ + // 2004.07.25.이펙트 안붙는 문제해결 //////////////////////////////////////// __ClearAffects(); //////////////////////////////////////// diff --git a/src/UserInterface/InstanceBaseEffect.cpp b/src/UserInterface/InstanceBaseEffect.cpp index 2e28c8a..efd65fc 100644 --- a/src/UserInterface/InstanceBaseEffect.cpp +++ b/src/UserInterface/InstanceBaseEffect.cpp @@ -135,7 +135,7 @@ void CInstanceBase::ProcessDamage() else if (flag & DAMAGE_CRITICAL) { //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); - //return; ڵ ǥ. + //return; 숫자도 표시. } std::string strDamageType; @@ -162,7 +162,7 @@ void CInstanceBase::ProcessDamage() { strDamageType = "nontarget_"; rdwCRCEft = EFFECT_DAMAGE_NOT_TARGET; - return;// ȵ. + return;//현재 적용 안됨. } else { @@ -178,7 +178,7 @@ void CInstanceBase::ProcessDamage() { if(index > 7) { - TraceError("ProcessDamageѷ ɼ"); + TraceError("ProcessDamage무한루프 가능성"); break; } num = damage%10; @@ -258,7 +258,7 @@ CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict( return m_kEffectContainer.m_kDct_dwEftID; } -// Return value boolean ID ٲߴϴ +// Return value 를 boolean 에서 ID 로 바꿉니다 DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey) { SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict(); @@ -481,7 +481,7 @@ bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst) return true; } -// ȮҶ. +//길드전시 상대 길드인지 확인할때. bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID) { DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID); @@ -491,7 +491,7 @@ bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID) return true; } -// 忡 븸 ִ. +//대련 모드에서는 대련 상대만 공격할 수 있다. bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst) { DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst); @@ -510,7 +510,7 @@ bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel) DWORD dwGuildIDSrc=GetGuildID(); DWORD dwGuildIDDst=rkInstSel.GetGuildID(); - if (GetDuelMode()) // ϶ ~_~ + if (GetDuelMode()) //대련 모드일때는 ~_~ return true; return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst); @@ -686,7 +686,7 @@ void CInstanceBase::RefreshTextTailTitle() RefreshTextTail(); } -// 2004.07.25.myevan.Ʈ ٴ ذ +// 2004.07.25.myevan.이펙트 안 붙는 문제 해결 ///////////////////////////////////////////////// void CInstanceBase::__ClearAffectFlagContainer() { @@ -780,7 +780,7 @@ void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible) { if (isVisible) { - // NOTE : Dress ԰ Alpha ʴ´. + // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다. if (IsWearingDress()) return; @@ -796,7 +796,7 @@ void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible) { if (isVisible) { - // NOTE : Dress ԰ Alpha ʴ´. + // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다. if (IsWearingDress()) return; @@ -806,7 +806,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(); } @@ -859,7 +859,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]); @@ -872,7 +872,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]); @@ -883,7 +883,7 @@ void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]); m_GraphicThingInstance.SetBattleAttachEffect(0); } - // ȭ Ͻ Visible մϴ. + // 화염참은 공격할 때만 일시적으로 Visible 합니다. return; break; */ @@ -902,13 +902,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(); @@ -1026,7 +1026,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; @@ -1041,8 +1041,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 d55d19c..eed8ff1 100644 --- a/src/UserInterface/InstanceBaseMovement.cpp +++ b/src/UserInterface/InstanceBaseMovement.cpp @@ -166,7 +166,7 @@ void CInstanceBase::EndWalking(float fBlendingTime) m_isGoing = FALSE; - // Ȱ ߰ ؾ Ѵ + // 걷고 있을때는 무조건 멈추게 해야 한다 if (IsWalking()||!IsAttacked()) { m_GraphicThingInstance.Stop(fBlendingTime); diff --git a/src/UserInterface/Locale.cpp b/src/UserInterface/Locale.cpp index b83d0b3..8506088 100644 --- a/src/UserInterface/Locale.cpp +++ b/src/UserInterface/Locale.cpp @@ -244,7 +244,7 @@ void LocaleService_ForceSetLocale(const char* name, const char* localePath) strcpy(MULTI_LOCALE_NAME, name); strcpy(MULTI_LOCALE_PATH, localePath); - // õ ӽÿ security key (WE Ŭ õ ϱ ) + // 기존 천마 서버로 접속시에는 security key 변경 (WE 버전 클라로 천마서버 접속하기 위함) if (0 == stricmp(name, "ymir")) __SECURITY_KEY_STRING__ = "testtesttesttest"; if (0 == stricmp(name, "we_korea")) diff --git a/src/UserInterface/Locale_inc.h b/src/UserInterface/Locale_inc.h index 4703cb2..0f4007d 100644 --- a/src/UserInterface/Locale_inc.h +++ b/src/UserInterface/Locale_inc.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_SINGAPORE // ̰ +#define LOCALE_SERVICE_SINGAPORE // 싱가폴 #define ENABLE_COSTUME_SYSTEM #define ENABLE_ENERGY_SYSTEM #define ENABLE_DRAGON_SOUL_SYSTEM diff --git a/src/UserInterface/Locale_inc_BR.h b/src/UserInterface/Locale_inc_BR.h index b8ca7e6..3e05356 100644 --- a/src/UserInterface/Locale_inc_BR.h +++ b/src/UserInterface/Locale_inc_BR.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_BRAZIL // +#define LOCALE_SERVICE_BRAZIL // 브라질 #define XTRAP_CLIENT_ENABLE #define XTRAP_PATCH_ARG "660970B4483BDC32C5266D9844CFED6230832A3E2F95F8DD45DB9AED6AE8B837900845956432BD8F2D14136A8CF8BD970A93B783971789382A493B68C5C2BA650F7D04245246E41FB1670C4E955F790A585C3F5D8EB0BADD81C6DD2DB7" diff --git a/src/UserInterface/Locale_inc_CA.h b/src/UserInterface/Locale_inc_CA.h index 7ae11be..6eaf114 100644 --- a/src/UserInterface/Locale_inc_CA.h +++ b/src/UserInterface/Locale_inc_CA.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_CANADA // ij +#define LOCALE_SERVICE_CANADA // 캐나다 #define XTRAP_CLIENT_ENABLE #define XTRAP_PATCH_ARG "660970B4953BDCCFC5266D9844CFED62D9D88487BAFA5824E622544D919AC5C535B7B5BB27DF7189499DA1EFA3745A052BE7AE8B12275EDE90BAFDD333407BF80F7D04245246E40AF7650C4AD8583917B21AD7B2AFDE3D4F588C800D128456E1DFEC" diff --git a/src/UserInterface/Locale_inc_EU.h b/src/UserInterface/Locale_inc_EU.h index b9999da..a6a5560 100644 --- a/src/UserInterface/Locale_inc_EU.h +++ b/src/UserInterface/Locale_inc_EU.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_EUROPE // +#define LOCALE_SERVICE_EUROPE // 유럽 #define LSS_SECURITY_KEY "1234abcd5678efgh" diff --git a/src/UserInterface/Locale_inc_EU2.h b/src/UserInterface/Locale_inc_EU2.h index 39824e2..d428969 100644 --- a/src/UserInterface/Locale_inc_EU2.h +++ b/src/UserInterface/Locale_inc_EU2.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_EUROPE // +#define LOCALE_SERVICE_EUROPE // 유럽 //#define USE_AHNLAB_HACKSHIELD diff --git a/src/UserInterface/Locale_inc_HK.h b/src/UserInterface/Locale_inc_HK.h index e1d64b0..6e7c135 100644 --- a/src/UserInterface/Locale_inc_HK.h +++ b/src/UserInterface/Locale_inc_HK.h @@ -1,2 +1,2 @@ -#define LOCALE_SERVICE_HONGKONG // ȫ +#define LOCALE_SERVICE_HONGKONG // 홍콩 diff --git a/src/UserInterface/Locale_inc_JP.h b/src/UserInterface/Locale_inc_JP.h index 72651b8..a7f6e34 100644 --- a/src/UserInterface/Locale_inc_JP.h +++ b/src/UserInterface/Locale_inc_JP.h @@ -1,5 +1,5 @@ -#define LOCALE_SERVICE_WE_JAPAN // World Edition( ) Ϻ -#define LOCALE_SERVICE_EUROPE // +#define LOCALE_SERVICE_WE_JAPAN // World Edition(유럽 버젼) 버젼의 일본 +#define LOCALE_SERVICE_EUROPE // 유럽 #define LSS_SECURITY_KEY "1234abcd5678efgh" diff --git a/src/UserInterface/Locale_inc_NEWCIBN.h b/src/UserInterface/Locale_inc_NEWCIBN.h index 4c20a68..2df2f40 100644 --- a/src/UserInterface/Locale_inc_NEWCIBN.h +++ b/src/UserInterface/Locale_inc_NEWCIBN.h @@ -1,4 +1,4 @@ -#define LOCALE_SERVICE_NEWCIBN // ߱ +#define LOCALE_SERVICE_NEWCIBN // 중국 자유세계 #define ENABLE_COSTUME_SYSTEM #define ENABLE_ENERGY_SYSTEM diff --git a/src/UserInterface/Locale_inc_SG.h b/src/UserInterface/Locale_inc_SG.h index 0d59ed9..a5be230 100644 --- a/src/UserInterface/Locale_inc_SG.h +++ b/src/UserInterface/Locale_inc_SG.h @@ -1,3 +1,3 @@ -#define LOCALE_SERVICE_SINGAPORE // ̰ +#define LOCALE_SERVICE_SINGAPORE // 싱가폴 #define ENABLE_COSTUME_SYSTEM #define ENABLE_ENERGY_SYSTEM diff --git a/src/UserInterface/Locale_inc_VI.h b/src/UserInterface/Locale_inc_VI.h index 0048938..6ea2e8c 100644 --- a/src/UserInterface/Locale_inc_VI.h +++ b/src/UserInterface/Locale_inc_VI.h @@ -1 +1 @@ -#define LOCALE_SERVICE_VIETNAM // Ʈ +#define LOCALE_SERVICE_VIETNAM // 베트남 diff --git a/src/UserInterface/MarkImage.cpp b/src/UserInterface/MarkImage.cpp index 6d755d1..2f43128 100644 --- a/src/UserInterface/MarkImage.cpp +++ b/src/UserInterface/MarkImage.cpp @@ -106,10 +106,10 @@ void CGuildMarkImage::GetData(UINT x, UINT y, UINT width, UINT height, void * da } } -// ̹ = 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, uint8_t* pbImage) @@ -120,14 +120,14 @@ bool CGuildMarkImage::SaveMark(DWORD posMark, uint8_t* 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; @@ -174,7 +174,7 @@ bool CGuildMarkImage::SaveBlockFromCompressedData(DWORD posBlock, const uint8_t* return true; } -void CGuildMarkImage::BuildAllBlocks() // ̹ ü ȭ +void CGuildMarkImage::BuildAllBlocks() // 이미지 전체를 블럭화 { Pixel apxBuf[SGuildMarkBlock::SIZE]; sys_log(0, "CGuildMarkImage::BuildAllBlocks"); diff --git a/src/UserInterface/MarkImage.h b/src/UserInterface/MarkImage.h index 1cfc1c4..e4eec7e 100644 --- a/src/UserInterface/MarkImage.h +++ b/src/UserInterface/MarkImage.h @@ -13,7 +13,7 @@ struct SGuildMark }; /////////////////////////////////////////////////////////////////////////////// - Pixel m_apxBuf[SIZE]; // ̹ + Pixel m_apxBuf[SIZE]; // 실제 이미지 /////////////////////////////////////////////////////////////////////////////// void Clear(); @@ -35,11 +35,11 @@ struct SGuildMarkBlock }; /////////////////////////////////////////////////////////////////////////////// - Pixel m_apxBuf[SIZE]; // ̹ + Pixel m_apxBuf[SIZE]; // 실제 이미지 - uint8_t m_abCompBuf[MAX_COMP_SIZE]; // - size_t m_sizeCompBuf; // ũ - DWORD m_crc; // CRC + uint8_t m_abCompBuf[MAX_COMP_SIZE]; // 압축된 데이터 + size_t m_sizeCompBuf; // 압축된 크기 + DWORD m_crc; // 압축된 데이터의 CRC /////////////////////////////////////////////////////////////////////////////// DWORD GetCRC() const; @@ -84,9 +84,9 @@ class CGuildMarkImage bool SaveMark(DWORD posMark, uint8_t* pbMarkImage); bool DeleteMark(DWORD posMark); - bool SaveBlockFromCompressedData(DWORD posBlock, const uint8_t * pbComp, DWORD dwCompSize); // -> Ŭ̾Ʈ + bool SaveBlockFromCompressedData(DWORD posBlock, const uint8_t * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트 - DWORD GetEmptyPosition(); // ũ ġ ´. + DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다. void GetBlockCRCList(DWORD * crcList); void GetDiffBlocks(const DWORD * crcList, std::map & mapDiffBlocks); diff --git a/src/UserInterface/MarkManager.cpp b/src/UserInterface/MarkManager.cpp index 1f80049..b07875b 100644 --- a/src/UserInterface/MarkManager.cpp +++ b/src/UserInterface/MarkManager.cpp @@ -25,7 +25,7 @@ CGuildMarkManager::CGuildMarkManager() #if _MSC_VER >= 1200 _mkdir("mark"); #endif - // mark id . () + // 남은 mark id 셋을 만든다. (서버용) for (DWORD i = 0; i < MAX_IMAGE_COUNT * CGuildMarkImage::MARK_TOTAL_COUNT; ++i) m_setFreeMarkID.insert(i); } @@ -54,7 +54,7 @@ void CGuildMarkManager::SetMarkPathPrefix(const char * prefix) m_pathPrefix = prefix; } -// ũ ε ҷ ( ) +// 마크 인덱스 불러오기 (서버에서만 사용) bool CGuildMarkManager::LoadMarkIndex() { char buf[64]; @@ -182,7 +182,7 @@ DWORD CGuildMarkManager::__AllocMarkID(DWORD guildID) DWORD markID = *it; DWORD imgIdx = markID / CGuildMarkImage::MARK_TOTAL_COUNT; - CGuildMarkImage * pkImage = __GetImage(imgIdx); // ̹ ٸ + CGuildMarkImage * pkImage = __GetImage(imgIdx); // 이미지가 없다면 만들기 위해 if (pkImage && AddMarkIDByGuildID(guildID, markID)) return markID; @@ -271,7 +271,7 @@ void CGuildMarkManager::GetDiffBlocks(DWORD imgIdx, const DWORD * crcList, std:: { mapDiffBlocks.clear(); - // Ŭ̾Ʈ ̹ û . + // 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다. if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx)) { sys_err("invalid idx %u", imgIdx); @@ -298,7 +298,7 @@ bool CGuildMarkManager::SaveBlockFromCompressedData(DWORD imgIdx, DWORD posBlock // CLIENT bool CGuildMarkManager::GetBlockCRCList(DWORD imgIdx, DWORD * crcList) { - // Ŭ̾Ʈ ̹ û . + // 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다. if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx)) { sys_err("invalid idx %u", imgIdx); diff --git a/src/UserInterface/MarkManager.h b/src/UserInterface/MarkManager.h index 16734af..913ba50 100644 --- a/src/UserInterface/MarkManager.h +++ b/src/UserInterface/MarkManager.h @@ -32,11 +32,11 @@ class CGuildMarkManager : public singleton // void SetMarkPathPrefix(const char * prefix); - bool LoadMarkIndex(); // ũ ε ҷ ( ) - bool SaveMarkIndex(); // ũ ε ϱ + bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용) + bool SaveMarkIndex(); // 마크 인덱스 저장하기 - void LoadMarkImages(); // ũ ̹ ҷ - void SaveMarkImage(DWORD imgIdx); // ũ ̹ + void LoadMarkImages(); // 모든 마크 이미지를 불러오기 + void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장 bool GetMarkImageFilename(DWORD imgIdx, std::string & path) const; bool AddMarkIDByGuildID(DWORD guildID, DWORD markID); diff --git a/src/UserInterface/MovieMan.cpp b/src/UserInterface/MovieMan.cpp index a74a1bb..bea4eab 100644 --- a/src/UserInterface/MovieMan.cpp +++ b/src/UserInterface/MovieMan.cpp @@ -55,7 +55,7 @@ void CMovieMan::FillRect( RECT& fillRect, DWORD fillColor ) if (fillRect.bottom == fillRect.top || fillRect.left == fillRect.right) { - // ä ʿ + // 채울 필요 없음 return; } @@ -83,7 +83,7 @@ inline void CMovieMan::GDIFillRect( RECT& fillRect, DWORD fillColor ) } //---------------------------------------------------------------------------------------------------- -// Ư ǽ GDI ȭ鿡 Ѹ +// 특정 서피스를 GDI로 바탕화면에 뿌린다 // inline void CMovieMan::GDIBlt(IDirectDrawSurface *pSrcSurface, RECT *pDestRect) { @@ -105,7 +105,7 @@ void CMovieMan::PlayLogo(const char *pcszName) void CMovieMan::PlayIntro() { - // Ʈ Ű Է̳ 콺 Ŭ ŵ + // 인트로 영상은 키보드 입력이나 마우스 클릭으로 스킵 가능 PlayMovie( INTRO_FILE, MOVIEMAN_SKIPPABLE_YES, MOVIEMAN_POSTEFFECT_FADEOUT, 0xFFFFFF ); } @@ -146,7 +146,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons return FALSE; } - // 32Ʈ ˾ƺ + // 32비트인지 알아본다 ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_PIXELFORMAT; @@ -178,12 +178,12 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons hr = pDDStream->GetFormat(&ddsd, NULL, NULL, NULL); if (SUCCEEDED(hr)) { - // ũ ũ⸦ + // 동영상 크기와 윈도우 크기를 기준으로 동영상 재생될 적당한 영역을 설정 m_movieWidth = ddsd.dwWidth; m_movieHeight = ddsd.dwHeight; - // ۴ RGB32 PrimarySurface ٸ - // GDI fallback ؼ StretchBlt Ѵ + // 백버퍼는 무조건 RGB32로 만들고 PrimarySurface와 형식이 다르면 + // GDI fallback 해서 StretchBlt 한다 DDSURFACEDESC ddsdBackSurface; ZeroMemory(&ddsdBackSurface, sizeof(ddsdBackSurface)); ddsdBackSurface.ddpfPixelFormat.dwSize = sizeof(ddsdBackSurface.ddpfPixelFormat); @@ -228,7 +228,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons pDD->Release(); - // Ű, 콺 + // 키보드, 마우스 버퍼 비우기 MSG msg; while (PeekMessage(&msg, hWnd, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)); while (PeekMessage(&msg, hWnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE)); @@ -237,7 +237,7 @@ BOOL CMovieMan::PlayMovie( const char *cpFileName, const bool bSkipAllowed, cons } //---------------------------------------------------------------------------------------------------- -// Screen ǥ ȯ +// 메인 윈도우의 Screen 좌표를 반환 // void CMovieMan::GetWindowRect(RECT& windowRect) { @@ -256,12 +256,12 @@ void CMovieMan::GetWindowRect(RECT& windowRect) // GetClientRect( hWnd, &windowRect ); - // clientRect ClientToScreen ϴ Ͱ + // clientRect를 ClientToScreen 하는 것과 같음 OffsetRect( &windowRect, p.x, p.y ); } //---------------------------------------------------------------------------------------------------- -// 쿡 ä RECT ȯ(/ ) +// 메인 윈도우에 동영상을 꽉채우는 RECT 반환(가로/세로 비율 유지) // void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect) { @@ -290,7 +290,7 @@ void CMovieMan::CalcMovieRect(int srcWidth, int srcHeight, RECT& movieRect) } //---------------------------------------------------------------------------------------------------- -// ȭ ƴ , ׻ 2 RECT ǥ +// 화면 위에서 동영상이 아닌 검은색 영역, 항상 2개의 RECT로 표현 가능 // void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT& lowerRect) { @@ -299,20 +299,20 @@ void CMovieMan::CalcBackgroundRect(const RECT& movieRect, RECT& upperRect, RECT& if (m_movieWidth > m_movieHeight) { - // Ʒ ΰ + // 위아래 두개 SetRect(&upperRect, windowRect.left, windowRect.top, windowRect.right, movieRect.top); SetRect(&lowerRect, windowRect.left, movieRect.bottom, windowRect.right, windowRect.bottom); } else { - // ¿ ΰ + // 좌우 두개 SetRect(&upperRect, windowRect.left, windowRect.top, movieRect.left, windowRect.bottom); SetRect(&lowerRect, movieRect.right, windowRect.top, windowRect.right, windowRect.bottom); } } //---------------------------------------------------------------------------------------------------- -// Ư ǽ Blocking ׸ +// 특정 서피스에 Blocking으로 동영상을 그린다 // HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDrawMediaStream *pDDStream, IMultiMediaStream *pMMStream, bool bSkipAllowed, int nPostEffectID, DWORD dwPostEffectData) { @@ -322,7 +322,7 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr HRESULT hr = pDDStream->CreateSample(pSurface, NULL, 0, &pSample); if (SUCCEEDED(hr)) { - // ѹ ĥش + // 최초 한번 검은색으로 배경을 칠해준다 RECT movieRect; RECT upperRect, lowerRect; CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); @@ -333,21 +333,21 @@ HRESULT CMovieMan::RenderStreamToSurface(IDirectDrawSurface *pSurface, IDirectDr pMMStream->SetState(STREAMSTATE_RUN); while (pSample->Update(0, NULL, NULL, NULL) == S_OK) { - // ߾ ׸ + // 윈도우 중앙을 기준으로 꽉차게 그린다 CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL))) { GDIBlt(pSurface, &movieRect); } - // ߰ ŵ ϸ ŰESC/콺 Է½ Ż + // 중간에 스킵 가능하면 키보드ESC/마우스 입력시 탈출 if (bSkipAllowed && (KEY_DOWN(VK_LBUTTON) || KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))) { break; } } - // ÿ 2 ̵ƿ + // 동영상 재생 종료시에 2초 동안 페이드아웃 switch(nPostEffectID) { case MOVIEMAN_POSTEFFECT_FADEOUT: @@ -393,15 +393,15 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea if (ext == "mpg") { // 2007-08-01, nuclei - // MPG Ѵٰ ϰ Ŵ ڵ - // ܺ ڵ(ffdshow ) ʵ Ѵ - // (Ÿ ϵ ڵ ) + // MPG만 재생한다고 가정하고 매뉴얼로 각종 코덱을 연결해 + // 외부 코덱(ffdshow 등)에 영향을 받지 않도록 한다 + // (기타 파일도 재생은 되지만 코덱에 영향을 받을 수 있음) hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_MPEG1Splitter, CLSID_CMpegVideoCodec, CLSID_CMpegAudioCodec); } else if (ext == "mp43") { // 2007-08-12, nuclei - // MPEG-4, MP3 ڵ ̿ AVI ߰(Ȯڴ .mp43 ؾ) + // MPEG-4, MP3 코덱을 이용한 AVI의 재생 추가(확장자는 .mp43으로 해야함) hr = BuildFilterGraphManually(wPath, pAMStream, CLSID_AviSplitter, CLSID_MP4VideoCodec, CLSID_MP3AudioCodec); } else @@ -409,7 +409,7 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea hr = pAMStream->OpenFile(wPath, 0); } - // hr S_OK + // 재생 성공시 hr은 S_OK if (SUCCEEDED(hr)) { pAMStream->QueryInterface(IID_IMultiMediaStream, (void**) ppMMStream); @@ -421,11 +421,11 @@ HRESULT CMovieMan::RenderFileToMMStream(const char *cpFilename, IMultiMediaStrea } //---------------------------------------------------------------------------------------------------- -// Ư ȭ ų ο +// 특정색으로 화면이 밝아지거나 어두워짐 // HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fadeOutDuration, DWORD fadeOutColor) { - // Lock ɱ ʱȭ + // Lock 걸기 위해 초기화 DDSURFACEDESC lockedSurfaceDesc; int *pCopiedSrcSurBuf = NULL; @@ -441,7 +441,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad return hr; } - // 1ȸ ǽ ϰ 纻 FadeOut óѴ + // 최초 1회에 서피스 복사하고 복사본에 FadeOut 처리한다 if (!pCopiedSrcSurBuf) { if (!(pCopiedSrcSurBuf = (int*)malloc((LONG)lockedSurfaceDesc.lPitch * m_movieHeight))) @@ -452,7 +452,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad CopyMemory(pCopiedSrcSurBuf, lockedSurfaceDesc.lpSurface, (LONG)lockedSurfaceDesc.lPitch * m_movieHeight); } - // ȼ ö(32Ʈ) + // 픽셀 플랏팅(32비트) int *pSrcSurfaceBuf = pCopiedSrcSurBuf; int *pDestSurfaceBuf = (int*)lockedSurfaceDesc.lpSurface; @@ -476,7 +476,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad } pSurface->Unlock(lockedSurfaceDesc.lpSurface); - // ٲ ̹ ׸ + // 색상이 바뀐 동영상 이미지 그리기 RECT movieRect; CalcMovieRect(m_movieWidth, m_movieHeight, movieRect); if (FAILED(m_pPrimarySurface->Blt(&movieRect, pSurface, NULL, DDBLT_WAIT, NULL))) @@ -484,23 +484,23 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad GDIBlt(pSurface, &movieRect); } - // Ǵ ĭ ä + // 위 또는 좌측 빈칸 색채우기 RECT upperRect, lowerRect; CalcBackgroundRect(movieRect, upperRect, lowerRect); FillRect(upperRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue); FillRect(lowerRect, (fadeOutColorRed << 16) | (fadeOutColorGreen << 8) | fadeOutColorBlue); - // + // 음량 조절 if (m_pBasicAudio) { m_pBasicAudio->put_Volume((long)(-10000 * fadeProgress)); } } - // ޸ + // 메모리 해제 free(pCopiedSrcSurBuf); - // 1.0 FadeOut ȭ ׸ + // 마지막엔 1.0을 기준으로 완전히 FadeOut된 화면 그리기 RECT windowRect; GetWindowRect(windowRect); FillRect(windowRect, fadeOutColor); @@ -509,7 +509,7 @@ HRESULT CMovieMan::RenderPostEffectFadeOut(IDirectDrawSurface *pSurface, int fad } //---------------------------------------------------------------------------------------------------- -// MPEG-1 ܺ ڵ ϴ Լ +// MPEG-1 비디오 파일을 외부 코덱 간섭없이 렌더링하는 함수 // HRESULT CMovieMan::BuildFilterGraphManually( WCHAR* wpFilename, @@ -537,8 +537,8 @@ HRESULT CMovieMan::BuildFilterGraphManually( CoCreateInstance(clsidVideoCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pVideoFilter); CoCreateInstance(clsidAudioCodec, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pAudioFilter); - // MP43 ڴ ٸ DMO ڵ ־ش - // MONSTER ߰ߵ ̽(ڵ ) + // 만약 MP43 디코더가 없다면 DMO 코덱을 대신 넣어준다 + // MONSTER팀에서 발견된 케이스(코덱을 누군가 강제로 삭제) if (!pVideoFilter && IsEqualGUID(clsidVideoCodec, CLSID_MP4VideoCodec)) { // Create the DMO Wrapper filter. @@ -580,7 +580,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pOutPin->Release(); if (SUCCEEDED(hr)) { - // Ŀ Output ɵ Ÿ + // 연결후에만 Output 핀들이 나타난다 pSplitterFilter->EnumPins(&pEnumPins); PIN_INFO pinInfo; while( SUCCEEDED(pEnumPins->Next(1, &pInPin, NULL)) ) @@ -589,7 +589,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pinInfo.pFilter->Release(); if (pinInfo.dir == PINDIR_OUTPUT) { - // Pin - + // Pin의 순서를 비디오-오디오로 가정 pSplitterVideoOutPin = pInPin; pEnumPins->Next(1, &pSplitterAudioOutPin, NULL); break; @@ -606,12 +606,12 @@ HRESULT CMovieMan::BuildFilterGraphManually( hr = pGraphBuilder->Connect(pSplitterVideoOutPin, pInPin); if (SUCCEEDED(hr)) { - // + // 비디오 렌더 hr = pGraphBuilder->Render(pOutPin); pInPin->Release(); pOutPin->Release(); - // Ͽ ִ + // 오디오는 파일에 따라 없을 수도 있다 if (pSplitterAudioOutPin && pAudioFilter) { pAudioFilter->EnumPins(&pEnumPins); @@ -619,7 +619,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( pEnumPins->Next(1, &pOutPin, NULL); pEnumPins->Release(); pGraphBuilder->Connect(pSplitterAudioOutPin, pInPin); - // ص Ѿ + // 오디오 렌더는 실패해도 넘어갈 수 있음 pGraphBuilder->Render(pOutPin); pInPin->Release(); pOutPin->Release(); @@ -627,7 +627,7 @@ HRESULT CMovieMan::BuildFilterGraphManually( } } - // + // 해제 //#ifdef _DEBUG // RemoveFromRot(dwRegister); //#endif diff --git a/src/UserInterface/MovieMan.h b/src/UserInterface/MovieMan.h index 54acfc9..d089c4f 100644 --- a/src/UserInterface/MovieMan.h +++ b/src/UserInterface/MovieMan.h @@ -1,11 +1,11 @@ #pragma once -// ̵ƿ () +// 페이드아웃 길이(초) #define MOVIEMAN_FADE_DURATION 1300 #define MOVIEMAN_SKIPPABLE_YES true #define MOVIEMAN_POSTEFFECT_FADEOUT 1 -// DX 7.0 +// 동영상 재생에 DX 7.0 사용 struct IDirectDraw; struct IDirectDrawSurface; struct IDirectDrawMediaStream; diff --git a/src/UserInterface/NProtectGameGuard.cpp b/src/UserInterface/NProtectGameGuard.cpp index 541d698..99dc4e3 100644 --- a/src/UserInterface/NProtectGameGuard.cpp +++ b/src/UserInterface/NProtectGameGuard.cpp @@ -80,48 +80,48 @@ void LocaleService_NoticeGameGuardInitError_HongKong() switch (gs_gameGuard.msg) { case NPGAMEMON_ERROR_EXIST: - sprintf(msg, "GameGuard?Cy??άO?sҰʤA?C "); + sprintf(msg, "GameGuard곰?ㄴ좧탙데??⒝촑?톝귑걺ㄷメ쪨곰?좧 "); break; case NPGAMEMON_ERROR_GAME_EXIST: - sprintf(msg, "C?ư?GameGuardwb?C?C?s?C "); + sprintf(msg, "툮으?싣곰?⒝GameGuard쨢쫇곰?ㄴ좧뎡?툮으メ싻?톝곰?좧 "); break; case NPGAMEMON_ERROR_INIT: - sprintf(msg, "GameGuardƿ?C?sҰʫA?άOi??oͽĬ?A?C "); + sprintf(msg, "GameGuardれ늑ㅖ월?좧?톝귑걺メ쪨곰?⒝촑츙낚쩳??탊Ν식юず?─ㄷメ쪨곰?좧 "); break; case NPGAMEMON_ERROR_AUTH_GAMEGUARD: case NPGAMEMON_ERROR_NFOUND_GG: case NPGAMEMON_ERROR_AUTH_INI: case NPGAMEMON_ERROR_NFOUND_INI: - sprintf(msg, "LGameGuard?βͲܡCЦwGameGuard wɡC "); + sprintf(msg, "킠GameGuard읠?⒝깼Ν꺌텝좧싻쫤맷GameGuard ず쫤맷읠좧 "); break; case NPGAMEMON_ERROR_CRYPTOAPI: - sprintf(msg, "WindowYt?lC?swIEC "); + sprintf(msg, "Windowず촟끝ψ쮝꽝읠?⅜톖좧싻?톝쫤맷IE좧 "); break; case NPGAMEMON_ERROR_EXECUTE: - sprintf(msg, "GameGuard?ѡC?s?GameGuardwɡC "); + sprintf(msg, "GameGuard곰?ⅱ귐좧싻?톝곰?GameGuard쫤맷읠좧 "); break; case NPGAMEMON_ERROR_ILLEGAL_PRG: - sprintf(msg, "o?Dk?Cе?ݭn??s?C "); + sprintf(msg, "탊?첗챞?─좧싻뎡?ㄳ쁨춏ず?─ㄷメ?톝곰?좧 "); break; case NPGMUP_ERROR_ABORT: - sprintf(msg, "GameGuard??CpG?LksuA?վ?H?wC "); + sprintf(msg, "GameGuardㅙ?¾?좧쫜찱?そ킠챞퀂퐑좥싻?쌌얇빌몰⒝?짩ず㉭ㆅ쟈?쯹좧 "); break; case NPGMUP_ERROR_CONNECT: case NPGMUP_ERROR_DOWNCFG: - sprintf(msg, "GameGuard睊(?)?AsuѡCyA?s?άOpG?H𪺸ܽнվ?H?wAաC "); + sprintf(msg, "GameGuard㏆ぉ(ㅙ?)?찥퀂퐑ⅱ귐좧탙데ㄷメ쪨?톝곰?⒝촑쫜찱┳?짩㉭ㆅ쟈ず멎싻쌌얇?짩㉭ㆅ쟈?쯹ㄷメ쪨먼좧 "); break; case NPGMUP_ERROR_AUTH: - sprintf(msg, "GameGuard睊S?C??r?A?s?άOϥPC޲z?վ?wA?C "); + sprintf(msg, "GameGuard㏆ぉ쮁?㏏┬좧싻?갚ㅾ곰?㉭촵?─メ쪨?톝곰?⒝촑ⓒΞPC붸쾩?─쌌얇?쯹メ쪨곰?좧 "); break; case NPGAMEMON_ERROR_NPSCAN: - sprintf(msg, "frεnJbȤJIuˬdҲեѡCi?OO餣άOPVFfrC "); + sprintf(msg, "칏촵ㅞ탇짫픟ト짫첟쨠ⓦ읫촥소꾐ⅱ귐좧쩳?촑캯압톱ㄳº⒝촑텾촚짦칏촵좧 "); break; default: - sprintf(msg, "GameGuard??o??CбNC?̪GameGuard?*.erl?Hqll??Hgame2@inca.co.krHcC "); + sprintf(msg, "GameGuard곰??탊?월?좧싻켔툮으멸?㎤맸ずGameGuard멸?㎤ㄴず*.erl읠?픆퉞쨖턫τ??켋⑥game2@inca.co.kr첞폺좧 "); break; } - MessageBox(NULL, msg, "GameGuard ?", MB_OK); + MessageBox(NULL, msg, "GameGuard 월?", MB_OK); } void LocaleService_NoticeGameGuardInitError_International() @@ -194,19 +194,19 @@ void LocaleService_NoticeGameGuardProcError_HongKong() case NPGAMEMON_COMM_CLOSE: return; case NPGAMEMON_INIT_ERROR: - sprintf(msg, "GameGuardƿ? : %lu", gs_gameGuard.arg); + sprintf(msg, "GameGuardれ늑ㅖ월? : %lu", gs_gameGuard.arg); break; case NPGAMEMON_SPEEDHACK: - sprintf(msg, "o?speed hackC "); + sprintf(msg, "탊?speed hack좧 "); break; case NPGAMEMON_GAMEHACK_KILLED: - sprintf(msg, "o?ChackC "); + sprintf(msg, "탊?툮으hack좧 "); break; case NPGAMEMON_GAMEHACK_DETECT: - sprintf(msg, "o?ChackC "); + sprintf(msg, "탊?툮으hack좧 "); break; case NPGAMEMON_GAMEHACK_DOUBT: - sprintf(msg, "CGameGuardw?C "); + sprintf(msg, "툮으⒝GameGuard쨢텝?좧 "); break; } MessageBox(NULL, msg, "GameGuard Error", MB_OK); diff --git a/src/UserInterface/NetworkActorManager.cpp b/src/UserInterface/NetworkActorManager.cpp index f3d8c4c..7b7806c 100644 --- a/src/UserInterface/NetworkActorManager.cpp +++ b/src/UserInterface/NetworkActorManager.cpp @@ -273,7 +273,7 @@ bool CNetworkActorManager::__IsVisibleActor(const SNetworkActorData& c_rkNetActo if (__IsMainActorVID(c_rkNetActorData.m_dwVID)) return true; - // 2004.08.02.myevan.׻ ̱ ÷ + // 2004.08.02.myevan.항상 보이기 플래그 if (c_rkNetActorData.m_kAffectFlags.IsSet(CInstanceBase::AFFECT_SHOW_ALWAYS)) return true; @@ -293,7 +293,7 @@ bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY) LONG len = (LONG)sqrt(double(dx * dx + dy * dy)); extern int CHAR_STAGE_VIEW_BOUND; - if (len < CHAR_STAGE_VIEW_BOUND) // Ÿ cm + if (len < CHAR_STAGE_VIEW_BOUND) // 거리제한 cm return true; return false; diff --git a/src/UserInterface/NetworkActorManager.h b/src/UserInterface/NetworkActorManager.h index 629b967..577feba 100644 --- a/src/UserInterface/NetworkActorManager.h +++ b/src/UserInterface/NetworkActorManager.h @@ -90,7 +90,7 @@ struct SNetworkUpdateActorData short m_sAlignment; BYTE m_byPKMode; DWORD m_dwMountVnum; - DWORD m_dwStateFlags; // Create ̴ + DWORD m_dwStateFlags; // 본래 Create 때만 쓰이는 변수임 CAffectFlagContainer m_kAffectFlags; SNetworkUpdateActorData() diff --git a/src/UserInterface/Packet.h b/src/UserInterface/Packet.h index d498dd3..2b9b021 100644 --- a/src/UserInterface/Packet.h +++ b/src/UserInterface/Packet.h @@ -4,18 +4,18 @@ #include "Hackshield.h" #include METIN2HS_INCLUDE_ANTICPXSVR #else -#pragma pack(push) // alignment +#pragma pack(push) //기존 alignment 저장 #pragma pack(8) #define ANTICPX_TRANS_BUFFER_MAX 400 typedef struct _AHNHS_TRANS_BUFFER { - unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* ۼ Ŷ ִ ũ */]; + unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */]; unsigned short nLength; } AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER; -#pragma pack(pop) // alignment . +#pragma pack(pop) // 기존 alignment 복구. #endif /* !USE_AHNLAB_HACKSHIELD */ #include "../gamelib/RaceData.h" @@ -30,8 +30,8 @@ enum HEADER_CG_LOGIN = 1, HEADER_CG_ATTACK = 2, HEADER_CG_CHAT = 3, - HEADER_CG_PLAYER_CREATE = 4, // ο ÷̾ - HEADER_CG_PLAYER_DESTROY = 5, // ÷̾ . + HEADER_CG_PLAYER_CREATE = 4, // 새로운 플래이어를 생성 + HEADER_CG_PLAYER_DESTROY = 5, // 플래이어를 삭제. HEADER_CG_PLAYER_SELECT = 6, HEADER_CG_CHARACTER_MOVE = 7, HEADER_CG_SYNC_POSITION = 8, @@ -95,8 +95,8 @@ enum HEADER_CG_MESSENGER = 67, //HEADER_BLANK68 = 68, HEADER_CG_MALL_CHECKOUT = 69, - HEADER_CG_SAFEBOX_CHECKIN = 70, // â ִ´. - HEADER_CG_SAFEBOX_CHECKOUT = 71, // â ´. + HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣는다. + HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다. HEADER_CG_PARTY_INVITE = 72, HEADER_CG_PARTY_INVITE_ANSWER = 73, HEADER_CG_PARTY_REMOVE = 74, @@ -144,7 +144,7 @@ enum HEADER_CG_GUILD_SYMBOL_CRC = 113, HEADER_CG_SCRIPT_SELECT_ITEM = 114, HEADER_CG_LOGIN4 = 115, - HEADER_CG_LOGIN5_OPENID = 116, //OpenID : Ű . + HEADER_CG_LOGIN5_OPENID = 116, //OpenID : 실행시 받은 인증키를 서버에 보냄. HEADER_CG_RUNUP_MATRIX_ANSWER = 201, HEADER_CG_NEWCIBN_PASSPOD_ANSWER = 202, @@ -189,17 +189,17 @@ enum HEADER_GC_CHANGE_SPEED = 18, HEADER_GC_CHARACTER_UPDATE = 19, #if defined(GAIDEN) - HEADER_GC_ITEM_DEL = 20, // â ߰ - HEADER_GC_ITEM_SET = 21, // â ߰ + HEADER_GC_ITEM_DEL = 20, // 아이템 창에 추가 + HEADER_GC_ITEM_SET = 21, // 아이템 창에 추가 #else - HEADER_GC_ITEM_SET = 20, // â ߰ - HEADER_GC_ITEM_SET2 = 21, // â ߰ + HEADER_GC_ITEM_SET = 20, // 아이템 창에 추가 + HEADER_GC_ITEM_SET2 = 21, // 아이템 창에 추가 #endif - HEADER_GC_ITEM_USE = 22, // ( 鿡 ֱ ) - HEADER_GC_ITEM_DROP = 23, // - HEADER_GC_ITEM_UPDATE = 25, // ġ Ʈ - HEADER_GC_ITEM_GROUND_ADD = 26, // ٴڿ ߰ - HEADER_GC_ITEM_GROUND_DEL = 27, // ٴڿ + HEADER_GC_ITEM_USE = 22, // 아이템 사용 (주위 사람들에게 보여주기 위해) + HEADER_GC_ITEM_DROP = 23, // 아이템 버리기 + HEADER_GC_ITEM_UPDATE = 25, // 아이템 수치 업데이트 + HEADER_GC_ITEM_GROUND_ADD = 26, // 바닥에 아이템 추가 + HEADER_GC_ITEM_GROUND_DEL = 27, // 바닥에서 아이템 삭제 HEADER_GC_QUICKSLOT_ADD = 28, HEADER_GC_QUICKSLOT_DEL = 29, HEADER_GC_QUICKSLOT_SWAP = 30, @@ -389,13 +389,13 @@ enum PLAYER_PER_ACCOUNT3 = 3, PLAYER_PER_ACCOUNT4 = 4, - PLAYER_ITEM_SLOT_MAX_NUM = 20, // ÷̾ Դ  . + PLAYER_ITEM_SLOT_MAX_NUM = 20, // 플래이어의 슬롯당 들어가는 갯수. QUICKSLOT_MAX_LINE = 4, - QUICKSLOT_MAX_COUNT_PER_LINE = 8, // Ŭ̾Ʈ + QUICKSLOT_MAX_COUNT_PER_LINE = 8, // 클라이언트 임의 결정값 QUICKSLOT_MAX_COUNT = QUICKSLOT_MAX_LINE * QUICKSLOT_MAX_COUNT_PER_LINE, - QUICKSLOT_MAX_NUM = 36, // ִ + QUICKSLOT_MAX_NUM = 36, // 서버와 맞춰져 있는 값 SHOP_HOST_ITEM_MAX_NUM = 40, @@ -468,7 +468,7 @@ typedef struct packet_mark_idxlist BYTE header; DWORD bufSize; WORD count; - //ڿ size * (WORD + WORD)ŭ + //뒤에 size * (WORD + WORD)만큼 데이터 붙음 } TPacketGCMarkIDXList; typedef struct packet_mark_block @@ -477,7 +477,7 @@ typedef struct packet_mark_block DWORD bufSize; BYTE imgIdx; DWORD count; - // ڿ 64 x 48 x ȼũ(4Ʈ) = 12288ŭ + // 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음 } TPacketGCMarkBlock; typedef struct command_symbol_upload @@ -546,7 +546,7 @@ typedef struct command_login char pwd[PASS_MAX_NUM + 1]; } TPacketCGLogin; -// start - Ŷ +// start - 권한 서버 접속을 위한 패킷들 typedef struct command_login2 { BYTE header; @@ -569,7 +569,7 @@ typedef struct command_login5 char authKey[OPENID_AUTHKEY_LEN + 1]; DWORD adwClientKey[4]; } TPacketCGLogin5; -// end - Ŷ +// end - 권한 서버 접속을 위한 패킷들 typedef struct command_direct_enter { @@ -588,8 +588,8 @@ typedef struct command_player_select typedef struct command_attack { BYTE header; - BYTE bType; // - DWORD dwVictimVID; // VID + BYTE bType; // 공격 유형 + DWORD dwVictimVID; // 적 VID BYTE bCRCMagicCubeProcPiece; BYTE bCRCMagicCubeFilePiece; } TPacketCGAttack; @@ -1019,9 +1019,9 @@ typedef struct SShopItemTable DWORD vnum; BYTE count; - TItemPos pos; // PC ̿ - DWORD price; // PC ̿ - BYTE display_pos; // PC ̿, ġ. + TItemPos pos; // PC 상점에만 이용 + DWORD price; // PC 상점에만 이용 + BYTE display_pos; // PC 상점에만 이용, 보일 위치. } TShopItemTable; typedef struct SPacketCGMyShop @@ -1121,18 +1121,18 @@ typedef struct command_script_select_item // From Server enum EPhase { - PHASE_CLOSE, // (Ǵ ) - PHASE_HANDSHAKE, // Ǽ..;; - PHASE_LOGIN, // α - PHASE_SELECT, // ij ȭ - PHASE_LOADING, // ε ȭ - PHASE_GAME, // ȭ - PHASE_DEAD, // ׾ .. ( ȿ ִ ..) + PHASE_CLOSE, // 끊기는 상태 (또는 끊기 전 상태) + PHASE_HANDSHAKE, // 악수..;; + PHASE_LOGIN, // 로그인 중 + PHASE_SELECT, // 캐릭터 선택 화면 + PHASE_LOADING, // 선택 후 로딩 화면 + PHASE_GAME, // 게임 화면 + PHASE_DEAD, // 죽었을 때.. (게임 안에 있는 것일 수도..) - PHASE_DBCLIENT_CONNECTING, // - PHASE_DBCLIENT, // - PHASE_P2P, // - PHASE_AUTH, // α + PHASE_DBCLIENT_CONNECTING, // 서버용 + PHASE_DBCLIENT, // 서버용 + PHASE_P2P, // 서버용 + PHASE_AUTH, // 로그인 인증 용 }; typedef struct packet_phase @@ -1141,7 +1141,7 @@ typedef struct packet_phase BYTE phase; } TPacketGCPhase; -typedef struct packet_blank // Ŷ. +typedef struct packet_blank // 공백패킷. { BYTE header; } TPacketGCBlank; @@ -1278,7 +1278,7 @@ enum EPKModes PK_MODE_MAX_NUM, }; -// 2004.11.20.myevan.CRaceData::PART_MAX_NUM ϰ - ϴ°Ͱ ġ +// 2004.11.20.myevan.CRaceData::PART_MAX_NUM 사용안하게 수정 - 서버에서 사용하는것과 일치하지 않음 enum ECharacterEquipmentPart { CHR_EQUIPPART_ARMOR, @@ -1298,7 +1298,7 @@ typedef struct packet_char_additional_info BYTE bEmpire; DWORD dwGuildID; DWORD dwLevel; - short sAlignment; //ġ + short sAlignment; //선악치 BYTE bPKMode; DWORD dwMountVnum; } TPacketGCCharacterAdditionalInfo; @@ -1410,14 +1410,14 @@ typedef struct packet_GlobalTime enum EChatType { - CHAT_TYPE_TALKING, /* ׳ ä */ - CHAT_TYPE_INFO, /* ( , ġ . ) */ - CHAT_TYPE_NOTICE, /* */ - CHAT_TYPE_PARTY, /* Ƽ */ - CHAT_TYPE_GUILD, /* 帻 */ - CHAT_TYPE_COMMAND, /* */ - CHAT_TYPE_SHOUT, /* ġ */ - CHAT_TYPE_WHISPER, // ʹ ʴ Only Client Enum + CHAT_TYPE_TALKING, /* 그냥 채팅 */ + CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */ + CHAT_TYPE_NOTICE, /* 공지사항 */ + CHAT_TYPE_PARTY, /* 파티말 */ + CHAT_TYPE_GUILD, /* 길드말 */ + CHAT_TYPE_COMMAND, /* 명령 */ + CHAT_TYPE_SHOUT, /* 외치기 */ + CHAT_TYPE_WHISPER, // 서버와는 연동되지 않는 Only Client Enum CHAT_TYPE_BIG_NOTICE, CHAT_TYPE_MAX_NUM, }; @@ -1431,7 +1431,7 @@ typedef struct packet_chatting BYTE bEmpire; } TPacketGCChat; -typedef struct packet_whisper // Ŷ +typedef struct packet_whisper // 가변 패킷 { BYTE bHeader; WORD wSize; @@ -1518,57 +1518,57 @@ enum EPointTypes POINT_MAX_HP, // 6 POINT_SP, // 7 POINT_MAX_SP, // 8 - POINT_STAMINA, // 9 ׹̳ - POINT_MAX_STAMINA, // 10 ִ ׹̳ + POINT_STAMINA, // 9 스테미너 + POINT_MAX_STAMINA, // 10 최대 스테미너 POINT_GOLD, // 11 - POINT_ST, // 12 ٷ - POINT_HT, // 13 ü - POINT_DX, // 14 ø - POINT_IQ, // 15 ŷ - POINT_ATT_POWER, // 16 ݷ - POINT_ATT_SPEED, // 17 ݼӵ - POINT_EVADE_RATE, // 18 ȸ - POINT_MOV_SPEED, // 19 ̵ӵ - POINT_DEF_GRADE, // 20 - POINT_CASTING_SPEED, // 21 ֹӵ (ٿŸ*100) / (100 + ̰) = ٿ Ÿ - POINT_MAGIC_ATT_GRADE, // 22 ݷ - POINT_MAGIC_DEF_GRADE, // 23 - POINT_EMPIRE_POINT, // 24 - POINT_LEVEL_STEP, // 25 ܰ.. (1 2 3 , 4 Ǹ ) - POINT_STAT, // 26 ɷġ ø ִ - POINT_SUB_SKILL, // 27 ų Ʈ - POINT_SKILL, // 28 Ƽ ų Ʈ -// POINT_SKILL_PASV, // 27 нú ø ִ -// POINT_SKILL_ACTIVE, // 28 Ƽ ų Ʈ - POINT_MIN_ATK, // 29 ּ ı - POINT_MAX_ATK, // 30 ִ ı - POINT_PLAYTIME, // 31 ÷̽ð - POINT_HP_REGEN, // 32 HP ȸ - POINT_SP_REGEN, // 33 SP ȸ + POINT_ST, // 12 근력 + POINT_HT, // 13 체력 + POINT_DX, // 14 민첩성 + POINT_IQ, // 15 정신력 + POINT_ATT_POWER, // 16 공격력 + POINT_ATT_SPEED, // 17 공격속도 + POINT_EVADE_RATE, // 18 회피율 + POINT_MOV_SPEED, // 19 이동속도 + POINT_DEF_GRADE, // 20 방어등급 + POINT_CASTING_SPEED, // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임 + POINT_MAGIC_ATT_GRADE, // 22 마법공격력 + POINT_MAGIC_DEF_GRADE, // 23 마법방어력 + POINT_EMPIRE_POINT, // 24 제국점수 + POINT_LEVEL_STEP, // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업) + POINT_STAT, // 26 능력치 올릴 수 있는 개수 + POINT_SUB_SKILL, // 27 보조 스킬 포인트 + POINT_SKILL, // 28 액티브 스킬 포인트 +// POINT_SKILL_PASV, // 27 패시브 기술 올릴 수 있는 개수 +// POINT_SKILL_ACTIVE, // 28 액티브 스킬 포인트 + POINT_MIN_ATK, // 29 최소 파괴력 + POINT_MAX_ATK, // 30 최대 파괴력 + POINT_PLAYTIME, // 31 플레이시간 + POINT_HP_REGEN, // 32 HP 회복률 + POINT_SP_REGEN, // 33 SP 회복률 - POINT_BOW_DISTANCE, // 34 Ȱ Ÿ ġ (meter) + POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter) - POINT_HP_RECOVERY, // 35 ü ȸ - POINT_SP_RECOVERY, // 36 ŷ ȸ + POINT_HP_RECOVERY, // 35 체력 회복 증가량 + POINT_SP_RECOVERY, // 36 정신력 회복 증가량 - POINT_POISON_PCT, // 37 Ȯ - POINT_STUN_PCT, // 38 Ȯ - POINT_SLOW_PCT, // 39 ο Ȯ - POINT_CRITICAL_PCT, // 40 ũƼ Ȯ - POINT_PENETRATE_PCT, // 41 Ÿ Ȯ - POINT_CURSE_PCT, // 42 Ȯ + POINT_POISON_PCT, // 37 독 확률 + POINT_STUN_PCT, // 38 기절 확률 + POINT_SLOW_PCT, // 39 슬로우 확률 + POINT_CRITICAL_PCT, // 40 크리티컬 확률 + POINT_PENETRATE_PCT, // 41 관통타격 확률 + POINT_CURSE_PCT, // 42 저주 확률 - POINT_ATTBONUS_HUMAN, // 43 ΰ - POINT_ATTBONUS_ANIMAL, // 44 % - POINT_ATTBONUS_ORC, // 45 Ϳ % - POINT_ATTBONUS_MILGYO, // 46 б % - POINT_ATTBONUS_UNDEAD, // 47 ü % - POINT_ATTBONUS_DEVIL, // 48 (Ǹ) % - POINT_ATTBONUS_INSECT, // 49 - POINT_ATTBONUS_FIRE, // 50 ȭ - POINT_ATTBONUS_ICE, // 51 - POINT_ATTBONUS_DESERT, // 52 縷 + POINT_ATTBONUS_HUMAN, // 43 인간에게 강함 + POINT_ATTBONUS_ANIMAL, // 44 동물에게 데미지 % 증가 + POINT_ATTBONUS_ORC, // 45 웅귀에게 데미지 % 증가 + POINT_ATTBONUS_MILGYO, // 46 밀교에게 데미지 % 증가 + POINT_ATTBONUS_UNDEAD, // 47 시체에게 데미지 % 증가 + POINT_ATTBONUS_DEVIL, // 48 마귀(악마)에게 데미지 % 증가 + POINT_ATTBONUS_INSECT, // 49 벌레족 + POINT_ATTBONUS_FIRE, // 50 화염족 + POINT_ATTBONUS_ICE, // 51 빙설족 + POINT_ATTBONUS_DESERT, // 52 사막족 POINT_ATTBONUS_UNUSED0, // 53 UNUSED0 POINT_ATTBONUS_UNUSED1, // 54 UNUSED1 POINT_ATTBONUS_UNUSED2, // 55 UNUSED2 @@ -1580,42 +1580,42 @@ enum EPointTypes POINT_ATTBONUS_UNUSED8, // 61 UNUSED8 POINT_ATTBONUS_UNUSED9, // 62 UNUSED9 - POINT_STEAL_HP, // 63 - POINT_STEAL_SP, // 64 ŷ + POINT_STEAL_HP, // 63 생명력 흡수 + POINT_STEAL_SP, // 64 정신력 흡수 - POINT_MANA_BURN_PCT, // 65 + POINT_MANA_BURN_PCT, // 65 마나 번 - /// ؽ ʽ /// + /// 피해시 보너스 /// - POINT_DAMAGE_SP_RECOVER, // 66 ݴ ŷ ȸ Ȯ + POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률 - POINT_BLOCK, // 67 - POINT_DODGE, // 68 ȸ + POINT_BLOCK, // 67 블럭율 + POINT_DODGE, // 68 회피율 POINT_RESIST_SWORD, // 69 POINT_RESIST_TWOHAND, // 70 POINT_RESIST_DAGGER, // 71 POINT_RESIST_BELL, // 72 POINT_RESIST_FAN, // 73 - POINT_RESIST_BOW, // 74 ȭ : - POINT_RESIST_FIRE, // 75 ȭ : ȭݿ - POINT_RESIST_ELEC, // 76 : ݿ - POINT_RESIST_MAGIC, // 77 : - POINT_RESIST_WIND, // 78 ٶ : ٶݿ + POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소 + POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소 + POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소 + POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소 + POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소 - POINT_REFLECT_MELEE, // 79 ݻ + POINT_REFLECT_MELEE, // 79 공격 반사 - /// Ư ؽ /// - POINT_REFLECT_CURSE, // 80 ݻ - POINT_POISON_REDUCE, // 81 + /// 특수 피해시 /// + POINT_REFLECT_CURSE, // 80 저주 반사 + POINT_POISON_REDUCE, // 81 독데미지 감소 - /// Ҹ /// - POINT_KILL_SP_RECOVER, // 82 Ҹ MP ȸ + /// 적 소멸시 /// + POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복 POINT_EXP_DOUBLE_BONUS, // 83 POINT_GOLD_DOUBLE_BONUS, // 84 POINT_ITEM_DROP_BONUS, // 85 - /// ȸ /// + /// 회복 관련 /// POINT_POTION_BONUS, // 86 POINT_KILL_HP_RECOVER, // 87 @@ -1640,32 +1640,32 @@ enum EPointTypes POINT_STAT_RESET_COUNT = 112, POINT_HORSE_SKILL = 113, - POINT_MALL_ATTBONUS, // 114 ݷ +x% - POINT_MALL_DEFBONUS, // 115 +x% - POINT_MALL_EXPBONUS, // 116 ġ +x% - POINT_MALL_ITEMBONUS, // 117 x/10 - POINT_MALL_GOLDBONUS, // 118 x/10 - POINT_MAX_HP_PCT, // 119 ִ +x% - POINT_MAX_SP_PCT, // 120 ִŷ +x% + POINT_MALL_ATTBONUS, // 114 공격력 +x% + POINT_MALL_DEFBONUS, // 115 방어력 +x% + POINT_MALL_EXPBONUS, // 116 경험치 +x% + POINT_MALL_ITEMBONUS, // 117 아이템 드롭율 x/10배 + POINT_MALL_GOLDBONUS, // 118 돈 드롭율 x/10배 + POINT_MAX_HP_PCT, // 119 최대생명력 +x% + POINT_MAX_SP_PCT, // 120 최대정신력 +x% - POINT_SKILL_DAMAGE_BONUS, // 121 ų *(100+x)% - POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 Ÿ *(100+x)% + POINT_SKILL_DAMAGE_BONUS, // 121 스킬 데미지 *(100+x)% + POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 평타 데미지 *(100+x)% - POINT_SKILL_DEFEND_BONUS, // 123 ų - POINT_NORMAL_HIT_DEFEND_BONUS, // 124 Ÿ + POINT_SKILL_DEFEND_BONUS, // 123 스킬 방어 데미지 + POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지 POINT_PC_BANG_EXP_BONUS, // 125 - POINT_PC_BANG_DROP_BONUS, // 126 PC ӷ ʽ + POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스 - POINT_ENERGY = 128, // 128 + POINT_ENERGY = 128, // 128 기력 - // ui . - // ̷ ϰ ʾ, - // uiTaskBar affect , - // Ŭ󸮾Ʈ blend_affect ʾ, - // ӽ÷ ̷ д. - POINT_ENERGY_END_TIME = 129, // 129 ð + // 기력 ui 용. + // 이렇게 하고 싶지 않았지만, + // uiTaskBar에서는 affect에 접근할 수 없고, + // 더구나 클라리언트에서는 blend_affect는 관리하지 않아, + // 임시로 이렇게 둔다. + POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간 - // Ŭ̾Ʈ Ʈ + // 클라이언트 포인트 POINT_MIN_WEP = 200, POINT_MAX_WEP, POINT_MIN_MAGIC_WEP, @@ -1673,7 +1673,7 @@ enum EPointTypes POINT_HIT_RATE, - //POINT_MAX_NUM = 255,=>stdafx.h / + //POINT_MAX_NUM = 255,=>stdafx.h 로/ }; typedef struct packet_points @@ -1689,8 +1689,8 @@ typedef struct packet_point_change DWORD dwVID; BYTE Type; - long amount; // ٲ - long value; // + long amount; // 바뀐 값 + long value; // 현재 값 } TPacketGCPointChange; typedef struct packet_motion @@ -1728,7 +1728,7 @@ typedef struct packet_set_item BYTE pos; DWORD vnum; BYTE count; - DWORD flags; // ÷ ߰ + DWORD flags; // 플래그 추가 long alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM]; } TPacketGCItemSet; @@ -1755,8 +1755,8 @@ typedef struct packet_set_item2 TItemPos Cell; DWORD vnum; BYTE count; - DWORD flags; // ÷ ߰ - DWORD anti_flags; // ÷ ߰ + DWORD flags; // 플래그 추가 + DWORD anti_flags; // 플래그 추가 bool highlight; long alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM]; @@ -1837,7 +1837,7 @@ typedef struct packet_shop_start struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM]; } TPacketGCShopStart; -typedef struct packet_shop_start_ex // TSubPacketShopTab* shop_tabs . +typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴. { typedef struct sub_packet_shop_tab { @@ -1980,12 +1980,12 @@ typedef struct packet_move enum { QUEST_SEND_IS_BEGIN = 1 << 0, - QUEST_SEND_TITLE = 1 << 1, // 28 - QUEST_SEND_CLOCK_NAME = 1 << 2, // 16 + QUEST_SEND_TITLE = 1 << 1, // 28자 까지 + QUEST_SEND_CLOCK_NAME = 1 << 2, // 16자 까지 QUEST_SEND_CLOCK_VALUE = 1 << 3, - QUEST_SEND_COUNTER_NAME = 1 << 4, // 16 + QUEST_SEND_COUNTER_NAME = 1 << 4, // 16자 까지 QUEST_SEND_COUNTER_VALUE = 1 << 5, - QUEST_SEND_ICON_FILE = 1 << 6, // 24 + QUEST_SEND_ICON_FILE = 1 << 6, // 24자 까지 }; typedef struct packet_quest_info @@ -2008,8 +2008,8 @@ typedef struct packet_attack { BYTE header; DWORD dwVID; - DWORD dwVictimVID; // VID - BYTE bType; // + DWORD dwVictimVID; // 적 VID + BYTE bType; // 공격 유형 } TPacketGCAttack; typedef struct packet_c2c @@ -2079,7 +2079,7 @@ enum EPVPModes typedef struct packet_duel_start { BYTE header ; - WORD wSize ; // DWORD ? = (wSize - sizeof(TPacketGCPVPList)) / 4 + WORD wSize ; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4 } TPacketGCDuelStart ; typedef struct packet_pvp @@ -2235,7 +2235,7 @@ enum typedef struct packet_guild_sub_grade { - char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 , ̸ + char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름 BYTE auth_flag; } TPacketGCGuildSubGrade; @@ -2276,7 +2276,7 @@ enum EGuildWarState GUILD_WAR_ON_WAR, GUILD_WAR_END, - GUILD_WAR_DURATION = 2*60*60, // 2ð + GUILD_WAR_DURATION = 2*60*60, // 2시간 }; typedef struct packet_guild_war @@ -2352,8 +2352,8 @@ typedef struct SRefineTable DWORD src_vnum; DWORD result_vnum; BYTE material_count; - int cost; // ҿ - int prob; // Ȯ + int cost; // 소요 비용 + int prob; // 확률 TMaterial materials[REFINE_MATERIAL_MAX_NUM]; } TRefineTable; @@ -2388,17 +2388,17 @@ enum SPECIAL_EFFECT SE_SUCCESS, SE_FAIL, SE_FR_SUCCESS, - SE_LEVELUP_ON_14_FOR_GERMANY, // 14϶ ( ) - SE_LEVELUP_UNDER_15_FOR_GERMANY,// 15϶ ( ) + SE_LEVELUP_ON_14_FOR_GERMANY, //레벨업 14일때 ( 독일전용 ) + SE_LEVELUP_UNDER_15_FOR_GERMANY,//레벨업 15일때 ( 독일전용 ) SE_PERCENT_DAMAGE1, SE_PERCENT_DAMAGE2, SE_PERCENT_DAMAGE3, SE_AUTO_HPUP, SE_AUTO_SPUP, - SE_EQUIP_RAMADAN_RING, // ʽ´ ϴ ߵϴ Ʈ - SE_EQUIP_HALLOWEEN_CANDY, // ҷ (-_-;) ߵϴ Ʈ - SE_EQUIP_HAPPINESS_RING, // ũ ູ ϴ ߵϴ Ʈ - SE_EQUIP_LOVE_PENDANT, // ߷Ÿ ҴƮ(71145) Ʈ (ߵƮ, Ʈ ƴ) + SE_EQUIP_RAMADAN_RING, // 초승달의 반지를 착용하는 순간에 발동하는 이펙트 + SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트 + SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지를 착용하는 순간에 발동하는 이펙트 + SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님) }; typedef struct SPacketGCSpecialEffect @@ -2701,7 +2701,7 @@ typedef struct packet_hs_check_req AHNHS_TRANS_BUFFER Req; } TPacketHSCheck; -//NOTE : recv/send , bPacketData 븸 ٲ. +//NOTE : recv/send에 공통으로 생김, bPacketData의 내용만 바뀐다. typedef struct packet_xtrap_verify { BYTE bHeader; @@ -2736,7 +2736,7 @@ struct TPacketKeyAgreementCompleted #endif // _IMPROVED_PACKET_ENCRYPTION_ #ifdef __AUCTION__ -// Argument 뵵 cmd ٸ. +// Argument의 용도는 cmd에 따라 다르다. typedef struct SPacketCGAuctionCmd { BYTE bHeader; @@ -2762,7 +2762,7 @@ typedef struct SPacketGCSpecificEffect char effect_file[128]; } TPacketGCSpecificEffect; -// ȥ +// 용혼석 enum EDragonSoulRefineWindowRefineType { DragonSoulRefineWindow_UPGRADE, diff --git a/src/UserInterface/PythonApplication.cpp b/src/UserInterface/PythonApplication.cpp index 42a2712..7700466 100644 --- a/src/UserInterface/PythonApplication.cpp +++ b/src/UserInterface/PythonApplication.cpp @@ -328,7 +328,7 @@ void CPythonApplication::UpdateGame() DWORD t2=ELTimer_GetMSec(); - //!@# Alt+Tab SetTransfor ƨ ذ - [levites] + //!@# Alt+Tab Áß SetTransfor ¿¡¼­ ƨ±è Çö»ó ÇØ°áÀ» À§ÇØ - [levites] //if (m_isActivateWnd) { CScreen s; @@ -362,8 +362,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(); @@ -448,7 +448,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__ @@ -489,7 +489,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__ @@ -532,7 +532,7 @@ bool CPythonApplication::Process() } #endif - //Updateϴµ ɸð.delta + //UpdateÇϴµ¥ °É¸°½Ã°£.delta°ª m_dwCurUpdateTime = ELTimer_GetMSec() - updatestart; DWORD dwCurrentTime = ELTimer_GetMSec(); @@ -548,7 +548,7 @@ bool CPythonApplication::Process() if ( dt >= 500 ) { s_uiNextFrameTime += nAdjustTime; - printf("FrameSkip %d\n",nAdjustTime); + printf("FrameSkip º¸Á¤ %d\n",nAdjustTime); CTimer::Instance().Adjust(nAdjustTime); } @@ -562,15 +562,15 @@ bool CPythonApplication::Process() //{ // int dt = dwCurrentTime - s_uiNextFrameTime; - // //ʹ ʾ ´. - // //׸ m_dwCurUpdateTime deltaε delta absolute time̶ ϸ ¼ڴ°? + // //³Ê¹« ´Ê¾úÀ» °æ¿ì µû¶óÀâ´Â´Ù. + // //±×¸®°í m_dwCurUpdateTime´Â deltaÀε¥ delta¶û absolute timeÀ̶û ºñ±³ÇÏ¸é ¾î¼Àڴ°Ü? // //if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime) - // //ڵ ϸ 0.5 ̳ · update ӵǸ rendering frame skip߻ + // //±âÁ¸ÄÚµå´ë·Î Çϸé 0.5ÃÊ ÀÌÇÏ Â÷À̳­ »óÅ·Πupdate°¡ Áö¼ÓµÇ¸é °è¼Ó rendering frame skip¹ß»ý // if (dt >= 500 || m_dwCurUpdateTime > s_uiNextFrameTime) // { // s_uiNextFrameTime += dt / uiFrameTime * uiFrameTime; - // printf("FrameSkip %d\n", dt / uiFrameTime * uiFrameTime); + // printf("FrameSkip º¸Á¤ %d\n", dt / uiFrameTime * uiFrameTime); // CTimer::Instance().Adjust((dt / uiFrameTime) * uiFrameTime); // s_bFrameSkip = true; // } @@ -598,13 +598,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"); } @@ -620,7 +620,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; @@ -781,7 +781,7 @@ bool CPythonApplication::Process() s_fBufRenderTime = (s_fBufRenderTime * (100.0f - fRatio) + fCurRenderTime * fRatio) / 100.0f; } - // Ѱġ Ѵ + // ÇѰèÄ¡¸¦ Á¤ÇÑ´Ù if (s_fBufRenderTime > 100.0f) s_fBufRenderTime = 100.0f; @@ -801,8 +801,8 @@ bool CPythonApplication::Process() dwBufRenderTime=8; } - // ӵ ߾ִʿ ϴ - // Ʒ ѹ ϸ ? + // ÀÏÁ¤ ÇÁ·¹ÀÓ ¼Óµµ¿¡ ¸ÂÃß¾îÁÖ´ÂÂÊ¿¡ ´«¿¡ ÆíÇÏ´Ù + // ¾Æ·¡¿¡¼­ Çѹø ÇÏ¸é ‰ç´? //if (m_dwCurRenderTime 0 && !bCurrentLateUpdate ) { - s_uiLoad -= rest; // ð ε忡 .. + s_uiLoad -= rest; // ½® ½Ã°£Àº ·Îµå¿¡¼­ »«´Ù.. Sleep(rest); } @@ -879,12 +879,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; @@ -1131,9 +1131,9 @@ bool CPythonApplication::Create(PyObject * poSelf, const char * c_szName, int wi m_pyNetworkStream.Discord_Start(); #endif - // Ǯũ ̰ - // Ʈ IME ϰų ̸ - // Ǯũ 带 Ѵ + // Ç®½ºÅ©¸° ¸ðµåÀ̰í + // µðÆúÆ® IME ¸¦ »ç¿ëÇϰųª À¯·´ ¹öÀüÀ̸é + // À©µµ¿ì Ç®½ºÅ©¸° ¸ðµå¸¦ »ç¿ëÇÑ´Ù if (!m_pySystem.IsWindowed() && (m_pySystem.IsUseDefaultIME() || LocaleService_IsEUROPE())) { m_isWindowed = false; @@ -1188,7 +1188,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)); } } @@ -1264,14 +1264,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 ); @@ -1318,8 +1318,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; @@ -1440,7 +1440,7 @@ void CPythonApplication::Destroy() m_grpDevice.Destroy(); - // FIXME : - [levites] + // FIXME : ¸¸µé¾îÁ® ÀÖÁö ¾ÊÀ½ - [levites] //CSpeedTreeForestDirectX8::Instance().Clear(); CAttributeInstance::DestroySystem(); diff --git a/src/UserInterface/PythonApplication.h b/src/UserInterface/PythonApplication.h index ae55e5d..5d9aba9 100644 --- a/src/UserInterface/PythonApplication.h +++ b/src/UserInterface/PythonApplication.h @@ -80,7 +80,7 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public CURSOR_SHAPE_COUNT, - // ̹ ȯ ӽ enumerate + // 안정적인 네이밍 변환을 위한 임시 enumerate NORMAL = CURSOR_SHAPE_NORMAL, ATTACK = CURSOR_SHAPE_ATTACK, TARGET = CURSOR_SHAPE_TARGET, @@ -254,16 +254,16 @@ class CPythonApplication : public CMSApplication, public CInputKeyboard, public protected: IGraphBuilder* m_pGraphBuilder; // Graph Builder - IBaseFilter* m_pFilterSG; // Sample Grabber - ISampleGrabber* m_pSampleGrabber; // ̹ ĸó ׷ + IBaseFilter* m_pFilterSG; // Sample Grabber 필터 + ISampleGrabber* m_pSampleGrabber; // 영상 이미지 캡처를 위한 샘플 그래버 IMediaControl* m_pMediaCtrl; // Media Control IMediaEventEx* m_pMediaEvent; // Media Event IVideoWindow* m_pVideoWnd; // Video Window IBasicVideo* m_pBasicVideo; - uint8_t* m_pCaptureBuffer; // ̹ ĸó - LONG m_lBufferSize; // Video ũ - CGraphicImageTexture* m_pLogoTex; // ؽ - bool m_bLogoError; // б + uint8_t* m_pCaptureBuffer; // 영상 이미지를 캡처한 버퍼 + LONG m_lBufferSize; // Video 버퍼 크기 변수 + CGraphicImageTexture* m_pLogoTex; // 출력할 텍스쳐 + bool m_bLogoError; // 영상 읽기 상태 bool m_bLogoPlay; int m_nLeft, m_nRight, m_nTop, m_nBottom; diff --git a/src/UserInterface/PythonApplicationCamera.cpp b/src/UserInterface/PythonApplicationCamera.cpp index cd201d4..8668345 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 0b7e2f6..c103c15 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 7919e3b..88e5d5c 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 d3d4f1e..393bb58 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() uint8_t* 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); uint8_t* 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); } - // غ?ۿ ؽķ ؿ´. + // Áغñ‰çÀ¸¸?¹öÆÛ¿¡¼­ ÅØ½ºÃÄ·Î º¹»çÇØ¿Â´Ù. LPDIRECT3DTEXTURE8 tex = m_pLogoTex->GetD3DTexture(); D3DLOCKED_RECT rt; ZeroMemory(&rt, sizeof(rt)); @@ -207,7 +207,7 @@ void CPythonApplication::OnLogoRender() void CPythonApplication::OnLogoClose() { - // NOTE: LOGO ҷ 쿡 OnLogoClose ũð + // NOTE: LOGO µ¿¿µ»óÀÌ ÇÑ ¹øµµ ¾È ºÒ·ÈÀ» °æ¿ì¿¡´Â OnLogoClose °úÁ¤¿¡¼­ Å©·¡½Ã°¡ ³ª´Â ¹®Á¦ ¼öÁ¤ if (false == bInitializedLogo) return; diff --git a/src/UserInterface/PythonApplicationModule.cpp b/src/UserInterface/PythonApplicationModule.cpp index 829686d..cbb87c5 100644 --- a/src/UserInterface/PythonApplicationModule.cpp +++ b/src/UserInterface/PythonApplicationModule.cpp @@ -1343,7 +1343,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 d6ecf8d..746654c 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 831e9f8..38c7af3 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 ae5dcef..e375f10 100644 --- a/src/UserInterface/PythonBackgroundModule.cpp +++ b/src/UserInterface/PythonBackgroundModule.cpp @@ -95,7 +95,7 @@ PyObject * backgroundRegisterEnvironmentData(PyObject * poSelf, PyObject * poArg TraceError("background.RegisterEnvironmentData(iIndex=%d, szEnvironmentFileName=%s)", iIndex, pszEnvironmentFileName); // TODO: - // Ʈ ȯ ۾ + // 디폴트 환경 설정 작업을 해주자 } return Py_BuildNone(); @@ -248,7 +248,7 @@ PyObject * backgroundRenderCharacterShadowToTexture(PyObject * poSelf, PyObject PyObject * backgroundRenderDungeon(PyObject * poSelf, PyObject * poArgs) { - assert(!"background.RenderDungeon() - ʴ ԼԴϴ - [levites]"); + assert(!"background.RenderDungeon() - 사용하지 않는 함수입니다 - [levites]"); return Py_BuildNone(); } diff --git a/src/UserInterface/PythonCharacterManager.cpp b/src/UserInterface/PythonCharacterManager.cpp index ee4f0f1..b68f648 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 7d440fd..aca294d 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 bbd95c5..ad76433 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 6414929..faa2e97 100644 --- a/src/UserInterface/PythonChat.cpp +++ b/src/UserInterface/PythonChat.cpp @@ -474,7 +474,7 @@ void CPythonChat::AppendChat(int iType, const char * c_szChat) TChatSet * pChatSet = &(itor->second); //pChatLine->SetColor(itor->first, GetChatColor(iType)); - // Edit Mode ߱ ߰ + // Edit Mode 를 억지로 끼워 맞추기 위해 추가 if (BOARD_STATE_EDIT == pChatSet->m_iBoardState) { ArrangeShowingChat(itor->first); @@ -512,12 +512,12 @@ DWORD CPythonChat::GetChatColor(int iType) void CPythonChat::IgnoreCharacter(const char * c_szName) { TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName); - // NOTE : ̹ ̶.. + // NOTE : 이미 차단 중이라면.. if (m_IgnoreCharacterSet.end() != itor) { m_IgnoreCharacterSet.erase(itor); } - // NOTE : ijͶ.. + // NOTE : 차단이 되지 않은 캐릭터라면.. else { m_IgnoreCharacterSet.insert(c_szName); diff --git a/src/UserInterface/PythonChatModule.cpp b/src/UserInterface/PythonChatModule.cpp index d658843..5c275fe 100644 --- a/src/UserInterface/PythonChatModule.cpp +++ b/src/UserInterface/PythonChatModule.cpp @@ -436,7 +436,7 @@ PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs) } if (isAttr) - //"item:ȣ:÷:0:1:2" + //"item:번호:플래그:소켓0:소켓1:소켓2" snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); else snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); diff --git a/src/UserInterface/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp index bbb2d8e..73b0025 100644 --- a/src/UserInterface/PythonEventManager.cpp +++ b/src/UserInterface/PythonEventManager.cpp @@ -145,7 +145,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript if (!pEventSet) return -1; - // SCRIPT_PARSING_FAILURE_CLEAR_BUG ũƮ Ľ н __ClearEventSetp ߻ + // SCRIPT_PARSING_FAILURE_CLEAR_BUG 스크립트 파싱 실패시 __ClearEventSetp 에서 에러 발생 pEventSet->pCurrentTextLine = NULL; // END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG @@ -159,7 +159,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript pEventSet->poEventHandler = NULL; __InitEventSet(*pEventSet); - // NOTE : ܼ ũƮ ̺Ʈ Ŀǵ ٽ . + // NOTE : 만약 단순한 스크립트 이벤트 실행 커맨드라면 다시 만든다. script::TCmd ScriptCommand; int pEventPosition; int iEventType; @@ -468,7 +468,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) case EVENT_TYPE_WAIT: { - //ijƽ  /EVENT_TYPE_WAIT ؼ ׽Ʈ ʿ. + //캐틱터 만들기 제국 설명등에서 설명 밑으로 쳐지는 버그 수정/EVENT_TYPE_WAIT 관련해서 테스트 필요. pEventSet->iyLocal = 0; pEventSet->isLock = true; break; @@ -584,8 +584,8 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) int idx = atoi(GetArgument("idx", ScriptCommand.argList)); const char * name = GetArgument("name", ScriptCommand.argList); - // Ʈ UI Ǹ ذ ǹǷ ϴ ȥ by chrislee - if (!strcmp(name, " ȥ?....")) { + // 퀘스트 UI 리뉴얼이 되면 해결 되므로 일단 용혼석만 땜빵 by chrislee + if (!strcmp(name, "조각난 용혼석?....")) { PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", "")); } else { @@ -1146,7 +1146,7 @@ void CPythonEventManager::SetLeftTimeString(const char * c_szString) } CPythonEventManager::CPythonEventManager() - : m_poInterface(0), m_strLeftTimeString(" ð : %d") + : m_poInterface(0), m_strLeftTimeString("남은 시간 : %d초") { EventTypeMap["LETTER"]=EVENT_TYPE_LETTER; EventTypeMap["COLOR"]=EVENT_TYPE_COLOR; diff --git a/src/UserInterface/PythonExchange.cpp b/src/UserInterface/PythonExchange.cpp index 4d21dcc..40fd349 100644 --- a/src/UserInterface/PythonExchange.cpp +++ b/src/UserInterface/PythonExchange.cpp @@ -239,9 +239,9 @@ CPythonExchange::CPythonExchange() Clear(); m_isTrading = false; m_elk_mode = false; - // Clear Ȱܳ ȵ. - // trade_start Ŷ Clear ϴµ - // m_elk_mode Ŭ Ǽ ȵ.; + // Clear로 옴겨놓으면 안됨. + // trade_start 페킷이 오면 Clear를 실행하는데 + // m_elk_mode는 클리어 되선 안됨.; } CPythonExchange::~CPythonExchange() { diff --git a/src/UserInterface/PythonExchange.h b/src/UserInterface/PythonExchange.h index 3e34ba3..832ec01 100644 --- a/src/UserInterface/PythonExchange.h +++ b/src/UserInterface/PythonExchange.h @@ -3,7 +3,7 @@ #include "Packet.h" /* - * ȯ â + * 교환 창 관련 */ class CPythonExchange : public CSingleton { @@ -86,7 +86,7 @@ class CPythonExchange : public CSingleton protected: bool m_isTrading; - bool m_elk_mode; // ũ Ŭؼ ȯ . + bool m_elk_mode; // 엘크를 클릭해서 교환했을때를 위한 변종임. TExchangeData m_self; TExchangeData m_victim; }; diff --git a/src/UserInterface/PythonGuild.cpp b/src/UserInterface/PythonGuild.cpp index 96cb603..bf12ea0 100644 --- a/src/UserInterface/PythonGuild.cpp +++ b/src/UserInterface/PythonGuild.cpp @@ -515,7 +515,7 @@ PyObject * guildGetDragonPowerPoint(PyObject * poSelf, PyObject * poArgs) PyObject * guildGetGuildSkillLevel(PyObject * poSelf, PyObject * poArgs) { - assert(FALSE && !"guildGetGuildSkillLevel - ʴ ԼԴϴ."); + assert(FALSE && !"guildGetGuildSkillLevel - 사용하지 않는 함수입니다."); int iSkillIndex; if (!PyTuple_GetInteger(poArgs, 0, &iSkillIndex)) diff --git a/src/UserInterface/PythonItem.cpp b/src/UserInterface/PythonItem.cpp index 9248523..a0a0f7c 100644 --- a/src/UserInterface/PythonItem.cpp +++ b/src/UserInterface/PythonItem.cpp @@ -371,7 +371,7 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x, if (/*f[1].first-f[0].first < (f[2].first-f[0].first)*0.30f*/ bStabGround) { - // + // 뾰족 if (f[2].second == 0) // axis x { rEnd.y = 90.0f + frandom(-15.0f, 15.0f); @@ -393,8 +393,8 @@ void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, float x, } else { - // - // 븻 + // 넓적 + // 땅의 노말의 영향을 받을 것 if (f[0].second == 0) { // y,z = by normal diff --git a/src/UserInterface/PythonItem.h b/src/UserInterface/PythonItem.h index 3b6b4b4..9824758 100644 --- a/src/UserInterface/PythonItem.h +++ b/src/UserInterface/PythonItem.h @@ -1,8 +1,8 @@ #pragma once -// Note : ȭ Item Update Rendering å -// Ÿ Icon Image Instance Ŵ ұ ְ -// ⵵ ϴ - 2003. 01. 13. [levites] +// Note : 화면상에 떨어진 Item의 Update와 Rendering을 책임지는 한편 +// 각 아이템의 데이타와 Icon Image Instance의 매니져 역할까지 주관 +// 조금 난잡해진거 같기도 하다 - 2003. 01. 13. [levites] #include "../EterGrnLib/ThingInstance.h" diff --git a/src/UserInterface/PythonItemModule.cpp b/src/UserInterface/PythonItemModule.cpp index 705b19e..6ea2377 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 df05623..9ca2c26 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.SaveTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); STATEMANAGER.SaveTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); - // ij ũ + // 캐릭터 마크 CInstanceBase * pkInst = CPythonCharacterManager::Instance().GetMainInstancePtr(); if (pkInst) @@ -470,7 +470,7 @@ void CPythonMiniMap::Render(float fScreenX, float fScreenY) CCamera* pkCmrCur=CCameraManager::Instance().GetCurrentCamera(); - // ī޶ + // 카메라 방향 if (pkCmrCur) { m_MiniMapCameraraphicImageInstance.SetRotation(pkCmrCur->GetRoll()); @@ -530,7 +530,7 @@ bool CPythonMiniMap::Create() const std::string strPlayerMark = strImageRoot + "minimap/playermark.sub"; const std::string strWhiteMark = strImageRoot + "minimap/whitemark.sub"; - // ̴ϸ Ŀ + // 미니맵 커버 CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageFilter.c_str()); m_MiniMapFilterGraphicImageInstance.SetImagePointer(pImage); pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer(strImageCamera.c_str()); @@ -540,7 +540,7 @@ bool CPythonMiniMap::Create() m_matMiniMapCover._22 = 1.0f / ((float)m_MiniMapFilterGraphicImageInstance.GetHeight()); m_matMiniMapCover._33 = 0.0f; - // ij ũ + // 캐릭터 마크 CGraphicSubImage * pSubImage = (CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer(strPlayerMark.c_str()); m_PlayerMark.SetImagePointer(pSubImage); @@ -569,7 +569,7 @@ bool CPythonMiniMap::Create() m_GuildAreaFlagImageInstance.SetImagePointer((CGraphicSubImage *) CResourceManager::Instance().GetResourcePointer("d:/ymir work/ui/minimap/GuildArea01.sub")); - // ׷ + // 그려질 폴리곤 세팅 #pragma pack(push) #pragma pack(1) LPMINIMAPVERTEX lpMiniMapVertex; diff --git a/src/UserInterface/PythonMiniMap.h b/src/UserInterface/PythonMiniMap.h index dbbe48a..a1c922d 100644 --- a/src/UserInterface/PythonMiniMap.h +++ b/src/UserInterface/PythonMiniMap.h @@ -148,7 +148,7 @@ class CPythonMiniMap : public CScreen, public CSingleton DWORD dwDstTime; }; - // ij Ʈ + // 캐릭터 리스트 typedef struct { float m_fX; @@ -180,14 +180,14 @@ class CPythonMiniMap : public CScreen, public CSingleton float m_fMiniMapRadius; - // ׸... + // 맵 그림... LPDIRECT3DTEXTURE8 m_lpMiniMapTexture[AROUND_AREA_NUM]; - // ̴ϸ Ŀ + // 미니맵 커버 CGraphicImageInstance m_MiniMapFilterGraphicImageInstance; CGraphicExpandedImageInstance m_MiniMapCameraraphicImageInstance; - // ij ũ + // 캐릭터 마크 CGraphicExpandedImageInstance m_PlayerMark; CGraphicImageInstance m_WhiteMark; diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp index 4dd6b9f..424879a 100644 --- a/src/UserInterface/PythonNetworkStream.cpp +++ b/src/UserInterface/PythonNetworkStream.cpp @@ -243,7 +243,7 @@ void CPythonNetworkStream::AbsoluteExitApplication() bool CPythonNetworkStream::__IsNotPing() { - // ȿö üũ̳ Ȯ ߾ Ѵ. + // 원래는 핑이 안올때 체크이나 서버랑 정확히 맞추어야 한다. return false; } @@ -255,7 +255,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; @@ -325,13 +325,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); @@ -597,19 +597,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(); #if defined(ENABLE_DISCORD_RPC) Discord_Update(false); @@ -622,18 +622,18 @@ bool CPythonNetworkStream::RecvPhasePacket() // END_OF_MARK_BUG_FIX break; - case PHASE_LOADING: // ε ȭ + case PHASE_LOADING: // 선택 후 로딩 화면 SetLoadingPhase(); break; - case PHASE_GAME: // ȭ + case PHASE_GAME: // 게임 화면 SetGamePhase(); #if defined(ENABLE_DISCORD_RPC) Discord_Update(true); #endif break; - case PHASE_DEAD: // ׾ .. ( ȿ ִ ..) + case PHASE_DEAD: // 죽었을 때.. (게임 안에 있는 것일 수도..) break; } @@ -668,7 +668,7 @@ bool CPythonNetworkStream::RecvDefaultPacket(int header) if (!header) return true; - TraceError("ó Ŷ %d, state %s\n", header, m_strPhase.c_str()); + TraceError("처리되지 않은 패킷 헤더 %d, state %s\n", header, m_strPhase.c_str()); ClearRecvBuffer(); return true; } diff --git a/src/UserInterface/PythonNetworkStream.h b/src/UserInterface/PythonNetworkStream.h index e3d5481..e0b88e5 100644 --- a/src/UserInterface/PythonNetworkStream.h +++ b/src/UserInterface/PythonNetworkStream.h @@ -159,7 +159,7 @@ class CPythonNetworkStream : public CNetworkStream, public CSingletonpush_back(strLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(strLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < strLine.length()); @@ -131,7 +131,7 @@ bool SplitToken(const char * c_szLine, CTokenVector * pstTokenVector, const char void CPythonNetworkStream::ServerCommand(char * c_szCommand) { - // #0000811: [M2EU] ܼâ + // #0000811: [M2EU] 콘솔창 기능 차단 if (strcmpi(c_szCommand, "ConsoleEnable") == 0) return; @@ -246,7 +246,7 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand) else if ("r_list" == TokenVector[1]) { // result list (/cube r_list npcVNUM resultCount resultText) - // 20383 4 72723,1/72725,1/72730.1/50001,5 <- ̷ "/" ڷ е Ʈ + // 20383 4 72723,1/72725,1/72730.1/50001,5 <- 이런식으로 "/" 문자로 구분된 리스트를 줌 if (5 != TokenVector.size()) { TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, 5); @@ -260,9 +260,9 @@ void CPythonNetworkStream::ServerCommand(char * c_szCommand) else if ("m_info" == TokenVector[1]) { // material list (/cube m_info requestStartIndex resultCount MaterialText) - // ex) requestStartIndex: 0, resultCount : 5 - ش NPC ִ 0~4° شϴ ʿ MaterialText - // ó ټ "@" ڸ - // 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- ̷ Ŭ Ʈ + // ex) requestStartIndex: 0, resultCount : 5 - 해당 NPC가 만들수 있는 아이템 중 0~4번째에 해당하는 아이템을 만드는 데 필요한 모든 재료들이 MaterialText에 들어있음 + // 위 예시처럼 아이템이 다수인 경우 구분자 "@" 문자를 사용 + // 0 5 125,1|126,2|127,2|123,5&555,5&555,4/120000 <- 이런식으로 서버에서 클라로 리스트를 줌 if (5 != TokenVector.size()) { diff --git a/src/UserInterface/PythonNetworkStreamModule.cpp b/src/UserInterface/PythonNetworkStreamModule.cpp index 3421b2f..b11e8e1 100644 --- a/src/UserInterface/PythonNetworkStreamModule.cpp +++ b/src/UserInterface/PythonNetworkStreamModule.cpp @@ -1566,7 +1566,7 @@ PyObject* netSendRequestRefineInfoPacket(PyObject* poSelf, PyObject* poArgs) // CPythonNetworkStream& rns=CPythonNetworkStream::Instance(); // rns.SendRequestRefineInfoPacket(iSlotIndex); - assert(!"netSendRequestRefineInfoPacket - ̻ ʴ Լ Դϴ"); + assert(!"netSendRequestRefineInfoPacket - 더이상 사용하지 않는 함수 입니다"); return Py_BuildNone(); } diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp index 472788e..b88dc62 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: @@ -820,9 +820,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); @@ -870,7 +870,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()); @@ -985,11 +985,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; @@ -1000,11 +1000,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; @@ -1022,7 +1022,7 @@ bool CPythonNetworkStream::RecvPVPPacket() break; } - // NOTE : PVP ۽ TargetBoard Ʈ մϴ. + // NOTE : PVP 토글시 TargetBoard 를 업데이트 합니다. __RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc); __RefreshTargetBoardByVID(kPVPPacket.dwVIDDst); @@ -1085,7 +1085,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; @@ -1119,7 +1119,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; @@ -1148,7 +1148,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP return SendSequence(); } -// NOTE : SlotIndex ӽ +// NOTE : SlotIndex는 임시 bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID) { TPacketCGUseSkill UseSkillPacket; @@ -1290,9 +1290,9 @@ bool CPythonNetworkStream::RecvChatPacket() buf[uChatSize]='\0'; - // ƶ ó - // "̸: " Է ": ̸" ϱ (0x08) - // ƶ ȣ ó (1) : (2) ԷµǾ (2) : (1) ϰ + // 유럽 아랍 버전 처리 + // "이름: 내용" 입력을 "내용: 이름" 순서로 출력하기 위해 탭(0x08)을 넣음 + // 탭을 아랍어 기호로 처리해 (영어1) : (영어2) 로 입력되어도 (영어2) : (영어1) 로 출력하게 만든다 if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256) { char * p = strchr(buf, ':'); @@ -1318,11 +1318,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, ':'); @@ -1360,9 +1360,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: @@ -1492,7 +1492,7 @@ bool CPythonNetworkStream::RecvPointChange() CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr(); - // ڽ Point Ǿ .. + // 자신의 Point가 변경되었을 경우.. if (pInstance) if (PointChange.dwVID == pInstance->GetVirtualID()) { @@ -1595,7 +1595,7 @@ bool CPythonNetworkStream::RecvDeadPacket() CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (pkInstMain==pkChrInstSel) { - Tracenf("ΰ "); + Tracenf("주인공 사망"); if (false == pkInstMain->GetDuelMode()) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()")); @@ -2186,7 +2186,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket() return SendSequence(); } -// PointReset ӽ +// PointReset 개임시 bool CPythonNetworkStream::SendPointResetPacket() { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()")); @@ -2340,7 +2340,7 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd() bool CPythonNetworkStream::RecvSkillLevel() { - assert(!"CPythonNetworkStream::RecvSkillLevel - ʴ Լ"); + assert(!"CPythonNetworkStream::RecvSkillLevel - 사용하지 않는 함수"); TPacketGCSkillLevel packet; if (!Recv(sizeof(TPacketGCSkillLevel), &packet)) { @@ -2566,7 +2566,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket() __GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY); - Tracef("VID [%d] Ÿ ߰ \n",kPacket.dwShooterVID); + Tracef("VID [%d]가 타겟을 추가 설정\n",kPacket.dwShooterVID); CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance(); @@ -2811,7 +2811,7 @@ bool CPythonNetworkStream::RecvMessenger() case MESSENGER_SUBHEADER_GC_MOBILE: { - BYTE byState; // ȣ ÷ + BYTE byState; // 모바일 번호가 없어졌는지 플래그 BYTE byLength; if (!Recv(sizeof(byState), &byState)) return false; @@ -2982,7 +2982,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) @@ -3346,7 +3346,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(); @@ -4166,7 +4166,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 @@ -4307,7 +4307,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ Ǿϴ [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); +// _snprintf(szBuf, sizeof(szBuf), "타겟이 생성 되었습니다 [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName); //#endif @@ -4336,7 +4336,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "ij Ÿ Ǿϴ [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); +// _snprintf(szBuf, sizeof(szBuf), "캐릭터 타겟이 생성 되었습니다 [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID); //#endif @@ -4359,7 +4359,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ ġ Ǿϴ [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); +// _snprintf(szBuf, sizeof(szBuf), "타겟의 위치가 갱신 되었습니다 [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); //#endif @@ -4438,7 +4438,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 48ab65a..1cc8841 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGameActor.cpp @@ -62,8 +62,8 @@ void __SetWeaponPower(IAbstractPlayer& rkPlayer, DWORD dwWeaponID) rkPlayer.SetWeaponPower(minPower, maxPower, minMagicPower, maxMagicPower, addPower); } -//̺ ̸ "." ͵ -//Ŀ ʰ Ǹ Լ..(Բ !!; ) +//테이블에서 이름이 "." 인 것들 +//차후에 서버에서 보내주지 않게 되면 없어질 함수..(서버님께 꼭!!협박; ) bool IsInvisibleRace(WORD raceNum) { switch(raceNum) @@ -115,7 +115,7 @@ bool CPythonNetworkStream::RecvCharacterAppendPacket() kNetActorData.m_dwHair=0;/*chrAddPacket.awPart[CHR_EQUIPPART_HAIR]*/; kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/; - kNetActorData.m_dwLevel = 0; // ǥ + kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함 if(kNetActorData.m_bType != CActorInstance::TYPE_PC && kNetActorData.m_bType != CActorInstance::TYPE_NPC) @@ -173,7 +173,7 @@ bool CPythonNetworkStream::RecvCharacterAdditionalInfo() bool CPythonNetworkStream::RecvCharacterAppendPacketNew() { - TraceError("TPacketGCCharacterAdd2 ʴ ŶԴϴ."); + TraceError("TPacketGCCharacterAdd2는 쓰지 않는 패킷입니다."); TPacketGCCharacterAdd2 chrAddPacket; if (!Recv(sizeof(chrAddPacket), &chrAddPacket)) return false; @@ -260,10 +260,10 @@ bool CPythonNetworkStream::RecvCharacterUpdatePacketNew() void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData) { - // NOTE : ī޶ ذ ijͰ ÷ - // Ʈ ̸ ֵ سƾ մϴ. - // ,  ƴ ̹ ijͰ ߰ Ŀ մϴ. - // 嵥 ̵ε Move ϰ Append ϴ..? - [levites] + // NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기 + // 전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다. + // 단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다. + // 헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites] IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton(); if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID)) { @@ -276,7 +276,7 @@ void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNet CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f); CPythonCharacterManager::Instance().Update(); - // NOTE : Ÿ GOTO ̵ÿ ̸ ϵ ó + // NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리 { std::string strMapName = CPythonBackground::Instance().GetWarpMapName(); if (strMapName == "metin2_map_deviltower1") @@ -335,8 +335,8 @@ bool CPythonNetworkStream::RecvCharacterDeletePacket() m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID); - // ijͰ ݴϴ. - // Key Check ϱ⶧  ϴ. + // 캐릭터가 사라질때 개인 상점도 없애줍니다. + // Key Check 를 하기때문에 없어도 상관은 없습니다. PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_PrivateShop_Disappear", Py_BuildValue("(i)", chrDelPacket.dwVID) diff --git a/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp b/src/UserInterface/PythonNetworkStreamPhaseGameItem.cpp index 16d5dba..f1a430f 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; @@ -861,7 +861,7 @@ bool CPythonNetworkStream::RecvSpecialEffect() default: - TraceError("%d Ʈ ȣԴϴ.TPacketGCSpecialEffect",kSpecialEffect.type); + TraceError("%d 는 없는 스페셜 이펙트 번호입니다.TPacketGCSpecialEffect",kSpecialEffect.type); break; } diff --git a/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp b/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp index 6eeedc2..e28e835 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp @@ -220,7 +220,7 @@ bool CPythonNetworkStream::RecvKeyAgreementPacket() size_t agreedLength = Prepare(packetToSend.data, &dataLength); if (agreedLength == 0) { - // ʱȭ + // 초기화 실패 Disconnect(); return false; } @@ -228,7 +228,7 @@ bool CPythonNetworkStream::RecvKeyAgreementPacket() if (Activate(packet.wAgreedLength, packet.data, packet.wDataLength)) { - // Key agreement , + // Key agreement 성공, 응답 전송 packetToSend.bHeader = HEADER_CG_KEY_AGREEMENT; packetToSend.wAgreedLength = (WORD)agreedLength; packetToSend.wDataLength = (WORD)dataLength; @@ -242,7 +242,7 @@ bool CPythonNetworkStream::RecvKeyAgreementPacket() } else { - // Ű + // 키 협상 실패 Disconnect(); return false; } diff --git a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp index 50ae6b4..cb60288 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseLogin.cpp @@ -118,7 +118,7 @@ void CPythonNetworkStream::SetLoginPhase() else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str()); - // йȣ ޸𸮿 ִ ־, + // 비밀번호를 메모리에 계속 갖고 있는 문제가 있어서, 사용 즉시 날리는 것으로 변경 ClearLoginInfo(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkAccountConnector.ClearLoginInfo(); @@ -130,7 +130,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 e54e44b..63edfdf 100644 --- a/src/UserInterface/PythonNonPlayer.cpp +++ b/src/UserInterface/PythonNonPlayer.cpp @@ -84,7 +84,7 @@ bool CPythonNonPlayer::GetInstanceType(DWORD dwVnum, BYTE* pbType) { const TMobTable * p = GetTable(dwVnum); - // dwVnum ã ÷̾ ijͷ Ѵ. ڵ -_- [cronan] + // dwVnum를 찾을 수 없으면 플레이어 캐릭터로 간주 한다. 문제성 코드 -_- [cronan] if (!p) return false; diff --git a/src/UserInterface/PythonNonPlayer.h b/src/UserInterface/PythonNonPlayer.h index 7c3a9a6..cdba8f8 100644 --- a/src/UserInterface/PythonNonPlayer.h +++ b/src/UserInterface/PythonNonPlayer.h @@ -1,7 +1,7 @@ #pragma once /* - * NPC Ÿ Ѵ. + * NPC 데이터 프로토 타잎을 관리 한다. */ class CPythonNonPlayer : public CSingleton { diff --git a/src/UserInterface/PythonPackModule.cpp b/src/UserInterface/PythonPackModule.cpp index e3bad81..ad58d3d 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 edb0bad..3d32b33 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; @@ -982,7 +982,7 @@ float CPythonPlayer::GetSkillNextEfficientPercentage(DWORD dwSlotIndex) void CPythonPlayer::SetSkillLevel(DWORD dwSlotIndex, DWORD dwSkillLevel) { - assert(!"CPythonPlayer::SetSkillLevel - ʴ Լ"); + assert(!"CPythonPlayer::SetSkillLevel - 사용하지 않는 함수"); if (dwSlotIndex >= SKILL_MAX_NUM) return; @@ -1195,7 +1195,7 @@ void CPythonPlayer::SendClickItemPacket(DWORD dwIID) void CPythonPlayer::__SendClickActorPacket(CInstanceBase& rkInstVictim) { - // Ÿ ij Ϳ ó + // 말을 타고 광산을 캐는 것에 대한 예외 처리 CInstanceBase* pkInstMain=NEW_GetMainActorPtr(); if (pkInstMain) if (pkInstMain->IsHoldingPickAxe()) @@ -1581,7 +1581,7 @@ void CPythonPlayer::NEW_ClearSkillData(bool bAll) for (int j = 0; j < SKILL_MAX_NUM; ++j) { - // 2004.09.30.myevan.ųŽ ų Ʈ[+] ư ȳ ó + // 2004.09.30.myevan.스킬갱신시 스킬 포인트업[+] 버튼이 안나와 처리 m_playerStatus.aSkill[j].iGrade = 0; m_playerStatus.aSkill[j].fcurEfficientPercentage=0.0f; m_playerStatus.aSkill[j].fnextEfficientPercentage=0.05f; diff --git a/src/UserInterface/PythonPlayer.h b/src/UserInterface/PythonPlayer.h index 328507c..51acda5 100644 --- a/src/UserInterface/PythonPlayer.h +++ b/src/UserInterface/PythonPlayer.h @@ -7,13 +7,13 @@ class CInstanceBase; /* - * ij (ڽ ϴ ij) Ѵ. + * 메인 캐릭터 (자신이 조정하는 캐릭터) 가 가진 정보들을 관리한다. * - * 2003-01-12 Levites CPythonCharacter ־ Ը ʹ Ŀ - * ġ ָؼ и - * 2003-07-19 Levites ij ̵ ó CharacterInstance - * Ÿ ҿ Ϻ ÷̾ Ŭ - * Żٲ . + * 2003-01-12 Levites 본래는 CPythonCharacter가 가지고 있었지만 규모가 너무 커져 버린데다 + * 위치도 애매해서 따로 분리 + * 2003-07-19 Levites 메인 캐릭터의 이동 처리 CharacterInstance에서 떼어다 붙임 + * 기존의 데이타 보존의 역할에서 완벽한 메인 플레이어 제어 클래스로 + * 탈바꿈 함. */ class CPythonPlayer : public CSingleton, public IAbstractPlayer @@ -88,8 +88,8 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer float fnextEfficientPercentage; BOOL isCoolTime; - float fCoolTime; // NOTE : Ÿ ų - float fLastUsedTime; // â ϴ + float fCoolTime; // NOTE : 쿨타임 중인 스킬 슬롯을 + float fLastUsedTime; // 퀵창에 등록할 때 사용하는 변수 BOOL bActive; } TSkillInstance; @@ -161,15 +161,15 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer SKILL_PERFECT_MASTER, }; - // ڵ Ưȭ ü.. ̷ Ưȭ ó ۾ Ϸ ִ ϰ ᱹ Ưȭó. + // 자동물약 상태 관련 특화 구조체.. 이런식의 특화 처리 작업을 안 하려고 최대한 노력했지만 실패하고 결국 특화처리. struct SAutoPotionInfo { SAutoPotionInfo() : bActivated(false), totalAmount(0), currentAmount(0) {} - bool bActivated; // Ȱȭ Ǿ°? - long currentAmount; // - long totalAmount; // ü - long inventorySlotIndex; // κ丮 ε + bool bActivated; // 활성화 되었는가? + long currentAmount; // 현재 남은 양 + long totalAmount; // 전체 양 + long inventorySlotIndex; // 사용중인 아이템의 인벤토리상 슬롯 인덱스 }; enum EAutoPotionType @@ -227,7 +227,7 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer // Reserved - bool NEW_IsEmptyReservedDelayTime(float fElapsedtime); // ̹ ʿ - [levites] + bool NEW_IsEmptyReservedDelayTime(float fElapsedtime); // 네이밍 교정 논의 필요 - [levites] // Dungeon @@ -240,7 +240,7 @@ class CPythonPlayer : public CSingleton, public IAbstractPlayer // flying target set void Clear(); - void ClearSkillDict(); // ų ClearGame Ե Լ + void ClearSkillDict(); // 없어지거나 ClearGame 쪽으로 포함될 함수 void NEW_ClearSkillData(bool bAll = false); void Update(); diff --git a/src/UserInterface/PythonPlayerEventHandler.cpp b/src/UserInterface/PythonPlayerEventHandler.cpp index 72d22eb..676caad 100644 --- a/src/UserInterface/PythonPlayerEventHandler.cpp +++ b/src/UserInterface/PythonPlayerEventHandler.cpp @@ -171,7 +171,7 @@ void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim if (!rkActorVictim.IsPushing()) return; - // Ŵ и + // 거대 몬스터 밀림 제외 extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkActorVictim.GetRace())) return; @@ -196,7 +196,7 @@ void CPythonPlayerEventHandler::FlushVictimList() if (m_kVctkVictim.empty()) return; - // #0000682: [M2EU] ų ƨ + // #0000682: [M2EU] 대진각 스킬 사용시 튕김 unsigned int SYNC_POSITION_COUNT_LIMIT = 16; unsigned int uiVictimCount = m_kVctkVictim.size(); @@ -260,7 +260,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx { return; - Tracef("Shoot : ٸ target ¾ҽϴ : %d, %d\n", dwSkillIndex, dwVID); + Tracef("Shoot : 다른 target에 맞았습니다 : %d, %d\n", dwSkillIndex, dwVID); CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance(); rkStream.SendAttackPacket(dwSkillIndex, dwVID); @@ -274,7 +274,7 @@ void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnEx } void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtTarget(DWORD dwSkillIndex) { -// Tracef("Shoot : ϴ target ¾ҽϴ : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID()); +// Tracef("Shoot : 원하는 target에 맞았습니다 : %d, %d\n", dwSkillIndex, m_pInstTarget->GetVirtualID()); // CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance(); // rkStream.SendAttackPacket(dwSkillIndex, m_pInstTarget->GetVirtualID()); } diff --git a/src/UserInterface/PythonPlayerEventHandler.h b/src/UserInterface/PythonPlayerEventHandler.h index d8fd73d..b1fa367 100644 --- a/src/UserInterface/PythonPlayerEventHandler.h +++ b/src/UserInterface/PythonPlayerEventHandler.h @@ -63,9 +63,9 @@ class CPythonPlayerEventHandler : public CActorInstance::IEventHandler virtual void OnSetFlyTarget(); virtual void OnShoot(DWORD dwSkillIndex); - virtual void OnNoTarget() { /*Tracenf("Shoot : target ϴ.");*/ } - virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : Ÿ ϴ.");*/ } - virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : 濡 ¾ҽϴ.");*/ } + virtual void OnNoTarget() { /*Tracenf("Shoot : target이 없습니다.");*/ } + virtual void OnExplodingOutOfRange() { /*Tracenf("Shoot : 사정거리가 끝났습니다.");*/ } + virtual void OnExplodingAtBackground() { /*Tracenf("Shoot : 배경에 맞았습니다.");*/ } virtual void OnExplodingAtAnotherTarget(DWORD dwSkillIndex, DWORD dwVID); virtual void OnExplodingAtTarget(DWORD dwSkillIndex); diff --git a/src/UserInterface/PythonPlayerInput.cpp b/src/UserInterface/PythonPlayerInput.cpp index c5bd4b5..444786f 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 85c47df..c42ebd2 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 9388730..1ee0511 100644 --- a/src/UserInterface/PythonPlayerModule.cpp +++ b/src/UserInterface/PythonPlayerModule.cpp @@ -24,7 +24,7 @@ enum EMOTION_DANCE_3, EMOTION_DANCE_4, EMOTION_DANCE_5, - EMOTION_DANCE_6, // Ÿ + EMOTION_DANCE_6, // 강남스타일 EMOTION_CONGRATULATION, EMOTION_FORGIVE, EMOTION_ANGRY, @@ -57,7 +57,7 @@ public: { static TGradeUnit beltGradeByLevelTable[] = { - 0, // Ʈ+0 + 0, // 벨트+0 1, // +1 1, // +2 2, // +3 @@ -72,20 +72,20 @@ public: return beltGradeByLevelTable[refineLevel]; } - // Ʈ ,  ̿ ִ + // 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴 static const TGradeUnit* GetAvailableRuleTableByGrade() { /** - Ʈ +0 ~ +9 , 7ܰ еǾ κ丮 Ȱ ȭ ȴ. - Ʈ Ʒ ׸ . >= Ȱ ̸ . - (, 0̸ Ұ, ȣ ڴ ) + 벨트는 총 +0 ~ +9 레벨을 가질 수 있으며, 레벨에 따라 7단계 등급으로 구분되어 인벤토리가 활성 화 된다. + 벨트 레벨에 따른 사용 가능한 셀은 아래 그림과 같음. 현재 등급 >= 활성가능 등급이면 사용 가능. + (단, 현재 레벨이 0이면 무조건 사용 불가, 괄호 안의 숫자는 등급) 2(1) 4(2) 6(4) 8(6) 5(3) 5(3) 6(4) 8(6) 7(5) 7(5) 7(5) 8(6) 9(7) 9(7) 9(7) 9(7) - Ʈ κ丮 ũ 4x4 (16ĭ) + 벨트 인벤토리의 크기는 4x4 (16칸) */ static TGradeUnit availableRuleByGrade[c_Belt_Inventory_Slot_Count] = { @@ -100,7 +100,7 @@ public: static bool IsAvailableCell(WORD cell, int beltGrade /*int beltLevel*/) { - // ȹ ٲ.. Ƴ... + // 기획 또 바뀜.. 아놔... //const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel); const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade(); @@ -1051,13 +1051,13 @@ PyObject * playerGetItemLink(PyObject * poSelf, PyObject * poArgs) if( GetDefaultCodePage() == CP_ARABIC ) { if (isAttr) - //"item:ȣ:÷:0:1:2" + //"item:번호:플래그:소켓0:소켓1:소켓2" snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink); else snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink); } else { if (isAttr) - //"item:ȣ:÷:0:1:2" + //"item:번호:플래그:소켓0:소켓1:소켓2" snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); else snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName()); @@ -2082,7 +2082,7 @@ PyObject * playerSlotTypeToInvenType(PyObject* poSelf, PyObject* poArgs) } #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM -// ÷̾ Ʈ ? +// 플레이어가 벨트를 착용 중인지? PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs) { const CPythonPlayer* player = CPythonPlayer::InstancePtr(); @@ -2097,7 +2097,7 @@ PyObject * playerIsEquippingBelt(PyObject* poSelf, PyObject* poArgs) } -// ˻Ϸ Ʈ κ丮 Cell ĭ? (밡 δ Ʈ ȭ ޶) +// 검사하려는 벨트 인벤토리 Cell이 사용 가능한 칸인지? (사용가능 여부는 착용 중인 벨트의 강화 정도에 따라 달라짐) PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs) { const CPythonPlayer* player = CPythonPlayer::InstancePtr(); @@ -2121,7 +2121,7 @@ PyObject * playerIsAvailableBeltInventoryCell(PyObject* poSelf, PyObject* poArgs #endif -// ȥ ȭ +// 용혼석 강화 PyObject* playerSendDragonSoulRefine(PyObject* poSelf, PyObject* poArgs) { BYTE bSubHeader; @@ -2536,7 +2536,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); @@ -2551,11 +2551,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); @@ -2563,7 +2563,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 5e82696..db9e725 100644 --- a/src/UserInterface/PythonPlayerSkill.cpp +++ b/src/UserInterface/PythonPlayerSkill.cpp @@ -38,7 +38,7 @@ void CPythonPlayer::SetAffect(UINT uAffect) void CPythonPlayer::ResetAffect(UINT uAffect) { - // 2004.07.17.myevan.ų ƴ Ʈ + // 2004.07.17.myevan.스킬 아닌 이펙트가 안 사라지는 문제 PyCallClassMemberFunc(m_ppyGameWindow, "ResetAffect", Py_BuildValue("(i)", uAffect)); DWORD dwSkillIndex; @@ -196,8 +196,8 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // 2004.07.26.levites - 뿡 ϵ - // NOTE : ų 뿡 մϴ - [levites] + // 2004.07.26.levites - 안전지대에서 공격 못하도록 수정 + // NOTE : 공격 스킬은 안전지대에서 사용하지 못합니다 - [levites] if (pSkillData->IsAttackSkill()) { if (pkInstMain->IsInSafe()) @@ -208,13 +208,13 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : нú ų մϴ - [levites] + // NOTE : 패시브 스킬은 사용하지 못합니다 - [levites] if (!pSkillData->IsCanUseSkill()) return false; // if (CPythonSkill::SKILL_TYPE_PASSIVE == pSkillData->byType) // return false; - // NOTE : [Only Assassin] ִ üũ մϴ. + // NOTE : [Only Assassin] 빈병이 있는지 체크 합니다. if (pSkillData->IsNeedEmptyBottle()) { if (!__HasItem(27995)) @@ -224,7 +224,7 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : [Only Assassin] ִ üũ մϴ. + // NOTE : [Only Assassin] 독병이 있는지 체크 합니다. if (pSkillData->IsNeedPoisonBottle()) { if (!__HasItem(27996)) @@ -234,14 +234,14 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : ϶ ų մϴ. + // NOTE : 낚시 중일때는 스킬을 사용하지 못합니다. if (pkInstMain->IsFishingMode()) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "REMOVE_FISHING_ROD")); return false; } - // NOTE : üũ + // NOTE : 레벨 체크 if (m_sysIsLevelLimit) { if (rkSkillInst.iLevel <= 0) @@ -251,19 +251,19 @@ bool CPythonPlayer::__CheckSkillUsable(DWORD dwSlotIndex) } } - // NOTE : ִ üũ + // NOTE : 들고 있는 무기 체크 if (!pSkillData->CanUseWeaponType(pkInstMain->GetWeaponType())) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotUseSkill", Py_BuildValue("(is)", GetMainCharacterIndex(), "NOT_MATCHABLE_WEAPON")); return false; } - if (!pSkillData->IsHorseSkill()) // HORSE ų ߿ ȭ ʴ ų ֱ + if (!pSkillData->IsHorseSkill()) // HORSE 스킬 중에 화살을 쓰지 않는 스킬이 있기 때문에 { if (__CheckShortArrow(rkSkillInst, *pSkillData)) return false; - // NOTE : Ȱ ʿ ȭ üũ + // NOTE : 활이 필요할 경우 화살 개수 체크 if (pSkillData->IsNeedBow()) { if (!__HasEnoughArrow()) @@ -326,7 +326,7 @@ bool CPythonPlayer::__CheckShortMana(TSkillInstance& rkSkillInst, CPythonSkill:: int iNeedSP = rkSkillData.GetNeedSP(rkSkillInst.fcurEfficientPercentage); int icurSP = GetStatus(POINT_SP); - // NOTE : ToggleSkill ƴѵ Ҹ SP 0 ̴. + // NOTE : ToggleSkill 이 아닌데 소모 SP 가 0 이다. if (!rkSkillData.IsToggleSkill()) { if (iNeedSP == 0) @@ -400,13 +400,13 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI if (fSkillTargetRange <= 0.0f) return true; - // #0000806: [M2EU] 濡 (ѱ) źȯ ų ȵ + // #0000806: [M2EU] 수룡에게 무사(나한군) 탄환격 스킬 사용 안됨 float fTargetDistance = rkInstMain.GetDistance(&rkInstTarget); extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkInstTarget.GetRace())) { - fTargetDistance -= 200.0f; // TEMP: ϴ ϵ ڵ ó. δ ٿ Ǿ ؾ + fTargetDistance -= 200.0f; // TEMP: 일단 하드 코딩 처리. 정석적으로는 바운드 스피어를 고려해야함 } if (fTargetDistance >= fSkillTargetRange) @@ -422,7 +422,7 @@ bool CPythonPlayer::__ProcessEnemySkillTargetRange(CInstanceBase& rkInstMain, CI return false; } - // 2004.07.05.myevan. ýź ʿ . ϱ ִ° üũ + // 2004.07.05.myevan. 궁신탄영 사용시 맵에 끼임. 사용하기전 갈수 있는곳 체크 TPixelPosition kPPosTarget; rkInstTarget.NEW_GetPixelPosition(&kPPosTarget); @@ -446,8 +446,8 @@ bool CPythonPlayer::__CanUseSkill() return false; // Fix me - // Ʈ. ¸ų 20 ̸ , Ʈ Ÿ ¸ ų ϵ ϵ ڵ... - // ߿ ð can use skill üũ ... + // 뉴마운트. 승마스킬레벨 20 미만인 경우, 고급 마운트를 타고 승마 관련 스킬 못 쓰도록 못하도록 하드 코딩... + // 나중에 시간 나면 can use skill 체크를 서버에서 해주자... if (pkInstMain->IsMountingHorse() && (GetSkillGrade(109) < 1 && GetSkillLevel(109) < 20)) { return false; @@ -518,7 +518,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) CInstanceBase * pkInstTarget = NULL; - // NOTE : Ÿ ʿ + // NOTE : 타겟이 필요한 경우 if (pSkillData->IsNeedTarget() || pSkillData->CanChangeDirection() || pSkillData->IsAutoSearchTarget()) @@ -528,13 +528,13 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) else pkInstTarget=__GetAliveTargetInstancePtr(); - // Ÿ .. + // 현재 타겟이 없으면.. if (!pkInstTarget) { - // Ʈϰ.. + // 업데이트하고.. __ChangeTargetToPickedInstance(); - // ٽ . + // 다시 얻어낸다. if (pSkillData->IsNeedCorpse()) pkInstTarget=__GetDeadTargetInstancePtr(); else @@ -572,7 +572,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) if (pSkillData->CanUseForMe()) { pkInstTarget = pkInstMain; - Tracef(" [ALERT] ῡ ϴ ӿ Ÿ Ǿ־ ڽſԷ 缳\n"); + Tracef(" [ALERT] 동료에게 사용하는 기술임에도 적에게 타겟팅 되어있어서 자신에게로 재설정\n"); } else { @@ -636,7 +636,7 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) { pkInstTarget = pkInstMain; pkInstMain->SetFlyTargetInstance(*pkInstMain); - Tracef(" [ALERT] Ÿ  ÷̾ մϴ\n"); + Tracef(" [ALERT] 타겟이 없어서 플레이어에게 사용합니다\n"); } else if (pSkillData->IsNeedCorpse()) { @@ -672,11 +672,11 @@ bool CPythonPlayer::__UseSkill(DWORD dwSlotIndex) } else { - Tracenf("CPythonPlayer::__UseSkill(%d) - ȭ ؾ", dwSlotIndex); + Tracenf("CPythonPlayer::__UseSkill(%d) - 화면 기준 방향 설정을 해야함", 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 cd7e35e..ce6f76f 100644 --- a/src/UserInterface/PythonQuest.cpp +++ b/src/UserInterface/PythonQuest.cpp @@ -140,8 +140,8 @@ void CPythonQuest::__Initialize() test.dwIndex = i; test.strIconFileName = ""; test.strTitle = _getf("test%d", i); - test.strClockName = " ð"; - test.strCounterName = " "; + test.strClockName = "남은 시간"; + test.strCounterName = "남은 마리수"; test.iClockValue = 1000; test.iCounterValue = 1000; test.iStartTime = 0; @@ -196,7 +196,7 @@ PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs) else { { - // Ʈ ̹ ִ´. + // 비어있을 경우 디폴트 이미지를 넣는다. std::string strIconFileName = "season1/icon/scroll_open.tga"; pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str()); } @@ -238,7 +238,7 @@ PyObject * questGetQuestLastTime(PyObject * poSelf, PyObject * poArgs) iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond()); } - // ð ó ڵ + // 시간 증가 처리 코드 // else // { // iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime; diff --git a/src/UserInterface/PythonShop.h b/src/UserInterface/PythonShop.h index 3f133d3..c7b649c 100644 --- a/src/UserInterface/PythonShop.h +++ b/src/UserInterface/PythonShop.h @@ -3,12 +3,12 @@ #include "Packet.h" /* - * ó + * 상점 처리 * - * 2003-01-16 anoa Ϸ - * 2003-12-26 levites + * 2003-01-16 anoa 일차 완료 + * 2003-12-26 levites 수정 * - * 2012-10-29 rtsummit ο ȭ tab ߰ shop Ȯ. + * 2012-10-29 rtsummit 새로운 화폐 출현 및 tab 기능 추가로 인한 shop 확장. * */ typedef enum diff --git a/src/UserInterface/PythonSkill.cpp b/src/UserInterface/PythonSkill.cpp index 4b4c744..146fa54 100644 --- a/src/UserInterface/PythonSkill.cpp +++ b/src/UserInterface/PythonSkill.cpp @@ -50,7 +50,7 @@ int SplitLine(const char * c_szText, CTokenVector* pstTokenVector, const char * pstTokenVector->push_back(stLine.substr(beginPos, endPos - beginPos)); - // ߰ ڵ. ǵڿ ִ 츦 üũѴ. - [levites] + // 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites] if (int(stLine.find_first_not_of(c_szDelimeter, basePos)) < 0) break; } while (basePos < stLine.length()); @@ -226,7 +226,7 @@ bool CPythonSkill::RegisterSkillTable(const char * c_szFileName) switch (iVnum) { - case 1: // ↓ + case 1: // 삼연참 affect.strAffectMinFormula += "* 3"; affect.strAffectMaxFormula += "* 3"; break; @@ -405,7 +405,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName) const std::string & c_rstrJob = TokenVector[DESC_TOKEN_TYPE_JOB]; const std::string & c_rstrIconName = TokenVector[DESC_TOKEN_TYPE_ICON_NAME]; - // NOTE : Support ųӿ 3ܰ踦 ؾ ؼ ó - [levites] + // NOTE : Support 스킬임에도 3단계를 지원해야 해서 예외 처리 - [levites] if (c_iSkillIndex_Riding == iSkillIndex) { char szIconFileNameHeader[64+1]; @@ -496,7 +496,7 @@ bool CPythonSkill::RegisterSkillDesc(const char * c_szFileName) int numGrade = atoi(TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str()); if (SKILL_EFFECT_COUNT < numGrade) { - TraceError("%s[%s] [%d] Ѿϴ.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT); + TraceError("%s[%s] 가 등급 제한[%d]을 넘어갔습니다.",rSkillData.strName.c_str(), TokenVector[DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM].c_str(), SKILL_EFFECT_COUNT); return false; } for (int iGrade = 0; iGrade < numGrade; iGrade++) @@ -1231,7 +1231,7 @@ bool CPythonSkill::SSkillData::GetState(const char * c_szStateName, int * piStat { *piState = 0; - // ӽ + // 증지술 임시 제외 /* if (0 != ms_dwTimeIncreaseSkillNumber) { @@ -1307,7 +1307,7 @@ const char * CPythonSkill::SSkillData::GetAffectDescription(DWORD dwIndex, float if (CP_ARABIC == ::GetDefaultCodePage()) { - // #0000870: [M2AE] ѱ ϶ Ư ƶ 忡 ũ ߻ + // #0000870: [M2AE] 한국어 모드일때 특정 아랍어 문장에서 크래쉬 발생 static std::string strDescription; strDescription = c_rstrAffectDescription; int first = strDescription.find("%.0f"); @@ -1990,7 +1990,7 @@ PyObject * skillIsLevelUpSkill(PyObject * poSelf, PyObject * poArgs) if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) return Py_BuildException("skill.IsLevelUpSkill - Failed to find skill by %d", iSkillIndex); - // + // 모두 레벨업 가능 return Py_BuildValue("i", TRUE); } @@ -2016,7 +2016,7 @@ PyObject * skillGetIconImage(PyObject * poSelf, PyObject * poArgs) CPythonSkill::SSkillData * c_pSkillData; if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) - return Py_BuildValue("i", 0); // ͼ 0 Ѵ. + return Py_BuildValue("i", 0); // 익셉션을 내는 대신 0을 리턴한다. return Py_BuildValue("i", c_pSkillData->pImage); } @@ -2051,7 +2051,7 @@ PyObject * skillGetIconImageNew(PyObject * poSelf, PyObject * poArgs) CPythonSkill::SSkillData * c_pSkillData; if (!CPythonSkill::Instance().GetSkillData(iSkillIndex, &c_pSkillData)) - return Py_BuildValue("i", 0); // ͼ 0 Ѵ. + return Py_BuildValue("i", 0); // 익셉션을 내는 대신 0을 리턴한다. if (iGradeIndex < 0) iGradeIndex = 0; diff --git a/src/UserInterface/PythonSkill.h b/src/UserInterface/PythonSkill.h index 8b11109..9e9b742 100644 --- a/src/UserInterface/PythonSkill.h +++ b/src/UserInterface/PythonSkill.h @@ -104,7 +104,7 @@ class CPythonSkill : public CSingleton SKILL_ATTRIBUTE_NEED_EMPTY_BOTTLE = (1 << 12), SKILL_ATTRIBUTE_NEED_POISON_BOTTLE = (1 << 13), SKILL_ATTRIBUTE_ATTACK_SKILL = (1 << 14), - SKILL_ATTRIBUTE_TIME_INCREASE_SKILL = (1 << 15), // attribute + SKILL_ATTRIBUTE_TIME_INCREASE_SKILL = (1 << 15), // 증지술 전용 attribute SKILL_ATTRIBUTE_CHARGE_ATTACK = (1 << 16), SKILL_ATTRIBUTE_PASSIVE = (1 << 17), SKILL_ATTRIBUTE_CANNOT_LEVEL_UP = (1 << 18), @@ -138,7 +138,7 @@ class CPythonSkill : public CSingleton enum { SKILL_GRADE_COUNT = 3, - SKILL_EFFECT_COUNT = 4, //ų ,, ̿ܿ ϶ Ʈ ߰. + SKILL_EFFECT_COUNT = 4, //스킬은 초,중,고급 이외에 마스터일때 이펙트 추가. SKILL_GRADE_STEP_COUNT = 20, SKILL_GRADEGAP = 25, }; @@ -243,8 +243,8 @@ class CPythonSkill : public CSingleton DWORD dwSkillAttribute; DWORD dwNeedWeapon; DWORD dwTargetRange; - WORD wMotionIndex; // - WORD wMotionIndexForMe; // + WORD wMotionIndex; // 없어질 변수 + WORD wMotionIndexForMe; // 없어질 변수 BOOL isRequirement; std::string strRequireSkillName; diff --git a/src/UserInterface/PythonSystem.cpp b/src/UserInterface/PythonSystem.cpp index 89104b3..13415cd 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(0, D3DENUM_NO_WHQL_LEVEL, &d3dAdapterIdentifier); lpD3D->GetAdapterDisplayMode(0, &d3ddmDesktop); - // Ͱ ִ ÷ 尹 Ѵ.. + // 이 어뎁터가 가지고 있는 디스플래이 모드갯수를 나열한다.. DWORD dwNumAdapterModes = lpD3D->GetAdapterModeCount(0); for (UINT iMode = 0; iMode < dwNumAdapterModes; iMode++) @@ -53,12 +53,12 @@ void CPythonSystem::GetDisplaySettings() lpD3D->EnumAdapterModes(0, 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; @@ -592,7 +592,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 699acf1..c88e541 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 ) { @@ -259,14 +259,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 ) { @@ -289,14 +289,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 ) { @@ -383,7 +383,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, @@ -391,7 +391,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, @@ -407,8 +407,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(); } @@ -448,12 +448,12 @@ void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID) if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail)) { - //Tracef("̹ Ʈ : %d\n", VirtualID); + //Tracef("이미 리스트에 있음 : %d\n", VirtualID); return; } - // NOTE : ShowAll ÿ Instance Pointer ãƼ üũϹǷ ϰ ɸ ɼ ִ. - // CInstanceBase TextTail ִ .. + // NOTE : ShowAll 시에는 모든 Instance 의 Pointer 를 찾아서 체크하므로 부하가 걸릴 가능성도 있다. + // CInstanceBase 가 TextTail 을 직접 가지고 있는 것이 가장 좋은 형태일 듯.. if (!pTextTail->pOwner->isShow()) return; @@ -479,7 +479,7 @@ void CPythonTextTail::ShowItemTextTail(DWORD VirtualID) if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail)) { - //Tracef("̹ Ʈ : %d\n", VirtualID); + //Tracef("이미 리스트에 있음 : %d\n", VirtualID); return; } diff --git a/src/UserInterface/PythonTextTail.h b/src/UserInterface/PythonTextTail.h index ea59a0c..ee14a4a 100644 --- a/src/UserInterface/PythonTextTail.h +++ b/src/UserInterface/PythonTextTail.h @@ -3,7 +3,7 @@ #include "../eterBase/Singleton.h" /* - * ٴϴ ؽƮ ó + * 따라다니는 텍스트 처리 */ class CPythonTextTail : public CSingleton { @@ -20,8 +20,8 @@ class CPythonTextTail : public CSingleton CGraphicTextInstance* pLevelTextInstance; - // Todo : ̰ VID ٲٵ Ѵ. - // ijͰ ƨ ɼ + // Todo : 이건 전부 VID로 바꾸도록 한다. + // 도중 캐릭터가 없어질 경우 튕길 가능성이 있음 CGraphicObjectInstance * pOwner; DWORD dwVirtualID; @@ -29,7 +29,7 @@ class CPythonTextTail : public CSingleton float x, y, z; float fDistanceFromPlayer; D3DXCOLOR Color; - BOOL bNameFlag; // ̸ Բ Ӱ ÷ + BOOL bNameFlag; // 이름도 함께 켤것인지의 플래그 float xStart, yStart; float xEnd, yEnd; diff --git a/src/UserInterface/UserInterface.cpp b/src/UserInterface/UserInterface.cpp index 5d20679..78d8295 100644 --- a/src/UserInterface/UserInterface.cpp +++ b/src/UserInterface/UserInterface.cpp @@ -195,20 +195,20 @@ bool PackInitialize(const char * c_pszFolder) } #ifdef _DISTRIBUTE - Tracef("˸: Դϴ.\n"); + Tracef("알림: 팩 모드입니다.\n"); //if (0 == strPackType.compare("FILE")) //{ // bPackFirst = FALSE; - // Tracef("˸: Դϴ.\n"); + // Tracef("알림: 파일 모드입니다.\n"); //} //else //{ - // Tracef("˸: Դϴ.\n"); + // Tracef("알림: 팩 모드입니다.\n"); //} #else bPackFirst = FALSE; - Tracef("˸: Դϴ.\n"); + Tracef("알림: 파일 모드입니다.\n"); #endif CTextFileLoader::SetCacheMode(); @@ -218,7 +218,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) @@ -309,7 +309,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); @@ -422,12 +422,12 @@ bool Main(HINSTANCE hInstance, LPSTR lpCmdLine) if (pyLauncher.Create()) { - ret=RunMainScript(pyLauncher, lpCmdLine); // ߿ Լ ʴ´. + ret=RunMainScript(pyLauncher, lpCmdLine); //게임 실행중엔 함수가 끝나지 않는다. } //ProcessScanner_ReleaseQuitEvent(); - // . + //게임 종료시. app->Clear(); timeEndPeriod(1); @@ -498,14 +498,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); } @@ -547,14 +547,14 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi #endif 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]; @@ -581,7 +581,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); @@ -594,9 +594,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); @@ -606,7 +606,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi const char* authKey = szArgv[++i]; //ongoing (2012.07.16) - //Ű ϴ κ + //인증키 저장하는 부분 LocaleService_SetOpenIDAuthKey(authKey); bAuthKeyChecked = true; @@ -621,7 +621,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi #ifdef USE_OPENID //OpenID - //OpenID Ŭ̾Ʈ Ű ޾ƿ ( ϰ ) Ŭ̾Ʈ . + //OpenID 클라이언트의 경우인증키를 받아오지 않을 경우 (웹을 제외하고 실행 시) 클라이언트 종료. if (false == bAuthKeyChecked && !openid_test) { @@ -635,7 +635,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; @@ -702,7 +702,7 @@ static void GrannyError(granny_log_message_type Type, int Setup(LPSTR lpCmdLine) { /* - * Ÿ̸ е ø. + * 타이머 정밀도를 올린다. */ TIMECAPS tc; UINT wTimerRes; @@ -714,7 +714,7 @@ int Setup(LPSTR lpCmdLine) timeBeginPeriod(wTimerRes); /* - * ׷ ڵ鸵 + * 그래니 에러 핸들링 */ granny_log_callback Callback;