From 34000c3306d08456ca4556b85e761aca868b5b5b Mon Sep 17 00:00:00 2001 From: d1str4ught Date: Mon, 18 Aug 2025 02:12:07 +0200 Subject: [PATCH] text encoding fixed --- src/common/VnumHelper.h | 34 +- src/common/auction_table.h | 20 +- src/common/billing.h | 2 +- src/common/building.h | 6 +- src/common/cache.h | 2 +- src/common/d3dtype.h | 2 +- src/common/item_length.h | 102 +-- src/common/length.h | 142 +-- src/common/noncopyable.h | 2 +- src/common/pool.h | 2 +- src/common/service.h | 4 +- src/common/singleton.h | 2 +- src/common/stl.h | 2 +- src/common/tables.h | 158 ++-- src/common/teen_packet.h | 2 +- src/common/utils.h | 2 +- src/db/AuctionManager.cpp | 14 +- src/db/AuctionManager.h | 10 +- src/db/BlockCountry.cpp | 4 +- src/db/BlockCountry.h | 2 +- src/db/Cache.cpp | 28 +- src/db/Cache.h | 16 +- src/db/ClientManager.cpp | 180 ++-- src/db/ClientManager.h | 80 +- src/db/ClientManagerBoot.cpp | 242 +++--- src/db/ClientManagerEventFlag.cpp | 2 +- src/db/ClientManagerGuild.cpp | 20 +- src/db/ClientManagerHorseName.cpp | 2 +- src/db/ClientManagerLogin.cpp | 10 +- src/db/ClientManagerParty.cpp | 2 +- src/db/ClientManagerPlayer.cpp | 100 +-- src/db/Config.h | 2 +- src/db/CsvReader.cpp | 188 ++-- src/db/CsvReader.h | 154 ++-- src/db/DBManager.cpp | 2 +- src/db/DBManager.h | 2 +- src/db/GuildManager.cpp | 54 +- src/db/GuildManager.h | 6 +- src/db/HB.cpp | 6 +- src/db/HB.h | 2 +- src/db/ItemAwardManager.cpp | 20 +- src/db/ItemAwardManager.h | 2 +- src/db/ItemIDRangeManager.cpp | 2 +- src/db/ItemIDRangeManager.h | 2 +- src/db/Lock.cpp | 2 +- src/db/Lock.h | 2 +- src/db/LoginData.cpp | 2 +- src/db/LoginData.h | 2 +- src/db/Main.cpp | 10 +- src/db/Main.h | 2 +- src/db/Marriage.h | 4 +- src/db/Monarch.h | 2 +- src/db/MoneyLog.cpp | 2 +- src/db/MoneyLog.h | 2 +- src/db/NetBase.cpp | 2 +- src/db/NetBase.h | 2 +- src/db/Peer.cpp | 2 +- src/db/Peer.h | 8 +- src/db/PeerBase.cpp | 2 +- src/db/PeerBase.h | 2 +- src/db/PrivManager.cpp | 20 +- src/db/PrivManager.h | 8 +- src/db/ProtoReader.cpp | 98 +-- src/db/ProtoReader.h | 8 +- src/db/QID.h | 12 +- src/db/grid.cpp | 6 +- src/db/grid.h | 2 +- src/db/stdafx.h | 2 +- src/db/version.cpp | 2 +- src/game/BattleArena.cpp | 32 +- src/game/BattleArena.h | 2 +- src/game/BlueDragon.cpp | 2 +- src/game/BlueDragon.h | 2 +- src/game/BlueDragon_Binder.cpp | 2 +- src/game/BlueDragon_Binder.h | 2 +- src/game/BlueDragon_Skill.h | 2 +- src/game/ClientPackageCryptInfo.cpp | 2 +- src/game/ClientPackageCryptInfo.h | 2 +- src/game/DragonLair.cpp | 8 +- src/game/DragonLair.h | 2 +- src/game/DragonSoul.cpp | 136 +-- src/game/DragonSoul.h | 22 +- src/game/FSM.cpp | 2 +- src/game/FSM.h | 2 +- src/game/FileMonitor_FreeBSD.cpp | 2 +- src/game/FileMonitor_FreeBSD.h | 2 +- src/game/HackShield.cpp | 2 +- src/game/HackShield.h | 2 +- src/game/HackShield_Impl.cpp | 2 +- src/game/HackShield_Impl.h | 2 +- src/game/IFileMonitor.h | 2 +- src/game/MarkConvert.cpp | 22 +- src/game/MarkImage.cpp | 16 +- src/game/MarkImage.h | 16 +- src/game/MarkManager.cpp | 12 +- src/game/MarkManager.h | 10 +- src/game/OXEvent.cpp | 30 +- src/game/OXEvent.h | 10 +- src/game/PetSystem.cpp | 82 +- src/game/PetSystem.h | 34 +- src/game/SpeedServer.cpp | 10 +- src/game/SpeedServer.h | 12 +- src/game/TrafficProfiler.cpp | 2 +- src/game/TrafficProfiler.h | 60 +- src/game/XTrapManager.cpp | 4 +- src/game/XTrapManager.h | 2 +- src/game/affect.cpp | 2 +- src/game/affect.h | 82 +- src/game/affect_flag.h | 2 +- src/game/ani.cpp | 32 +- src/game/ani.h | 2 +- src/game/any_function.h | 2 +- src/game/arena.cpp | 114 +-- src/game/arena.h | 2 +- src/game/auction_manager.cpp | 64 +- src/game/auction_manager.h | 12 +- src/game/auction_packet.h | 2 +- src/game/auth_brazil.cpp | 4 +- src/game/auth_brazil.h | 2 +- src/game/banword.cpp | 4 +- src/game/banword.h | 2 +- src/game/battle.cpp | 46 +- src/game/battle.h | 6 +- src/game/belt_inventory_helper.h | 20 +- src/game/blend_item.cpp | 10 +- src/game/blend_item.h | 2 +- src/game/block_country.cpp | 4 +- src/game/block_country.h | 2 +- src/game/buff_on_attributes.cpp | 18 +- src/game/buff_on_attributes.h | 22 +- src/game/buffer_manager.cpp | 2 +- src/game/buffer_manager.h | 2 +- src/game/building.cpp | 22 +- src/game/building.h | 2 +- src/game/castle.cpp | 128 +-- src/game/castle.h | 32 +- src/game/char.cpp | 524 ++++++------ src/game/char.h | 436 +++++----- src/game/char_affect.cpp | 76 +- src/game/char_battle.cpp | 354 ++++---- src/game/char_change_empire.cpp | 26 +- src/game/char_dragonsoul.cpp | 20 +- src/game/char_hackshield.cpp | 2 +- src/game/char_horse.cpp | 42 +- src/game/char_item.cpp | 1138 ++++++++++++------------- src/game/char_manager.cpp | 40 +- src/game/char_manager.h | 14 +- src/game/char_quickslot.cpp | 6 +- src/game/char_resist.cpp | 10 +- src/game/char_skill.cpp | 290 +++---- src/game/char_state.cpp | 140 +-- src/game/check_server.cpp | 2 +- src/game/check_server.h | 6 +- src/game/cipher.cpp | 2 +- src/game/cipher.h | 2 +- src/game/cmd.cpp | 62 +- src/game/cmd.h | 12 +- src/game/cmd_emotion.cpp | 126 +-- src/game/cmd_general.cpp | 546 ++++++------ src/game/cmd_gm.cpp | 220 ++--- src/game/cmd_oxevent.cpp | 8 +- src/game/config.cpp | 58 +- src/game/config.h | 8 +- src/game/constants.cpp | 68 +- src/game/crc32.cpp | 2 +- src/game/crc32.h | 2 +- src/game/cube.cpp | 146 ++-- src/game/cube.h | 6 +- src/game/db.cpp | 34 +- src/game/db.h | 8 +- src/game/debug_allocator.h | 2 +- src/game/debug_allocator_adapter.h | 2 +- src/game/debug_ptr.h | 2 +- src/game/desc.cpp | 30 +- src/game/desc.h | 16 +- src/game/desc_client.h | 2 +- src/game/desc_manager.cpp | 6 +- src/game/desc_manager.h | 2 +- src/game/desc_p2p.cpp | 2 +- src/game/desc_p2p.h | 2 +- src/game/dev_log.cpp | 4 +- src/game/dev_log.h | 4 +- src/game/dragon_soul_table.h | 2 +- src/game/dungeon.h | 16 +- src/game/empire_text_convert.h | 2 +- src/game/entity.cpp | 4 +- src/game/entity.h | 4 +- src/game/entity_view.cpp | 30 +- src/game/event.cpp | 32 +- src/game/event.h | 14 +- src/game/event_queue.cpp | 6 +- src/game/event_queue.h | 2 +- src/game/exchange.cpp | 78 +- src/game/exchange.h | 4 +- src/game/fifo_allocator.h | 2 +- src/game/file_loader.cpp | 4 +- src/game/file_loader.h | 2 +- src/game/fishing.cpp | 146 ++-- src/game/fishing.h | 2 +- src/game/gm.cpp | 4 +- src/game/gm.h | 2 +- src/game/group_text_parse_tree.cpp | 6 +- src/game/group_text_parse_tree.h | 12 +- src/game/guild.cpp | 102 +-- src/game/guild.h | 58 +- src/game/guild_manager.cpp | 32 +- src/game/guild_manager.h | 2 +- src/game/guild_war.cpp | 44 +- src/game/horse_rider.cpp | 22 +- src/game/horse_rider.h | 8 +- src/game/horsename_manager.cpp | 2 +- src/game/horsename_manager.h | 2 +- src/game/input.cpp | 20 +- src/game/input.h | 14 +- src/game/input_auth.cpp | 20 +- src/game/input_db.cpp | 76 +- src/game/input_login.cpp | 66 +- src/game/input_main.cpp | 384 ++++----- src/game/input_p2p.cpp | 12 +- src/game/input_teen.cpp | 34 +- src/game/input_udp.cpp | 4 +- src/game/ip_ban.cpp | 2 +- src/game/ip_ban.h | 2 +- src/game/item.cpp | 110 +-- src/game/item.h | 62 +- src/game/item_addon.cpp | 4 +- src/game/item_addon.h | 2 +- src/game/item_attribute.cpp | 12 +- src/game/item_manager.h | 64 +- src/game/item_manager_idrange.cpp | 2 +- src/game/item_manager_private_types.h | 2 +- src/game/limit_time.h | 2 +- src/game/locale.cpp | 4 +- src/game/locale.hpp | 2 +- src/game/locale_service.cpp | 48 +- src/game/locale_service.h | 2 +- src/game/log.cpp | 2 +- src/game/log.h | 2 +- src/game/login_data.cpp | 2 +- src/game/login_data.h | 2 +- src/game/login_sim.h | 2 +- src/game/lua_incl.h | 2 +- src/game/lzo_manager.cpp | 2 +- src/game/lzo_manager.h | 2 +- src/game/main.cpp | 32 +- src/game/malloc_allocator.h | 2 +- src/game/map_location.cpp | 2 +- src/game/map_location.h | 2 +- src/game/marriage.cpp | 70 +- src/game/marriage.h | 2 +- src/game/matrix_card.cpp | 2 +- src/game/matrix_card.h | 2 +- src/game/messenger_manager.cpp | 14 +- src/game/messenger_manager.h | 6 +- src/game/minilzo.c | 2 +- src/game/minilzo.h | 2 +- src/game/mining.cpp | 22 +- src/game/mining.h | 2 +- src/game/mob_manager.cpp | 2 +- src/game/mob_manager.h | 10 +- src/game/monarch.cpp | 32 +- src/game/monarch.h | 10 +- src/game/motion.h | 70 +- src/game/object_allocator.h | 2 +- src/game/over9refine.cpp | 2 +- src/game/over9refine.h | 2 +- src/game/p2p.cpp | 4 +- src/game/p2p.h | 10 +- src/game/packet.h | 86 +- src/game/packet_info.cpp | 2 +- src/game/packet_info.h | 2 +- src/game/panama.cpp | 4 +- src/game/panama.h | 2 +- src/game/party.cpp | 48 +- src/game/party.h | 18 +- src/game/passpod.cpp | 10 +- src/game/passpod.h | 2 +- src/game/pcbang.cpp | 2 +- src/game/pcbang.h | 2 +- src/game/polymorph.cpp | 22 +- src/game/polymorph.h | 2 +- src/game/pool.h | 2 +- src/game/priv_manager.cpp | 14 +- src/game/priv_manager.h | 24 +- src/game/profiler.h | 2 +- src/game/protocol.h | 2 +- src/game/pvp.cpp | 46 +- src/game/pvp.h | 12 +- src/game/quest.h | 2 +- src/game/questevent.cpp | 6 +- src/game/questevent.h | 2 +- src/game/questlua.cpp | 16 +- src/game/questlua.h | 2 +- src/game/questlua_affect.cpp | 12 +- src/game/questlua_arena.cpp | 2 +- src/game/questlua_ba.cpp | 2 +- src/game/questlua_building.cpp | 2 +- src/game/questlua_danceevent.cpp | 2 +- src/game/questlua_dragonlair.cpp | 2 +- src/game/questlua_dragonsoul.cpp | 2 +- src/game/questlua_dungeon.cpp | 10 +- src/game/questlua_forked.cpp | 2 +- src/game/questlua_game.cpp | 2 +- src/game/questlua_guild.cpp | 46 +- src/game/questlua_horse.cpp | 14 +- src/game/questlua_mgmt.cpp | 2 +- src/game/questlua_monarch.cpp | 192 ++--- src/game/questlua_npc.cpp | 2 +- src/game/questlua_oxevent.cpp | 2 +- src/game/questlua_party.cpp | 8 +- src/game/questlua_pc.cpp | 104 +-- src/game/questlua_pet.cpp | 12 +- src/game/questlua_quest.cpp | 14 +- src/game/questlua_speedserver.cpp | 2 +- src/game/questlua_target.cpp | 6 +- src/game/questmanager.cpp | 100 +-- src/game/questmanager.h | 8 +- src/game/questnpc.cpp | 18 +- src/game/questnpc.h | 8 +- src/game/questpc.cpp | 8 +- src/game/questpc.h | 14 +- src/game/refine.cpp | 2 +- src/game/refine.h | 6 +- src/game/regen.cpp | 20 +- src/game/regen.h | 2 +- src/game/safebox.cpp | 8 +- src/game/safebox.h | 2 +- src/game/sectree.cpp | 4 +- src/game/sectree.h | 10 +- src/game/sectree_manager.cpp | 52 +- src/game/sectree_manager.h | 68 +- src/game/sequence.cpp | 2 +- src/game/sequence.h | 2 +- src/game/shop.cpp | 20 +- src/game/shop.h | 22 +- src/game/shopEx.h | 12 +- src/game/shop_manager.cpp | 38 +- src/game/shop_manager.h | 2 +- src/game/skill.cpp | 6 +- src/game/skill.h | 230 ++--- src/game/skill_power.cpp | 2 +- src/game/skill_power.h | 12 +- src/game/spam.h | 2 +- src/game/stable_priority_queue.h | 2 +- src/game/start_position.cpp | 32 +- src/game/start_position.h | 2 +- src/game/state.h | 2 +- src/game/stdafx.h | 2 +- src/game/target.cpp | 2 +- src/game/target.h | 6 +- src/game/test.cpp | 32 +- src/game/test_allocator.cpp | 2 +- src/game/test_stacktrace.cpp | 2 +- src/game/test_window.cpp | 34 +- src/game/text_file_loader.cpp | 2 +- src/game/text_file_loader.h | 2 +- src/game/threeway_war.cpp | 40 +- src/game/threeway_war.h | 2 +- src/game/trigger.cpp | 8 +- src/game/typedef.h | 2 +- src/game/unique_item.h | 20 +- src/game/utils.h | 2 +- src/game/vector.cpp | 2 +- src/game/vector.h | 2 +- src/game/version.cpp | 2 +- src/game/vid.h | 2 +- src/game/war_map.cpp | 18 +- src/game/war_map.h | 8 +- src/game/wedding.cpp | 14 +- src/game/wedding.h | 2 +- src/game/xmas_event.cpp | 16 +- src/libgame/attribute.cpp | 20 +- src/libgame/attribute.h | 8 +- src/libgame/grid.cpp | 6 +- src/libgame/grid.h | 2 +- src/libgame/targa.cpp | 2 +- src/libgame/targa.h | 10 +- src/liblua/include/lauxlib.h | 2 +- src/liblua/include/lua.h | 2 +- src/liblua/include/lualib.h | 2 +- src/liblua/src/lapi.c | 2 +- src/liblua/src/lapi.h | 2 +- src/liblua/src/lcode.c | 2 +- src/liblua/src/lcode.h | 2 +- src/liblua/src/ldebug.c | 2 +- src/liblua/src/ldebug.h | 2 +- src/liblua/src/ldo.c | 2 +- src/liblua/src/ldo.h | 2 +- src/liblua/src/ldump.c | 2 +- src/liblua/src/lfunc.c | 2 +- src/liblua/src/lfunc.h | 2 +- src/liblua/src/lgc.c | 2 +- src/liblua/src/lgc.h | 2 +- src/liblua/src/lib/lauxlib.c | 2 +- src/liblua/src/lib/lbaselib.c | 2 +- src/liblua/src/lib/ldblib.c | 2 +- src/liblua/src/lib/liolib.c | 2 +- src/liblua/src/lib/lmathlib.c | 2 +- src/liblua/src/lib/loadlib.c | 2 +- src/liblua/src/lib/lstrlib.c | 2 +- src/liblua/src/lib/ltablib.c | 2 +- src/liblua/src/llex.c | 2 +- src/liblua/src/llex.h | 2 +- src/liblua/src/llimits.h | 2 +- src/liblua/src/lmem.c | 2 +- src/liblua/src/lmem.h | 2 +- src/liblua/src/lobject.c | 2 +- src/liblua/src/lobject.h | 2 +- src/liblua/src/lopcodes.c | 2 +- src/liblua/src/lopcodes.h | 2 +- src/liblua/src/lparser.c | 2 +- src/liblua/src/lparser.h | 2 +- src/liblua/src/lstate.c | 2 +- src/liblua/src/lstate.h | 2 +- src/liblua/src/lstring.c | 2 +- src/liblua/src/lstring.h | 2 +- src/liblua/src/ltable.c | 2 +- src/liblua/src/ltable.h | 2 +- src/liblua/src/ltests.c | 2 +- src/liblua/src/ltm.c | 2 +- src/liblua/src/ltm.h | 2 +- src/liblua/src/lua/lua.c | 2 +- src/liblua/src/luac/luac.c | 2 +- src/liblua/src/luac/print.c | 2 +- src/liblua/src/lundump.c | 2 +- src/liblua/src/lundump.h | 2 +- src/liblua/src/lvm.c | 2 +- src/liblua/src/lvm.h | 2 +- src/liblua/src/lzio.c | 2 +- src/liblua/src/lzio.h | 2 +- src/libpoly/Base.cpp | 2 +- src/libpoly/Base.h | 2 +- src/libpoly/Constants.h | 2 +- src/libpoly/Poly.cpp | 2 +- src/libpoly/Poly.h | 2 +- src/libpoly/SymTable.cpp | 2 +- src/libpoly/SymTable.h | 2 +- src/libpoly/Symbol.cpp | 2 +- src/libpoly/Symbol.h | 2 +- src/libpoly/main.cpp | 2 +- src/libsql/AsyncSQL.cpp | 20 +- src/libsql/Semaphore.cpp | 2 +- src/libsql/Semaphore.h | 2 +- src/libsql/Statement.cpp | 2 +- src/libsql/Statement.h | 2 +- src/libsql/Tellwait.cpp | 2 +- src/libsql/Tellwait.h | 2 +- src/libsql/libsql.h | 2 +- src/libsql/stdafx.h | 2 +- src/libthecore/DES_table.h | 2 +- src/libthecore/buffer.cpp | 2 +- src/libthecore/buffer.h | 2 +- src/libthecore/crypt.h | 2 +- src/libthecore/des.cpp | 2 +- src/libthecore/fdwatch.cpp | 2 +- src/libthecore/fdwatch.h | 2 +- src/libthecore/gost.cpp | 2 +- src/libthecore/gost_old.cpp | 2 +- src/libthecore/hangul.h | 2 +- src/libthecore/heart.cpp | 2 +- src/libthecore/heart.h | 4 +- src/libthecore/kstbl.cpp | 2 +- src/libthecore/kstbl.h | 2 +- src/libthecore/log.cpp | 26 +- src/libthecore/log.h | 2 +- src/libthecore/main.cpp | 2 +- src/libthecore/main.h | 4 +- src/libthecore/memcpy.cpp | 2 +- src/libthecore/memcpy.h | 2 +- src/libthecore/signal.cpp | 2 +- src/libthecore/signal.h | 2 +- src/libthecore/socket.cpp | 16 +- src/libthecore/socket.h | 2 +- src/libthecore/stdafx.h | 2 +- src/libthecore/tea.cpp | 2 +- src/libthecore/typedef.h | 2 +- src/libthecore/utils.cpp | 24 +- src/libthecore/utils.h | 2 +- src/libthecore/xdirent.cpp | 2 +- src/libthecore/xdirent.h | 2 +- src/libthecore/xgetopt.cpp | 2 +- src/libthecore/xgetopt.h | 2 +- src/libthecore/xmd5.cpp | 2 +- src/libthecore/xmd5.h | 2 +- 484 files changed, 5767 insertions(+), 5767 deletions(-) diff --git a/src/common/VnumHelper.h b/src/common/VnumHelper.h index c025f9d..00423d8 100644 --- a/src/common/VnumHelper.h +++ b/src/common/VnumHelper.h @@ -1,16 +1,16 @@ -#ifndef __HEADER_VNUM_HELPER__ +#ifndef __HEADER_VNUM_HELPER__ #define __HEADER_VNUM_HELPER__ /** - ̹ ϰų ߰ , ҽ ĺ - ĺ(=VNum) ϵڵϴ Ǿ־ ſ µ + 이미 존재하거나 앞으로 추가될 아이템, 몹 등을 소스에서 식별할 때 현재는 모두 + 식별자(숫자=VNum)를 하드코딩하는 방식으로 되어있어서 가독성이 매우 떨어지는데 - δ ҽ  (Ȥ ) ְ ڴ ö ߰. + 앞으로는 소스만 봐도 어떤 아이템(혹은 몹)인지 알 수 있게 하자는 승철님의 제안으로 추가. - * Ǵµ PCH ٲ ü ؾϴ - ϴ ʿ cppϿ include ؼ . + * 이 파일은 변경이 잦을것으로 예상되는데 PCH에 넣으면 바뀔 때마다 전체 컴파일 해야하니 + 일단은 필요한 cpp파일에서 include 해서 쓰도록 했음. - * cpp ϸ ~ ũؾϴ ׳ common ־. (game, dbƮ ) + * cpp에서 구현하면 컴파일 ~ 링크해야하니 그냥 common에 헤더만 넣었음. (game, db프로젝트 둘 다 사용 예정) @date 2011. 8. 29. */ @@ -19,35 +19,35 @@ class CItemVnumHelper { public: - /// DVD һ ȯ - static const bool IsPhoenix(DWORD vnum) { return 53001 == vnum; } // NOTE: һ ȯ 53001 mob-vnum 34001 Դϴ. + /// 독일 DVD용 불사조 소환권 + static const bool IsPhoenix(DWORD vnum) { return 53001 == vnum; } // NOTE: 불사조 소환 아이템은 53001 이지만 mob-vnum은 34001 입니다. - /// 󸶴 ̺Ʈ ʽ´ ( 󸶴 ̺Ʈ Ư ̾ Ȱؼ ٰ ) + /// 라마단 이벤트 초승달의 반지 (원래는 라마단 이벤트용 특수 아이템이었으나 앞으로 여러 방향으로 재활용해서 계속 쓴다고 함) static const bool IsRamadanMoonRing(DWORD vnum) { return 71135 == vnum; } - /// ҷ ( ʽ´ ) + /// 할로윈 사탕 (스펙은 초승달의 반지와 동일) static const bool IsHalloweenCandy(DWORD vnum) { return 71136 == vnum; } - /// ũ ູ + /// 크리스마스 행복의 반지 static const bool IsHappinessRing(DWORD vnum) { return 71143 == vnum; } - /// ߷Ÿ ҴƮ + /// 발렌타인 사랑의 팬던트 static const bool IsLovePendant(DWORD vnum) { return 71145 == vnum; } }; class CMobVnumHelper { public: - /// DVD һ ȣ + /// 독일 DVD용 불사조 몹 번호 static bool IsPhoenix(DWORD vnum) { return 34001 == vnum; } static bool IsIcePhoenix(DWORD vnum) { return 34003 == vnum; } - /// PetSystem ϴ ΰ? + /// PetSystem이 관리하는 펫인가? static bool IsPetUsingPetSystem(DWORD vnum) { return (IsPhoenix(vnum) || IsReindeerYoung(vnum)) || IsIcePhoenix(vnum); } - /// 2011 ũ ̺Ʈ (Ʊ ) + /// 2011년 크리스마스 이벤트용 펫 (아기 순록) static bool IsReindeerYoung(DWORD vnum) { return 34002 == vnum; } - /// 󸶴 ̺Ʈ 渶(20119) .. ҷ ̺Ʈ 󸶴 渶 Ŭ( , 20219) + /// 라마단 이벤트 보상용 흑마(20119) .. 할로윈 이벤트용 라마단 흑마 클론(스펙은 같음, 20219) static bool IsRamadanBlackHorse(DWORD vnum) { return 20119 == vnum || 20219 == vnum || 22022 == vnum; } }; diff --git a/src/common/auction_table.h b/src/common/auction_table.h index e0d4568..53d3873 100644 --- a/src/common/auction_table.h +++ b/src/common/auction_table.h @@ -1,4 +1,4 @@ -#ifndef __INC_AUCTION_TABLES_H__ +#ifndef __INC_AUCTION_TABLES_H__ #define __INC_AUCTION_TABLES_H__ #include "tables.h" @@ -26,7 +26,7 @@ public: int get_price () { return offer_price; } } TAuctionSimpleItemInfo; -// auction . +// 각 auction 정보들. // primary key (item_id) typedef struct _auction : public _base_auction { @@ -49,8 +49,8 @@ public: empire = _empire; } - // ޼ҵ  auction  ϴ - // Ҵ. + // 이 메소드들은 어떤 변수가 auction에서 어떤 역할을 하는지 까먹을 까봐 + // 만들어놓았다. // by rtsummit DWORD get_item_id () { return item_id; } DWORD get_bidder_id () { return bidder_id; } @@ -89,7 +89,7 @@ typedef struct _sale : public _base_auction } TSaleItemInfo; -// wish ϴ . +// wish는 실제하는 아이템은 없다. // primary key (item_num, wisher_id) typedef struct _wish : public _base_auction { @@ -118,9 +118,9 @@ enum AuctionCmd {OPEN_AUCTION, OPEN_WISH_AUCTION, OPEN_MY_AUCTION, OPEN_MY_WISH_ AUCTION_REBID, AUCTION_BID_CANCEL, }; -// ݵ FAIL տ, ;Ѵ. -// ֳ, <= AUCTION_FAIL ̷ CHECK Űŵ -// ݴ SUCCESS ڿ, ;Ѵ. ٵ ֱ Ϸ... +// 반드시 FAIL 앞에, 실패 류 들이 와야한다. +// 왜냐, <= AUCTION_FAIL 이런 CHECK을 할 거거든 +// 반대로 SUCCESS 뒤에, 성공 류 들이 와야한다. 근데 성공류가 있긴 하려나... enum AuctionResult { AUCTION_EXPIRED, AUCTION_NOT_EXPIRED, AUCTION_NOT_ENOUGH_MONEY, AUCTION_SOLD, AUCTION_CANCEL, AUCTION_ALREADY_IN, AUCTION_NOT_IN, AUCTION_FAIL, AUCTION_SUCCESS }; @@ -218,7 +218,7 @@ typedef struct command_auction cmd = AUCTION_CHANGING_MONEY; price1 = _money; } - // bid cmd ٸ. + // bid랑 cmd만 다르다. void rebid (DWORD _item_id, int _bidPrice) { cmd = AUCTION_REBID; @@ -322,7 +322,7 @@ typedef struct auction_impur : public command_auction // auction_type; // start_idx; // size; -// conditions; öԲ غ. +// conditions; 정렬은 승철님께 조언을 구해보자.ㅇㅇ //} // //get_auction_detail_item_info diff --git a/src/common/billing.h b/src/common/billing.h index 807c0cc..a465ed7 100644 --- a/src/common/billing.h +++ b/src/common/billing.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN_II_COMMON_BILLING_H__ +#ifndef __INC_METIN_II_COMMON_BILLING_H__ #define __INC_METIN_II_COMMON_BILLING_H__ enum EBillingTypes diff --git a/src/common/building.h b/src/common/building.h index d42af04..2094b29 100644 --- a/src/common/building.h +++ b/src/common/building.h @@ -1,4 +1,4 @@ -#ifndef __METIN_II_COMMON_BUILDING_H__ +#ifndef __METIN_II_COMMON_BUILDING_H__ #define __METIN_II_COMMON_BUILDING_H__ namespace building @@ -41,8 +41,8 @@ namespace building long lNPCX; long lNPCY; - DWORD dwGroupVnum; // ׷ ϳ Ǽ - DWORD dwDependOnGroupVnum; // ־ϴ ׷ + DWORD dwGroupVnum; // 같은 그룹은 하나만 건설가능 + DWORD dwDependOnGroupVnum; // 지어져 있어야하는 그룹 } TObjectProto; typedef struct SObject diff --git a/src/common/cache.h b/src/common/cache.h index e4bb759..4d5350e 100644 --- a/src/common/cache.h +++ b/src/common/cache.h @@ -1,4 +1,4 @@ -#ifndef __INC_COMMON_CACHE_H__ +#ifndef __INC_COMMON_CACHE_H__ #define __INC_COMMON_CACHE_H__ template class cache diff --git a/src/common/d3dtype.h b/src/common/d3dtype.h index 907b58c..e2ddb5c 100644 --- a/src/common/d3dtype.h +++ b/src/common/d3dtype.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN_II_D3DTYPE_H__ +#ifndef __INC_METIN_II_D3DTYPE_H__ #define __INC_METIN_II_D3DTYPE_H__ typedef struct D3DXVECTOR2 diff --git a/src/common/item_length.h b/src/common/item_length.h index 2f44961..f3d297c 100644 --- a/src/common/item_length.h +++ b/src/common/item_length.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN2_ITEM_LENGTH_H__ +#ifndef __INC_METIN2_ITEM_LENGTH_H__ #define __INC_METIN2_ITEM_LENGTH_H__ enum EItemMisc @@ -31,8 +31,8 @@ enum EItemDragonSoulSockets ITEM_SOCKET_DRAGON_SOUL_ACTIVE_IDX = 2, ITEM_SOCKET_CHARGING_AMOUNT_IDX = 2, }; -// ̰ ģ ƴϾ? -// ߿ Ȯϸ ¼ -_-;;; +// 헐 이거 미친거 아니야? +// 나중에 소켓 확장하면 어쩌려고 이지랄 -_-;;; enum EItemUniqueSockets { ITEM_SOCKET_UNIQUE_SAVE_TIME = ITEM_SOCKET_MAX_NUM - 2, @@ -42,18 +42,18 @@ enum EItemUniqueSockets enum EItemTypes { ITEM_NONE, //0 - ITEM_WEAPON, //1// - ITEM_ARMOR, //2// - ITEM_USE, //3// + ITEM_WEAPON, //1//무기 + ITEM_ARMOR, //2//갑옷 + ITEM_USE, //3//아이템 사용 ITEM_AUTOUSE, //4 ITEM_MATERIAL, //5 - ITEM_SPECIAL, //6 // + ITEM_SPECIAL, //6 //스페셜 아이템 ITEM_TOOL, //7 - ITEM_LOTTERY, //8// - ITEM_ELK, //9// + ITEM_LOTTERY, //8//복권 + ITEM_ELK, //9//돈 ITEM_METIN, //10 ITEM_CONTAINER, //11 - ITEM_FISH, //12// + ITEM_FISH, //12//낚시 ITEM_ROD, //13 ITEM_RESOURCE, //14 ITEM_CAMPFIRE, //15 @@ -61,21 +61,21 @@ enum EItemTypes ITEM_SKILLBOOK, //17 ITEM_QUEST, //18 ITEM_POLYMORPH, //19 - ITEM_TREASURE_BOX, //20// - ITEM_TREASURE_KEY, //21// + ITEM_TREASURE_BOX, //20//보물상자 + ITEM_TREASURE_KEY, //21//보물상자 열쇠 ITEM_SKILLFORGET, //22 ITEM_GIFTBOX, //23 ITEM_PICK, //24 - ITEM_HAIR, //25//Ӹ - ITEM_TOTEM, //26// - ITEM_BLEND, //27//ɶ ϰ Ӽ ٴ ๰ - ITEM_COSTUME, //28//ڽ (2011 8 ߰ ڽ ýۿ ) - ITEM_DS, //29 //ȥ - ITEM_SPECIAL_DS, //30 // Ư ȥ (DS_SLOT ϴ UNIQUE ̶ ϸ ) - ITEM_EXTRACT, //31 ⵵. - ITEM_SECONDARY_COIN, //32 ?? ?? - ITEM_RING, //33 - ITEM_BELT, //34 Ʈ + ITEM_HAIR, //25//머리 + ITEM_TOTEM, //26//토템 + ITEM_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물 + ITEM_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템) + ITEM_DS, //29 //용혼석 + ITEM_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨) + ITEM_EXTRACT, //31 추출도구. + ITEM_SECONDARY_COIN, //32 ?? 명도전?? + ITEM_RING, //33 반지 + ITEM_BELT, //34 벨트 }; enum EMetinSubTypes @@ -111,8 +111,8 @@ enum EArmorSubTypes enum ECostumeSubTypes { - COSTUME_BODY = ARMOR_BODY, // [߿!!] ECostumeSubTypes enum value EArmorSubTypes װͰ ƾ . - COSTUME_HAIR = ARMOR_HEAD, // ̴ ڽ ۿ ߰ Ӽ ̰ڴٴ û Ȱϱ . + COSTUME_BODY = ARMOR_BODY, // [중요!!] ECostumeSubTypes enum value는 종류별로 EArmorSubTypes의 그것과 같아야 함. + COSTUME_HAIR = ARMOR_HEAD, // 이는 코스츔 아이템에 추가 속성을 붙이겠다는 사업부의 요청에 따라서 기존 로직을 활용하기 위함임. COSTUME_NUM_TYPES, }; @@ -215,8 +215,8 @@ enum EUseSubTypes 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 EExtractSubTypes @@ -270,7 +270,7 @@ enum EItemFlag { ITEM_FLAG_REFINEABLE = (1 << 0), ITEM_FLAG_SAVE = (1 << 1), - ITEM_FLAG_STACKABLE = (1 << 2), // ĥ + ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음 ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), ITEM_FLAG_SLOW_QUERY = (1 << 4), ITEM_FLAG_UNUSED01 = (1 << 5), // UNUSED @@ -287,24 +287,24 @@ enum EItemFlag 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_C = (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_SAFEBOX = (1 << 17), // â + 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_C = (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_SAFEBOX = (1 << 17), // 창고에 넣을 수 없음 }; enum EItemWearableFlag @@ -335,16 +335,16 @@ enum ELimitTypes 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 diff --git a/src/common/length.h b/src/common/length.h index fba03e3..8e40d4e 100644 --- a/src/common/length.h +++ b/src/common/length.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN_II_LENGTH_H__ +#ifndef __INC_METIN_II_LENGTH_H__ #define __INC_METIN_II_LENGTH_H__ #define WORD_MAX 0xffff @@ -22,10 +22,10 @@ enum EMisc GUILD_NAME_MAX_LEN = 12, - SHOP_HOST_ITEM_MAX_NUM = 40, /* ȣƮ ִ */ - SHOP_GUEST_ITEM_MAX_NUM = 18, /* ԽƮ ִ */ + SHOP_HOST_ITEM_MAX_NUM = 40, /* 호스트의 최대 아이템 개수 */ + SHOP_GUEST_ITEM_MAX_NUM = 18, /* 게스트의 최대 아이템 개수 */ - SHOP_PRICELIST_MAX_NUM = 40, ///< λ Ʈ ִ + SHOP_PRICELIST_MAX_NUM = 40, ///< 개인상점 가격정보 리스트에서 유지할 가격정보의 최대 갯수 CHAT_MAX_LEN = 512, @@ -84,19 +84,19 @@ enum EMisc /** - **** Ҵ (DB Item Position) **** + **** 현재까지 할당 된 아이템 영역 정리 (DB상 Item Position) **** +------------------------------------------------------+ 0 - | ij ⺻ κ丮 (45ĭ * 2) 90ĭ | + | 캐릭터 기본 인벤토리 (45칸 * 2페이지) 90칸 | +------------------------------------------------------+ 90 = INVENTORY_MAX_NUM(90) - | ij â ( ) 32ĭ | + | 캐릭터 장비 창 (착용중인 아이템) 32칸 | +------------------------------------------------------+ 122 = INVENTORY_MAX_NUM(90) + WEAR_MAX_NUM(32) - | ȥ â ( ȥ) 12ĭ | + | 용혼석 장비 창 (착용중인 용혼석) 12칸 | +------------------------------------------------------+ 134 = 122 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_MAX_NUM(2) - | ȥ â ( ̻) 18ĭ | + | 용혼석 장비 창 예약 (아직 미사용) 18칸 | +------------------------------------------------------+ 152 = 134 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_RESERVED_MAX_NUM(3) - | Ʈ κ丮 (Ʈ ÿ Ʈ Ȱ)| + | 벨트 인벤토리 (벨트 착용시에만 벨트 레벨에 따라 활성)| +------------------------------------------------------+ 168 = 152 + BELT_INVENTORY_SLOT_COUNT(16) = INVENTORY_AND_EQUIP_CELL_MAX - | ̻ | + | 미사용 | +------------------------------------------------------+ ?? */ }; @@ -131,10 +131,10 @@ enum EWearPositions WEAR_COSTUME_BODY, // 19 WEAR_COSTUME_HAIR, // 20 - WEAR_RING1, // 21 : ű 1 () - WEAR_RING2, // 22 : ű 2 () + WEAR_RING1, // 21 : 신규 반지슬롯1 (왼쪽) + WEAR_RING2, // 22 : 신규 반지슬롯2 (오른쪽) - WEAR_BELT, // 23 : ű Ʈ + WEAR_BELT, // 23 : 신규 벨트슬롯 WEAR_MAX = 32 // }; @@ -145,7 +145,7 @@ enum EDragonSoulDeckType DRAGON_SOUL_DECK_1, DRAGON_SOUL_DECK_MAX_NUM = 2, - DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3, // NOTE: ߿! , 3 з . DS DECK ø ݵ ŭ RESERVED ؾ ! + DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3, // NOTE: 중요! 아직 사용중이진 않지만, 3페이지 분량을 예약 해 둠. DS DECK을 늘릴 경우 반드시 그 수만큼 RESERVED에서 차감해야 함! }; enum ESex @@ -167,7 +167,7 @@ enum EDirection DIR_MAX_NUM }; -#define ABILITY_MAX_LEVEL 10 /* ִ */ +#define ABILITY_MAX_LEVEL 10 /* 기술 최대 레벨 */ enum EAbilityDifficulty { @@ -180,9 +180,9 @@ enum EAbilityDifficulty enum EAbilityCategory { - CATEGORY_PHYSICAL, /* ü Ƽ */ - CATEGORY_MENTAL, /* Ƽ */ - CATEGORY_ATTRIBUTE, /* ɷ Ƽ */ + CATEGORY_PHYSICAL, /* 신체적 어빌리티 */ + CATEGORY_MENTAL, /* 정신적 어빌리티 */ + CATEGORY_ATTRIBUTE, /* 능력 어빌리티 */ CATEGORY_NUM_TYPES }; @@ -252,13 +252,13 @@ enum EParts 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_TALKING, /* 그냥 채팅 */ + CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */ + CHAT_TYPE_NOTICE, /* 공지사항 */ + CHAT_TYPE_PARTY, /* 파티말 */ + CHAT_TYPE_GUILD, /* 길드말 */ + CHAT_TYPE_COMMAND, /* 일반 명령 */ + CHAT_TYPE_SHOUT, /* 외치기 */ CHAT_TYPE_WHISPER, CHAT_TYPE_BIG_NOTICE, CHAT_TYPE_MONARCH_NOTICE, @@ -401,38 +401,38 @@ enum EApplyTypes APPLY_ATTBONUS_SURA, // 61 APPLY_ATTBONUS_SHAMAN, // 62 APPLY_ATTBONUS_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_PC_BANG_EXP_BONUS, // 75 PC EXP ʽ - APPLY_PC_BANG_DROP_BONUS, // 76 PC ʽ + 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_PC_BANG_EXP_BONUS, // 75 PC방 아이템 EXP 보너스 + APPLY_PC_BANG_DROP_BONUS, // 76 PC방 아이템 드롭율 보너스 - APPLY_EXTRACT_HP_PCT, // 77 HP Ҹ + APPLY_EXTRACT_HP_PCT, // 77 사용시 HP 소모 - APPLY_RESIST_WARRIOR, // 78 翡 - APPLY_RESIST_ASSASSIN, // 79 ڰ - 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_RESIST_WARRIOR, // 78 무사에게 저항 + APPLY_RESIST_ASSASSIN, // 79 자객에게 저항 + 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_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, // @@ -584,7 +584,7 @@ enum EGuildWarState GUILD_WAR_OVER, GUILD_WAR_RESERVE, - GUILD_WAR_DURATION = 30*60, // 1ð + GUILD_WAR_DURATION = 30*60, // 1시간 GUILD_WAR_WIN_POINT = 1000, GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12*60*60, }; @@ -628,13 +628,13 @@ enum EMoneyLogType enum EPremiumTypes { - PREMIUM_EXP, // ġ 1.2 - PREMIUM_ITEM, // 2 - PREMIUM_SAFEBOX, // â 1ĭ 3ĭ - PREMIUM_AUTOLOOT, // ڵ ݱ - PREMIUM_FISH_MIND, // Ȯ - PREMIUM_MARRIAGE_FAST, // ݽ մϴ. - PREMIUM_GOLD, // 1.5 + PREMIUM_EXP, // 경험치가 1.2배 + PREMIUM_ITEM, // 아이템 드롭율이 2배 + PREMIUM_SAFEBOX, // 창고가 1칸에서 3칸 + PREMIUM_AUTOLOOT, // 돈 자동 줍기 + PREMIUM_FISH_MIND, // 고급 물고기 낚일 확률 상승 + PREMIUM_MARRIAGE_FAST, // 금실 증가 양을 빠르게합니다. + PREMIUM_GOLD, // 돈 드롭율이 1.5배 PREMIUM_MAX_NUM = 9 }; @@ -664,10 +664,10 @@ enum SPECIAL_EFFECT SE_AUTO_HPUP, SE_AUTO_SPUP, - SE_EQUIP_RAMADAN_RING, // 󸶴 ʽ´ (71135) Ʈ (ߵƮ, Ʈ ƴ) - SE_EQUIP_HALLOWEEN_CANDY, // ҷ (-_-;) ߵϴ Ʈ - SE_EQUIP_HAPPINESS_RING, // ũ ູ (71143) Ʈ (ߵƮ, Ʈ ƴ) - SE_EQUIP_LOVE_PENDANT, // ߷Ÿ ҴƮ(71145) Ʈ (ߵƮ, Ʈ ƴ) + SE_EQUIP_RAMADAN_RING, // 라마단 초승달의 반지(71135) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님) + SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트 + SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지(71143) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님) + SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님) } ; enum ETeenFlags @@ -682,10 +682,10 @@ enum ETeenFlags #include "item_length.h" -// inventory position Ÿ ü -// int Ͻ ȯ ִ , -// κ õ Լ window_type ʰ, cell ϳ ޾ұ ,( κ ϳ ̾ inventory type̶ ʿ ,) -// κ Լ ȣκ ϴ ϱ ̴. +// inventory의 position을 나타내는 구조체 +// int와의 암시적 형변환이 있는 이유는, +// 인벤 관련된 모든 함수가 window_type은 받지 않고, cell 하나만 받았기 때문에,(기존에는 인벤이 하나 뿐이어서 inventory type이란게 필요없었기 때문에,) +// 인벤 관련 모든 함수 호출부분을 수정하는 것이 난감하기 떄문이다. enum EDragonSoulRefineWindowSize { @@ -734,7 +734,7 @@ typedef struct SItemPos return cell < INVENTORY_AND_EQUIP_SLOT_MAX; case DRAGON_SOUL_INVENTORY: return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM); - // ũⰡ window valid üũ . + // 동적으로 크기가 정해지는 window는 valid 체크를 할 수가 없다. case SAFEBOX: case MALL: return false; diff --git a/src/common/noncopyable.h b/src/common/noncopyable.h index 62e0ead..d74899b 100644 --- a/src/common/noncopyable.h +++ b/src/common/noncopyable.h @@ -1,4 +1,4 @@ -#ifndef INC_METIN_II_COMMON_NONCOPYABLE_TEMPLATE +#ifndef INC_METIN_II_COMMON_NONCOPYABLE_TEMPLATE #define INC_METIN_II_COMMON_NONCOPYABLE_TEMPLATE class noncopyable diff --git a/src/common/pool.h b/src/common/pool.h index f53959c..5329cdc 100644 --- a/src/common/pool.h +++ b/src/common/pool.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN_II_COMMON_POOL_H__ +#ifndef __INC_METIN_II_COMMON_POOL_H__ #define __INC_METIN_II_COMMON_POOL_H__ #include diff --git a/src/common/service.h b/src/common/service.h index b019a2b..5291838 100644 --- a/src/common/service.h +++ b/src/common/service.h @@ -1,10 +1,10 @@ -#ifndef __INC_SERVICE_H__ +#ifndef __INC_SERVICE_H__ #define __INC_SERVICE_H__ #define ENABLE_AUTODETECT_INTERNAL_IP #define ENABLE_PROXY_IP #define ENABLE_PORT_SECURITY -#define _IMPROVED_PACKET_ENCRYPTION_ // Ŷ ȣȭ +#define _IMPROVED_PACKET_ENCRYPTION_ // 패킷 암호화 개선 //#define __AUCTION__ #define __PET_SYSTEM__ #define __UDP_BLOCK__ diff --git a/src/common/singleton.h b/src/common/singleton.h index da4e135..84debb8 100644 --- a/src/common/singleton.h +++ b/src/common/singleton.h @@ -1,4 +1,4 @@ -#ifndef __INC_SINGLETON_H__ +#ifndef __INC_SINGLETON_H__ #define __INC_SINGLETON_H__ #include diff --git a/src/common/stl.h b/src/common/stl.h index 9b3c781..1d31df4 100644 --- a/src/common/stl.h +++ b/src/common/stl.h @@ -1,4 +1,4 @@ -#ifndef __INC_METIN_II_STL_H__ +#ifndef __INC_METIN_II_STL_H__ #define __INC_METIN_II_STL_H__ #include diff --git a/src/common/tables.h b/src/common/tables.h index 6f7adac..1da5980 100644 --- a/src/common/tables.h +++ b/src/common/tables.h @@ -1,4 +1,4 @@ -#ifndef __INC_TABLES_H__ +#ifndef __INC_TABLES_H__ #define __INC_TABLES_H__ #include "length.h" @@ -6,7 +6,7 @@ typedef DWORD IDENT; /** - * @version 05/06/10 Bang2ni - Myshop Pricelist Ŷ HEADER_XX_MYSHOP_PRICELIST_XXX ߰ + * @version 05/06/10 Bang2ni - Myshop Pricelist 관련 패킷 HEADER_XX_MYSHOP_PRICELIST_XXX 추가 */ enum { @@ -104,8 +104,8 @@ enum HEADER_GD_BILLING_CHECK = 106, HEADER_GD_MALL_LOAD = 107, - HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< û - HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< Ʈ û + HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< 가격정보 갱신 요청 + HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< 가격정보 리스트 요청 HEADER_GD_BLOCK_CHAT = 110, @@ -116,21 +116,21 @@ enum // END_OF_PCBANG_IP_LIST_BY_AUTH HEADER_GD_HAMMER_OF_TOR = 114, - HEADER_GD_RELOAD_ADMIN = 115, ///< û - HEADER_GD_BREAK_MARRIAGE = 116, ///< ȥ ı - HEADER_GD_ELECT_MONARCH = 117, ///< ǥ - HEADER_GD_CANDIDACY = 118, ///< - HEADER_GD_ADD_MONARCH_MONEY = 119, ///< - HEADER_GD_TAKE_MONARCH_MONEY = 120, ///< - HEADER_GD_COME_TO_VOTE = 121, ///< ǥ - HEADER_GD_RMCANDIDACY = 122, ///< ĺ () - HEADER_GD_SETMONARCH = 123, ///<ּ () - HEADER_GD_RMMONARCH = 124, ///<ֻ + HEADER_GD_RELOAD_ADMIN = 115, ///<운영자 정보 요청 + HEADER_GD_BREAK_MARRIAGE = 116, ///< 결혼 파기 + HEADER_GD_ELECT_MONARCH = 117, ///< 군주 투표 + HEADER_GD_CANDIDACY = 118, ///< 군주 등록 + HEADER_GD_ADD_MONARCH_MONEY = 119, ///< 군주 돈 증가 + HEADER_GD_TAKE_MONARCH_MONEY = 120, ///< 군주 돈 감소 + HEADER_GD_COME_TO_VOTE = 121, ///< 표결 + HEADER_GD_RMCANDIDACY = 122, ///< 후보 제거 (운영자) + HEADER_GD_SETMONARCH = 123, ///<군주설정 (운영자) + HEADER_GD_RMMONARCH = 124, ///<군주삭제 HEADER_GD_DEC_MONARCH_MONEY = 125, HEADER_GD_CHANGE_MONARCH_LORD = 126, - HEADER_GD_BLOCK_COUNTRY_IP = 127, // 뿪 IP-Block - HEADER_GD_BLOCK_EXCEPTION = 128, // 뿪 IP-Block + HEADER_GD_BLOCK_COUNTRY_IP = 127, // 광대역 IP-Block + HEADER_GD_BLOCK_EXCEPTION = 128, // 광대역 IP-Block 예외 HEADER_GD_REQ_CHANGE_GUILD_MASTER = 129, @@ -139,7 +139,7 @@ enum HEADER_GD_UPDATE_HORSE_NAME = 131, HEADER_GD_REQ_HORSE_NAME = 132, - HEADER_GD_DC = 133, // Login Key + HEADER_GD_DC = 133, // Login Key를 지움 HEADER_GD_VALID_LOGOUT = 134, @@ -257,23 +257,23 @@ enum HEADER_DG_WEDDING_START = 155, HEADER_DG_WEDDING_END = 156, - HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< Ʈ - HEADER_DG_RELOAD_ADMIN = 158, ///<  ε - HEADER_DG_BREAK_MARRIAGE = 159, ///< ȥ ı - HEADER_DG_ELECT_MONARCH = 160, ///< ǥ - HEADER_DG_CANDIDACY = 161, ///< - HEADER_DG_ADD_MONARCH_MONEY = 162, ///< - HEADER_DG_TAKE_MONARCH_MONEY = 163, ///< - HEADER_DG_COME_TO_VOTE = 164, ///< ǥ - HEADER_DG_RMCANDIDACY = 165, ///< ĺ () - HEADER_DG_SETMONARCH = 166, ///<ּ () - HEADER_DG_RMMONARCH = 167, ///<ֻ + HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< 가격정보 리스트 응답 + HEADER_DG_RELOAD_ADMIN = 158, ///< 운영자 정보 리로드 + HEADER_DG_BREAK_MARRIAGE = 159, ///< 결혼 파기 + HEADER_DG_ELECT_MONARCH = 160, ///< 군주 투표 + HEADER_DG_CANDIDACY = 161, ///< 군주 등록 + HEADER_DG_ADD_MONARCH_MONEY = 162, ///< 군주 돈 증가 + HEADER_DG_TAKE_MONARCH_MONEY = 163, ///< 군주 돈 감소 + HEADER_DG_COME_TO_VOTE = 164, ///< 표결 + HEADER_DG_RMCANDIDACY = 165, ///< 후보 제거 (운영자) + HEADER_DG_SETMONARCH = 166, ///<군주설정 (운영자) + HEADER_DG_RMMONARCH = 167, ///<군주삭제 HEADER_DG_DEC_MONARCH_MONEY = 168, HEADER_DG_CHANGE_MONARCH_LORD_ACK = 169, HEADER_DG_UPDATE_MONARCH_INFO = 170, - HEADER_DG_BLOCK_COUNTRY_IP = 171, // 뿪 IP-Block - HEADER_DG_BLOCK_EXCEPTION = 172, // 뿪 IP-Block account + HEADER_DG_BLOCK_COUNTRY_IP = 171, // 광대역 IP-Block + HEADER_DG_BLOCK_EXCEPTION = 172, // 광대역 IP-Block 예외 account HEADER_DG_ACK_CHANGE_GUILD_MASTER = 173, @@ -393,7 +393,7 @@ typedef struct SPlayerItem DWORD count; DWORD vnum; - long alSockets[ITEM_SOCKET_MAX_NUM]; // Ϲȣ + long alSockets[ITEM_SOCKET_MAX_NUM]; // 소켓번호 TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM]; @@ -608,9 +608,9 @@ typedef struct SShopItemTable DWORD vnum; BYTE count; - TItemPos pos; // PC ̿ - DWORD price; // PC, shop_table_ex.txt ̿ - BYTE display_pos; // PC, shop_table_ex.txt ̿, ġ. + TItemPos pos; // PC 상점에만 이용 + DWORD price; // PC, shop_table_ex.txt 상점에만 이용 + BYTE display_pos; // PC, shop_table_ex.txt 상점에만 이용, 보일 위치. } TShopItemTable; typedef struct SShopTable @@ -674,12 +674,12 @@ typedef struct SItemTable : public SEntityTable BYTE bSpecular; BYTE bGainSocketPct; - short int sAddonType; // ⺻ Ӽ + short int sAddonType; // 기본 속성 - // Ʒ limit flag realtime üũ , VNUM ε, - // Ź ۸ ʿ 쿡 LIMIT_MAX_NUM 鼭 üũϴ ϰ Ŀ ̸ . - char cLimitRealTimeFirstUseIndex; // limit ʵ尪 ߿ LIMIT_REAL_TIME_FIRST_USE ÷ ġ ( -1) - char cLimitTimerBasedOnWearIndex; // limit ʵ尪 ߿ LIMIT_TIMER_BASED_ON_WEAR ÷ ġ ( -1) + // 아래 limit flag들은 realtime에 체크 할 일이 많고, 아이템 VNUM당 고정된 값인데, + // 현재 구조대로 매번 아이템마다 필요한 경우에 LIMIT_MAX_NUM까지 루프돌면서 체크하는 부하가 커서 미리 저장 해 둠. + char cLimitRealTimeFirstUseIndex; // 아이템 limit 필드값 중에서 LIMIT_REAL_TIME_FIRST_USE 플래그의 위치 (없으면 -1) + char cLimitTimerBasedOnWearIndex; // 아이템 limit 필드값 중에서 LIMIT_TIMER_BASED_ON_WEAR 플래그의 위치 (없으면 -1) } TItemTable; @@ -717,7 +717,7 @@ typedef struct SPlayerLoadPacket { DWORD account_id; DWORD player_id; - BYTE account_index; /* account ġ */ + BYTE account_index; /* account 에서의 위치 */ } TPlayerLoadPacket; typedef struct SPlayerCreatePacket @@ -794,9 +794,9 @@ typedef struct SEmpireSelectPacket typedef struct SPacketGDSetup { char szPublicIP[16]; // Public IP which listen to users - BYTE bChannel; // ä - WORD wListenPort; // Ŭ̾Ʈ ϴ Ʈ ȣ - WORD wP2PPort; // Ű P2P Ʈ ȣ + BYTE bChannel; // 채널 + WORD wListenPort; // 클라이언트가 접속하는 포트 번호 + WORD wP2PPort; // 서버끼리 연결 시키는 P2P 포트 번호 long alMaps[32]; DWORD dwLoginCount; BYTE bAuthServer; @@ -974,8 +974,8 @@ typedef struct SPacketGuildWar long lInitialScore; } TPacketGuildWar; -// Game -> DB : ȭ -// DB -> Game : Ż +// Game -> DB : 상대적 변화값 +// DB -> Game : 토탈된 최종값 typedef struct SPacketGuildWarScore { DWORD dwGuildGainPoint; @@ -996,8 +996,8 @@ typedef struct SRefineTable //DWORD result_vnum; DWORD id; BYTE material_count; - int cost; // ҿ - int prob; // Ȯ + int cost; // 소요 비용 + int prob; // 확률 TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM]; } TRefineTable; @@ -1082,14 +1082,14 @@ typedef struct SPacketGDLoginByKey } TPacketGDLoginByKey; /** - * @version 05/06/08 Bang2ni - ӽð ߰ + * @version 05/06/08 Bang2ni - 지속시간 추가 */ typedef struct SPacketGiveGuildPriv { BYTE type; int value; DWORD guild_id; - time_t duration_sec; ///< ӽð + time_t duration_sec; ///< 지속시간 } TPacketGiveGuildPriv; typedef struct SPacketGiveEmpirePriv { @@ -1124,7 +1124,7 @@ typedef struct SPacketDGChangeCharacterPriv } TPacketDGChangeCharacterPriv; /** - * @version 05/06/08 Bang2ni - ӽð ߰ + * @version 05/06/08 Bang2ni - 지속시간 추가 */ typedef struct SPacketDGChangeGuildPriv { @@ -1132,7 +1132,7 @@ typedef struct SPacketDGChangeGuildPriv int value; DWORD guild_id; BYTE bLog; - time_t end_time_sec; ///< ӽð + time_t end_time_sec; ///< 지속시간 } TPacketDGChangeGuildPriv; typedef struct SPacketDGChangeEmpirePriv @@ -1313,27 +1313,27 @@ typedef struct DWORD dwPID2; } TPacketWeddingEnd; -/// λ . Ŷ ڿ byCount ŭ TItemPriceInfo ´. +/// 개인상점 가격정보의 헤더. 가변 패킷으로 이 뒤에 byCount 만큼의 TItemPriceInfo 가 온다. typedef struct SPacketMyshopPricelistHeader { - DWORD dwOwnerID; ///< ÷̾ ID - BYTE byCount; ///< + DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID + BYTE byCount; ///< 가격정보 갯수 } TPacketMyshopPricelistHeader; -/// λ ۿ +/// 개인상점의 단일 아이템에 대한 가격정보 typedef struct SItemPriceInfo { - DWORD dwVnum; ///< vnum - DWORD dwPrice; ///< + DWORD dwVnum; ///< 아이템 vnum + DWORD dwPrice; ///< 가격 } TItemPriceInfo; -/// λ Ʈ ̺ +/// 개인상점 아이템 가격정보 리스트 테이블 typedef struct SItemPriceListTable { - DWORD dwOwnerID; ///< ÷̾ ID - BYTE byCount; ///< Ʈ + DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID + BYTE byCount; ///< 가격정보 리스트의 갯수 - TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< Ʈ + TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< 가격정보 리스트 } TItemPriceListTable; typedef struct @@ -1354,12 +1354,12 @@ typedef struct SPacketPCBangIP //ADMIN_MANAGER typedef struct TAdminInfo { - int m_ID; //ID - char m_szAccount[32]; // - char m_szName[32]; //ij̸ - char m_szContactIP[16]; //پ - char m_szServerIP[16]; // - int m_Authority; // + int m_ID; //고유ID + char m_szAccount[32]; //계정 + char m_szName[32]; //캐릭터이름 + char m_szContactIP[16]; //접근아이피 + char m_szServerIP[16]; //서버아이피 + int m_Authority; //권한 } tAdminInfo; //END_ADMIN_MANAGER @@ -1380,20 +1380,20 @@ typedef struct SPacketReloadAdmin typedef struct TMonarchInfo { - DWORD pid[4]; // PID - int64_t money[4]; // - char name[4][32]; // ̸ - char date[4][32]; // ¥ + DWORD pid[4]; // 군주의 PID + int64_t money[4]; // 군주의 별개 돈 + char name[4][32]; // 군주의 이름 + char date[4][32]; // 군주 등록 날짜 } MonarchInfo; typedef struct TMonarchElectionInfo { - DWORD pid; // ǥ ѻ PID - DWORD selectedpid; // ǥ PID ( ) - char date[32]; // ǥ ¥ + DWORD pid; // 투표 한사람 PID + DWORD selectedpid; // 투표 당한 PID ( 군주 참가자 ) + char date[32]; // 투표 날짜 } MonarchElectionInfo; -// ⸶ +// 군주 출마자 typedef struct tMonarchCandidacy { DWORD pid; @@ -1465,14 +1465,14 @@ typedef struct tNeedLoginLogInfo DWORD dwPlayerID; } TPacketNeedLoginLogInfo; -// ˸ ׽Ʈ Ŷ +//독일 선물 알림 기능 테스트용 패킷 정보 typedef struct tItemAwardInformer { char login[LOGIN_MAX_LEN + 1]; - char command[20]; //ɾ - unsigned int vnum; // + char command[20]; //명령어 + unsigned int vnum; //아이템 } TPacketItemAwardInfromer; -// ˸ Ŷ +// 선물 알림 기능 삭제용 패킷 정보 typedef struct tDeleteAwardID { DWORD dwID; diff --git a/src/common/teen_packet.h b/src/common/teen_packet.h index 0c85886..87e89fd 100644 --- a/src/common/teen_packet.h +++ b/src/common/teen_packet.h @@ -1,4 +1,4 @@ -/********************************************************************* +/********************************************************************* * date : 2007.06.07 * file : teen_packet.h * author : mhh diff --git a/src/common/utils.h b/src/common/utils.h index c1050cd..daec1c2 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -1,4 +1,4 @@ -/*----- atoi function -----*/ +/*----- atoi function -----*/ inline bool str_to_number (bool& out, const char *in) { if (0==in || 0==in[0]) return false; diff --git a/src/db/AuctionManager.cpp b/src/db/AuctionManager.cpp index a82a24f..dd711a2 100644 --- a/src/db/AuctionManager.cpp +++ b/src/db/AuctionManager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #ifdef __AUCTION__ #include "DBManager.h" @@ -135,7 +135,7 @@ void AuctionManager::LoadAuctionItem() } int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { return; } @@ -182,7 +182,7 @@ void AuctionManager::LoadAuctionInfo() } int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { return; } @@ -226,7 +226,7 @@ void AuctionManager::LoadSaleInfo() } int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { return; } @@ -269,7 +269,7 @@ void AuctionManager::LoadWishInfo() } int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { return; } @@ -311,7 +311,7 @@ void AuctionManager::LoadMyBidInfo () } int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { return; } @@ -518,7 +518,7 @@ AuctionResult AuctionManager::Impur(DWORD purchaser_id, const char* purchaser_na return AUCTION_EXPIRED; } - // ﱸ عǷ, Ŵ . + // 즉구 해버렸으므로, 경매는 끝났다. item_info->expired_time = 0; item_info->bidder_id = purchaser_id; item_info->set_bidder_name (purchaser_name); diff --git a/src/db/AuctionManager.h b/src/db/AuctionManager.h index 5eeeec1..0671009 100644 --- a/src/db/AuctionManager.h +++ b/src/db/AuctionManager.h @@ -1,4 +1,4 @@ -#ifdef __AUCTION__ +#ifdef __AUCTION__ #ifndef __INC_AUCTION_MANAGER_H__ #define __INC_AUCTION_MANAGER_H__ @@ -243,7 +243,7 @@ private: TItemInfoCacheMap item_cache_map; }; -// pc ߴ Ÿ . +// pc가 입찰에 참여했던 경매를 관리. class MyBidBoard { public: @@ -255,7 +255,7 @@ public: int GetMoney (DWORD player_id, DWORD item_id); bool Delete (DWORD player_id, DWORD item_id); - // ̹ . + // 이미 있으면 덮어 씌운다. void Insert (DWORD player_id, DWORD item_id, int money); private: @@ -267,11 +267,11 @@ private: class AuctionManager : public singleton { private: - // auction ϵ ۵. + // auction에 등록된 아이템들. typedef std::unordered_map TItemCacheMap; TItemCacheMap auction_item_cache_map; - // auction ϵ , ̺ Ե ʴ ϴ ͵ + // auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들 AuctionBoard Auction; SaleBoard Sale; WishBoard Wish; diff --git a/src/db/BlockCountry.cpp b/src/db/BlockCountry.cpp index 9d5d448..f4e2e04 100644 --- a/src/db/BlockCountry.cpp +++ b/src/db/BlockCountry.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 /********************************************************************* * date : 2007.05.31 * file : BlockCountry.cpp @@ -114,7 +114,7 @@ bool CBlockCountry::IsBlockedCountryIp(const char *user_ip) st_addr.s_addr = in_address; if (INADDR_NONE == in_address) #endif - return true; // ǰ ϴ ϴ ó + return true; // 아이피가 괴상하니 일단 블럭처리 DO_ALL_BLOCK_IP(iter) { diff --git a/src/db/BlockCountry.h b/src/db/BlockCountry.h index 7e41e41..efd3427 100644 --- a/src/db/BlockCountry.h +++ b/src/db/BlockCountry.h @@ -1,4 +1,4 @@ -// vim: ts=4 sw=4 +// vim: ts=4 sw=4 // Date : 2007.05.31 // File : BlockCountry.h // Author : mhh diff --git a/src/db/Cache.cpp b/src/db/Cache.cpp index 3b28b3f..d13bed6 100644 --- a/src/db/Cache.cpp +++ b/src/db/Cache.cpp @@ -1,4 +1,4 @@ - + #include "stdafx.h" #include "Cache.h" @@ -29,12 +29,12 @@ CItemCache::~CItemCache() { } -// ̰ ̻ѵ... -// Delete , Cache ؾ ϴ° ƴѰ??? -// ٵ Cache ϴ κ . -// ã ǰ? -// ̷ س, ð ... -// ̹ ε... Ȯλ?????? +// 이거 이상한데... +// Delete를 했으면, Cache도 해제해야 하는것 아닌가??? +// 근데 Cache를 해제하는 부분이 없어. +// 못 찾은 건가? +// 이렇게 해놓으면, 계속 시간이 될 때마다 아이템을 계속 지워... +// 이미 사라진 아이템인데... 확인사살?????? // fixme // by rtsummit void CItemCache::Delete() @@ -53,12 +53,12 @@ void CItemCache::Delete() OnFlush(); //m_bNeedQuery = false; - //m_lastUpdateTime = time(0) - m_expireTime; // ٷ ŸӾƿ ǵ . + //m_lastUpdateTime = time(0) - m_expireTime; // 바로 타임아웃 되도록 하자. } void CItemCache::OnFlush() { - if (m_data.vnum == 0) // vnum 0̸ ϶ ǥõ ̴. + if (m_data.vnum == 0) // vnum이 0이면 삭제하라고 표시된 것이다. { char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id); @@ -190,7 +190,7 @@ CItemPriceListTableCache::CItemPriceListTableCache() void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList) { // - // ̹ ij̵ ۰ ߺ ã ߺ ʴ tmpvec ִ´. + // 이미 캐싱된 아이템과 중복된 아이템을 찾고 중복되지 않는 이전 정보는 tmpvec 에 넣는다. // std::vector tmpvec; @@ -206,7 +206,7 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList } // - // pUpdateList m_data ϰ tmpvec տ ŭ Ѵ. + // pUpdateList 를 m_data 에 복사하고 남은 공간을 tmpvec 의 앞에서 부터 남은 만큼 복사한다. // if (pUpdateList->byCount > SHOP_PRICELIST_MAX_NUM) @@ -219,7 +219,7 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList thecore_memcpy(m_data.aPriceInfo, pUpdateList->aPriceInfo, sizeof(TItemPriceInfo) * pUpdateList->byCount); - int nDeletedNum; // + int nDeletedNum; // 삭제된 가격정보의 갯수 if (pUpdateList->byCount < SHOP_PRICELIST_MAX_NUM) { @@ -248,14 +248,14 @@ void CItemPriceListTableCache::OnFlush() char szQuery[QUERY_MAX_LEN]; // - // ij ڿ DB Ѵ. + // 이 캐시의 소유자에 대한 기존에 DB 에 저장된 아이템 가격정보를 모두 삭제한다. // snprintf(szQuery, sizeof(szQuery), "DELETE FROM myshop_pricelist%s WHERE owner_id = %u", GetTablePostfix(), m_data.dwOwnerID); CDBManager::instance().ReturnQuery(szQuery, QID_ITEMPRICE_DESTROY, 0, NULL); // - // ij DB . + // 캐시의 내용을 모두 DB 에 쓴다. // for (int idx = 0; idx < m_data.byCount; ++idx) diff --git a/src/db/Cache.h b/src/db/Cache.h index 2548143..5839d5d 100644 --- a/src/db/Cache.h +++ b/src/db/Cache.h @@ -1,4 +1,4 @@ -// vim:ts=8 sw=4 +// vim:ts=8 sw=4 #ifndef __INC_DB_CACHE_H__ #define __INC_DB_CACHE_H__ @@ -29,7 +29,7 @@ class CPlayerTableCache : public cache // MYSHOP_PRICE_LIST /** * @class CItemPriceListTableCache - * @brief λ Ʈ ij class + * @brief 개인상점의 아이템 가격정보 리스트에 대한 캐시 class * @version 05/06/10 Bang2ni - First release. */ class CItemPriceListTableCache : public cache< TItemPriceListTable > @@ -38,20 +38,20 @@ class CItemPriceListTableCache : public cache< TItemPriceListTable > /// Constructor /** - * ij ð Ѵ. + * 캐시 만료 시간을 설정한다. */ CItemPriceListTableCache(void); - /// Ʈ + /// 리스트 갱신 /** - * @param [in] pUpdateList Ʈ + * @param [in] pUpdateList 갱신할 리스트 * - * ijõ Ѵ. - * Ʈ á ij̵ ڿ Ѵ. + * 캐시된 가격정보를 갱신한다. + * 가격정보 리스트가 가득 찼을 경우 기존에 캐싱된 정보들을 뒤에서 부터 삭제한다. */ void UpdateList(const TItemPriceListTable* pUpdateList); - /// DB Ѵ. + /// 가격정보를 DB 에 기록한다. virtual void OnFlush(void); private: diff --git a/src/db/ClientManager.cpp b/src/db/ClientManager.cpp index f13117b..12f7542 100644 --- a/src/db/ClientManager.cpp +++ b/src/db/ClientManager.cpp @@ -1,4 +1,4 @@ - + #include "stdafx.h" #include "../../common/billing.h" @@ -167,7 +167,7 @@ bool CClientManager::Initialize() LoadEventFlag(); - // database character-set + // database character-set을 강제로 맞춤 if (g_stLocale == "big5" || g_stLocale == "sjis") CDBManager::instance().QueryLocaleSet(); @@ -180,7 +180,7 @@ void CClientManager::MainLoop() sys_log(0, "ClientManager pointer is %p", this); - // η + // 메인루프 while (!m_bShutdowned) { while ((tmp = CDBManager::instance().PopResult())) @@ -196,7 +196,7 @@ void CClientManager::MainLoop() } // - // η ó + // 메인루프 종료처리 // sys_log(0, "MainLoop exited, Starting cache flushing"); @@ -204,7 +204,7 @@ void CClientManager::MainLoop() itertype(m_map_playerCache) it = m_map_playerCache.begin(); - //÷̾ ̺ ij ÷ + //플레이어 테이블 캐쉬 플러쉬 while (it != m_map_playerCache.end()) { CPlayerTableCache * c = (it++)->second; @@ -216,7 +216,7 @@ void CClientManager::MainLoop() itertype(m_map_itemCache) it2 = m_map_itemCache.begin(); - // ÷ + //아이템 플러쉬 while (it2 != m_map_itemCache.end()) { CItemCache * c = (it2++)->second; @@ -228,7 +228,7 @@ void CClientManager::MainLoop() // MYSHOP_PRICE_LIST // - // λ Ʈ Flush + // 개인상점 아이템 가격 리스트 Flush // for (itertype(m_mapItemPriceListCache) itPriceList = m_mapItemPriceListCache.begin(); itPriceList != m_mapItemPriceListCache.end(); ++itPriceList) { @@ -248,7 +248,7 @@ void CClientManager::Quit() void CClientManager::QUERY_BOOT(CPeer* peer, TPacketGDBoot * p) { - const BYTE bPacketVersion = 6; // BOOT Ŷ ٲ𶧸 ȣ ø Ѵ. + const BYTE bPacketVersion = 6; // BOOT 패킷이 바뀔때마다 번호를 올리도록 한다. std::vector vAdmin; std::vector vHost; @@ -507,9 +507,9 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) ClientHandleInfo * pi = (ClientHandleInfo *) qi->pvData; DWORD dwHandle = pi->dwHandle; - // ⿡ ϴ account_index Ѵ. - // ù° н ˾Ƴ ϴ 0 - // ι° ͸ 1 + // 여기에서 사용하는 account_index는 쿼리 순서를 말한다. + // 첫번째 패스워드 알아내기 위해 하는 쿼리가 0 + // 두번째 실제 데이터를 얻어놓는 쿼리가 1 if (pi->account_index == 0) { @@ -534,7 +534,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) { MYSQL_ROW row = mysql_fetch_row(res->pSQLResult); - // йȣ Ʋ.. + // 비밀번호가 틀리면.. if (((!row[2] || !*row[2]) && strcmp("000000", szSafeboxPassword)) || ((row[2] && *row[2]) && strcmp(row[2], szSafeboxPassword))) { @@ -600,8 +600,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) } - // ־Ƿ â ִ ó - // ̱ â ƾ ȿ° + // 쿼리에 에러가 있었으므로 응답할 경우 창고가 비어있는 것 처럼 + // 보이기 때문에 창고가 아얘 안열리는게 나음 if (!msg->Get()->pSQLResult) { sys_err("null safebox result"); @@ -711,8 +711,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) { case 72723: case 72724: case 72725: case 72726: case 72727: case 72728: case 72729: case 72730: - // ù ϴ ġ ... - // ׷ ׳ ϵ ڵ. ڿ ڵ ۵. + // 무시무시하지만 이전에 하던 걸 고치기는 무섭고... + // 그래서 그냥 하드 코딩. 선물 상자용 자동물약 아이템들. case 76004: case 76005: case 76021: case 76022: case 79012: case 79013: if (pItemAward->dwSocket2 == 0) @@ -824,7 +824,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) void CClientManager::QUERY_SAFEBOX_CHANGE_SIZE(CPeer * pkPeer, DWORD dwHandle, TSafeboxChangeSizePacket * p) { ClientHandleInfo * pi = new ClientHandleInfo(dwHandle); - pi->account_index = p->bSize; // account_index ӽ÷ + pi->account_index = p->bSize; // account_index를 사이즈로 임시로 사용 char szQuery[QUERY_MAX_LEN]; @@ -912,7 +912,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg) TItemPricelistReqInfo* pReqInfo = (TItemPricelistReqInfo*)static_cast(pMsg->pvUserData)->pvData; // - // DB ε Cache + // DB 에서 로드한 정보를 Cache 에 저장 // TItemPriceListTable table; @@ -931,7 +931,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg) PutItemPriceListCache(&table); // - // ε ͸ Game server + // 로드한 데이터를 Game server 에 전송 // TPacketMyshopPricelistHeader header; @@ -955,7 +955,7 @@ void CClientManager::RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg) TItemPriceListTable* pUpdateTable = (TItemPriceListTable*)static_cast(pMsg->pvUserData)->pvData; // - // DB ε Cache + // DB 에서 로드한 정보를 Cache 에 저장 // TItemPriceListTable table; @@ -1017,18 +1017,18 @@ void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpire UINT g_start_map[4] = { 0, // reserved - 1, // ż - 21, // õ - 41 // 뱹 + 1, // 신수국 + 21, // 천조국 + 41 // 진노국 }; // FIXME share with game DWORD g_start_position[4][2]= { { 0, 0 }, - { 469300, 964200 }, // ż - { 55700, 157900 }, // õ - { 969600, 278400 } // 뱹 + { 469300, 964200 }, // 신수국 + { 55700, 157900 }, // 천조국 + { 969600, 278400 } // 진노국 }; for (int i = 0; i < 3; ++i) @@ -1079,7 +1079,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD peer->SetMaps(p->alMaps); // - //   ִ + // 어떤 맵이 어떤 서버에 있는지 보내기 // TMapLocation kMapLocations; @@ -1186,7 +1186,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD peer->Encode(&vec_kMapLocations[0], sizeof(TMapLocation) * vec_kMapLocations.size()); // - // ¾ : Ǿ ٸ Ǿ ϰ . (P2P ؼ ) + // 셋업 : 접속한 피어에 다른 피어들이 접속하게 만든다. (P2P 컨넥션 생성) // sys_log(0, "SETUP: channel %u listen %u p2p %u count %u", peer->GetChannel(), p->wListenPort, p->wP2PPort, bMapCount); @@ -1202,7 +1202,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD if (tmp == peer) continue; - // ä 0̶ SETUP Ŷ Ǿ Ǵ auth + // 채널이 0이라면 아직 SETUP 패킷이 오지 않은 피어 또는 auth라고 간주할 수 있음 if (0 == tmp->GetChannel()) continue; @@ -1211,7 +1211,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD } // - // α + // 로그인 및 빌링정보 보내기 // TPacketLoginOnSetup * pck = (TPacketLoginOnSetup *) c_pData;; std::vector vec_repair; @@ -1284,8 +1284,8 @@ void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData) { TPlayerItem * p = (TPlayerItem *) c_pData; - // â ij ʰ, ij ִ ͵ Ѵ. - // auction Ʈ Ÿ ʾƾ Ѵ. EnrollInAuction ŸѴ. + // 창고면 캐쉬하지 않고, 캐쉬에 있던 것도 빼버려야 한다. + // auction은 이 루트를 타지 않아야 한다. EnrollInAuction을 타야한다. if (p->window == SAFEBOX || p->window == MALL) { @@ -1424,7 +1424,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) c = GetItemCache(pNew->id); - // + // 아이템 새로 생성 if (!c) { if (g_log) @@ -1433,15 +1433,15 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) c = new CItemCache; m_map_itemCache.insert(TItemCacheMap::value_type(pNew->id, c)); } - // + // 있을시 else { if (g_log) sys_log(0, "ITEM_CACHE: PutItemCache ==> Have Cache"); - // ڰ Ʋ + // 소유자가 틀리면 if (pNew->owner != c->Get()->owner) { - // ̹ ־ Ѵ. + // 이미 이 아이템을 가지고 있었던 유저로 부터 아이템을 삭제한다. TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner); if (it != m_map_pkItemCacheSetPtr.end()) @@ -1453,7 +1453,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) } } - // ο Ʈ + // 새로운 정보 업데이트 c->Put(pNew, bSkipQuery); TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner); @@ -1468,8 +1468,8 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) } else { - // ڰ Ƿ ٷ ؾ SQL Ͽ - // Ƿ ٷ Ѵ. + // 현재 소유자가 없으므로 바로 저장해야 다음 접속이 올 때 SQL에 쿼리하여 + // 받을 수 있으므로 바로 저장한다. if (g_log) sys_log(0, "ITEM_CACHE: direct save %u id %u", c->Get()->owner, c->Get()->id); else @@ -1529,7 +1529,7 @@ void CClientManager::UpdatePlayerCache() c->Flush(); - // Item Cache Ʈ + // Item Cache도 업데이트 UpdateItemCacheSet(c->Get()->id); } else if (c->CheckFlushTimeout()) @@ -1555,7 +1555,7 @@ void CClientManager::UpdateItemCache() { CItemCache * c = (it++)->second; - // Flush Ѵ. + // 아이템은 Flush만 한다. if (c->CheckFlushTimeout()) { if (g_test_server) @@ -1602,7 +1602,7 @@ void CClientManager::QUERY_ITEM_DESTROY(CPeer * pkPeer, const char * c_pData) if (g_log) sys_log(0, "HEADER_GD_ITEM_DESTROY: PID %u ID %u", dwPID, dwID); - if (dwPID == 0) // ƹ ٸ, 񵿱 + if (dwPID == 0) // 아무도 가진 사람이 없었다면, 비동기 쿼리 CDBManager::instance().AsyncQuery(szQuery); else CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, pkPeer->GetHandle(), NULL); @@ -1680,7 +1680,7 @@ void CClientManager::QUERY_RELOAD_PROTO() // ADD_GUILD_PRIV_TIME /** - * @version 05/06/08 Bang2ni - ӽð ߰ + * @version 05/06/08 Bang2ni - 지속시간 추가 */ void CClientManager::AddGuildPriv(TPacketGiveGuildPriv* p) { @@ -2161,8 +2161,8 @@ void CClientManager::WeddingEnd(TPacketWeddingEnd * p) } // -// ijÿ ijø Ʈ ϰ ijÿ ٸ -// 켱 ͸ ε ڿ ijø Ʈ Ѵ. +// 캐시에 가격정보가 있으면 캐시를 업데이트 하고 캐시에 가격정보가 없다면 +// 우선 기존의 데이터를 로드한 뒤에 기존의 정보로 캐시를 만들고 새로 받은 가격정보를 업데이트 한다. // // Old code: @@ -2242,7 +2242,7 @@ void CClientManager::MyshopPricelistUpdate(const TItemPriceListTable* pPacket) } // MYSHOP_PRICE_LIST -// ijõ ijø о ٷ ϰ ijÿ DB Ѵ. +// 캐시된 가격정보가 있으면 캐시를 읽어 바로 전송하고 캐시에 정보가 없으면 DB 에 쿼리를 한다. // void CClientManager::MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID) { @@ -2656,15 +2656,15 @@ void CClientManager::ProcessPackets(CPeer * peer) ComeToVote(peer, dwHandle, data); break; - case HEADER_GD_RMCANDIDACY: //< ĺ () + case HEADER_GD_RMCANDIDACY: //< 후보 제거 (운영자) RMCandidacy(peer, dwHandle, data); break; - case HEADER_GD_SETMONARCH: ///<ּ () + case HEADER_GD_SETMONARCH: ///<군주설정 (운영자) SetMonarch(peer, dwHandle, data); break; - case HEADER_GD_RMMONARCH: ///<ֻ + case HEADER_GD_RMMONARCH: ///<군주삭제 RMMonarch(peer, dwHandle, data); break; //END_MONARCH @@ -2857,9 +2857,9 @@ CPeer * CClientManager::GetAnyPeer() return m_peerList.front(); } -// DB Ŵ óѴ. +// DB 매니저로 부터 받은 결과를 처리한다. // -// @version 05/06/10 Bang2ni - (QID_ITEMPRICE_XXX) ߰ +// @version 05/06/10 Bang2ni - 가격정보 관련 쿼리(QID_ITEMPRICE_XXX) 추가 int CClientManager::AnalyzeQueryResult(SQLMsg * msg) { CQueryInfo * qi = (CQueryInfo *) msg->pvUserData; @@ -2977,7 +2977,7 @@ void UsageLog() char *time_s; struct tm lt; - int avg = g_dwUsageAvg / 3600; // 60 * 60 + int avg = g_dwUsageAvg / 3600; // 60 초 * 60 분 fp = fopen("usage.txt", "a+"); @@ -3010,7 +3010,7 @@ int CClientManager::Process() ++thecore_heart->pulse; /* - //30и + //30분마다 변경 if (((thecore_pulse() % (60 * 30 * 10)) == 0)) { g_iPlayerCacheFlushSeconds = MAX(60, rand() % 180); @@ -3088,11 +3088,11 @@ int CClientManager::Process() m_iCacheFlushCount = 0; - //÷̾ ÷ + //플레이어 플러쉬 UpdatePlayerCache(); - // ÷ + //아이템 플러쉬 UpdateItemCache(); - //α׾ƿ ó- ij ÷ + //로그아웃시 처리- 캐쉬셋 플러쉬 UpdateLogoutPlayer(); // MYSHOP_PRICE_LIST @@ -3162,13 +3162,13 @@ int CClientManager::Process() ///////////////////////////////////////////////////////////////// } - if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 60))) // 60ʿ ѹ + if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 60))) // 60초에 한번 { - // ũ ð . + // 유니크 아이템을 위한 시간을 보낸다. CClientManager::instance().SendTime(); } - if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 3600))) // ѽð ѹ + if (!(thecore_heart->pulse % (thecore_heart->passes_per_sec * 3600))) // 한시간에 한번 { CMoneyLog::instance().Save(); } @@ -3178,7 +3178,7 @@ int CClientManager::Process() int idx; CPeer * peer; - for (idx = 0; idx < num_events; ++idx) // Dz + for (idx = 0; idx < num_events; ++idx) // 인풋 { peer = (CPeer *) fdwatch_get_client_data(m_fdWatcher, idx); @@ -3258,7 +3258,7 @@ int CClientManager::Process() DWORD CClientManager::GetUserCount() { - // ܼ α īƮ .. --; + // 단순히 로그인 카운트를 센다.. --; return m_map_kLogonAccount.size(); } @@ -3318,7 +3318,7 @@ bool CClientManager::InitializeNowItemID() { DWORD dwMin, dwMax; - // ID ʱȭ Ѵ. + //아이템 ID를 초기화 한다. if (!CConfig::instance().GetTwoValue("ITEM_ID_RANGE", &dwMin, &dwMax)) { sys_err("conf.txt: Cannot find ITEM_ID_RANGE [start_item_id] [end_item_id]"); @@ -3748,7 +3748,7 @@ bool CClientManager::InitializeLocalization() bool CClientManager::__GetAdminInfo(const char *szIP, std::vector & rAdminVec) { - //szIP == NULL ϰ 缭  ´. + //szIP == NULL 일경우 모든서버에 운영자 권한을 갖는다. char szQuery[512]; snprintf(szQuery, sizeof(szQuery), "SELECT mID,mAccount,mName,mContactIP,mServerIP,mAuthority FROM gmlist WHERE mServerIP='ALL' or mServerIP='%s'", @@ -4312,7 +4312,7 @@ void CClientManager::SendSpareItemIDRange(CPeer* peer) } // -// Login Key ʿ . +// Login Key만 맵에서 지운다. // void CClientManager::DeleteLoginKey(TPacketDC *data) { @@ -4425,7 +4425,7 @@ void CClientManager::EnrollInAuction (CPeer * peer, DWORD owner_id, AuctionEnrol sys_err ("Player id %d doesn't have item %d.", owner_id, data->get_item_id()); return; } - // ð + 24ð . + // 현재 시각 + 24시간 후. time_t expired_time = time(0) + 24 * 60 * 60; TAuctionItemInfo auctioned_item_info (item->vnum, data->get_bid_price(), data->get_impur_price(), owner_id, "", expired_time, data->get_item_id(), 0, data->get_empire()); @@ -4444,7 +4444,7 @@ void CClientManager::EnrollInAuction (CPeer * peer, DWORD owner_id, AuctionEnrol } else { - // ɽø Auction ClientManager . + // 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다. TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(item->owner); if (it != m_map_pkItemCacheSetPtr.end()) @@ -4497,7 +4497,7 @@ void CClientManager::EnrollInSale (CPeer * peer, DWORD owner_id, AuctionEnrollSa sys_err ("Player id %d doesn't have item %d.", owner_id, data->get_item_id()); return; } - // ð + 24ð . + // 현재 시각 + 24시간 후. time_t expired_time = time(0) + 24 * 60 * 60; TSaleItemInfo sold_item_info (item->vnum, data->get_sale_price(), owner_id, player->name, data->get_item_id(), data->get_wisher_id()); @@ -4516,7 +4516,7 @@ void CClientManager::EnrollInSale (CPeer * peer, DWORD owner_id, AuctionEnrollSa } else { - // ɽø Auction ClientManager . + // 아이템 케시를 Auction에 등록 했으니 ClientManager에서는 뺀다. TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(item->owner); if (it != m_map_pkItemCacheSetPtr.end()) @@ -4556,7 +4556,7 @@ void CClientManager::EnrollInWish (CPeer * peer, DWORD wisher_id, AuctionEnrollW CPlayerTableCache* player_cache = it->second; TPlayerTable* player = player_cache->Get(false); - // ð + 24ð . + // 현재 시각 + 24시간 후. time_t expired_time = time(0) + 24 * 60 * 60; TWishItemInfo wished_item_info (data->get_item_num(), data->get_wish_price(), wisher_id, player->name, expired_time, data->get_empire()); @@ -4923,11 +4923,11 @@ void CClientManager::AuctionDeleteSaleItem (CPeer * peer, DWORD actor_id, DWORD AuctionManager::instance().DeleteSaleItem (actor_id, item_id); } -// ReBid ݾ׿ ؼ Ѵ. -// ReBid data->bid_price -// ݾ rebidϴ . -// ̷ rebid , -// ȣָӴϿ ֱ ϰ ϱ ̴. +// ReBid는 이전 입찰금액에 더해서 입찰한다. +// ReBid에선 data->bid_price가 이전 입찰가에 더해져서 +// 그 금액으로 rebid하는 것. +// 이렇게 한 이유는 rebid에 실패 했을 때, +// 유저의 호주머니에서 뺀 돈을 돌려주기 편하게 하기 위함이다. void CClientManager::AuctionReBid (CPeer * peer, DWORD bidder_id, AuctionBidInfo* data) { @@ -4952,14 +4952,14 @@ void CClientManager::AuctionReBid (CPeer * peer, DWORD bidder_id, AuctionBidInfo { sys_log(0, "ReBid Success. bidder_id item_id %d %d", bidder_id, data->get_item_id()); } - // ̰ FAIL ȵ. - // FAIL °, MyBid ִ bidder_id bidder_id ְŵ? - // ׷Ƿ ٸ ۵Ѵٰ Ѵٸ - // bidder_id MyBid Ѵ , װ ȭ . - // ٸ Ȱ bidder_id ϱ. - // ׷Ƿ BidCancel db ȴٴ , - // ̹ κп ؼ ˻簡 Ϻϴٴ ̾. - // ׷ Ȥó ;, fail ڵ带 ܵд. + // 이건 FAIL이 떠서는 안돼. + // FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든? + // 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면 + // 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어. + // 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까. + // 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은, + // 이미 그 부분에 대해서는 검사가 완벽하다는 것이야. + // 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다. if (result <= AUCTION_FAIL) { TPacketDGResultAuction enroll_result; @@ -4994,14 +4994,14 @@ void CClientManager::AuctionBidCancel (CPeer * peer, DWORD bidder_id, DWORD item { AuctionResult result = AuctionManager::instance().BidCancel (bidder_id, item_id); - // ̰ FAIL ȵ. - // FAIL °, MyBid ִ bidder_id bidder_id ְŵ? - // ׷Ƿ ٸ ۵Ѵٰ Ѵٸ - // bidder_id MyBid Ѵ , װ ȭ . - // ٸ Ȱ bidder_id ϱ. - // ׷Ƿ BidCancel db ȴٴ , - // ̹ κп ؼ ˻簡 Ϻϴٴ ̾. - // ׷ Ȥó ;, fail ڵ带 ܵд. + // 이건 FAIL이 떠서는 안돼. + // FAIL이 뜰 수가 없는게, MyBid에 있는 bidder_id에 대한 컨텐츠는 bidder_id만이 접근 할 수 있거든? + // 그러므로 다른 것이 다 정상적으로 작동한다고 가정 한다면 + // 한 게임 서버 내에서 bidder_id로 MyBid를 수정한다 할 지라도, 그건 동기화 문제가 없어. + // 다른 게임 서버에 똑같은 bidder_id를 가진 놈이 있을 수가 없으니까. + // 그러므로 그 게임 서버에서 BidCancel 명령을 db에 날렸다는 것은, + // 이미 그 부분에 대해서는 검사가 완벽하다는 것이야. + // 그래도 혹시나 싶어서, 디버깅을 위해 fail 코드를 남겨둔다. if (result <= AUCTION_FAIL) { TPacketDGResultAuction enroll_result; diff --git a/src/db/ClientManager.h b/src/db/ClientManager.h index a6d1a0e..731f4d8 100644 --- a/src/db/ClientManager.h +++ b/src/db/ClientManager.h @@ -1,4 +1,4 @@ -// vim:ts=8 sw=4 +// vim:ts=8 sw=4 #ifndef __INC_CLIENTMANAGER_H__ #define __INC_CLIENTMANAGER_H__ @@ -40,10 +40,10 @@ class CClientManager : public CNetBase, public singleton typedef std::unordered_map TChannelStatusMap; // MYSHOP_PRICE_LIST - /// Ʈ û + /// 아이템 가격정보 리스트 요청 정보 /** * first: Peer handle - * second: û ÷̾ ID + * second: 요청한 플레이어의 ID */ typedef std::pair< DWORD, DWORD > TItemPricelistReqInfo; // END_OF_MYSHOP_PRICE_LIST @@ -69,7 +69,7 @@ class CClientManager : public CNetBase, public singleton pAccountTable = NULL; player_id = dwPID; }; - //ϼɿ + //독일선물기능용 생성자 ClientHandleInfo(DWORD argHandle, DWORD dwPID, DWORD accountId) { dwHandle = argHandle; @@ -108,7 +108,7 @@ class CClientManager : public CNetBase, public singleton void SetChinaEventServer(bool flag) { m_bChinaEventServer = flag; } bool IsChinaEventServer() { return m_bChinaEventServer; } - DWORD GetUserCount(); // ӵ Ѵ. + DWORD GetUserCount(); // 접속된 사용자 수를 리턴 한다. void SendAllGuildSkillRechargePacket(); void SendTime(); @@ -128,23 +128,23 @@ class CClientManager : public CNetBase, public singleton void UpdateItemCache(); // MYSHOP_PRICE_LIST - /// Ʈ ijø ´. + /// 가격정보 리스트 캐시를 가져온다. /** - * @param [in] dwID Ʈ .(÷̾ ID) - * @return Ʈ ij + * @param [in] dwID 가격정보 리스트의 소유자.(플레이어 ID) + * @return 가격정보 리스트 캐시의 포인터 */ CItemPriceListTableCache* GetItemPriceListCache(DWORD dwID); - /// Ʈ ijø ִ´. + /// 가격정보 리스트 캐시를 넣는다. /** - * @param [in] pItemPriceList ijÿ Ʈ + * @param [in] pItemPriceList 캐시에 넣을 아이템 가격정보 리스트 * - * ijð ̹ Update ƴ replace Ѵ. + * 캐시가 이미 있으면 Update 가 아닌 replace 한다. */ void PutItemPriceListCache(const TItemPriceListTable* pItemPriceList); - /// Flush ð Ʈ ijø Flush ְ ijÿ Ѵ. + /// Flush 시간이 만료된 아이템 가격정보 리스트 캐시를 Flush 해주고 캐시에서 삭제한다. void UpdateItemPriceListCache(void); // END_OF_MYSHOP_PRICE_LIST @@ -162,8 +162,8 @@ class CClientManager : public CNetBase, public singleton void SendNotice(const char * c_pszFormat, ...); - char* GetCommand(char* str); //ϼɿ ɾ Լ - void ItemAward(CPeer * peer, char* login); // + char* GetCommand(char* str); //독일선물기능에서 명령어 얻는 함수 + void ItemAward(CPeer * peer, char* login); //독일 선물 기능 protected: void Destroy(); @@ -184,9 +184,9 @@ class CClientManager : public CNetBase, public singleton bool InitializeObjectTable(); bool InitializeMonarch(); - // mob_proto.txt, item_proto.txt mob_proto, item_proto real db ݿ. - // item_proto, mob_proto db ݿ ʾƵ, ưµ , - //   db item_proto, mob_proto о ߻Ѵ. + // mob_proto.txt, item_proto.txt에서 읽은 mob_proto, item_proto를 real db에 반영. + // item_proto, mob_proto를 db에 반영하지 않아도, 게임 돌아가는데는 문제가 없지만, + // 운영툴 등에서 db의 item_proto, mob_proto를 읽어 쓰기 때문에 문제가 발생한다. bool MirrorMobTableIntoDB(); bool MirrorItemTableIntoDB(); @@ -251,20 +251,20 @@ class CClientManager : public CNetBase, public singleton // END_PLAYER_INDEX_CREATE_BUG_FIX // MYSHOP_PRICE_LIST - /// ε Result ó + /// 가격정보 로드 쿼리에 대한 Result 처리 /** - * @param peer û Game server peer ü - * @param pMsg Result ü + * @param peer 가격정보를 요청한 Game server 의 peer 객체 포인터 + * @param pMsg 쿼리의 Result 로 받은 객체의 포인터 * - * ε Ʈ ijÿ ϰ peer Ʈ ش. + * 로드된 가격정보 리스트를 캐시에 저장하고 peer 에게 리스트를 보내준다. */ void RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg); - /// Ʈ ε Result ó + /// 가격정보 업데이트를 위한 로드 쿼리에 대한 Result 처리 /** - * @param pMsg Result ü + * @param pMsg 쿼리의 Result 로 받은 객체의 포인터 * - * ε Ʈ ijø Ʈ Ʈ Ѵ. + * 로드된 정보로 가격정보 리스트 캐시를 만들고 업데이트 받은 가격정보로 업데이트 한다. */ void RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg); // END_OF_MYSHOP_PRICE_LIST @@ -344,7 +344,7 @@ class CClientManager : public CNetBase, public singleton void SendAllLoginToBilling(); void SendLoginToBilling(CLoginData * pkLD, bool bLogin); - // ȥ + // 결혼 void MarriageAdd(TPacketMarriageAdd * p); void MarriageUpdate(TPacketMarriageUpdate * p); void MarriageRemove(TPacketMarriageRemove * p); @@ -354,20 +354,20 @@ class CClientManager : public CNetBase, public singleton void WeddingEnd(TPacketWeddingEnd * p); // MYSHOP_PRICE_LIST - // λ + // 개인상점 가격정보 - /// Ʈ Ʈ Ŷ(HEADER_GD_MYSHOP_PRICELIST_UPDATE) óԼ + /// 아이템 가격정보 리스트 업데이트 패킷(HEADER_GD_MYSHOP_PRICELIST_UPDATE) 처리함수 /** - * @param [in] pPacket Ŷ + * @param [in] pPacket 패킷 데이터의 포인터 */ // void MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket); void MyshopPricelistUpdate(const TItemPriceListTable* pPacket); - /// Ʈ û Ŷ(HEADER_GD_MYSHOP_PRICELIST_REQ) óԼ + /// 아이템 가격정보 리스트 요청 패킷(HEADER_GD_MYSHOP_PRICELIST_REQ) 처리함수 /** - * @param peer Ŷ Game server peer ü - * @param [in] dwHandle û peer ڵ - * @param [in] dwPlayerID Ʈ û ÷̾ ID + * @param peer 패킷을 보낸 Game server 의 peer 객체의 포인터 + * @param [in] dwHandle 가격정보를 요청한 peer 의 핸들 + * @param [in] dwPlayerID 가격정보 리스트를 요청한 플레이어의 ID */ void MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID); // END_OF_MYSHOP_PRICE_LIST @@ -387,7 +387,7 @@ class CClientManager : public CNetBase, public singleton private: int m_looping; - socket_t m_fdAccept; // ޴ + socket_t m_fdAccept; // 접속 받는 소켓 TPeerList m_peerList; CPeer * m_pkAuthPeer; @@ -404,7 +404,7 @@ class CClientManager : public CNetBase, public singleton typedef std::unordered_map TLoginDataByAID; TLoginDataByAID m_map_pkLoginDataByAID; - // Login LoginData pair ( α Ǿִ ) + // Login LoginData pair (실제 로그인 되어있는 계정) typedef std::unordered_map TLogonAccountMap; TLogonAccountMap m_map_kLogonAccount; @@ -436,14 +436,14 @@ class CClientManager : public CNetBase, public singleton bool m_bShutdowned; - TPlayerTableCacheMap m_map_playerCache; // ÷̾ id key + TPlayerTableCacheMap m_map_playerCache; // 플레이어 id가 key - TItemCacheMap m_map_itemCache; // id key - TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // ÷̾ id key, ÷̾  ij ֳ? + TItemCacheMap m_map_itemCache; // 아이템 id가 key + TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // 플레이어 id가 key, 이 플레이어가 어떤 아이템 캐쉬를 가지고 있나? // MYSHOP_PRICE_LIST - /// ÷̾ Ʈ map. key: ÷̾ ID, value: Ʈ ij - TItemPriceListCacheMap m_mapItemPriceListCache; ///< ÷̾ Ʈ + /// 플레이어별 아이템 가격정보 리스트 map. key: 플레이어 ID, value: 가격정보 리스트 캐시 + TItemPriceListCacheMap m_mapItemPriceListCache; ///< 플레이어별 아이템 가격정보 리스트 // END_OF_MYSHOP_PRICE_LIST TChannelStatusMap m_mChannelStatus; @@ -481,7 +481,7 @@ class CClientManager : public CNetBase, public singleton //BOOT_LOCALIZATION public: - /* ʱȭ + /* 로컬 정보 초기화 **/ bool InitializeLocalization(); diff --git a/src/db/ClientManagerBoot.cpp b/src/db/ClientManagerBoot.cpp index 09d2495..eb5efec 100644 --- a/src/db/ClientManagerBoot.cpp +++ b/src/db/ClientManagerBoot.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 #include #include #include "stdafx.h" @@ -172,42 +172,42 @@ class FCompareVnum bool CClientManager::InitializeMobTable() { - //================== Լ ==================// - //1. : 'mob_proto.txt', 'mob_proto_test.txt', 'mob_names.txt' а, - // (!)[mob_table] ̺ Ʈ Ѵ. (Ÿ : TMobTable) - //2. - // 1) 'mob_names.txt' о (a)[localMap](vnum:name) . - // 2) 'mob_proto_test.txt'ϰ (a)[localMap] - // (b)[test_map_mobTableByVnum](vnum:TMobTable) Ѵ. - // 3) 'mob_proto.txt' ϰ (a)[localMap] - // (!)[mob_table] ̺ . - // <> - // row , - // (b)[test_map_mobTableByVnum],(!)[mob_table] ο ִ row - // (b)[test_map_mobTableByVnum] Ѵ. - // 4) (b)[test_map_mobTableByVnum] row, (!)[mob_table] ߰Ѵ. - //3. ׽Ʈ - // 1)'mob_proto.txt' mob_table . -> Ϸ - // 2)'mob_names.txt' mob_table . - // 3)'mob_proto_test.txt' [ġ] mob_table . - // 4)'mob_proto_test.txt' [ο] mob_table . - // 5) () Ŭ̾Ʈ ۵ ϴ. + //================== 함수 설명 ==================// + //1. 요약 : 'mob_proto.txt', 'mob_proto_test.txt', 'mob_names.txt' 파일을 읽고, + // (!)[mob_table] 테이블 오브젝트를 생성한다. (타입 : TMobTable) + //2. 순서 + // 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. + // 2) 'mob_proto_test.txt'파일과 (a)[localMap] 맵으로 + // (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다. + // 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로 + // (!)[mob_table] 테이블을 만든다. + // <참고> + // 각 row 들 중, + // (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는 + // (b)[test_map_mobTableByVnum]의 것을 사용한다. + // 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다. + //3. 테스트 + // 1)'mob_proto.txt' 정보가 mob_table에 잘 들어갔는지. -> 완료 + // 2)'mob_names.txt' 정보가 mob_table에 잘 들어갔는지. + // 3)'mob_proto_test.txt' 에서 [겹치는] 정보가 mob_table 에 잘 들어갔는지. + // 4)'mob_proto_test.txt' 에서 [새로운] 정보가 mob_table 에 잘 들어갔는지. + // 5) (최종) 게임 클라이언트에서 제대로 작동 하는지. //_______________________________________________// //===============================================// - // 1) 'mob_names.txt' о (a)[localMap] . - //<(a)localMap > + // 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap] 맵을 만든다. + //<(a)localMap 맵 생성> map localMap; bool isNameFile = true; - //< б> + //<파일 읽기> cCsvTable nameData; if(!nameData.Load("mob_names.txt",'\t')) { - fprintf(stderr, "mob_names.txt о ߽ϴ\n"); + fprintf(stderr, "mob_names.txt 파일을 읽어오지 못했습니다\n"); isNameFile = false; } else { - nameData.Next(); //row . + nameData.Next(); //설명row 생략. while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } @@ -216,35 +216,35 @@ bool CClientManager::InitializeMobTable() //===============================================// - // 2) 'mob_proto_test.txt'ϰ (a)localMap - // (b)[test_map_mobTableByVnum](vnum:TMobTable) Ѵ. + // 2) 'mob_proto_test.txt'파일과 (a)localMap 맵으로 + // (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다. //0. - set vnumSet; //׽Ʈ , űԿ Ȯο . - //1. о + set vnumSet; //테스트용 파일 데이터중, 신규여부 확인에 사용. + //1. 파일 읽어오기 bool isTestFile = true; cCsvTable test_data; if(!test_data.Load("mob_proto_test.txt",'\t')) { - fprintf(stderr, "׽Ʈ ϴ. ״ մϴ.\n"); + fprintf(stderr, "테스트 파일이 없습니다. 그대로 진행합니다.\n"); isTestFile = false; } - //2. (c)[test_map_mobTableByVnum](vnum:TMobTable) . + //2. (c)[test_map_mobTableByVnum](vnum:TMobTable) 맵 생성. map test_map_mobTableByVnum; if (isTestFile) { - test_data.Next(); // ο Ѿ. + test_data.Next(); //설명 로우 넘어가기. - //. ׽Ʈ ̺ . + //ㄱ. 테스트 몬스터 테이블 생성. TMobTable * test_mob_table = NULL; int test_MobTableSize = test_data.m_File.GetRowCount()-1; test_mob_table = new TMobTable[test_MobTableSize]; memset(test_mob_table, 0, sizeof(TMobTable) * test_MobTableSize); - //. ׽Ʈ ̺ ְ, ʿ ֱ. + //ㄴ. 테스트 몬스터 테이블에 값을 넣고, 맵에까지 넣기. while(test_data.Next()) { if (!Set_Proto_Mob_Table(test_mob_table, test_data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } test_map_mobTableByVnum.insert(std::map::value_type(test_mob_table->dwVnum, test_mob_table)); @@ -255,22 +255,22 @@ bool CClientManager::InitializeMobTable() } - // 3) 'mob_proto.txt' ϰ (a)[localMap] - // (!)[mob_table] ̺ . - // <> - // row , - // (b)[test_map_mobTableByVnum],(!)[mob_table] ο ִ row - // (b)[test_map_mobTableByVnum] Ѵ. + // 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로 + // (!)[mob_table] 테이블을 만든다. + // <참고> + // 각 row 들 중, + // (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는 + // (b)[test_map_mobTableByVnum]의 것을 사용한다. - //1. б. + //1. 파일 읽기. cCsvTable data; if(!data.Load("mob_proto.txt",'\t')) { - fprintf(stderr, "mob_proto.txt о ߽ϴ\n"); + fprintf(stderr, "mob_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } - data.Next(); // row Ѿ - //2. (!)[mob_table] ϱ - //2.1 ߰Ǵ ľ + data.Next(); //설명 row 넘어가기 + //2. (!)[mob_table] 생성하기 + //2.1 새로 추가되는 갯수를 파악 int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); @@ -280,15 +280,15 @@ bool CClientManager::InitializeMobTable() addNumber++; } } - //data ٽ ùٷ ű.(ٽ о´;;) + //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("mob_proto.txt",'\t')) { - fprintf(stderr, "mob_proto.txt о ߽ϴ\n"); + fprintf(stderr, "mob_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } - data.Next(); // ( Į ϴ κ) - //2.2 ũ⿡ ° mob_table + data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) + //2.2 크기에 맞게 mob_table 생성 if (!m_vec_mobTable.empty()) { sys_log(0, "RELOAD: mob_proto"); @@ -297,18 +297,18 @@ bool CClientManager::InitializeMobTable() m_vec_mobTable.resize(data.m_File.GetRowCount()-1 + addNumber); memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size()); TMobTable * mob_table = &m_vec_mobTable[0]; - //2.3 ä + //2.3 데이터 채우기 while (data.Next()) { int col = 0; - //(b)[test_map_mobTableByVnum] row ִ . + //(b)[test_map_mobTableByVnum]에 같은 row가 있는지 조사. bool isSameRow = true; std::map::iterator it_map_mobTable; it_map_mobTable = test_map_mobTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_mobTable == test_map_mobTableByVnum.end()) { isSameRow = false; } - // row (b) о´. + //같은 row 가 있으면 (b)에서 읽어온다. if(isSameRow) { TMobTable *tempTable = it_map_mobTable->second; @@ -379,13 +379,13 @@ bool CClientManager::InitializeMobTable() if (!Set_Proto_Mob_Table(mob_table, data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } } - //¿ vnum ߰ + //셋에 vnum 추가 vnumSet.insert(mob_table->dwVnum); @@ -396,22 +396,22 @@ bool CClientManager::InitializeMobTable() //_____________________________________________________// - // 4) (b)[test_map_mobTableByVnum] row, (!)[mob_table] ߰Ѵ. - // ٽ о. + // 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다. + //파일 다시 읽어오기. test_data.Destroy(); isTestFile = true; test_data; if(!test_data.Load("mob_proto_test.txt",'\t')) { - fprintf(stderr, "׽Ʈ ϴ. ״ մϴ.\n"); + fprintf(stderr, "테스트 파일이 없습니다. 그대로 진행합니다.\n"); isTestFile = false; } if(isTestFile) { - test_data.Next(); // ο Ѿ. + test_data.Next(); //설명 로우 넘어가기. - while (test_data.Next()) //׽Ʈ Ⱦ,ο ߰Ѵ. + while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다. { - //ߺǴ κ̸ Ѿ. + //중복되는 부분이면 넘어간다. set::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { @@ -420,7 +420,7 @@ bool CClientManager::InitializeMobTable() if (!Set_Proto_Mob_Table(mob_table, test_data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "몹 프로토 테이블 셋팅 실패.\n"); } sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire); @@ -448,8 +448,8 @@ bool CClientManager::InitializeShopTable() std::unique_ptr pkMsg2(CDBManager::instance().DirectQuery(s_szQuery)); - // shop vnum ִµ shop_item ... з óǴ . - // óҺκ + // shop의 vnum은 있는데 shop_item 이 없을경우... 실패로 처리되니 주의 요망. + // 고처야할부분 SQLResult * pRes2 = pkMsg2->Get(); if (!pRes2->uiNumRows) @@ -488,7 +488,7 @@ bool CClientManager::InitializeShopTable() str_to_number(shop_table->dwNPCVnum, data[col++]); - if (!data[col]) // ϳ NULL ǹǷ.. + if (!data[col]) // 아이템이 하나도 없으면 NULL이 리턴 되므로.. continue; TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount]; @@ -561,7 +561,7 @@ bool CClientManager::InitializeQuestItemTable() continue; } - tbl.bType = ITEM_QUEST; // quest_item_proto ̺ ִ ͵ ITEM_QUEST + tbl.bType = ITEM_QUEST; // quest_item_proto 테이블에 있는 것들은 모두 ITEM_QUEST 유형 tbl.bSize = 1; m_vec_itemTable.push_back(tbl); @@ -572,39 +572,39 @@ bool CClientManager::InitializeQuestItemTable() bool CClientManager::InitializeItemTable() { - //================== Լ ==================// - //1. : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' а, - // (TItemTable), Ʈ Ѵ. - //2. - // 1) 'item_names.txt' о (a)[localMap](vnum:name) . - // 2) 'item_proto_text.txt'ϰ (a)[localMap] - // (b)[test_map_itemTableByVnum](vnum:TItemTable) Ѵ. - // 3) 'item_proto.txt' ϰ (a)[localMap] - // (!)[item_table], . - // <> - // row , - // (b)[test_map_itemTableByVnum],(!)[mob_table] ο ִ row - // (b)[test_map_itemTableByVnum] Ѵ. - // 4) (b)[test_map_itemTableByVnum] row, (!)[item_table] ߰Ѵ. - //3. ׽Ʈ - // 1)'item_proto.txt' item_table . -> Ϸ - // 2)'item_names.txt' item_table . - // 3)'item_proto_test.txt' [ġ] item_table . - // 4)'item_proto_test.txt' [ο] item_table . - // 5) () Ŭ̾Ʈ ۵ ϴ. + //================== 함수 설명 ==================// + //1. 요약 : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' 파일을 읽고, + // (TItemTable), 오브젝트를 생성한다. + //2. 순서 + // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. + // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로 + // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다. + // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로 + // (!)[item_table], 을 만든다. + // <참고> + // 각 row 들 중, + // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는 + // (b)[test_map_itemTableByVnum]의 것을 사용한다. + // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다. + //3. 테스트 + // 1)'item_proto.txt' 정보가 item_table에 잘 들어갔는지. -> 완료 + // 2)'item_names.txt' 정보가 item_table에 잘 들어갔는지. + // 3)'item_proto_test.txt' 에서 [겹치는] 정보가 item_table 에 잘 들어갔는지. + // 4)'item_proto_test.txt' 에서 [새로운] 정보가 item_table 에 잘 들어갔는지. + // 5) (최종) 게임 클라이언트에서 제대로 작동 하는지. //_______________________________________________// //=================================================================================// - // 1) 'item_names.txt' о (a)[localMap](vnum:name) . + // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다. //=================================================================================// bool isNameFile = true; map localMap; cCsvTable nameData; if(!nameData.Load("item_names.txt",'\t')) { - fprintf(stderr, "item_names.txt о ߽ϴ\n"); + fprintf(stderr, "item_names.txt 파일을 읽어오지 못했습니다\n"); isNameFile = false; } else { nameData.Next(); @@ -615,32 +615,32 @@ bool CClientManager::InitializeItemTable() //_________________________________________________________________// //=================================================================// - // 2) 'item_proto_text.txt'ϰ (a)[localMap] - // (b)[test_map_itemTableByVnum](vnum:TItemTable) Ѵ. + // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로 + // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다. //=================================================================// map test_map_itemTableByVnum; - //1. о. + //1. 파일 읽어오기. cCsvTable test_data; if(!test_data.Load("item_proto_test.txt",'\t')) { - fprintf(stderr, "item_proto_test.txt о ߽ϴ\n"); + fprintf(stderr, "item_proto_test.txt 파일을 읽어오지 못했습니다\n"); //return false; } else { - test_data.Next(); // ο Ѿ. + test_data.Next(); //설명 로우 넘어가기. - //2. ׽Ʈ ̺ . + //2. 테스트 아이템 테이블 생성. TItemTable * test_item_table = NULL; int test_itemTableSize = test_data.m_File.GetRowCount()-1; test_item_table = new TItemTable[test_itemTableSize]; memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize); - //3. ׽Ʈ ̺ ְ, ʿ ֱ. + //3. 테스트 아이템 테이블에 값을 넣고, 맵에까지 넣기. while(test_data.Next()) { if (!Set_Proto_Item_Table(test_item_table, test_data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } test_map_itemTableByVnum.insert(std::map::value_type(test_item_table->dwVnum, test_item_table)); @@ -652,25 +652,25 @@ bool CClientManager::InitializeItemTable() //========================================================================// - // 3) 'item_proto.txt' ϰ (a)[localMap] - // (!)[item_table], . - // <> - // row , - // (b)[test_map_itemTableByVnum],(!)[mob_table] ο ִ row - // (b)[test_map_itemTableByVnum] Ѵ. + // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로 + // (!)[item_table], 을 만든다. + // <참고> + // 각 row 들 중, + // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는 + // (b)[test_map_itemTableByVnum]의 것을 사용한다. //========================================================================// - //vnum . ο ׽Ʈ ǺҶ ȴ. + //vnum들을 저장할 셋. 새로운 테스트 아이템을 판별할때 사용된다. set vnumSet; - // о. + //파일 읽어오기. cCsvTable data; if(!data.Load("item_proto.txt",'\t')) { - fprintf(stderr, "item_proto.txt о ߽ϴ\n"); + fprintf(stderr, "item_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } - data.Next(); // ( Į ϴ κ) + data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) if (!m_vec_itemTable.empty()) { @@ -679,8 +679,8 @@ bool CClientManager::InitializeItemTable() m_map_itemTableByVnum.clear(); } - //===== ̺ =====// - // ߰Ǵ ľѴ. + //===== 아이템 테이블 생성 =====// + //새로 추가되는 갯수를 파악한다. int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); @@ -690,14 +690,14 @@ bool CClientManager::InitializeItemTable() addNumber++; } } - //data ٽ ùٷ ű.(ٽ о´;;) + //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("item_proto.txt",'\t')) { - fprintf(stderr, "item_proto.txt о ߽ϴ\n"); + fprintf(stderr, "item_proto.txt 파일을 읽어오지 못했습니다\n"); return false; } - data.Next(); // ( Į ϴ κ) + data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber); memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size()); @@ -712,16 +712,16 @@ bool CClientManager::InitializeItemTable() std::map::iterator it_map_itemTable; it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col))); if(it_map_itemTable == test_map_itemTableByVnum.end()) { - // Į + //각 칼럼 데이터 저장 if (!Set_Proto_Item_Table(item_table, data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } - } else { //$$$$$$$$$$$$$$$$$$$$$$$ ׽Ʈ ִ! + } else { //$$$$$$$$$$$$$$$$$$$$$$$ 테스트 아이템 정보가 있다! TItemTable *tempTable = it_map_itemTable->second; item_table->dwVnum = tempTable->dwVnum; @@ -778,19 +778,19 @@ bool CClientManager::InitializeItemTable() //_______________________________________________________________________// //========================================================================// - // 4) (b)[test_map_itemTableByVnum] row, (!)[item_table] ߰Ѵ. + // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다. //========================================================================// test_data.Destroy(); if(!test_data.Load("item_proto_test.txt",'\t')) { - fprintf(stderr, "item_proto_test.txt о ߽ϴ\n"); + fprintf(stderr, "item_proto_test.txt 파일을 읽어오지 못했습니다\n"); //return false; } else { - test_data.Next(); // ο Ѿ. + test_data.Next(); //설명 로우 넘어가기. - while (test_data.Next()) //׽Ʈ Ⱦ,ο ߰Ѵ. + while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다. { - //ߺǴ κ̸ Ѿ. + //중복되는 부분이면 넘어간다. set::iterator itVnum; itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0))); if (itVnum != vnumSet.end()) { @@ -799,7 +799,7 @@ bool CClientManager::InitializeItemTable() if (!Set_Proto_Item_Table(item_table, test_data, localMap)) { - fprintf(stderr, " ̺ .\n"); + fprintf(stderr, "아이템 프로토 테이블 셋팅 실패.\n"); } diff --git a/src/db/ClientManagerEventFlag.cpp b/src/db/ClientManagerEventFlag.cpp index 80bf29c..d7a3dbb 100644 --- a/src/db/ClientManagerEventFlag.cpp +++ b/src/db/ClientManagerEventFlag.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 #include "stdafx.h" #include "ClientManager.h" #include "Main.h" diff --git a/src/db/ClientManagerGuild.cpp b/src/db/ClientManagerGuild.cpp index e65b6cb..1d3e300 100644 --- a/src/db/ClientManagerGuild.cpp +++ b/src/db/ClientManagerGuild.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 #include "stdafx.h" #include "ClientManager.h" #include "Main.h" @@ -126,13 +126,13 @@ const char* __GetWarType(int n) switch (n) { case 0 : - return "п"; + return "패왕"; case 1 : - return ""; + return "맹장"; case 2 : - return "ȣ"; + return "수호"; default : - return " ȣ"; + return "없는 번호"; } } @@ -161,7 +161,7 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p) case GUILD_WAR_WAIT_START: sys_log(0, "GuildWar: GUILD_WAR_WAIT_START type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); - case GUILD_WAR_RESERVE: // + case GUILD_WAR_RESERVE: // 길드전 예약 if (p->bWar != GUILD_WAR_WAIT_START) sys_log(0, "GuildWar: GUILD_WAR_RESERVE type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); CGuildManager::instance().RemoveDeclare(p->dwGuildFrom, p->dwGuildTo); @@ -173,21 +173,21 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p) break; - case GUILD_WAR_ON_WAR: // Ų. (ʵ ٷ ) + case GUILD_WAR_ON_WAR: // 길드전을 시작 시킨다. (필드전은 바로 시작 됨) sys_log(0, "GuildWar: GUILD_WAR_ON_WAR type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); CGuildManager::instance().RemoveDeclare(p->dwGuildFrom, p->dwGuildTo); CGuildManager::instance().StartWar(p->bType, p->dwGuildFrom, p->dwGuildTo); break; - case GUILD_WAR_OVER: // + case GUILD_WAR_OVER: // 길드전 정상 종료 sys_log(0, "GuildWar: GUILD_WAR_OVER type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); CGuildManager::instance().RecvWarOver(p->dwGuildFrom, p->dwGuildTo, p->bType, p->lWarPrice); break; - case GUILD_WAR_END: // + case GUILD_WAR_END: // 길드전 비정상 종료 sys_log(0, "GuildWar: GUILD_WAR_END type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); CGuildManager::instance().RecvWarEnd(p->dwGuildFrom, p->dwGuildTo); - return; // NOTE: RecvWarEnd Ŷ Ƿ εij ʴ´. + return; // NOTE: RecvWarEnd에서 패킷을 보내므로 따로 브로드캐스팅 하지 않는다. case GUILD_WAR_CANCEL : sys_log(0, "GuildWar: GUILD_WAR_CANCEL type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); diff --git a/src/db/ClientManagerHorseName.cpp b/src/db/ClientManagerHorseName.cpp index 6c794a9..89c53f9 100644 --- a/src/db/ClientManagerHorseName.cpp +++ b/src/db/ClientManagerHorseName.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 #include "stdafx.h" #include "ClientManager.h" diff --git a/src/db/ClientManagerLogin.cpp b/src/db/ClientManagerLogin.cpp index 4b8449a..5162ff7 100644 --- a/src/db/ClientManagerLogin.cpp +++ b/src/db/ClientManagerLogin.cpp @@ -1,4 +1,4 @@ - + #include "stdafx.h" #include "ClientManager.h" @@ -249,7 +249,7 @@ TAccountTable * CreateAccountTableFromRes(MYSQL_RES * res) TAccountTable * pkTab = new TAccountTable; memset(pkTab, 0, sizeof(TAccountTable)); - // ù° ÷ ͸ Ѵ (JOIN QUERY ) + // 첫번째 컬럼 것만 참고 한다 (JOIN QUERY를 위한 것 임) strlcpy(input_pwd, row[col++], sizeof(input_pwd)); str_to_number(pkTab->id, row[col++]); strlcpy(pkTab->login, row[col++], sizeof(pkTab->login)); @@ -373,7 +373,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg) if (info->account_index == 0) { - // ? + // 계정이 없네? if (msg->Get()->uiNumRows == 0) { sys_log(0, "RESULT_LOGIN: no account"); @@ -415,14 +415,14 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg) } else { - if (!info->pAccountTable) // ̷ ;; + if (!info->pAccountTable) // 이럴리는 없겠지만;; { peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle); delete info; return; } - // ٸ ؼ ̹ α عȴٸ.. ̹ ߴٰ Ѵ. + // 다른 컨넥션이 이미 로그인 해버렸다면.. 이미 접속했다고 보내야 한다. if (!InsertLogonAccount(info->pAccountTable->login, peer->GetHandle(), info->ip)) { sys_log(0, "RESULT_LOGIN: already logon %s", info->pAccountTable->login); diff --git a/src/db/ClientManagerParty.cpp b/src/db/ClientManagerParty.cpp index 2e719a6..24026f9 100644 --- a/src/db/ClientManagerParty.cpp +++ b/src/db/ClientManagerParty.cpp @@ -1,4 +1,4 @@ -// vim:ts=4 sw=4 +// vim:ts=4 sw=4 #include "stdafx.h" #include "ClientManager.h" #include "Config.h" diff --git a/src/db/ClientManagerPlayer.cpp b/src/db/ClientManagerPlayer.cpp index 73cd1c0..33a0c30 100644 --- a/src/db/ClientManagerPlayer.cpp +++ b/src/db/ClientManagerPlayer.cpp @@ -1,4 +1,4 @@ - + #include "stdafx.h" #include "ClientManager.h" @@ -32,7 +32,7 @@ bool CreateItemTableFromRes(MYSQL_RES * res, std::vector * pVec, DW int rows; - if ((rows = mysql_num_rows(res)) <= 0) // + if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음 { pVec->clear(); return true; @@ -159,7 +159,7 @@ size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * p pkTab->horse.sStamina, pkTab->horse_skill_point); - // Binary ٲٱ ӽ + // Binary 로 바꾸기 위한 임시 공간 static char text[8192 + 1]; CDBManager::instance().EscapeString(text, pkTab->skills, sizeof(pkTab->skills)); @@ -211,7 +211,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad TPlayerTable * pTab; // - // ij͵ ijó + // 한 계정에 속한 모든 캐릭터들 캐쉬처리 // CLoginData * pLoginData = GetLoginDataByAID(packet->account_id); @@ -223,12 +223,12 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad } //---------------------------------------------------------------- - // 1. DBCache : DBCache - // 2. DBCache : DB + // 1. 유저정보가 DBCache 에 존재 : DBCache에서 + // 2. 유저정보가 DBCache 에 없음 : DB에서 // --------------------------------------------------------------- //---------------------------------- - // 1. DBCache : DBCache + // 1. 유저정보가 DBCache 에 존재 : DBCache에서 //---------------------------------- if ((c = GetPlayerCache(packet->player_id))) { @@ -268,13 +268,13 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad sys_log(0, "[PLAYER_LOAD] ID %s pid %d gold %d ", pTab->name, pTab->id, pTab->gold); //-------------------------------------------- - // & AFFECT & QUEST ε : + // 아이템 & AFFECT & QUEST 로딩 : //-------------------------------------------- - // 1) DBCache : DBCache - // 2) DBCache : DB + // 1) 아이템이 DBCache 에 존재 : DBCache 에서 가져옴 + // 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴 ///////////////////////////////////////////// - // 1) DBCache : DBCache + // 1) 아이템이 DBCache 에 존재 : DBCache 에서 가져옴 ///////////////////////////////////////////// if (pSet) { @@ -289,7 +289,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad CItemCache * c = *it++; TPlayerItem * p = c->Get(); - if (p->vnum) // vnum ̴. + if (p->vnum) // vnum이 없으면 삭제된 아이템이다. thecore_memcpy(&s_items[dwCount++], p, sizeof(TPlayerItem)); } @@ -316,7 +316,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad CDBManager::instance().ReturnQuery(szQuery, QID_AFFECT, peer->GetHandle(), new ClientHandleInfo(dwHandle)); } ///////////////////////////////////////////// - // 2) DBCache : DB + // 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴 ///////////////////////////////////////////// else { @@ -350,7 +350,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad //return; } //---------------------------------- - // 2. DBCache : DB + // 2. 유저정보가 DBCache 에 없음 : DB에서 //---------------------------------- else { @@ -359,7 +359,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad char queryStr[QUERY_MAX_LEN]; //-------------------------------------------------------------- - // ij : DB + // 캐릭터 정보 얻어오기 : 무조건 DB에서 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT " @@ -375,7 +375,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad CDBManager::instance().ReturnQuery(queryStr, QID_PLAYER, peer->GetHandle(), pkInfo); //-------------------------------------------------------------- - // + // 아이템 가져오기 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 " @@ -384,15 +384,15 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad CDBManager::instance().ReturnQuery(queryStr, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id)); //-------------------------------------------------------------- - // QUEST + // QUEST 가져오기 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT dwPID,szName,szState,lValue FROM quest%s WHERE dwPID=%d", GetTablePostfix(), packet->player_id); CDBManager::instance().ReturnQuery(queryStr, QID_QUEST, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id,packet->account_id)); - // ɿ item_award̺ login account id Ѱش + //독일 선물 기능에서 item_award테이블에서 login 정보를 얻기위해 account id도 넘겨준다 //-------------------------------------------------------------- - // AFFECT + // AFFECT 가져오기 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT dwPID,bType,bApplyOn,lApplyValue,dwFlag,lDuration,lSPCost FROM affect%s WHERE dwPID=%d", @@ -409,21 +409,21 @@ void CClientManager::ItemAward(CPeer * peer,char* login) std::set * pSet = ItemAwardManager::instance().GetByLogin(login_t); if(pSet == NULL) return; - __typeof(pSet->begin()) it = pSet->begin(); //taken_time NULLΰ͵ о + __typeof(pSet->begin()) it = pSet->begin(); //taken_time이 NULL인것들 읽어옴 while(it != pSet->end() ) { TItemAward * pItemAward = *(it++); - char* whyStr = pItemAward->szWhy; //why ݷ б - char cmdStr[100] = ""; //whyݷ뿡 ӽ ڿ ص - strcpy(cmdStr,whyStr); //ɾ ū ūȭ DZ + char* whyStr = pItemAward->szWhy; //why 콜룸 읽기 + char cmdStr[100] = ""; //why콜룸에서 읽은 값을 임시 문자열에 복사해둠 + strcpy(cmdStr,whyStr); //명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문 char command[20] = ""; - strcpy(command,GetCommand(cmdStr)); // command - if( !(strcmp(command,"GIFT") )) // command GIFT̸ + strcpy(command,GetCommand(cmdStr)); // command 얻기 + if( !(strcmp(command,"GIFT") )) // command 가 GIFT이면 { TPacketItemAwardInfromer giftData; - strcpy(giftData.login, pItemAward->szLogin); //α ̵ - strcpy(giftData.command, command); //ɾ - giftData.vnum = pItemAward->dwVnum; // vnum + strcpy(giftData.login, pItemAward->szLogin); //로그인 아이디 복사 + strcpy(giftData.command, command); //명령어 복사 + giftData.vnum = pItemAward->dwVnum; //아이템 vnum도 복사 ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer)); } } @@ -444,7 +444,7 @@ char* CClientManager::GetCommand(char* str) bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab) { - if (mysql_num_rows(res) == 0) // + if (mysql_num_rows(res) == 0) // 데이터 없음 return false; memset(pkTab, 0, sizeof(TPlayerTable)); @@ -531,11 +531,11 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab) int max_point = pkTab->level - 9; int skill_point = - MIN(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP ַ - MIN(20, pkTab->skills[124].bLevel) + // SKILL_MINING ä - MIN(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON ȯ - MIN(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP - MIN(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE + MIN(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP 통솔력 + MIN(20, pkTab->skills[124].bLevel) + // SKILL_MINING 채광 + MIN(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON 말소환 + MIN(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP보강 + MIN(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE 관통저항 pkTab->sub_skill_point = max_point - skill_point; } @@ -575,13 +575,13 @@ void CClientManager::RESULT_COMPOSITE_PLAYER(CPeer * peer, SQLMsg * pMsg, DWORD { sys_log(0, "QID_QUEST %u", info->dwHandle); RESULT_QUEST_LOAD(peer, pSQLResult, info->dwHandle, info->player_id); - //aid + //aid얻기 ClientHandleInfo* temp1 = info.get(); if (temp1 == NULL) break; CLoginData* pLoginData1 = GetLoginDataByAID(temp1->account_id); // - // + //독일 선물 기능 if( pLoginData1->GetAccountRef().login == NULL) break; if( pLoginData1 == NULL ) @@ -672,14 +672,14 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa void CClientManager::RESULT_ITEM_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwHandle, DWORD dwPID) { static std::vector s_items; - //DB о´. + //DB에서 아이템 정보를 읽어온다. CreateItemTableFromRes(pRes, &s_items, dwPID); DWORD dwCount = s_items.size(); peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount); peer->EncodeDWORD(dwCount); - //CacheSet + //CacheSet을 만든다 CreateItemCacheSet(dwPID); // ITEM_LOAD_LOG_ATTACH_PID @@ -691,7 +691,7 @@ void CClientManager::RESULT_ITEM_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwHa peer->Encode(&s_items[0], sizeof(TPlayerItem) * dwCount); for (DWORD i = 0; i < dwCount; ++i) - PutItemCache(&s_items[i], true); // ε ʿ Ƿ, bSkipQuery true ִ´. + PutItemCache(&s_items[i], true); // 로드한 것은 따로 저장할 필요 없으므로, 인자 bSkipQuery에 true를 넣는다. } } @@ -699,7 +699,7 @@ void CClientManager::RESULT_AFFECT_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dw { int iNumRows; - if ((iNumRows = mysql_num_rows(pRes)) == 0) // + if ((iNumRows = mysql_num_rows(pRes)) == 0) // 데이터 없음 return; static std::vector s_elements; @@ -796,7 +796,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC int queryLen; int player_id; - // X ij . + // 한 계정에 X초 내로 캐릭터 생성을 할 수 없다. time_by_id_map_t::iterator it = s_createTimeByAccountID.find(packet->account_id); if (it != s_createTimeByAccountID.end()) @@ -1027,7 +1027,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD } // -// @version 05/06/10 Bang2ni - ÷̾ Ʈ ߰. +// @version 05/06/10 Bang2ni - 플레이어 삭제시 가격정보 리스트 삭제 추가. // void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) { @@ -1078,14 +1078,14 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) return; } - // + // 삭제 성공 sys_log(0, "PLAYER_DELETE SUCCESS %u", dwPID); char account_index_string[16]; snprintf(account_index_string, sizeof(account_index_string), "player_id%d", m_iPlayerIDStart + pi->account_index); - // ÷̾ ̺ ij Ѵ. + // 플레이어 테이블을 캐쉬에서 삭제한다. CPlayerTableCache * pkPlayerCache = GetPlayerCache(pi->player_id); if (pkPlayerCache) @@ -1094,7 +1094,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) delete pkPlayerCache; } - // ۵ ij Ѵ. + // 아이템들을 캐쉬에서 삭제한다. TItemCacheSet * pSet = GetItemCacheSet(pi->player_id); if (pSet) @@ -1157,7 +1157,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) } else { - // + // 삭제 실패 sys_log(0, "PLAYER_DELETE FAIL NO ROW"); peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1); peer->EncodeBYTE(pi->account_index); @@ -1242,7 +1242,7 @@ void CClientManager::RESULT_HIGHSCORE_REGISTER(CPeer * pkPeer, SQLMsg * msg) if (res->uiNumRows == 0) { - // ο ̽ھ + // 새로운 하이스코어를 삽입 char buf[256]; snprintf(buf, sizeof(buf), "INSERT INTO highscore%s VALUES('%s', %u, %d)", GetTablePostfix(), szBoard, pi->player_id, value); CDBManager::instance().AsyncQuery(buf); @@ -1277,7 +1277,7 @@ void CClientManager::RESULT_HIGHSCORE_REGISTER(CPeer * pkPeer, SQLMsg * msg) CDBManager::instance().AsyncQuery(buf); } } - // TODO: ̰ ̽ھ Ʈ Ǿ üũϿ ѷѴ. + // TODO: 이곳에서 하이스코어가 업데이트 되었는지 체크하여 공지를 뿌려야한다. delete pi; } @@ -1285,10 +1285,10 @@ void CClientManager::InsertLogoutPlayer(DWORD pid) { TLogoutPlayerMap::iterator it = m_map_logout.find(pid); - // ߰ + // 존재하지 않을경우 추가 if (it != m_map_logout.end()) { - // Ұ ð + // 존재할경우 시간만 갱신 if (g_log) sys_log(0, "LOGOUT: Update player time pid(%d)", pid); diff --git a/src/db/Config.h b/src/db/Config.h index 4508832..88de127 100644 --- a/src/db/Config.h +++ b/src/db/Config.h @@ -1,4 +1,4 @@ -#ifndef __INC_CONFIG_H__ +#ifndef __INC_CONFIG_H__ #define __INC_CONFIG_H__ typedef std::map TValueMap; diff --git a/src/db/CsvReader.cpp b/src/db/CsvReader.cpp index 6087c81..c63d523 100644 --- a/src/db/CsvReader.cpp +++ b/src/db/CsvReader.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "CsvReader.h" #include #include @@ -11,14 +11,14 @@ namespace { - /// Ľ̿ state Ű + /// 파싱용 state 열거값 enum ParseState { - STATE_NORMAL = 0, ///< Ϲ - STATE_QUOTE ///< ǥ + STATE_NORMAL = 0, ///< 일반 상태 + STATE_QUOTE ///< 따옴표 뒤의 상태 }; - /// ڿ ¿ ؼ ȯѴ. + /// 문자열 좌우의 공백을 제거해서 반환한다. std::string Trim(std::string str) { str = str.erase(str.find_last_not_of(" \t\r\n") + 1); @@ -26,7 +26,7 @@ namespace return str; } - /// \brief ־ 忡 ִ ĺ ҹڷ ٲ۴. + /// \brief 주어진 문장에 있는 알파벳을 모두 소문자로 바꾼다. std::string Lower(std::string original) { std::transform(original.begin(), original.end(), original.begin(), tolower); @@ -35,9 +35,9 @@ namespace } //////////////////////////////////////////////////////////////////////////////// -/// \brief ׼ , ̸ Ѵ. -/// \param name ̸ -/// \param index ε +/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다. +/// \param name 셀 이름 +/// \param index 셀 인덱스 //////////////////////////////////////////////////////////////////////////////// void cCsvAlias::AddAlias(const char* name, size_t index) { @@ -51,7 +51,7 @@ void cCsvAlias::AddAlias(const char* name, size_t index) } //////////////////////////////////////////////////////////////////////////////// -/// \brief ͸ Ѵ. +/// \brief 모든 데이터를 삭제한다. //////////////////////////////////////////////////////////////////////////////// void cCsvAlias::Destroy() { @@ -60,9 +60,9 @@ void cCsvAlias::Destroy() } //////////////////////////////////////////////////////////////////////////////// -/// \brief ε ̸ ȯѴ. -/// \param index ε -/// \return const char* ̸ +/// \brief 숫자 인덱스를 이름으로 변환한다. +/// \param index 숫자 인덱스 +/// \return const char* 이름 //////////////////////////////////////////////////////////////////////////////// const char* cCsvAlias::operator [] (size_t index) const { @@ -78,9 +78,9 @@ const char* cCsvAlias::operator [] (size_t index) const } //////////////////////////////////////////////////////////////////////////////// -/// \brief ̸ ε ȯѴ. -/// \param name ̸ -/// \return size_t ε +/// \brief 이름을 숫자 인덱스로 변환한다. +/// \param name 이름 +/// \return size_t 숫자 인덱스 //////////////////////////////////////////////////////////////////////////////// size_t cCsvAlias::operator [] (const char* name) const { @@ -96,11 +96,11 @@ size_t cCsvAlias::operator [] (const char* name) const } //////////////////////////////////////////////////////////////////////////////// -/// \brief ̸ CSV εѴ. -/// \param fileName CSV ̸ -/// \param seperator ʵ иڷ . ⺻ ','̴. -/// \param quote ǥ . ⺻ '"'̴. -/// \return bool εߴٸ true, ƴ϶ false +/// \brief 지정된 이름의 CSV 파일을 로드한다. +/// \param fileName CSV 파일 이름 +/// \param seperator 필드 분리자로 사용할 글자. 기본값은 ','이다. +/// \param quote 따옴표로 사용할 글자. 기본값은 '"'이다. +/// \return bool 무사히 로드했다면 true, 아니라면 false //////////////////////////////////////////////////////////////////////////////// bool cCsvFile::Load(const char* fileName, const char seperator, const char quote) { @@ -109,7 +109,7 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote std::ifstream file(fileName, std::ios::in); if (!file) return false; - Destroy(); // ͸ + Destroy(); // 기존의 데이터를 삭제 cCsvRow* row = NULL; ParseState state = STATE_NORMAL; @@ -124,33 +124,33 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote std::string line(Trim(buf)); if (line.empty() || (state == STATE_NORMAL && line[0] == '#')) continue; - std::string text = std::string(line) + " "; // Ľ lookahead ٿش. + std::string text = std::string(line) + " "; // 파싱 lookahead 때문에 붙여준다. size_t cur = 0; while (cur < text.size()) { - // 尡 QUOTE , + // 현재 모드가 QUOTE 모드일 때, if (state == STATE_QUOTE) { - // '"' ̴. - // 1. ο Ư ڰ ̸ ˸ ¿ - // 2. '"' ڰ '"' 2 ġȯ - // ù° ִ CSV ̶, - // STATE_NORMAL ɸ Ǿִ. - // ׷Ƿ ⼭ ɸ 1 쳪, 2 ̴. - // 2 쿡 '"' ڰ 2 Ÿ. 1 - // 쿡 ƴϴ. ̸ ؼ ڵ带 ¥... + // '"' 문자의 종류는 두 가지이다. + // 1. 셀 내부에 특수 문자가 있을 경우 이를 알리는 셀 좌우의 것 + // 2. 셀 내부의 '"' 문자가 '"' 2개로 치환된 것 + // 이 중 첫번째 경우의 좌측에 있는 것은 CSV 파일이 정상적이라면, + // 무조건 STATE_NORMAL에 걸리게 되어있다. + // 그러므로 여기서 걸리는 것은 1번의 우측 경우나, 2번 경우 뿐이다. + // 2번의 경우에는 무조건 '"' 문자가 2개씩 나타난다. 하지만 1번의 + // 우측 경우에는 아니다. 이를 바탕으로 해서 코드를 짜면... if (text[cur] == quote) { - // ڰ '"' ڶ, ӵ '"' ڶ - // ̴ '"' ڰ ġȯ ̴. + // 다음 문자가 '"' 문자라면, 즉 연속된 '"' 문자라면 + // 이는 셀 내부의 '"' 문자가 치환된 것이다. if (text[cur+1] == quote) { token += quote; ++cur; } - // ڰ '"' ڰ ƴ϶ - // '"'ڴ ˸ ڶ ִ. + // 다음 문자가 '"' 문자가 아니라면 + // 현재의 '"'문자는 셀의 끝을 알리는 문자라고 할 수 있다. else { state = STATE_NORMAL; @@ -161,25 +161,25 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote token += text[cur]; } } - // 尡 NORMAL , + // 현재 모드가 NORMAL 모드일 때, else if (state == STATE_NORMAL) { if (row == NULL) row = new cCsvRow(); - // ',' ڸ ٸ ǹѴ. - // ūμ Ʈٰ ְ, ū ʱȭѴ. + // ',' 문자를 만났다면 셀의 끝의 의미한다. + // 토큰으로서 셀 리스트에다가 집어넣고, 토큰을 초기화한다. if (text[cur] == seperator) { row->push_back(token); token.clear(); } - // '"' ڸ ٸ, QUOTE ȯѴ. + // '"' 문자를 만났다면, QUOTE 모드로 전환한다. else if (text[cur] == quote) { state = STATE_QUOTE; } - // ٸ Ϲ ڶ ūٰ δ. + // 다른 일반 문자라면 현재 토큰에다가 덧붙인다. else { token += text[cur]; @@ -189,8 +189,8 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote ++cur; } - // ',' ڰ ⼭ ߰Ѵ. - // , ó Ľ lookahead ̽ . + // 마지막 셀은 끝에 ',' 문자가 없기 때문에 여기서 추가해줘야한다. + // 단, 처음에 파싱 lookahead 때문에 붙인 스페이스 문자 두 개를 뗀다. if (state == STATE_NORMAL) { Assert(row != NULL); @@ -209,49 +209,49 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote } //////////////////////////////////////////////////////////////////////////////// -/// \brief ִ CSV Ͽ Ѵ. -/// \param fileName CSV ̸ -/// \param append true , Ͽ δ. false 쿡 -/// ϰ, . -/// \param seperator ʵ иڷ . ⺻ ','̴. -/// \param quote ǥ . ⺻ '"'̴. -/// \return bool ߴٸ true, 쿡 false +/// \brief 가지고 있는 내용을 CSV 파일에다 저장한다. +/// \param fileName CSV 파일 이름 +/// \param append true일 경우, 기존의 파일에다 덧붙인다. false인 경우에는 +/// 기존의 파일 내용을 삭제하고, 새로 쓴다. +/// \param seperator 필드 분리자로 사용할 글자. 기본값은 ','이다. +/// \param quote 따옴표로 사용할 글자. 기본값은 '"'이다. +/// \return bool 무사히 저장했다면 true, 에러가 생긴 경우에는 false //////////////////////////////////////////////////////////////////////////////// bool cCsvFile::Save(const char* fileName, bool append, char seperator, char quote) const { Assert(seperator != quote); - // 忡 ÷׷ Ѵ. + // 출력 모드에 따라 파일을 적당한 플래그로 생성한다. std::ofstream file; if (append) { file.open(fileName, std::ios::out | std::ios::app); } else { file.open(fileName, std::ios::out | std::ios::trunc); } - // ߴٸ, false Ѵ. + // 파일을 열지 못했다면, false를 리턴한다. if (!file) return false; char special_chars[5] = { seperator, quote, '\r', '\n', 0 }; char quote_escape_string[3] = { quote, quote, 0 }; - // Ⱦϸ鼭... + // 모든 행을 횡단하면서... for (size_t i=0; i @@ -12,28 +12,28 @@ //////////////////////////////////////////////////////////////////////////////// /// \class cCsvAlias -/// \brief CSV ߻ϴ ε ̱ -/// ü. +/// \brief CSV 파일을 수정했을 때 발생하는 인덱스 문제를 줄이기 위한 +/// 별명 객체. /// -/// 0 ÷ A ϰ, 1 ÷ B -/// ϰ ־µ... +/// 예를 들어 0번 컬럼이 A에 관한 내용을 포함하고, 1번 컬럼이 B에 관한 내용을 +/// 포함하고 있었는데... /// ///
 /// int a = row.AsInt(0);
 /// int b = row.AsInt(1);
 /// 
/// -/// ̿ C ϴ ÷ , ϵڵǾ ִ -/// 1 ãƼ ľ ϴµ, ߻ϱ ۾̴. +/// 그 사이에 C에 관한 내용을 포함하는 컬럼이 끼어든 경우, 하드코딩되어 있는 +/// 1번을 찾아서 고쳐야 하는데, 상당히 에러가 발생하기 쉬운 작업이다. /// ///
 /// int a = row.AsInt(0);
 /// int c = row.AsInt(1);
-/// int b = row.AsInt(2); <--  κ  Ű Ѵ.
+/// int b = row.AsInt(2); <-- 이 부분을 일일이 신경써야 한다.
 /// 
/// -/// κ ڿ óϸ  ణ̳ -/// ִ. +/// 이 부분을 문자열로 처리하면 유지보수에 들어가는 수고를 약간이나마 줄일 수 +/// 있다. //////////////////////////////////////////////////////////////////////////////// class cCsvAlias @@ -47,51 +47,51 @@ private: typedef std::map INDEX2NAME_MAP; #endif - NAME2INDEX_MAP m_Name2Index; ///< ε ϱ ̸ - INDEX2NAME_MAP m_Index2Name; ///< ߸ alias ˻ϱ ߰ + NAME2INDEX_MAP m_Name2Index; ///< 셀 인덱스 대신으로 사용하기 위한 이름들 + INDEX2NAME_MAP m_Index2Name; ///< 잘못된 alias를 검사하기 위한 추가적인 맵 public: - /// \brief + /// \brief 생성자 cCsvAlias() {} - /// \brief Ҹ + /// \brief 소멸자 virtual ~cCsvAlias() {} public: - /// \brief ׼ , ̸ Ѵ. + /// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다. void AddAlias(const char* name, size_t index); - /// \brief ͸ Ѵ. + /// \brief 모든 데이터를 삭제한다. void Destroy(); - /// \brief ε ̸ ȯѴ. + /// \brief 숫자 인덱스를 이름으로 변환한다. const char* operator [] (size_t index) const; - /// \brief ̸ ε ȯѴ. + /// \brief 이름을 숫자 인덱스로 변환한다. size_t operator [] (const char* name) const; private: - /// \brief + /// \brief 복사 생성자 금지 cCsvAlias(const cCsvAlias&) {} - /// \brief + /// \brief 대입 연산자 금지 const cCsvAlias& operator = (const cCsvAlias&) { return *this; } }; //////////////////////////////////////////////////////////////////////////////// /// \class cCsvRow -/// \brief CSV ĸȭ Ŭ +/// \brief CSV 파일의 한 행을 캡슐화한 클래스 /// -/// CSV ⺻ ̴ ϳ ',' ڷ ̴. -/// , ȿ Ư ڷ ̴ ',' ڳ '"' ڰ  , -/// ణ ̻ϰ Ѵ. ȭ ̴. +/// CSV의 기본 포맷은 엑셀에서 보이는 하나의 셀을 ',' 문자로 구분한 것이다. +/// 하지만, 셀 안에 특수 문자로 쓰이는 ',' 문자나 '"' 문자가 들어갈 경우, +/// 모양이 약간 이상하게 변한다. 다음은 그 변화의 예이다. /// ///
-///  ̴  |  CSV Ͽ ִ 
+/// 엑셀에서 보이는 모양 | 실제 CSV 파일에 들어가있는 모양
 /// ---------------------+----------------------------------------------------
 /// ItemPrice            | ItemPrice
 /// Item,Price           | "Item,Price"
@@ -101,9 +101,9 @@ private:
 /// Item",Price          | "Item"",Price"
 /// 
/// -/// μ ִ. -/// - ο ',' Ǵ '"' ڰ  , ¿쿡 '"' ڰ . -/// - '"' ڴ 2 ġȯȴ. +/// 이 예로서 다음과 같은 사항을 알 수 있다. +/// - 셀 내부에 ',' 또는 '"' 문자가 들어갈 경우, 셀 좌우에 '"' 문자가 생긴다. +/// - 셀 내부의 '"' 문자는 2개로 치환된다. /// /// \sa cCsvFile //////////////////////////////////////////////////////////////////////////////// @@ -111,51 +111,51 @@ private: class cCsvRow : public std::vector { public: - /// \brief ⺻ + /// \brief 기본 생성자 cCsvRow() {} - /// \brief Ҹ + /// \brief 소멸자 ~cCsvRow() {} public: - /// \brief ش ͸ int ȯѴ. + /// \brief 해당 셀의 데이터를 int 형으로 반환한다. int AsInt(size_t index) const { return atoi(at(index).c_str()); } - /// \brief ش ͸ double ȯѴ. + /// \brief 해당 셀의 데이터를 double 형으로 반환한다. double AsDouble(size_t index) const { return atof(at(index).c_str()); } - /// \brief ش ͸ ڿ ȯѴ. + /// \brief 해당 셀의 데이터를 문자열로 반환한다. const char* AsString(size_t index) const { return at(index).c_str(); } - /// \brief شϴ ̸ ͸ int ȯѴ. + /// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다. int AsInt(const char* name, const cCsvAlias& alias) const { return atoi( at(alias[name]).c_str() ); } - /// \brief شϴ ̸ ͸ int ȯѴ. + /// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다. double AsDouble(const char* name, const cCsvAlias& alias) const { return atof( at(alias[name]).c_str() ); } - /// \brief شϴ ̸ ͸ ڿ ȯѴ. + /// \brief 해당하는 이름의 셀 데이터를 문자열로 반환한다. const char* AsString(const char* name, const cCsvAlias& alias) const { return at(alias[name]).c_str(); } private: - /// \brief + /// \brief 복사 생성자 금지 cCsvRow(const cCsvRow&) {} - /// \brief + /// \brief 대입 연산자 금지 const cCsvRow& operator = (const cCsvRow&) { return *this; } }; //////////////////////////////////////////////////////////////////////////////// /// \class cCsvFile -/// \brief CSV(Comma Seperated Values) read/writeϱ Ŭ +/// \brief CSV(Comma Seperated Values) 파일을 read/write하기 위한 클래스 /// /// sample ///
@@ -179,8 +179,8 @@ private:
 /// file.save("test.csv", false);
 /// 
/// -/// \todo Ͽ о ƴ϶, ޸ ҽκ д Լ -/// ־ ϴ. +/// \todo 파일에서만 읽어들일 것이 아니라, 메모리 소스로부터 읽는 함수도 +/// 있어야 할 듯 하다. //////////////////////////////////////////////////////////////////////////////// class cCsvFile @@ -188,55 +188,55 @@ class cCsvFile private: typedef std::vector ROWS; - ROWS m_Rows; ///< ÷ + ROWS m_Rows; ///< 행 컬렉션 public: - /// \brief + /// \brief 생성자 cCsvFile() {} - /// \brief Ҹ + /// \brief 소멸자 virtual ~cCsvFile() { Destroy(); } public: - /// \brief ̸ CSV εѴ. + /// \brief 지정된 이름의 CSV 파일을 로드한다. bool Load(const char* fileName, const char seperator=',', const char quote='"'); - /// \brief ִ CSV Ͽ Ѵ. + /// \brief 가지고 있는 내용을 CSV 파일에다 저장한다. bool Save(const char* fileName, bool append=false, char seperator=',', char quote='"') const; - /// \brief ͸ ޸𸮿 Ѵ. + /// \brief 모든 데이터를 메모리에서 삭제한다. void Destroy(); - /// \brief شϴ ε ȯѴ. + /// \brief 해당하는 인덱스의 행을 반환한다. cCsvRow* operator [] (size_t index); - /// \brief شϴ ε ȯѴ. + /// \brief 해당하는 인덱스의 행을 반환한다. const cCsvRow* operator [] (size_t index) const; - /// \brief ȯѴ. + /// \brief 행의 갯수를 반환한다. size_t GetRowCount() const { return m_Rows.size(); } private: - /// \brief + /// \brief 복사 생성자 금지 cCsvFile(const cCsvFile&) {} - /// \brief + /// \brief 대입 연산자 금지 const cCsvFile& operator = (const cCsvFile&) { return *this; } }; //////////////////////////////////////////////////////////////////////////////// /// \class cCsvTable -/// \brief CSV ̿ ̺ ͸ εϴ 찡 , Ŭ -/// ۾ ϱ ƿƼ Ŭ. +/// \brief CSV 파일을 이용해 테이블 데이터를 로드하는 경우가 많은데, 이 클래스는 +/// 그 작업을 좀 더 쉽게 하기 위해 만든 유틸리티 클래스다. /// -/// CSV εϴ , ڸ ̿ ׼ؾ ϴµ, CSV -/// ٲ , ڵ Ѵ. ۾ -/// Ű 䱸ϴ ٰ, ߻ϱ . ׷Ƿ ڷ -/// ׼ϱ⺸ٴ ڿ ׼ϴ ణ ٰ ִ. +/// CSV 파일을 로드하는 경우, 숫자를 이용해 셀을 액세스해야 하는데, CSV +/// 파일의 포맷이 바뀌는 경우, 이 숫자들을 변경해줘야한다. 이 작업이 꽤 +/// 신경 집중을 요구하는 데다가, 에러가 발생하기 쉽다. 그러므로 숫자로 +/// 액세스하기보다는 문자열로 액세스하는 것이 약간 느리지만 낫다고 할 수 있다. /// /// sample ///
@@ -259,63 +259,63 @@ private:
 class cCsvTable
 {
 public :
-    cCsvFile  m_File;   ///< CSV  ü
+    cCsvFile  m_File;   ///< CSV 파일 객체
 private:
-    cCsvAlias m_Alias;  ///< ڿ  ε ȯϱ  ü
-    int       m_CurRow; ///<  Ⱦ   ȣ
+    cCsvAlias m_Alias;  ///< 문자열을 셀 인덱스로 변환하기 위한 객체
+    int       m_CurRow; ///< 현재 횡단 중인 행 번호
 
 
 public:
-    /// \brief 
+    /// \brief 생성자
     cCsvTable();
 
-    /// \brief Ҹ
+    /// \brief 소멸자
     virtual ~cCsvTable();
 
 
 public:
-    /// \brief  ̸ CSV  εѴ.
+    /// \brief 지정된 이름의 CSV 파일을 로드한다.
     bool Load(const char* fileName, const char seperator=',', const char quote='"');
 
-    /// \brief  ׼ ,    ̸ Ѵ.
+    /// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
     void AddAlias(const char* name, size_t index) { m_Alias.AddAlias(name, index); }
 
-    /// \brief   Ѿ.
+    /// \brief 다음 행으로 넘어간다.
     bool Next();
 
-    /// \brief    ڸ ȯѴ.
+    /// \brief 현재 행의 셀 숫자를 반환한다.
     size_t ColCount() const;
 
-    /// \brief ε ̿ int   ȯѴ.
+    /// \brief 인덱스를 이용해 int 형으로 셀값을 반환한다.
     int AsInt(size_t index) const;
 
-    /// \brief ε ̿ double   ȯѴ.
+    /// \brief 인덱스를 이용해 double 형으로 셀값을 반환한다.
     double AsDouble(size_t index) const;
 
-    /// \brief ε ̿ std::string   ȯѴ.
+    /// \brief 인덱스를 이용해 std::string 형으로 셀값을 반환한다.
     const char* AsStringByIndex(size_t index) const;
 
-    /// \brief  ̸ ̿ int   ȯѴ.
+    /// \brief 셀 이름을 이용해 int 형으로 셀값을 반환한다.
     int AsInt(const char* name) const { return AsInt(m_Alias[name]); }
 
-    /// \brief  ̸ ̿ double   ȯѴ.
+    /// \brief 셀 이름을 이용해 double 형으로 셀값을 반환한다.
     double AsDouble(const char* name) const { return AsDouble(m_Alias[name]); }
 
-    /// \brief  ̸ ̿ std::string   ȯѴ.
+    /// \brief 셀 이름을 이용해 std::string 형으로 셀값을 반환한다.
     const char* AsString(const char* name) const { return AsStringByIndex(m_Alias[name]); }
 
-    /// \brief alias   ͸ Ѵ.
+    /// \brief alias를 포함해 모든 데이터를 삭제한다.
     void Destroy();
 
 
 private:
-    /// \brief   ȯѴ.
+    /// \brief 현재 행을 반환한다.
     const cCsvRow* const CurRow() const;
 
-    /// \brief   
+    /// \brief 복사 생성자 금지
     cCsvTable(const cCsvTable&) {}
 
-    /// \brief   
+    /// \brief 대입 연산자 금지
     const cCsvTable& operator = (const cCsvTable&) { return *this; }
 };
 
diff --git a/src/db/DBManager.cpp b/src/db/DBManager.cpp
index c3058c7..33ff638 100644
--- a/src/db/DBManager.cpp
+++ b/src/db/DBManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "DBManager.h"
 #include "ClientManager.h"
 
diff --git a/src/db/DBManager.h b/src/db/DBManager.h
index aab3b2a..9e900f7 100644
--- a/src/db/DBManager.h
+++ b/src/db/DBManager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN2_DB_DBMANAGER_H__
+#ifndef __INC_METIN2_DB_DBMANAGER_H__
 #define __INC_METIN2_DB_DBMANAGER_H__
 
 #include 
diff --git a/src/db/GuildManager.cpp b/src/db/GuildManager.cpp
index fb82434..6c91545 100644
--- a/src/db/GuildManager.cpp
+++ b/src/db/GuildManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "GuildManager.h"
 #include "Main.h"
 #include "ClientManager.h"
@@ -242,7 +242,7 @@ void CGuildManager::ResultRanking(MYSQL_RES * pRes)
 
 void CGuildManager::Update()
 {
-	ProcessReserveWar(); //   ó
+	ProcessReserveWar(); // 예약 전쟁 처리
 
 	time_t now = CClientManager::instance().GetCurrentTime();
 
@@ -462,7 +462,7 @@ void CGuildManager::RemoveWar(DWORD GID1, DWORD GID2)
 }
 
 //
-//     ʵ 
+// 길드전 비정상 종료 및 필드전 종료
 //
 void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
 {
@@ -493,7 +493,7 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
 
 	bool bDraw = false;
 
-	if (!bForceDraw) //  ºΰ ƴ 쿡  üũѴ.
+	if (!bForceDraw) // 강제 무승부가 아닐 경우에는 점수를 체크한다.
 	{
 		if (pData->iScore[0] > pData->iScore[1])
 		{
@@ -508,7 +508,7 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
 		else
 			bDraw = true;
 	}
-	else //  º 쿡  º
+	else // 강제 무승부일 경우에는 무조건 무승부
 		bDraw = true;
 
 	if (bDraw)
@@ -516,14 +516,14 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
 	else
 		ProcessWinLose(win_guild, lose_guild);
 
-	// DB  ü   ֱ   Ŷ  Ѵ.
+	// DB 서버에서 자체적으로 끝낼 때도 있기 때문에 따로 패킷을 보내줘야 한다.
 	CClientManager::instance().for_each_peer(FSendPeerWar(0, GUILD_WAR_END, GID1, GID2));
 
 	RemoveWar(GID1, GID2);
 }
 
 //
-//   
+// 길드전 정상 종료
 // 
 void CGuildManager::RecvWarOver(DWORD dwGuildWinner, DWORD dwGuildLoser, bool bDraw, long lWarPrice)
 {
@@ -571,7 +571,7 @@ void CGuildManager::RecvWarOver(DWORD dwGuildWinner, DWORD dwGuildLoser, bool bD
 void CGuildManager::RecvWarEnd(DWORD GID1, DWORD GID2)
 {
 	sys_log(0, "GuildWar: RecvWarEnded : %u vs %u", GID1, GID2);
-	WarEnd(GID1, GID2, true); //    Ѿ Ѵ.
+	WarEnd(GID1, GID2, true); // 무조건 비정상 종료 시켜야 한다.
 }
 
 void CGuildManager::StartWar(BYTE bType, DWORD GID1, DWORD GID2, CGuildWarReserve * pkReserve)
@@ -745,7 +745,7 @@ void CGuildManager::ChangeLadderPoint(DWORD GID, int change)
 	sys_log(0, "GuildManager::ChangeLadderPoint %u %d", GID, r.ladder_point);
 	sys_log(0, "%s", buf);
 
-	// Packet 
+	// Packet 보내기
 	TPacketGuildLadder p;
 
 	p.dwGuild = GID;
@@ -808,7 +808,7 @@ void CGuildManager::WithdrawMoney(CPeer* peer, DWORD dwGuild, INT iGold)
 		return;
 	}
 
-	//  ϰ ÷ش
+	// 돈이있으니 출금하고 올려준다
 	if (it->second.gold >= iGold)
 	{
 		it->second.gold -= iGold;
@@ -839,7 +839,7 @@ void CGuildManager::WithdrawMoneyReply(DWORD dwGuild, BYTE bGiveSuccess, INT iGo
 }
 
 //
-//  (ڰ   ִ)
+// 예약 길드전(관전자가 배팅할 수 있다)
 //
 const int c_aiScoreByLevel[GUILD_MAX_LEVEL+1] =
 {
@@ -869,7 +869,7 @@ const int c_aiScoreByLevel[GUILD_MAX_LEVEL+1] =
 const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
 {
 	0,
-	55000,	// 1
+	55000,	// 1위
 	50000,
 	45000,
 	40000,
@@ -878,7 +878,7 @@ const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
 	28000,
 	24000,
 	21000,
-	18000,	// 10
+	18000,	// 10위
 	15000,
 	12000,
 	10000,
@@ -888,7 +888,7 @@ const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
 	3000,
 	2000,
 	1000,
-	500		// 20
+	500		// 20위
 };
 
 void CGuildManager::BootReserveWar()
@@ -932,8 +932,8 @@ void CGuildManager::BootReserveWar()
 
 			char buf[512];
 			snprintf(buf, sizeof(buf), "GuildWar: BootReserveWar : step %d id %u GID1 %u GID2 %u", i, t.dwID, t.dwGuildFrom, t.dwGuildTo);
-			// i == 0 ̸   DB ƨ ̹Ƿ º óѴ.
-			// Ǵ, 5     º óѴ. ( þ ش)
+			// i == 0 이면 길드전 도중 DB가 튕긴 것이므로 무승부 처리한다.
+			// 또는, 5분 이하 남은 예약 길드전도 무승부 처리한다. (각자의 배팅액을 돌려준다)
 			//if (i == 0 || (int) t.dwTime - CClientManager::instance().GetCurrentTime() < 60 * 5)
 			if (i == 0 || (int) t.dwTime - CClientManager::instance().GetCurrentTime() < 0)
 			{
@@ -1010,7 +1010,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 
 	int lvp, rkp, alv, mc;
 
-	// Ŀ 
+	// 파워 계산
 	TGuild & k1 = TouchGuild(GID1);
 
 	lvp = c_aiScoreByLevel[MIN(GUILD_MAX_LEVEL, k1.level)];
@@ -1026,7 +1026,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 	t.lPowerFrom = (long) polyPower.Eval();
 	sys_log(0, "GuildWar: %u lvp %d rkp %d alv %d mc %d power %d", GID1, lvp, rkp, alv, mc, t.lPowerFrom);
 
-	// Ŀ 
+	// 파워 계산
 	TGuild & k2 = TouchGuild(GID2);
 
 	lvp = c_aiScoreByLevel[MIN(GUILD_MAX_LEVEL, k2.level)];
@@ -1042,7 +1042,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 	t.lPowerTo = (long) polyPower.Eval();
 	sys_log(0, "GuildWar: %u lvp %d rkp %d alv %d mc %d power %d", GID2, lvp, rkp, alv, mc, t.lPowerTo);
 
-	// ڵĸ 
+	// 핸디캡 계산
 	if (t.lPowerTo > t.lPowerFrom)
 	{
 		polyHandicap.SetVar("pA", t.lPowerTo);
@@ -1057,7 +1057,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 	t.lHandicap = (long) polyHandicap.Eval();
 	sys_log(0, "GuildWar: handicap %d", t.lHandicap);
 
-	// 
+	// 쿼리
 	char szQuery[512];
 
 	snprintf(szQuery, sizeof(szQuery),
@@ -1094,7 +1094,7 @@ void CGuildManager::ProcessReserveWar()
 		CGuildWarReserve * pk = it2->second;
 		TGuildWarReserve & r = pk->GetDataRef();
 
-		if (!r.bStarted && r.dwTime - 1800 <= dwCurTime) // 30  ˸.
+		if (!r.bStarted && r.dwTime - 1800 <= dwCurTime) // 30분 전부터 알린다.
 		{
 			int iMin = (int) ceil((int)(r.dwTime - dwCurTime) / 60.0);
 
@@ -1135,9 +1135,9 @@ void CGuildManager::ProcessReserveWar()
 					pk->SetLastNoticeMin(iMin);
 
 					if (!g_stLocale.compare("euckr"))
-						CClientManager::instance().SendNotice("%s  %s    %d   ˴ϴ!", r_1.szName, r_2.szName, iMin);
+						CClientManager::instance().SendNotice("%s 길드와 %s 길드의 전쟁이 약 %d분 후 시작 됩니다!", r_1.szName, r_2.szName, iMin);
 					else if (!g_stLocale.compare("gb2312"))
-						CClientManager::instance().SendNotice("%s  %s İս %dӺʼ!", r_1.szName, r_2.szName, iMin);
+						CClientManager::instance().SendNotice("%s 곤삔뵨 %s 곤삔돨곤삔濫轢쉥瞳 %d롸爐빈역迦!", r_1.szName, r_2.szName, iMin);
 				}
 			}
 		}
@@ -1239,7 +1239,7 @@ void CGuildWarReserve::Initialize()
 
 void CGuildWarReserve::OnSetup(CPeer * peer)
 {
-	if (m_data.bStarted) // ̹ ۵   ʴ´.
+	if (m_data.bStarted) // 이미 시작된 것은 보내지 않는다.
 		return;
 
 	FSendPeerWar(m_data.bType, GUILD_WAR_RESERVE, m_data.dwGuildFrom, m_data.dwGuildTo) (peer);
@@ -1325,8 +1325,8 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
 }
 
 //
-// º ó: κ ºΰ  ,    Ư Ȳ 쿡
-//              º ó ־ Ѵ.
+// 무승부 처리: 대부분 승부가 나야 정상이지만, 서버 문제 등 특정 상황일 경우에는
+//              무승부 처리가 있어야 한다.
 //
 void CGuildWarReserve::Draw() 
 {
@@ -1458,7 +1458,7 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
 
 			double ratio = (double) it->second.second / dwWinnerBet;
 
-			// 10%    й
+			// 10% 세금 공제 후 분배
 			sys_log(0, "WAR_REWARD: %s %u ratio %f", it->first.c_str(), it->second.second, ratio);
 
 			DWORD dwGold = (DWORD) (dwTotalBet * ratio * 0.9);
diff --git a/src/db/GuildManager.h b/src/db/GuildManager.h
index fe99e1a..905c61d 100644
--- a/src/db/GuildManager.h
+++ b/src/db/GuildManager.h
@@ -1,4 +1,4 @@
-// vim:ts=8 sw=4
+// vim:ts=8 sw=4
 #ifndef __INC_GUILD_MANAGER_H
 #define __INC_GUILD_MANAGER_H
 
@@ -150,7 +150,7 @@ class CGuildWarReserve
 	void	SetLastNoticeMin(int iMin) { m_iLastNoticeMin = iMin; }
 
     private:
-	CGuildWarReserve();  // ⺻ ڸ  ϵ ǵ  
+	CGuildWarReserve();  // 기본 생성자를 사용하지 못하도록 의도적으로 구현하지 않음
 
 	TGuildWarReserve				m_data;
 	// >
@@ -235,7 +235,7 @@ class CGuildManager : public singleton
 	std::map					m_map_kGuild;
 	std::map >		m_mapGuildWarEndTime;
 
-	std::set				m_DeclareMap; //   ¸ 
+	std::set				m_DeclareMap; // 선전 포고 상태를 저장
 	std::map >	m_WarMap;
 
 	typedef std::pair	stPairGuildWar;
diff --git a/src/db/HB.cpp b/src/db/HB.cpp
index 4caea8a..8cc0b43 100644
--- a/src/db/HB.cpp
+++ b/src/db/HB.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "HB.h"
 #include "Main.h"
 #include "DBManager.h"
@@ -30,7 +30,7 @@ bool PlayerHB::Initialize()
 }
 
 //
-// @version	05/07/05 Bang2ni - id  شϴ data    ϰ data  insert  ϴڵ ߰.
+// @version	05/07/05 Bang2ni - id 에 해당하는 data 가 없을 때 쿼리하고 data 를 insert  하는코드 추가.
 //
 void PlayerHB::Put(DWORD id)
 {
@@ -48,7 +48,7 @@ void PlayerHB::Put(DWORD id)
 }
 
 //
-// @version	05/07/05 Bang2ni - Query string ۰ ۾Ƽ ÷.
+// @version	05/07/05 Bang2ni - Query string 버퍼가 작아서 늘려줌.
 //
 bool PlayerHB::Query(DWORD id)
 {
diff --git a/src/db/HB.h b/src/db/HB.h
index 8c5da77..3fbc8db 100644
--- a/src/db/HB.h
+++ b/src/db/HB.h
@@ -1,4 +1,4 @@
-// vim:ts=8 sw=4
+// vim:ts=8 sw=4
 #ifndef __INC_METIN_II_PLAYERHB_H__
 #define __INC_METIN_II_PLAYERHB_H__
 
diff --git a/src/db/ItemAwardManager.cpp b/src/db/ItemAwardManager.cpp
index 54f4b1a..e8a02e0 100644
--- a/src/db/ItemAwardManager.cpp
+++ b/src/db/ItemAwardManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "QID.h"
 #include "DBManager.h"
 #include "ItemAwardManager.h"
@@ -54,19 +54,19 @@ void ItemAwardManager::Load(SQLMsg * pMsg)
 		if (row[col])
 		{
 			strlcpy(kData->szWhy, row[col], sizeof(kData->szWhy));
-			// ߿ whyݷ뿡  				
-			char* whyStr = kData->szWhy;	//why ݷ б
-			char cmdStr[100] = "";	//whyݷ뿡   ӽ ڿ ص
-			strcpy(cmdStr,whyStr);	//ɾ   ū  ūȭ DZ 
+			//게임 중에 why콜룸에 변동이 생기면				
+			char* whyStr = kData->szWhy;	//why 콜룸 읽기
+			char cmdStr[100] = "";	//why콜룸에서 읽은 값을 임시 문자열에 복사해둠
+			strcpy(cmdStr,whyStr);	//명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문
 			char command[20] = "";
-			strcpy(command,CClientManager::instance().GetCommand(cmdStr));	// command 
+			strcpy(command,CClientManager::instance().GetCommand(cmdStr));	// command 얻기
 			//sys_err("%d,  %s",pItemAward->dwID,command);
-			if( !(strcmp(command,"GIFT") ))	// command  GIFT̸
+			if( !(strcmp(command,"GIFT") ))	// command 가 GIFT이면
 			{
 				TPacketItemAwardInfromer giftData;
-				strcpy(giftData.login, kData->szLogin);	//α ̵ 
-				strcpy(giftData.command, command);					//ɾ 
-				giftData.vnum = kData->dwVnum;				// vnum 
+				strcpy(giftData.login, kData->szLogin);	//로그인 아이디 복사
+				strcpy(giftData.command, command);					//명령어 복사
+				giftData.vnum = kData->dwVnum;				//아이템 vnum도 복사
 				CClientManager::instance().ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
 			}
 		}
diff --git a/src/db/ItemAwardManager.h b/src/db/ItemAwardManager.h
index db6e42d..3a4e98e 100644
--- a/src/db/ItemAwardManager.h
+++ b/src/db/ItemAwardManager.h
@@ -1,4 +1,4 @@
-// vim:ts=8 sw=4
+// vim:ts=8 sw=4
 #ifndef __INC_ITEM_AWARD_H
 #define __INC_ITEM_AWARD_H
 #include 
diff --git a/src/db/ItemIDRangeManager.cpp b/src/db/ItemIDRangeManager.cpp
index 099765b..f78c45b 100644
--- a/src/db/ItemIDRangeManager.cpp
+++ b/src/db/ItemIDRangeManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ItemIDRangeManager.h"
 #include "Main.h"
 #include "DBManager.h"
diff --git a/src/db/ItemIDRangeManager.h b/src/db/ItemIDRangeManager.h
index d15cd01..e2a30a0 100644
--- a/src/db/ItemIDRangeManager.h
+++ b/src/db/ItemIDRangeManager.h
@@ -1,4 +1,4 @@
-// vim:ts=4 sw=4
+// vim:ts=4 sw=4
 #ifndef __INC_METIN_II_ITEM_ID_RANGE_MANAGER_H__
 #define __INC_METIN_II_ITEM_ID_RANGE_MANAGER_H__
 
diff --git a/src/db/Lock.cpp b/src/db/Lock.cpp
index 2019a04..d3a5252 100644
--- a/src/db/Lock.cpp
+++ b/src/db/Lock.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "Lock.h"
 
 CLock::CLock()
diff --git a/src/db/Lock.h b/src/db/Lock.h
index 6e82fc8..489f008 100644
--- a/src/db/Lock.h
+++ b/src/db/Lock.h
@@ -1,4 +1,4 @@
-// vim:ts=8 sw=4
+// vim:ts=8 sw=4
 #ifndef __INC_LOCK_H__
 #define __INC_LOCK_H__
 
diff --git a/src/db/LoginData.cpp b/src/db/LoginData.cpp
index 3bba1c5..9ef1c71 100644
--- a/src/db/LoginData.cpp
+++ b/src/db/LoginData.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "LoginData.h"
 #include "ClientManager.h"
 
diff --git a/src/db/LoginData.h b/src/db/LoginData.h
index 73e20a7..b054a43 100644
--- a/src/db/LoginData.h
+++ b/src/db/LoginData.h
@@ -1,4 +1,4 @@
-// vim:ts=8 sw=4
+// vim:ts=8 sw=4
 #ifndef __INC_METIN_II_DB_LOGINDATA_H__
 #define __INC_METIN_II_DB_LOGINDATA_H__
 
diff --git a/src/db/Main.cpp b/src/db/Main.cpp
index 2442cd8..44a7a8f 100644
--- a/src/db/Main.cpp
+++ b/src/db/Main.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "Config.h"
 #include "Peer.h"
 #include "DBManager.h"
@@ -30,11 +30,11 @@ std::string g_stPlayerDBName = "";
 bool g_bHotBackup = false;
 BOOL g_test_server = false;
 
-// 
+//단위 초
 int g_iPlayerCacheFlushSeconds = 60*7;
 int g_iItemCacheFlushSeconds = 60*5;
 
-//g_iLogoutSeconds ġ g_iPlayerCacheFlushSeconds  g_iItemCacheFlushSeconds   Ѵ.
+//g_iLogoutSeconds 수치는 g_iPlayerCacheFlushSeconds 와 g_iItemCacheFlushSeconds 보다 길어야 한다.
 int g_iLogoutSeconds = 60*10;
 
 int g_log = 1;
@@ -123,13 +123,13 @@ int main()
 
 void emptybeat(LPHEART heart, int pulse)
 {
-	if (!(pulse % heart->passes_per_sec))	// 1ʿ ѹ
+	if (!(pulse % heart->passes_per_sec))	// 1초에 한번
 	{
 	}
 }
 
 //
-// @version	05/06/13 Bang2ni -   ij flush timeout  ߰.
+// @version	05/06/13 Bang2ni - 아이템 가격정보 캐시 flush timeout 설정 추가.
 //
 int Start()
 {
diff --git a/src/db/Main.h b/src/db/Main.h
index 8d489b4..76f567f 100644
--- a/src/db/Main.h
+++ b/src/db/Main.h
@@ -1,4 +1,4 @@
-#ifndef __INC_MAIN_H__
+#ifndef __INC_MAIN_H__
 #define __INC_MAIN_H__
 
 int	Start();
diff --git a/src/db/Marriage.h b/src/db/Marriage.h
index 6758c8a..f24af34 100644
--- a/src/db/Marriage.h
+++ b/src/db/Marriage.h
@@ -1,4 +1,4 @@
-// vim: ts=4 sw=4
+// vim: ts=4 sw=4
 #ifndef __MARRIAGE_H
 #define __MARRIAGE_H
 
@@ -49,7 +49,7 @@ namespace marriage
 		DWORD pid2;
 		int   love_point;
 		DWORD time;
-		BYTE is_married; // false : ȥ , true : ȥ 
+		BYTE is_married; // false : 약혼 상태, true : 결혼 상태
 		std::string name1;
 		std::string name2;
 
diff --git a/src/db/Monarch.h b/src/db/Monarch.h
index 81e7a6e..d4759c4 100644
--- a/src/db/Monarch.h
+++ b/src/db/Monarch.h
@@ -1,4 +1,4 @@
-// vim: ts=4 sw=4
+// vim: ts=4 sw=4
 #ifndef METIN2_MONARCH_H
 #define METIN2_MONARCH_H
 
diff --git a/src/db/MoneyLog.cpp b/src/db/MoneyLog.cpp
index e0ec020..3490794 100644
--- a/src/db/MoneyLog.cpp
+++ b/src/db/MoneyLog.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "MoneyLog.h"
 #include "ClientManager.h"
 #include "Peer.h"
diff --git a/src/db/MoneyLog.h b/src/db/MoneyLog.h
index 76e316c..f252213 100644
--- a/src/db/MoneyLog.h
+++ b/src/db/MoneyLog.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_MONEY_LOG
 #define __INC_MONEY_LOG
 
diff --git a/src/db/NetBase.cpp b/src/db/NetBase.cpp
index 34874d4..9d51fe0 100644
--- a/src/db/NetBase.cpp
+++ b/src/db/NetBase.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "NetBase.h"
 #include "Config.h"
 #include "ClientManager.h"
diff --git a/src/db/NetBase.h b/src/db/NetBase.h
index 00b1f84..8d9487f 100644
--- a/src/db/NetBase.h
+++ b/src/db/NetBase.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_NETWORKBASE_H__
 #define __INC_NETWORKBASE_H__
 
diff --git a/src/db/Peer.cpp b/src/db/Peer.cpp
index f71b9ef..2de35ee 100644
--- a/src/db/Peer.cpp
+++ b/src/db/Peer.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "Peer.h"
 #include "ItemIDRangeManager.h"
 
diff --git a/src/db/Peer.h b/src/db/Peer.h
index bf80cf7..5e8078e 100644
--- a/src/db/Peer.h
+++ b/src/db/Peer.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_PEER_H__
 #define __INC_PEER_H__
 
@@ -66,9 +66,9 @@ class CPeer : public CPeerBase
 	BYTE	m_bChannel;
 	DWORD	m_dwHandle;
 	DWORD	m_dwUserCount;
-	WORD	m_wListenPort;	// Ӽ Ŭ̾Ʈ  listen ϴ Ʈ
-	WORD	m_wP2PPort;	// Ӽ Ӽ P2P   listen ϴ Ʈ
-	long	m_alMaps[32];	//   ϰ ִ°?
+	WORD	m_wListenPort;	// 게임서버가 클라이언트를 위해 listen 하는 포트
+	WORD	m_wP2PPort;	// 게임서버가 게임서버 P2P 접속을 위해 listen 하는 포트
+	long	m_alMaps[32];	// 어떤 맵을 관장하고 있는가?
 
 	TItemIDRangeTable m_itemRange;
 	TItemIDRangeTable m_itemSpareRange;
diff --git a/src/db/PeerBase.cpp b/src/db/PeerBase.cpp
index a31108c..5bbe882 100644
--- a/src/db/PeerBase.cpp
+++ b/src/db/PeerBase.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "PeerBase.h"
 
 CPeerBase::CPeerBase() : m_fd(INVALID_SOCKET), m_BytesRemain(0), m_outBuffer(NULL), m_inBuffer(NULL)
diff --git a/src/db/PeerBase.h b/src/db/PeerBase.h
index 3d192c9..2796d6d 100644
--- a/src/db/PeerBase.h
+++ b/src/db/PeerBase.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_PEERBASE_H__
 #define __INC_PEERBASE_H__
 
diff --git a/src/db/PrivManager.cpp b/src/db/PrivManager.cpp
index 84f0ae9..17c5254 100644
--- a/src/db/PrivManager.cpp
+++ b/src/db/PrivManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "PrivManager.h"
 #include "ClientManager.h"
 
@@ -20,7 +20,7 @@ CPrivManager::~CPrivManager()
 }
 
 //
-// @version 05/06/07	Bang2ni - ߺ ʽ   忡  ó
+// @version 05/06/07	Bang2ni - 중복적으로 보너스가 적용 된 길드에 대한 처리
 //
 void CPrivManager::Update()
 {
@@ -37,8 +37,8 @@ void CPrivManager::Update()
 			__typeof(m_aPrivGuild[p->type].begin()) it = m_aPrivGuild[p->type].find(p->guild_id);
 
 			// ADD_GUILD_PRIV_TIME
-			// 忡 ߺ ʽ Ǿ  map  value  () ǾǷ
-			// TPrivGuildData  Ͱ    ְ Ӽ鿡 cast  ش.
+			// 길드에 중복적으로 보너스가 설정되었을 경우 map 의 value 가 갱신(수정) 되었으므로
+			// TPrivGuildData 의 포인터가 같을때 실제로 삭제해 주고 게임서버들에게 cast 해 준다.
 			if (it != m_aPrivGuild[p->type].end() && it->second == p) {
 				m_aPrivGuild[p->type].erase(it);
 				SendChangeGuildPriv(p->guild_id, p->type, 0, 0);
@@ -113,7 +113,7 @@ void CPrivManager::AddCharPriv(DWORD pid, BYTE type, int value)
 }
 
 //
-// @version 05/06/07	Bang2ni - ̹ ʽ   忡 ʽ 
+// @version 05/06/07	Bang2ni - 이미 보너스가 적용 된 길드에 보너스 설정
 //
 void CPrivManager::AddGuildPriv(DWORD guild_id, BYTE type, int value, time_t duration_sec)
 {
@@ -131,8 +131,8 @@ void CPrivManager::AddGuildPriv(DWORD guild_id, BYTE type, int value, time_t dur
 	m_pqPrivGuild.push(std::make_pair(end, p));
 
 	// ADD_GUILD_PRIV_TIME
-	// ̹ ʽ  ִٸ map  value   ش.
-	//  value  ʹ priority queue    ȴ.
+	// 이미 보너스가 설정되 있다면 map 의 value 를 갱신해 준다.
+	// 이전 value 의 포인터는 priority queue 에서 삭제될 때 해제된다.
 	if (it != m_aPrivGuild[type].end())
 		it->second = p;
 	else
@@ -158,8 +158,8 @@ void CPrivManager::AddEmpirePriv(BYTE empire, BYTE type, int value, time_t durat
 	time_t now = CClientManager::instance().GetCurrentTime();
 	time_t end = now+duration_sec;
 
-	//   ȿȭ
-	// priority_queue ִ pointer == m_aaPrivEmpire[type][empire]
+	// 이전 설정값 무효화
+	// priority_queue에 들어있는 pointer == m_aaPrivEmpire[type][empire]
 	{
 		if (m_aaPrivEmpire[type][empire])
 			m_aaPrivEmpire[type][empire]->bRemoved = true;
@@ -177,7 +177,7 @@ void CPrivManager::AddEmpirePriv(BYTE empire, BYTE type, int value, time_t durat
 }
 
 /**
- * @version 05/06/08	Bang2ni - ӽð ߰
+ * @version 05/06/08	Bang2ni - 지속시간 추가
  */
 struct FSendChangeGuildPriv
 {
diff --git a/src/db/PrivManager.h b/src/db/PrivManager.h
index 9dd20df..884aeb5 100644
--- a/src/db/PrivManager.h
+++ b/src/db/PrivManager.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_PRIV_MANAGER_H
 #define __INC_PRIV_MANAGER_H
 
@@ -23,7 +23,7 @@ struct TPrivEmpireData
 };
 
 /**
- * @version 05/06/08	Bang2ni - ӽð ߰
+ * @version 05/06/08	Bang2ni - 지속시간 추가
  */
 struct TPrivGuildData
 {
@@ -33,7 +33,7 @@ struct TPrivGuildData
     DWORD guild_id;
 
 	// ADD_GUILD_PRIV_TIME
-    time_t end_time_sec;	///< ӽð
+    time_t end_time_sec;	///< 지속시간
 
     TPrivGuildData(BYTE type, int value, DWORD guild_id, time_t _end_time_sec)
 	: type(type), value(value), bRemoved(false), guild_id(guild_id), end_time_sec(_end_time_sec )
@@ -53,7 +53,7 @@ struct TPrivCharData
 };
 
 /**
- * @version 05/06/08	Bang2ni - Guild privilege  Լ  ð ߰
+ * @version 05/06/08	Bang2ni - Guild privilege 관련 함수 지속 시간 추가
  */
 class CPrivManager : public singleton
 {
diff --git a/src/db/ProtoReader.cpp b/src/db/ProtoReader.cpp
index fc5e16e..379c29c 100644
--- a/src/db/ProtoReader.cpp
+++ b/src/db/ProtoReader.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include 
 #include "ProtoReader.h"
@@ -25,23 +25,23 @@ string trim(const string& str){return trim_left(trim_right(str));}
 
 static string* StringSplit(string strOrigin, string strTok)
 {
-    int     cutAt;                            //ڸġ
-    int     index     = 0;                    //ڿε
-    string* strResult = new string[30];		  //return Һ
+    int     cutAt;                            //자르는위치
+    int     index     = 0;                    //문자열인덱스
+    string* strResult = new string[30];		  //결과return 할변수
 
-    //strTokãݺ
+    //strTok을찾을때까지반복
     while ((cutAt = strOrigin.find_first_of(strTok)) != strOrigin.npos)
     {
-       if (cutAt > 0)  //ڸġ0ũ()
+       if (cutAt > 0)  //자르는위치가0보다크면(성공시)
        {
-            strResult[index++] = strOrigin.substr(0, cutAt);  //迭߰
+            strResult[index++] = strOrigin.substr(0, cutAt);  //결과배열에추가
        }
-       strOrigin = strOrigin.substr(cutAt+1);  //ڸκѳ
+       strOrigin = strOrigin.substr(cutAt+1);  //원본은자른부분제외한나머지
     }
 
-    if(strOrigin.length() > 0)  //̾
+    if(strOrigin.length() > 0)  //원본이아직남았으면
     {
-        strResult[index++] = strOrigin.substr(0, cutAt);  //迭߰
+        strResult[index++] = strOrigin.substr(0, cutAt);  //나머지를결과배열에추가
     }
 
 	for( int i=0;i type_value && "Subtype rule: Out of range!!");
 
-	// assert   ..
+	// assert 안 먹히는 듯..
 	if (_countof(arSubType) <= type_value)
 	{
 		sys_err("SubType : Out of range!! (type_value: %d, count of registered subtype: %d", type_value, _countof(arSubType));
 		return -1;
 	}
 
-	// Ÿ Ÿ ̰ ϴ ˾ƺ,  0 
+	//아이템 타입의 서브타입 어레이가 존재하는지 알아보고, 없으면 0 리턴
 	if (arSubType[type_value]==0) {
 		return 0;
 	}
@@ -246,13 +246,13 @@ int get_Item_AntiFlag_Value(string inputString)
 
 
 	int retValue = 0;
-	string* arInputString = StringSplit(inputString, "|");				//   ܾ ɰ 迭.
+	string* arInputString = StringSplit(inputString, "|");				//프로토 정보 내용을 단어별로 쪼갠 배열.
 	for(int i =0;i &nameMap)
 {
 	int col = 0;
 	str_to_number(mobTable->dwVnum, csvTable.AsStringByIndex(col++));
 	strlcpy(mobTable->szName, csvTable.AsStringByIndex(col++), sizeof(mobTable->szName));
 
-	//3.  ̸ ־ֱ.
+	//3. 지역별 이름 넣어주기.
 	map::iterator it;
 	it = nameMap.find(mobTable->dwVnum);
 	if (it != nameMap.end()) {
@@ -750,11 +750,11 @@ bool Set_Proto_Item_Table(TItemTable *itemTable, cCsvTable &csvTable,std::mapdwVnum = dataArray[0];
@@ -778,7 +778,7 @@ bool Set_Proto_Item_Table(TItemTable *itemTable, cCsvTable &csvTable,std::mapszName, csvTable.AsStringByIndex(1), sizeof(itemTable->szName));
-	// ̸ ־ֱ.
+	//지역별 이름 넣어주기.
 	map::iterator it;
 	it = nameMap.find(itemTable->dwVnum);
 	if (it != nameMap.end()) {
diff --git a/src/db/ProtoReader.h b/src/db/ProtoReader.h
index 5505f73..9e21ed3 100644
--- a/src/db/ProtoReader.h
+++ b/src/db/ProtoReader.h
@@ -1,4 +1,4 @@
-#ifndef __Item_CSV_READER_H__
+#ifndef __Item_CSV_READER_H__
 #define __Item_CSV_READER_H__
 
 #include 
@@ -6,8 +6,8 @@
 
 #include "CsvReader.h"
 
-//csv  оͼ  ̺ ־ش.
-void putItemIntoTable(); //(̺, ׽Ʈ)
+//csv 파일을 읽어와서 아이템 테이블에 넣어준다.
+void putItemIntoTable(); //(테이블, 테스트여부)
 
 int get_Item_Type_Value(std::string inputString);
 int get_Item_SubType_Value(int type_value, std::string inputString);
@@ -19,7 +19,7 @@ int get_Item_LimitType_Value(std::string inputString);
 int get_Item_ApplyType_Value(std::string inputString);
 
 
-// 䵵   ִ.
+//몬스터 프로토도 읽을 수 있다.
 int get_Mob_Rank_Value(std::string inputString);
 int get_Mob_Type_Value(std::string inputString);
 int get_Mob_BattleType_Value(std::string inputString);
diff --git a/src/db/QID.h b/src/db/QID.h
index 230d2ef..670fb21 100644
--- a/src/db/QID.h
+++ b/src/db/QID.h
@@ -1,8 +1,8 @@
-#ifndef __INC_METIN_II_DB_QID_H__
+#ifndef __INC_METIN_II_DB_QID_H__
 #define __INC_METIN_II_DB_QID_H__
 
 /**
- * @version	05/06/10 Bang2ni -    ߰(QID_ITEMPRICE_XXX)
+ * @version	05/06/10 Bang2ni - 아이템 가격정보 쿼리 추가(QID_ITEMPRICE_XXX)
  */
 enum QID
 {
@@ -29,10 +29,10 @@ enum QID
     QID_GUILD_RANKING,			// 20
 
 	// MYSHOP_PRICE_LIST
-    QID_ITEMPRICE_SAVE,			///< 21,    
-    QID_ITEMPRICE_DESTROY,		///< 22,    
-    QID_ITEMPRICE_LOAD_FOR_UPDATE,	///< 23,  Ʈ    ε 
-    QID_ITEMPRICE_LOAD,			///< 24,   ε 
+    QID_ITEMPRICE_SAVE,			///< 21, 아이템 가격정보 저장 쿼리
+    QID_ITEMPRICE_DESTROY,		///< 22, 아이템 가격정보 삭제 쿼리
+    QID_ITEMPRICE_LOAD_FOR_UPDATE,	///< 23, 가격정보 업데이트를 위한 아이템 가격정보 로드 쿼리
+    QID_ITEMPRICE_LOAD,			///< 24, 아이템 가격정보 로드 쿼리
 	// END_OF_MYSHOP_PRICE_LIST
 };
 
diff --git a/src/db/grid.cpp b/src/db/grid.cpp
index bb94831..7a52ccf 100644
--- a/src/db/grid.cpp
+++ b/src/db/grid.cpp
@@ -1,4 +1,4 @@
-#include 
+#include 
 #include 
 #include "../../libthecore/include/memcpy.h"
 #include "../../common/stl.h"
@@ -29,7 +29,7 @@ void CGrid::Clear()
 
 int CGrid::FindBlank(int w, int h)
 {
-	// ũⰡ  ũٸ Ȯ ʿ  ׳ 
+	// 크기가 더 크다면 확인할 필요 없이 그냥 리턴
 	if (w > m_iWidth || h > m_iHeight)
 		return -1;
 
@@ -87,7 +87,7 @@ bool CGrid::IsEmpty(int iPos, int w, int h)
 {
 	int iRow = iPos / m_iWidth;
 
-	// Grid ΰ  ˻
+	// Grid 안쪽인가를 먼저 검사
 	if (iRow + h > m_iHeight)
 		return false;
 
diff --git a/src/db/grid.h b/src/db/grid.h
index 9ae21ed..774d95f 100644
--- a/src/db/grid.h
+++ b/src/db/grid.h
@@ -1,4 +1,4 @@
-// vim: ts=8 sw=4
+// vim: ts=8 sw=4
 #ifndef __INC_METIN_II_GRID_H__
 #define __INC_METIN_II_GRID_H__
 
diff --git a/src/db/stdafx.h b/src/db/stdafx.h
index c3465b2..cfea817 100644
--- a/src/db/stdafx.h
+++ b/src/db/stdafx.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METiN_II_DBSERV_STDAFX_H__
+#ifndef __INC_METiN_II_DBSERV_STDAFX_H__
 #define __INC_METiN_II_DBSERV_STDAFX_H__
 
 #include "../../libthecore/include/stdafx.h"
diff --git a/src/db/version.cpp b/src/db/version.cpp
index 962e778..9b5eab3 100644
--- a/src/db/version.cpp
+++ b/src/db/version.cpp
@@ -1,4 +1,4 @@
-#include 
+#include 
 #include 
 
 void WriteVersion()
diff --git a/src/game/BattleArena.cpp b/src/game/BattleArena.cpp
index 4ec76b1..f3f5284 100644
--- a/src/game/BattleArena.cpp
+++ b/src/game/BattleArena.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "BattleArena.h"
 #include "start_position.h"
@@ -102,14 +102,14 @@ EVENTFUNC(battle_arena_event)
 			case 0:
 				{
 					++pInfo->state;
-					BroadcastNotice(LC_TEXT("͵ ݱ 5 ҽϴ!!!"));
+					BroadcastNotice(LC_TEXT("몬스터들의 공격까지 5분 남았습니다!!!"));
 				}
 				return test_server ? PASSES_PER_SEC(60) : PASSES_PER_SEC(60*4);
 
 			case 1:
 				{
 					++pInfo->state;
-					BroadcastNotice(LC_TEXT("͵ ݱ 1 ҽϴ!!!"));
+					BroadcastNotice(LC_TEXT("몬스터들의 공격까지 1분 남았습니다!!!"));
 				}
 				return test_server ? PASSES_PER_SEC(10) : PASSES_PER_SEC(60);
 
@@ -119,7 +119,7 @@ EVENTFUNC(battle_arena_event)
 					pInfo->wait_count = 0;
 
 					quest::CQuestManager::instance().RequestSetEventFlag("battle_arena", 0);
-					BroadcastNotice(LC_TEXT("͵  ϱ ߽ϴ."));
+					BroadcastNotice(LC_TEXT("몬스터들이 성을 공격하기 시작했습니다."));
 
 					LPSECTREE_MAP sectree = SECTREE_MANAGER::instance().GetMap(pInfo->nMapIndex);
 
@@ -141,7 +141,7 @@ EVENTFUNC(battle_arena_event)
 					if ( SECTREE_MANAGER::instance().GetMonsterCountInMap(pInfo->nMapIndex) <= 0 )
 					{
 						pInfo->state = 6;
-						SendNoticeMap(LC_TEXT("߾ ܿ   𿩵ϴ."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("중앙 제단에 악의 기운이 모여듭니다."), pInfo->nMapIndex, false);
 					}
 					else
 					{
@@ -150,7 +150,7 @@ EVENTFUNC(battle_arena_event)
 						if ( pInfo->wait_count >= 5 )
 						{
 							pInfo->state++;
-							SendNoticeMap(LC_TEXT("͵   Դϴ."), pInfo->nMapIndex, false);
+							SendNoticeMap(LC_TEXT("몬스터들이 물러갈 조짐을 보입니다."), pInfo->nMapIndex, false);
 						}
 						else
 						{
@@ -163,8 +163,8 @@ EVENTFUNC(battle_arena_event)
 			case 4 :
 				{
 					pInfo->state++;
-					SendNoticeMap(LC_TEXT("͵  ߽ϴ."), pInfo->nMapIndex, false);
-					SendNoticeMap(LC_TEXT("   ưϴ."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("몬스터들이 물러가기 시작했습니다."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("잠시 후 마을로 돌아갑니다."), pInfo->nMapIndex, false);
 
 					SECTREE_MANAGER::instance().PurgeMonstersInMap(pInfo->nMapIndex);
 				}
@@ -189,8 +189,8 @@ EVENTFUNC(battle_arena_event)
 					pInfo->state++;
 					pInfo->wait_count = 0;
 
-					SendNoticeMap(LC_TEXT("͵  Ÿϴ."), pInfo->nMapIndex, false);
-					SendNoticeMap(LC_TEXT("30  ͸ָ ּ."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("몬스터들의 대장이 나타났습니다."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("30분 내로 귀목령주를 물리쳐주세요."), pInfo->nMapIndex, false);
 
 					CBattleArena::instance().SpawnLastBoss();
 				}
@@ -200,8 +200,8 @@ EVENTFUNC(battle_arena_event)
 				{
 					if ( SECTREE_MANAGER::instance().GetMonsterCountInMap(pInfo->nMapIndex) <= 0 )
 					{
-						SendNoticeMap(LC_TEXT("͸ֿ  ϵ  ƽϴ."), pInfo->nMapIndex, false);
-						SendNoticeMap(LC_TEXT("   ưϴ."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("귀목령주와 그의 부하들을 모두 물리쳤습니다."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("잠시 후 마을로 돌아갑니다."), pInfo->nMapIndex, false);
 
 						pInfo->state = 5;
 
@@ -212,8 +212,8 @@ EVENTFUNC(battle_arena_event)
 
 					if ( pInfo->wait_count >= 6 )
 					{
-						SendNoticeMap(LC_TEXT("͸ְ Ͽϴ."), pInfo->nMapIndex, false);
-						SendNoticeMap(LC_TEXT("   ưϴ."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("귀목령주가 퇴각하였습니다."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("잠시 후 마을로 돌아갑니다."), pInfo->nMapIndex, false);
 
 						SECTREE_MANAGER::instance().PurgeMonstersInMap(pInfo->nMapIndex);
 						SECTREE_MANAGER::instance().PurgeStonesInMap(pInfo->nMapIndex);
@@ -243,9 +243,9 @@ bool CBattleArena::Start(int nEmpire)
 	m_nEmpire = nEmpire;
 
 	char szBuf[1024];
-	snprintf(szBuf, sizeof(szBuf), LC_TEXT("%s  ͵ ϰ ֽϴ."), EMPIRE_NAME(m_nEmpire));
+	snprintf(szBuf, sizeof(szBuf), LC_TEXT("%s의 성으로 몬스터들이 진군하고 있습니다."), EMPIRE_NAME(m_nEmpire));
 	BroadcastNotice(szBuf);
-	BroadcastNotice(LC_TEXT("10    Դϴ."));
+	BroadcastNotice(LC_TEXT("10분 뒤 성을 공격할 예정입니다."));
 
 	if (m_pEvent != NULL) {
 		event_cancel(&m_pEvent);
diff --git a/src/game/BattleArena.h b/src/game/BattleArena.h
index 086271e..6aa5335 100644
--- a/src/game/BattleArena.h
+++ b/src/game/BattleArena.h
@@ -1,4 +1,4 @@
-
+
 const static int nBATTLE_ARENA_MAP[] = { 0, 190, 191, 192 };
 const static std::string strRegen[] =
 {
diff --git a/src/game/BlueDragon.cpp b/src/game/BlueDragon.cpp
index acec908..fc4f42c 100644
--- a/src/game/BlueDragon.cpp
+++ b/src/game/BlueDragon.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "BlueDragon.h"
diff --git a/src/game/BlueDragon.h b/src/game/BlueDragon.h
index 25b7d5b..4629dd2 100644
--- a/src/game/BlueDragon.h
+++ b/src/game/BlueDragon.h
@@ -1,4 +1,4 @@
-
+
 extern int BlueDragon_StateBattle (LPCHARACTER);
 extern time_t UseBlueDragonSkill (LPCHARACTER, unsigned int);
 extern int BlueDragon_Damage (LPCHARACTER me, LPCHARACTER attacker, int dam);
diff --git a/src/game/BlueDragon_Binder.cpp b/src/game/BlueDragon_Binder.cpp
index b6bbfe7..c2f0bd1 100644
--- a/src/game/BlueDragon_Binder.cpp
+++ b/src/game/BlueDragon_Binder.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "BlueDragon_Binder.h"
diff --git a/src/game/BlueDragon_Binder.h b/src/game/BlueDragon_Binder.h
index b87ceec..9d95122 100644
--- a/src/game/BlueDragon_Binder.h
+++ b/src/game/BlueDragon_Binder.h
@@ -1,4 +1,4 @@
-
+
 enum BLUEDRAGON_STONE_EFFECT
 {
 	DEF_BONUS	=	1,
diff --git a/src/game/BlueDragon_Skill.h b/src/game/BlueDragon_Skill.h
index 12c3690..95f1ddc 100644
--- a/src/game/BlueDragon_Skill.h
+++ b/src/game/BlueDragon_Skill.h
@@ -1,4 +1,4 @@
-
+
 struct FSkillBreath
 {
 	EJobs Set1;
diff --git a/src/game/ClientPackageCryptInfo.cpp b/src/game/ClientPackageCryptInfo.cpp
index 8ac6516..2ae2170 100644
--- a/src/game/ClientPackageCryptInfo.cpp
+++ b/src/game/ClientPackageCryptInfo.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "ClientPackageCryptInfo.h"
 #include "../../common/stl.h"
 
diff --git a/src/game/ClientPackageCryptInfo.h b/src/game/ClientPackageCryptInfo.h
index e17dfd9..8d6a41b 100644
--- a/src/game/ClientPackageCryptInfo.h
+++ b/src/game/ClientPackageCryptInfo.h
@@ -1,4 +1,4 @@
-#ifndef __INC_CLIENTPACKAGE_CRYPTINFO_H
+#ifndef __INC_CLIENTPACKAGE_CRYPTINFO_H
 #define __INC_CLIENTPACKAGE_CRYPTINFO_H
 
 #include 
diff --git a/src/game/DragonLair.cpp b/src/game/DragonLair.cpp
index fcf3d73..e0ab380 100644
--- a/src/game/DragonLair.cpp
+++ b/src/game/DragonLair.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "DragonLair.h"
@@ -91,7 +91,7 @@ EVENTFUNC( DragonLair_Collapse_Event )
 	if (0 == pInfo->step)
 	{
 		char buf[512];
-		snprintf(buf, 512, LC_TEXT("밡 %d ʸ ׾ȿФ"), pInfo->pLair->GetEstimatedTime());
+		snprintf(buf, 512, LC_TEXT("용가리가 %d 초만에 죽어써효ㅠㅠ"), pInfo->pLair->GetEstimatedTime());
 		SendNoticeMap(buf, pInfo->InstanceMapIndex, true);
 
 		pInfo->step++;
@@ -146,7 +146,7 @@ DWORD CDragonLair::GetEstimatedTime() const
 
 void CDragonLair::OnDragonDead(LPCHARACTER pDragon)
 {
-	sys_log(0, "DragonLair:  ׾ȿ");
+	sys_log(0, "DragonLair: 도라곤이 죽어써효");
 
 	LogManager::instance().DragonSlayLog(  GuildID_, pDragon->GetMobTable().dwVnum, StartTime_, get_global_time() );
 }
@@ -239,7 +239,7 @@ void CDragonLairManager::OnDragonDead(LPCHARACTER pDragon, DWORD KillerGuildID)
 
 	iter->second->OnDragonDead( pDragon );
 
-	// ֵ     ֱ
+	// 애들 다 집으로 보내고 맵 없애기
 
 	tag_DragonLair_Collapse_EventInfo* info;
 	info = AllocEventInfo();
diff --git a/src/game/DragonLair.h b/src/game/DragonLair.h
index 8891fac..83e32ff 100644
--- a/src/game/DragonLair.h
+++ b/src/game/DragonLair.h
@@ -1,4 +1,4 @@
-
+
 #include 
 
 #include "../../common/stl.h"
diff --git a/src/game/DragonSoul.cpp b/src/game/DragonSoul.cpp
index 03c703b..bb59440 100644
--- a/src/game/DragonSoul.cpp
+++ b/src/game/DragonSoul.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "item.h"
 #include "item_manager.h"
@@ -37,7 +37,7 @@ int Gamble(std::vector& vec_probs)
 	return -1;
 }
 
-// ġ ̺(prob_lst) ޾ random_set.size() index Ͽ random_set return
+// 가중치 테이블(prob_lst)을 받아 random_set.size()개의 index를 선택하여 random_set을 return
 bool MakeDistinctRandomNumberSet(std::list  prob_lst, OUT std::vector& random_set)
 {
 	int size = prob_lst.size();
@@ -73,11 +73,11 @@ bool MakeDistinctRandomNumberSet(std::list  prob_lst, OUT std::vectorGetApplyNumSettings(ds_type, grade_idx, basic_apply_num, add_min, add_max))
 	{
@@ -321,14 +321,14 @@ int DSManager::GetDuration(const LPITEM pItem) const
 	return pItem->GetDuration();
 }
 
-// ȥ ޾Ƽ  ϴ Լ
+// 용혼석을 받아서 용심을 추출하는 함수
 bool DSManager::ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtractor)
 {
 	if (NULL == ch || NULL == pItem)
 		return false;
 	if (pItem->IsEquipped())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȥ   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("착용 중인 용혼석은 추출할 수 없습니다."));
 		return false;
 	}
 
@@ -372,7 +372,7 @@ bool DSManager::ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtract
 		}
 		LogManager::instance().ItemLog(ch, pItem, "DS_HEART_EXTRACT_FAIL", "");
 	
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ⿡ Ͽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용심 추출에 실패하였습니다."));
 		return false;
 	}
 	else
@@ -399,12 +399,12 @@ bool DSManager::ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtract
 		std::string s = boost::lexical_cast  (iCharge);
 		s += "%s";
 		LogManager::instance().ItemLog(ch, pItem, "DS_HEART_EXTRACT_SUCCESS", s.c_str());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ⿡ Ͽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용심 추출에 성공하였습니다."));
 		return true;
 	}
 }
 
-// Ư ȥ â    θ ϰ, н λ깰 ִ Լ.
+// 특정 용혼석을 장비창에서 제거할 때에 성공 여부를 결정하고, 실패시 부산물을 주는 함수.
 bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM pExtractor)
 {
 	if (NULL == ch || NULL == pItem)
@@ -413,13 +413,13 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 		return false;
 	}
 
-	// ǥ ġ valid ˻ , valid ʴٸ    ã´.
+	// 목표 위치가 valid한지 검사 후, valid하지 않다면 임의의 빈 공간을 찾는다.
 	if (!IsValidCellForThisItem(pItem, DestCell))
 	{
 		int iEmptyCell = ch->GetEmptyDragonSoulInventory(pItem);
 		if (iEmptyCell < 0)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지품에 빈 공간이 없습니다."));
 			return false;
 		}
 		else
@@ -437,14 +437,14 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 	int iBonus = 0;
 	float fProb;
 	float fDice;
-	// ȥ    .
+	// 용혼석 추출 성공 여부 결정.
 	{
 		DWORD dwVnum = pItem->GetVnum(); 
 
 		BYTE ds_type, grade_idx, step_idx, strength_idx;
 		GetDragonSoulInfo(pItem->GetVnum(), ds_type, grade_idx, step_idx, strength_idx);
 
-		//   ٸ ϴ  ϴ ̶ .
+		// 추출 정보가 없다면 일단 무조건 성공하는 것이라 생각하자.
 		if (!m_pTable->GetDragonSoulExtValues(ds_type, grade_idx, fProb, dwByProduct))
 		{
 			pItem->AddToCharacter(ch, DestCell);
@@ -461,7 +461,7 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 		bSuccess = fDice <= (fProb * (100 + iBonus) / 100.f);
 	}
 
-	// ij ȥ   ߰ Ȥ . λ깰 .
+	// 캐릭터의 용혼석 추출 및 추가 혹은 제거. 부산물 제공.
 	{
 		char buf[128];
 
@@ -476,7 +476,7 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 				sprintf(buf, "dice(%d) prob(%d)", fDice, fProb);
 			}
 			LogManager::instance().ItemLog(ch, pItem, "DS_PULL_OUT_SUCCESS", buf);
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용혼석 추출에 성공하였습니다."));
 			pItem->AddToCharacter(ch, DestCell);
 			return true;
 		}
@@ -497,12 +497,12 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 			{
 				LPITEM pByProduct = ch->AutoGiveItem(dwByProduct, true);
 				if (pByProduct)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽ %s ϴ."), pByProduct->GetName());
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용혼석 추출에 실패하여 %s를 얻었습니다."), pByProduct->GetName());
 				else
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용혼석 추출에 실패하였습니다."));
 			}
 			else
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용혼석 추출에 실패하였습니다."));
 		}
 	}
 
@@ -526,8 +526,8 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		return false;
 	}
 
-	// Ȥó  ߺǴ item pointer ֱ ؼ set 
-	// ̻ Ŷ  , ߺ TItemPos   ְ, ߸ TItemPos   ִ.
+	// 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
+	// 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
 	std::set  set_items;
 	for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
 	{
@@ -536,10 +536,10 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		LPITEM pItem = ch->GetItem(aItemPoses[i]);
 		if (NULL != pItem)
 		{
-			// ȥ ƴ  â   .
+			// 용혼석이 아닌 아이템이 개량창에 있을 수 없다.
 			if (!pItem->IsDragonSoul())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ʿ ᰡ ƴմϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 필요한 재료가 아닙니다."));
 				SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 
 				return false;
@@ -564,7 +564,7 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 	BYTE ds_type, grade_idx, step_idx, strength_idx;
 	int result_grade;
 
-	//  ó  ȭ  ´.
+	// 가장 처음 것을 강화의 기준으로 삼는다.
 	std::set ::iterator it = set_items.begin();
 	{
 		LPITEM pItem = *it;
@@ -573,7 +573,7 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		
 		if (!m_pTable->GetRefineGradeValues(ds_type, grade_idx, need_count, fee, vec_probs))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ȥԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량할 수 없는 용혼석입니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 
 			return false;
@@ -583,8 +583,8 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 	{
 		LPITEM pItem = *it;
 
-		// Ŭ ui   â ø   ұ ,
-		//  ˸ ó .
+		// 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
+		// 별도의 알림 처리는 안함.
 		if (pItem->IsEquipped())
 		{
 			return false;
@@ -592,14 +592,14 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		
 		if (ds_type != GetType(pItem->GetVnum()) || grade_idx != GetGradeIdx(pItem->GetVnum()))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ʿ ᰡ ƴմϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 필요한 재료가 아닙니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 
 			return false;
 		}
 	}
 
-	// Ŭ󿡼 ѹ  üũ ϱ  count != need_count invalid Ŭ ɼ ũ.
+	// 클라에서 한번 갯수 체크를 하기 때문에 count != need_count라면 invalid 클라일 가능성이 크다.
 	if (count != need_count)
 	{
 		sys_err ("Possiblity of invalid client. Name %s", ch->GetName());
@@ -610,7 +610,7 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 
 	if (ch->GetGold() < fee)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ   մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -655,7 +655,7 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		char buf[128];
 		sprintf(buf, "GRADE : %d -> %d", grade_idx, result_grade);
 		LogManager::instance().ItemLog(ch, pResultItem, "DS_GRADE_REFINE_SUCCESS", buf);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 성공했습니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return true;
 	}
@@ -664,7 +664,7 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 		char buf[128];
 		sprintf(buf, "GRADE : %d -> %d", grade_idx, result_grade);
 		LogManager::instance().ItemLog(ch, pResultItem, "DS_GRADE_REFINE_FAIL", buf);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 실패했습니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return false;
 	}
@@ -686,18 +686,18 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 		return false;
 	}
 
-	// Ȥó  ߺǴ item pointer ֱ ؼ set 
-	// ̻ Ŷ  , ߺ TItemPos   ְ, ߸ TItemPos   ִ.
+	// 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
+	// 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
 	std::set  set_items;
 	for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
 	{
 		LPITEM pItem = ch->GetItem(aItemPoses[i]);
 		if (NULL != pItem)
 		{
-			// ȥ ƴ  â   .
+			// 용혼석이 아닌 아이템이 개량창에 있을 수 없다.
 			if (!pItem->IsDragonSoul())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ܰ  ʿ ᰡ ƴմϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 필요한 재료가 아닙니다."));
 				SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 				return false;
 			}
@@ -720,7 +720,7 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 	BYTE ds_type, grade_idx, step_idx, strength_idx;
 	int result_step;
 
-	//  ó  ȭ  ´.
+	// 가장 처음 것을 강화의 기준으로 삼는다.
 	std::set ::iterator it = set_items.begin(); 
 	{
 		LPITEM pItem = *it;
@@ -728,7 +728,7 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 
 		if (!m_pTable->GetRefineStepValues(ds_type, step_idx, need_count, fee, vec_probs))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ܰ    ȥԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량할 수 없는 용혼석입니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 			return false;
 		}
@@ -737,21 +737,21 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 	while(++it != set_items.end())
 	{
 		LPITEM pItem = *it;
-		// Ŭ ui   â ø   ұ ,
-		//  ˸ ó .
+		// 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
+		// 별도의 알림 처리는 안함.
 		if (pItem->IsEquipped())
 		{
 			return false;
 		}
 		if (ds_type != GetType(pItem->GetVnum()) || grade_idx != GetGradeIdx(pItem->GetVnum()) || step_idx != GetStepIdx(pItem->GetVnum()))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ܰ  ʿ ᰡ ƴմϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 필요한 재료가 아닙니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 			return false;
 		}
 	}
 
-	// Ŭ󿡼 ѹ  üũ ϱ  count != need_count invalid Ŭ ɼ ũ.
+	// 클라에서 한번 갯수 체크를 하기 때문에 count != need_count라면 invalid 클라일 가능성이 크다.
 	if (count != need_count)
 	{
 		sys_err ("Possiblity of invalid client. Name %s", ch->GetName());
@@ -762,7 +762,7 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 	
 	if (ch->GetGold() < fee)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ   մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -807,7 +807,7 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 		char buf[128];
 		sprintf(buf, "STEP : %d -> %d", step_idx, result_step);
 		LogManager::instance().ItemLog(ch, pResultItem, "DS_STEP_REFINE_SUCCESS", buf);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ܰ  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 성공했습니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return true;
 	}
@@ -816,7 +816,7 @@ bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_
 		char buf[128];
 		sprintf(buf, "STEP : %d -> %d", step_idx, result_step);
 		LogManager::instance().ItemLog(ch, pResultItem, "DS_STEP_REFINE_FAIL", buf);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ܰ  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 실패했습니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return false;
 	}
@@ -847,8 +847,8 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 		return false;
 	}
 
-	// Ȥó  ߺǴ item pointer ֱ ؼ set 
-	// ̻ Ŷ  , ߺ TItemPos   ְ, ߸ TItemPos   ִ.
+	// 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
+	// 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
 	std::set  set_items;
 	for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
 	{
@@ -870,15 +870,15 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 	for (std::set ::iterator it = set_items.begin(); it != set_items.end(); it++)
 	{
 		LPITEM pItem = *it;
-		// Ŭ ui   â ø   ұ ,
-		//  ˸ ó .
+		// 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
+		// 별도의 알림 처리는 안함.
 		if (pItem->IsEquipped())
 		{
 			return false;
 		}
 
-		// ȥ ȭ â   ִ.
-		// ׸ ϳ ־Ѵ.
+		// 용혼석과 강화석만이 개량창에 있을 수 있다.
+		// 그리고 하나씩만 있어야한다.
 		if (pItem->IsDragonSoul())
 		{
 			if (pDragonSoul != NULL)
@@ -899,7 +899,7 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ ʿ ᰡ ƴմϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 필요한 재료가 아닙니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 			return false;
 		}
@@ -919,17 +919,17 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 		GetDragonSoulInfo(pDragonSoul->GetVnum(), bType, bGrade, bStep, bStrength);
 
 		float fWeight = 0.f;
-		// ġ  ٸ ȭ   ȥ
+		// 가중치 값이 없다면 강화할 수 없는 용혼석
 		if (!m_pTable->GetWeight(bType, bGrade, bStep, bStrength + 1, fWeight))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ   ȥԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
 			return false;
 		}
-		// ȭ  ġ 0̶  ̻ ȭǼ ȵȴ.
+		// 강화했을 때 가중치가 0이라면 더 이상 강화되서는 안된다.
 		if (fWeight < FLT_EPSILON)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ   ȥԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
 			return false;
 		}
@@ -938,7 +938,7 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 	float fProb;
 	if (!m_pTable->GetRefineStrengthValues(bType, pRefineStone->GetSubType(), bStrength, fee, fProb))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ   ȥԴϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
 
 		return false;
@@ -946,7 +946,7 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 
 	if (ch->GetGold() < fee)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ   մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -974,7 +974,7 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 		char buf[128];
 		sprintf(buf, "STRENGTH : %d -> %d", bStrength, bStrength + 1);
 		LogManager::instance().ItemLog(ch, pDragonSoul, "DS_STRENGTH_REFINE_SUCCESS", buf);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 성공했습니다."));
 		ch->AutoGiveItem(pResult, true);
 		bSubHeader = DS_SUB_HEADER_REFINE_SUCCEED;
 	}
@@ -995,10 +995,10 @@ bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_S
 
 		char buf[128];
 		sprintf(buf, "STRENGTH : %d -> %d", bStrength, bStrength - 1);
-		// strengthȭ н   ־,    α׸ .
+		// strength강화는 실패시 깨질 수도 있어, 원본 아이템을 바탕으로 로그를 남김.
 		LogManager::instance().ItemLog(ch, pDragonSoul, "DS_STRENGTH_REFINE_FAIL", buf);
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 실패했습니다."));
 		pDragonSoul->SetCount(pDragonSoul->GetCount() - 1);
 		pRefineStone->SetCount(pRefineStone->GetCount() - 1);
 		if (NULL != pResult)
@@ -1036,12 +1036,12 @@ int DSManager::LeftTime(LPITEM pItem) const
 	if (pItem == NULL)
 		return false;
 
-	// ϴ timer based on wear ȥ ð  Ǿ  .
+	// 일단은 timer based on wear인 용혼석만 시간 다 되어도 안 없어진다.
 	if (pItem->GetProto()->cLimitTimerBasedOnWearIndex >= 0)
 	{
 		return pItem->GetSocket(ITEM_SOCKET_REMAIN_SEC);
 	}
-	// ٸ limit type ȥ ð Ǹ       ϴ ð Ҵٰ Ǵ.
+	// 다른 limit type인 용혼석들은 시간 되면 모두 사라지기 때문에 여기 들어온 아이템은 일단 시간이 남았다고 판단.
 	else
 	{
 		return INT_MAX;
@@ -1053,12 +1053,12 @@ bool DSManager::IsTimeLeftDragonSoul(LPITEM pItem) const
 	if (pItem == NULL)
 		return false;
 
-	// ϴ timer based on wear ȥ ð  Ǿ  .
+	// 일단은 timer based on wear인 용혼석만 시간 다 되어도 안 없어진다.
 	if (pItem->GetProto()->cLimitTimerBasedOnWearIndex >= 0)
 	{
 		return pItem->GetSocket(ITEM_SOCKET_REMAIN_SEC) > 0;
 	}
-	// ٸ limit type ȥ ð Ǹ       ϴ ð Ҵٰ Ǵ.
+	// 다른 limit type인 용혼석들은 시간 되면 모두 사라지기 때문에 여기 들어온 아이템은 일단 시간이 남았다고 판단.
 	else
 	{
 		return true;
diff --git a/src/game/DragonSoul.h b/src/game/DragonSoul.h
index 4d8b9d9..66c2e37 100644
--- a/src/game/DragonSoul.h
+++ b/src/game/DragonSoul.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_DRAGON_SOUL_H__
+#ifndef __INC_METIN_II_GAME_DRAGON_SOUL_H__
 #define __INC_METIN_II_GAME_DRAGON_SOUL_H__
 
 #include "../../common/length.h"
@@ -16,23 +16,23 @@ public:
 	bool	ReadDragonSoulTableFile(const char * c_pszFileName);
 
 	void	GetDragonSoulInfo(DWORD dwVnum, OUT BYTE& bType, OUT BYTE& bGrade, OUT BYTE& bStep, OUT BYTE& bRefine) const;
-	// fixme : titempos
+	// fixme : titempos로
 	WORD	GetBasePosition(const LPITEM pItem) const;
 	bool	IsValidCellForThisItem(const LPITEM pItem, const TItemPos& Cell) const;
 	int		GetDuration(const LPITEM pItem) const;
 	
-	// ȥ ޾Ƽ Ư  ϴ Լ
+	// 용혼석을 받아서 특정 용심을 추출하는 함수
 	bool	ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtractor = NULL);
 
-	// Ư ȥ(pItem) â    θ ϰ, 
-	// н λ깰 ִ Լ.(λ깰 dragon_soul_table.txt )
-	// DestCell invalid    , ȥ   ڵ ߰.
-	//  , ȥ(pItem) delete.
-	//  ִٸ   Ȯ pExtractor->GetValue(0)%ŭ .
-	// λ깰  ڵ ߰.
+	// 특정 용혼석(pItem)을 장비창에서 제거할 때에 성공 여부를 결정하고, 
+	// 실패시 부산물을 주는 함수.(부산물은 dragon_soul_table.txt에 정의)
+	// DestCell에 invalid한 값을 넣으면 성공 시, 용혼석을 빈 공간에 자동 추가.
+	// 실패 시, 용혼석(pItem)은 delete됨.
+	// 추출아이템이 있다면 추출 성공 확률이 pExtractor->GetValue(0)%만큼 증가함.
+	// 부산물은 언제나 자동 추가.
 	bool	PullOut(LPCHARACTER ch, TItemPos DestCell, IN OUT LPITEM& pItem, LPITEM pExtractor = NULL);
 
-	// ȥ ׷̵ Լ
+	// 용혼석 업그레이드 함수
 	bool	DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
 	bool	DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
 	bool	DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
@@ -47,7 +47,7 @@ public:
 private:
 	void	SendRefineResultPacket(LPCHARACTER ch, BYTE bSubHeader, const TItemPos& pos);
 
-	// ij ȥ  캸, Ȱȭ  ȥ ٸ, ij ȥ Ȱ ¸ off Ű Լ.
+	// 캐릭터의 용혼석 덱을 살펴보고, 활성화 된 용혼석이 없다면, 캐릭터의 용혼석 활성 상태를 off 시키는 함수.
 	void	RefreshDragonSoulState(LPCHARACTER ch);
 
 	DWORD	MakeDragonSoulVnum(BYTE bType, BYTE grade, BYTE step, BYTE refine);
diff --git a/src/game/FSM.cpp b/src/game/FSM.cpp
index d2b0c09..86a3886 100644
--- a/src/game/FSM.cpp
+++ b/src/game/FSM.cpp
@@ -1,4 +1,4 @@
-// Local Includes
+// Local Includes
 
 #include 
 #include 
diff --git a/src/game/FSM.h b/src/game/FSM.h
index fae91f9..950690f 100644
--- a/src/game/FSM.h
+++ b/src/game/FSM.h
@@ -1,4 +1,4 @@
-#ifndef _fsm_fsm_h
+#ifndef _fsm_fsm_h
 #define _fsm_fsm_h
 
 // Local Includes
diff --git a/src/game/FileMonitor_FreeBSD.cpp b/src/game/FileMonitor_FreeBSD.cpp
index e44a65e..4fe042e 100644
--- a/src/game/FileMonitor_FreeBSD.cpp
+++ b/src/game/FileMonitor_FreeBSD.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "FileMonitor_FreeBSD.h"
 #include "../../libthecore/include/log.h"
 
diff --git a/src/game/FileMonitor_FreeBSD.h b/src/game/FileMonitor_FreeBSD.h
index de4f43f..4bf87bb 100644
--- a/src/game/FileMonitor_FreeBSD.h
+++ b/src/game/FileMonitor_FreeBSD.h
@@ -1,4 +1,4 @@
-#ifndef FILEMONITOR_FREEBSD_INCLUDED
+#ifndef FILEMONITOR_FREEBSD_INCLUDED
 #define FILEMONITOR_FREEBSD_INCLUDED
 
 #include "IFileMonitor.h" 
diff --git a/src/game/HackShield.cpp b/src/game/HackShield.cpp
index 9b7ddfa..f22f042 100644
--- a/src/game/HackShield.cpp
+++ b/src/game/HackShield.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "HackShield.h"
diff --git a/src/game/HackShield.h b/src/game/HackShield.h
index f9954cb..c6a01c1 100644
--- a/src/game/HackShield.h
+++ b/src/game/HackShield.h
@@ -1,4 +1,4 @@
-
+
 #ifndef HACK_SHIELD_MANAGER_H_
 #define HACK_SHIELD_MANAGER_H_
 
diff --git a/src/game/HackShield_Impl.cpp b/src/game/HackShield_Impl.cpp
index becce40..99e1c23 100644
--- a/src/game/HackShield_Impl.cpp
+++ b/src/game/HackShield_Impl.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "HackShield_Impl.h"
 
diff --git a/src/game/HackShield_Impl.h b/src/game/HackShield_Impl.h
index 05974b2..17ead00 100644
--- a/src/game/HackShield_Impl.h
+++ b/src/game/HackShield_Impl.h
@@ -1,4 +1,4 @@
-
+
 #ifndef HACK_SHIELD_IMPL_H_
 #define HACK_SHIELD_IMPL_H_
 
diff --git a/src/game/IFileMonitor.h b/src/game/IFileMonitor.h
index 808919e..ec7e643 100644
--- a/src/game/IFileMonitor.h
+++ b/src/game/IFileMonitor.h
@@ -1,4 +1,4 @@
-#ifndef IFILEMONITOR_INCLUDED
+#ifndef IFILEMONITOR_INCLUDED
 #define IFILEMONITOR_INCLUDED
 
 //#include 
diff --git a/src/game/MarkConvert.cpp b/src/game/MarkConvert.cpp
index 684055d..9e92895 100644
--- a/src/game/MarkConvert.cpp
+++ b/src/game/MarkConvert.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "MarkManager.h"
 
 #ifdef OS_WINDOWS
@@ -30,14 +30,14 @@ static Pixel * LoadOldGuildMarkImageFile()
 
 bool GuildMarkConvert(const std::vector & vecGuildID)
 {
-	//  
+	// 폴더 생성
 #ifndef OS_WINDOWS
 	mkdir("mark", S_IRWXU);
 #else
 	_mkdir("mark");
 #endif
 
-	// ε  ֳ? 
+	// 인덱스 파일이 있나? 
 #ifndef OS_WINDOWS
 	if (0 != access(OLD_MARK_INDEX_FILENAME, F_OK))
 #else
@@ -45,13 +45,13 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 #endif
 		return true;
 
-	// ε  
+	// 인덱스 파일 열기
 	FILE* fp = fopen(OLD_MARK_INDEX_FILENAME, "r");
 
 	if (NULL == fp)
 		return false;
 
-	// ̹  
+	// 이미지 파일 열기
 	Pixel * oldImagePtr = LoadOldGuildMarkImageFile();
 
 	if (NULL == oldImagePtr)
@@ -61,8 +61,8 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 	}
 
 	/*
-	// guild_mark.tga  targa  ƴϰ, 512 * 512 * 4 ũ raw ̴.
-	//  Ȯϱ   targa Ϸ .
+	// guild_mark.tga가 실제 targa 파일이 아니고, 512 * 512 * 4 크기의 raw 파일이다.
+	// 눈으로 확인하기 위해 실제 targa 파일로 만든다.
 	CGuildMarkImage * pkImage = new CGuildMarkImage;
 	pkImage->Build("guild_mark_real.tga");
 	pkImage->Load("guild_mark_real.tga");
@@ -86,7 +86,7 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 			continue;
 		}
 
-		// mark id -> ̹ ġ ã
+		// mark id -> 이미지에서의 위치 찾기
 		uint row = mark_id / 32;
 		uint col = mark_id % 32;
 
@@ -102,7 +102,7 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 		Pixel * src = oldImagePtr + sy * 512 + sx;
 		Pixel * dst = mark;
 
-		//  ̹ ũ Ѱ 
+		// 옛날 이미지에서 마크 한개 복사
 		for (int y = 0; y != SGuildMark::HEIGHT; ++y)
 		{
 			for (int x = 0; x != SGuildMark::WIDTH; ++x)
@@ -111,7 +111,7 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 			src += 512;
 		}
 
-		//   ũ ýۿ ִ´.
+		// 새 길드 마크 시스템에 넣는다.
 		CGuildMarkManager::instance().SaveMark(guild_id, (BYTE *) mark);
 		line[0] = '\0';
 	}
@@ -119,7 +119,7 @@ bool GuildMarkConvert(const std::vector & vecGuildID)
 	free(oldImagePtr);
 	fclose(fp);
 
-	// Ʈ ѹ ϸǹǷ  Űش.
+	// 컨버트는 한번만 하면되므로 파일을 옮겨준다.
 #ifndef OS_WINDOWS
 	system("mv -f guild_mark.idx guild_mark.idx.removable");
 	system("mv -f guild_mark.tga guild_mark.tga.removable");
diff --git a/src/game/MarkImage.cpp b/src/game/MarkImage.cpp
index 9f716fc..35404a1 100644
--- a/src/game/MarkImage.cpp
+++ b/src/game/MarkImage.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "MarkImage.h"
 
 #include "crc32.h"
@@ -129,10 +129,10 @@ void CGuildMarkImage::GetData(UINT x, UINT y, UINT width, UINT height, void * da
 	ilCopyPixels(x, y, 0, width, height, 1, IL_BGRA, IL_UNSIGNED_BYTE, data);	
 }
 
-// ̹ = 512x512
-//    = ũ 4 x 4
-//   ũ = 16 x 12
-//  ̹  = 8 x 10
+// 이미지 = 512x512
+//   블럭 = 마크 4 x 4
+//   마크 = 16 x 12
+// 한 이미지의 블럭 = 8 x 10
 
 // SERVER
 bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage)
@@ -143,14 +143,14 @@ bool CGuildMarkImage::SaveMark(DWORD posMark, BYTE * pbImage)
 		return false;
 	}
 
-	// ũ ü ̹ ׸.
+	// 마크를 전체 이미지에 그린다.
 	DWORD colMark = posMark % MARK_COL_COUNT;
 	DWORD rowMark = posMark / MARK_COL_COUNT;
 
 	printf("PutMark pos %u %ux%u\n", posMark, colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT);
 	PutData(colMark * SGuildMark::WIDTH, rowMark * SGuildMark::HEIGHT, SGuildMark::WIDTH, SGuildMark::HEIGHT, pbImage);
 
-	// ׷   Ʈ
+	// 그려진 곳의 블럭을 업데이트
 	DWORD rowBlock = rowMark / SGuildMarkBlock::MARK_PER_BLOCK_HEIGHT;
 	DWORD colBlock = colMark / SGuildMarkBlock::MARK_PER_BLOCK_WIDTH;
 
@@ -197,7 +197,7 @@ bool CGuildMarkImage::SaveBlockFromCompressedData(DWORD posBlock, const BYTE * p
 	return true;
 }
 
-void CGuildMarkImage::BuildAllBlocks() // ̹ ü ȭ
+void CGuildMarkImage::BuildAllBlocks() // 이미지 전체를 블럭화
 {
 	Pixel apxBuf[SGuildMarkBlock::SIZE];
 	sys_log(0, "GuildMarkImage::BuildAllBlocks");
diff --git a/src/game/MarkImage.h b/src/game/MarkImage.h
index ef55c8b..d07bbfc 100644
--- a/src/game/MarkImage.h
+++ b/src/game/MarkImage.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_MARKIMAGE_H__
+#ifndef __INC_METIN_II_MARKIMAGE_H__
 #define __INC_METIN_II_MARKIMAGE_H__
 
 #include 
@@ -16,7 +16,7 @@ struct SGuildMark
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel m_apxBuf[SIZE];	//  ̹
+	Pixel m_apxBuf[SIZE];	// 실제 이미지
 
 	///////////////////////////////////////////////////////////////////////////////
 	void Clear();
@@ -38,11 +38,11 @@ struct SGuildMarkBlock
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel	m_apxBuf[SIZE];	//  ̹
+	Pixel	m_apxBuf[SIZE];	// 실제 이미지
 
-	BYTE 	m_abCompBuf[MAX_COMP_SIZE];	//  
-	lzo_uint m_sizeCompBuf;	//  ũ
-	DWORD	m_crc;			//   CRC
+	BYTE 	m_abCompBuf[MAX_COMP_SIZE];	// 압축된 데이터
+	lzo_uint m_sizeCompBuf;	// 압축된 크기
+	DWORD	m_crc;			// 압축된 데이터의 CRC
 
 	///////////////////////////////////////////////////////////////////////////////
 	DWORD	GetCRC() const;
@@ -87,9 +87,9 @@ class CGuildMarkImage
 
 		bool SaveMark(DWORD posMark, BYTE * pbMarkImage);
 		bool DeleteMark(DWORD posMark);
-		bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); //  -> Ŭ̾Ʈ
+		bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트
 
-		DWORD GetEmptyPosition(); //  ũ ġ ´.
+		DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다.
 
 		void GetBlockCRCList(DWORD * crcList);
 		void GetDiffBlocks(const DWORD * crcList, std::map & mapDiffBlocks);
diff --git a/src/game/MarkManager.cpp b/src/game/MarkManager.cpp
index 8979216..a574f6b 100644
--- a/src/game/MarkManager.cpp
+++ b/src/game/MarkManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "MarkManager.h"
 
 #include "crc32.h"
@@ -15,7 +15,7 @@ void CGuildMarkManager::__DeleteImage(CGuildMarkImage * pkImgDel)
 
 CGuildMarkManager::CGuildMarkManager()
 {
-	//  mark id  . ()
+	// 남은 mark id 셋을 만든다. (서버용)
 	for (DWORD i = 0; i < MAX_IMAGE_COUNT * CGuildMarkImage::MARK_TOTAL_COUNT; ++i)
 		m_setFreeMarkID.insert(i);
 }
@@ -44,7 +44,7 @@ void CGuildMarkManager::SetMarkPathPrefix(const char * prefix)
 	m_pathPrefix = prefix;
 }
 
-// ũ ε ҷ ( )
+// 마크 인덱스 불러오기 (서버에서만 사용)
 bool CGuildMarkManager::LoadMarkIndex()
 {
 	char buf[64];
@@ -178,7 +178,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;
@@ -264,7 +264,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);
@@ -291,7 +291,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/game/MarkManager.h b/src/game/MarkManager.h
index f8fa142..7d12626 100644
--- a/src/game/MarkManager.h
+++ b/src/game/MarkManager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GUILDLIB_MARK_MANAGER_H__
+#ifndef __INC_METIN_II_GUILDLIB_MARK_MANAGER_H__
 #define __INC_METIN_II_GUILDLIB_MARK_MANAGER_H__
 
 #include "MarkImage.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/game/OXEvent.cpp b/src/game/OXEvent.cpp
index 02cb6e4..0cdd9f0 100644
--- a/src/game/OXEvent.cpp
+++ b/src/game/OXEvent.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "questmanager.h"
@@ -155,11 +155,11 @@ bool COXEventManager::ShowQuizList(LPCHARACTER pkChar)
 	{
 		for (size_t j = 0; j < m_vec_quiz[i].size(); ++j, ++c)
 		{
-			pkChar->ChatPacket(CHAT_TYPE_INFO, "%d %s %s", m_vec_quiz[i][j].level, m_vec_quiz[i][j].Quiz, m_vec_quiz[i][j].answer ? LC_TEXT("") : LC_TEXT(""));
+			pkChar->ChatPacket(CHAT_TYPE_INFO, "%d %s %s", m_vec_quiz[i][j].level, m_vec_quiz[i][j].Quiz, m_vec_quiz[i][j].answer ? LC_TEXT("참") : LC_TEXT("거짓"));
 		}
 	}
 
-	pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  : %d"), c);	
+	pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("총 퀴즈 수: %d"), c);	
 	return true;
 }
 
@@ -197,31 +197,31 @@ EVENTFUNC(oxevent_timer)
 	switch (flag)
 	{
 		case 0:
-			SendNoticeMap(LC_TEXT("10ʵ ϰڽϴ."), OXEVENT_MAP_INDEX, true);
+			SendNoticeMap(LC_TEXT("10초뒤 판정하겠습니다."), OXEVENT_MAP_INDEX, true);
 			flag++;
 			return PASSES_PER_SEC(10);
 			
 		case 1:
-			SendNoticeMap(LC_TEXT(""), OXEVENT_MAP_INDEX, true);
+			SendNoticeMap(LC_TEXT("정답은"), OXEVENT_MAP_INDEX, true);
 
 			if (info->answer == true)
 			{
 				COXEventManager::instance().CheckAnswer(true);
-				SendNoticeMap(LC_TEXT("O Դϴ"), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("O 입니다"), OXEVENT_MAP_INDEX, true);
 			}
 			else
 			{
 				COXEventManager::instance().CheckAnswer(false);
-				SendNoticeMap(LC_TEXT("X Դϴ"), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("X 입니다"), OXEVENT_MAP_INDEX, true);
 			}
 
 			if (LC_IsJapan())
 			{
-				SendNoticeMap("ԈႦXOɈړ܂B", OXEVENT_MAP_INDEX, true);
+				SendNoticeMap("듩댾궑궫뺴갲귩둖궸댷벍궠궧귏궥갃", OXEVENT_MAP_INDEX, true);
 			}
 			else
 			{
-				SendNoticeMap(LC_TEXT("5  Ʋ е ٱ ̵ Űڽϴ."), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("5초 뒤 틀리신 분들을 바깥으로 이동 시키겠습니다."), OXEVENT_MAP_INDEX, true);
 			}
 
 			flag++;
@@ -230,7 +230,7 @@ EVENTFUNC(oxevent_timer)
 		case 2:
 			COXEventManager::instance().WarpToAudience();
 			COXEventManager::instance().SetStatus(OXEVENT_CLOSE);
-			SendNoticeMap(LC_TEXT("  غּ."), OXEVENT_MAP_INDEX, true);
+			SendNoticeMap(LC_TEXT("다음 문제 준비해주세요."), OXEVENT_MAP_INDEX, true);
 			flag = 0;
 			break;
 	}
@@ -247,9 +247,9 @@ bool COXEventManager::Quiz(unsigned char level, int timelimit)
 
 	int idx = number(0, m_vec_quiz[level].size()-1);
 
-	SendNoticeMap(LC_TEXT(" Դϴ."), OXEVENT_MAP_INDEX, true);
+	SendNoticeMap(LC_TEXT("문제 입니다."), OXEVENT_MAP_INDEX, true);
 	SendNoticeMap(m_vec_quiz[level][idx].Quiz, OXEVENT_MAP_INDEX, true);
-	SendNoticeMap(LC_TEXT(" O, Ʋ X ̵ּ"), OXEVENT_MAP_INDEX, true);
+	SendNoticeMap(LC_TEXT("맞으면 O, 틀리면 X로 이동해주세요"), OXEVENT_MAP_INDEX, true);
 
 	if (m_timedEvent != NULL) {
 		event_cancel(&m_timedEvent);
@@ -312,17 +312,17 @@ bool COXEventManager::CheckAnswer(bool answer)
 			}
 			else
 			{
-				pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Դϴ!"));
+				pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("정답입니다!"));
 				// pkChar->CreateFly(number(FLY_FIREWORK1, FLY_FIREWORK6), pkChar);
 				char chatbuf[256];
 				int len = snprintf(chatbuf, sizeof(chatbuf), 
 						"%s %u %u", number(0, 1) == 1 ? "cheer1" : "cheer2", (DWORD)pkChar->GetVID(), 0);
 
-				// ϰ sizeof(chatbuf) ̻  truncateǾٴ ..
+				// 리턴값이 sizeof(chatbuf) 이상일 경우 truncate되었다는 뜻..
 				if (len < 0 || len >= (int) sizeof(chatbuf))
 					len = sizeof(chatbuf) - 1;
 
-				// \0  
+				// \0 문자 포함
 				++len;
 
 				TPacketGCChat pack_chat;
diff --git a/src/game/OXEvent.h b/src/game/OXEvent.h
index c6d716e..ebe5016 100644
--- a/src/game/OXEvent.h
+++ b/src/game/OXEvent.h
@@ -1,4 +1,4 @@
-
+
 #define OXEVENT_MAP_INDEX 113
 
 struct tag_Quiz
@@ -10,10 +10,10 @@ struct tag_Quiz
 
 enum OXEventStatus
 {
-	OXEVENT_FINISH = 0, // OX̺Ʈ   
-	OXEVENT_OPEN = 1,	// OX̺Ʈ ۵. (20012) ؼ 尡
-	OXEVENT_CLOSE = 2,	// OX̺Ʈ  . (20012)   ܵ
-	OXEVENT_QUIZ = 3,	//  .
+	OXEVENT_FINISH = 0, // OX이벤트가 완전히 끝난 상태
+	OXEVENT_OPEN = 1,	// OX이벤트가 시작됨. 을두지(20012)를 통해서 입장가능
+	OXEVENT_CLOSE = 2,	// OX이벤트의 참가가 끝남. 을두지(20012)를 통한 입장이 차단됨
+	OXEVENT_QUIZ = 3,	// 퀴즈를 출제함.
 
 	OXEVENT_ERR = 0xff
 };
diff --git a/src/game/PetSystem.cpp b/src/game/PetSystem.cpp
index 892d4e2..390fe8c 100644
--- a/src/game/PetSystem.cpp
+++ b/src/game/PetSystem.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "vector.h"
 #include "char.h"
@@ -18,13 +18,13 @@ EVENTINFO(petsystem_event_info)
 	CPetSystem* pPetSystem;
 };
 
-// PetSystem update ִ event.
-// PetSystem CHRACTER_MANAGER  FSM update ִ  chracters ޸,
-// Owner STATE update   _UpdateFollowAI Լ update ش.
-// ׷ owner state update CHRACTER_MANAGER ֱ ,
-// petsystem updateϴٰ pet unsummonϴ κп  .
-// (CHRACTER_MANAGER update ϸ chracter destroy pendingǾ, CPetSystem dangling ͸  ְ ȴ.)
-//  PetSystem Ʈ ִ event ߻Ŵ.
+// PetSystem을 update 해주는 event.
+// PetSystem은 CHRACTER_MANAGER에서 기존 FSM으로 update 해주는 기존 chracters와 달리,
+// Owner의 STATE를 update 할 때 _UpdateFollowAI 함수로 update 해준다.
+// 그런데 owner의 state를 update를 CHRACTER_MANAGER에서 해주기 때문에,
+// petsystem을 update하다가 pet을 unsummon하는 부분에서 문제가 생겼다.
+// (CHRACTER_MANAGER에서 update 하면 chracter destroy가 pending되어, CPetSystem에서는 dangling 포인터를 가지고 있게 된다.)
+// 따라서 PetSystem만 업데이트 해주는 event를 발생시킴.
 EVENTFUNC(petsystem_update_event)
 {
 	petsystem_event_info* info = dynamic_cast( event->info );
@@ -41,12 +41,12 @@ EVENTFUNC(petsystem_update_event)
 
 	
 	pPetSystem->Update(0);
-	// 0.25ʸ .
+	// 0.25초마다 갱신.
 	return PASSES_PER_SEC(1) / 4;
 }
 
-/// NOTE: 1ijͰ     ִ ... ij͸  ٸ ҰŶ  ֵ... ..
-///   ִ  ÿ ȯ  ִ  Ʋ  ִµ ̷ ȹ  ϴ 
+/// NOTE: 1캐릭터가 몇개의 펫을 가질 수 있는지 제한... 캐릭터마다 개수를 다르게 할거라면 변수로 넣등가... 음..
+/// 가질 수 있는 개수와 동시에 소환할 수 있는 개수가 틀릴 수 있는데 이런건 기획 없으니 일단 무시
 const float PET_COUNT_LIMIT = 3;
 
 ///////////////////////////////////////////////////////////////////////////////////////
@@ -119,7 +119,7 @@ void CPetActor::Unsummon()
 {
 	if (true == this->IsSummoned())
 	{
-		//  
+		// 버프 삭제
 		this->ClearBuff();
 		this->SetSummonItem(NULL);
 		if (NULL != m_pkOwner)
@@ -175,14 +175,14 @@ DWORD CPetActor::Summon(const char* petName, LPITEM pSummonItem, bool bSpawnFar)
 //	m_pkOwner->DetailLog();
 //	m_pkChar->DetailLog();
 
-	//    .
+	//펫의 국가를 주인의 국가로 설정함.
 	m_pkChar->SetEmpire(m_pkOwner->GetEmpire());
 
 	m_dwVID = m_pkChar->GetVID();
 
 	this->SetName(petName);
 
-	// SetSummonItem(pSummonItem) θ Ŀ ComputePoints θ  .
+	// SetSummonItem(pSummonItem)를 부른 후에 ComputePoints를 부르면 버프 적용됨.
 	this->SetSummonItem(pSummonItem);
 	m_pkOwner->ComputePoints();
 	m_pkChar->Show(m_pkOwner->GetMapIndex(), x, y, z);
@@ -197,11 +197,11 @@ bool CPetActor::_UpdatAloneActionAI(float fMinDist, float fMaxDist)
 	float dest_x = GetOwner()->GetX() + fDist * cos(r);
 	float dest_y = GetOwner()->GetY() + fDist * sin(r);
 
-	//m_pkChar->SetRotation(number(0, 359));        //   
+	//m_pkChar->SetRotation(number(0, 359));        // 방향은 랜덤으로 설정
 
 	//GetDeltaByDegree(m_pkChar->GetRotation(), fDist, &fx, &fy);
 
-	//   Ӽ üũ;  ġ ߰ ġ ٸ  ʴ´.
+	// 느슨한 못감 속성 체크; 최종 위치와 중간 위치가 갈수없다면 가지 않는다.
 	//if (!(SECTREE_MANAGER::instance().IsMovablePosition(m_pkChar->GetMapIndex(), m_pkChar->GetX() + (int) fx, m_pkChar->GetY() + (int) fy) 
 	//			&& SECTREE_MANAGER::instance().IsMovablePosition(m_pkChar->GetMapIndex(), m_pkChar->GetX() + (int) fx/2, m_pkChar->GetY() + (int) fy/2)))
 	//	return true;
@@ -218,7 +218,7 @@ bool CPetActor::_UpdatAloneActionAI(float fMinDist, float fMaxDist)
 	return true;
 }
 
-// char_state.cpp StateHorseԼ ׳ C&P -_-;
+// char_state.cpp StateHorse함수 그냥 C&P -_-;
 bool CPetActor::_UpdateFollowAI()
 {
 	if (0 == m_pkChar->m_pkMobData)
@@ -227,9 +227,9 @@ bool CPetActor::_UpdateFollowAI()
 		return false;
 	}
 	
-	// NOTE: ij()  ̵ ӵ ˾ƾ ϴµ, ش (m_pkChar->m_pkMobData->m_table.sMovingSpeed)  ؼ ˾Ƴ  
-	// m_pkChar->m_pkMobData  invalid 찡  ߻.  ð   ľϰ ϴ m_pkChar->m_pkMobData  ƿ  ʵ .
-	// ⼭ Ź ˻ϴ   ʱȭ       쵵 .. -_-;; ФФФФФФФФ
+	// NOTE: 캐릭터(펫)의 원래 이동 속도를 알아야 하는데, 해당 값(m_pkChar->m_pkMobData->m_table.sMovingSpeed)을 직접적으로 접근해서 알아낼 수도 있지만
+	// m_pkChar->m_pkMobData 값이 invalid한 경우가 자주 발생함. 현재 시간관계상 원인은 다음에 파악하고 일단은 m_pkChar->m_pkMobData 값을 아예 사용하지 않도록 함.
+	// 여기서 매번 검사하는 이유는 최초 초기화 할 때 정상 값을 제대로 못얻어오는 경우도 있음.. -_-;; ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
 	if (0 == m_originalMoveSpeed)
 	{
 		const CMob* mobData = CMobManager::Instance().Get(m_dwVnum);
@@ -237,14 +237,14 @@ bool CPetActor::_UpdateFollowAI()
 		if (0 != mobData)
 			m_originalMoveSpeed = mobData->m_table.sMovingSpeed;
 	}
-	float	START_FOLLOW_DISTANCE = 300.0f;		//  Ÿ ̻  Ѿư 
-	float	START_RUN_DISTANCE = 900.0f;		//  Ÿ ̻  پ Ѿư.
+	float	START_FOLLOW_DISTANCE = 300.0f;		// 이 거리 이상 떨어지면 쫓아가기 시작함
+	float	START_RUN_DISTANCE = 900.0f;		// 이 거리 이상 떨어지면 뛰어서 쫓아감.
 
-	float	RESPAWN_DISTANCE = 4500.f;			//  Ÿ ̻ ־   ȯ.
-	int		APPROACH = 200;						//  Ÿ
+	float	RESPAWN_DISTANCE = 4500.f;			// 이 거리 이상 멀어지면 주인 옆으로 소환함.
+	int		APPROACH = 200;						// 접근 거리
 
-	bool bDoMoveAlone = true;					// ijͿ    ȥ  ϰ  -_-;
-	bool bRun = false;							// پ ϳ?
+	bool bDoMoveAlone = true;					// 캐릭터와 가까이 있을 때 혼자 여기저기 움직일건지 여부 -_-;
+	bool bRun = false;							// 뛰어야 하나?
 
 	DWORD currentTime = get_dword_time();
 
@@ -272,7 +272,7 @@ bool CPetActor::_UpdateFollowAI()
 			bRun = true;
 		}
 
-		m_pkChar->SetNowWalking(!bRun);		// NOTE: Լ ̸ ߴ° ˾Ҵµ SetNowWalking(false) ϸ ٴ°.. -_-;
+		m_pkChar->SetNowWalking(!bRun);		// NOTE: 함수 이름보고 멈추는건줄 알았는데 SetNowWalking(false) 하면 뛰는거임.. -_-;
 		
 		Follow(APPROACH);
 
@@ -288,7 +288,7 @@ bool CPetActor::_UpdateFollowAI()
 	//		m_dwLastActionTime = currentTime;
 	//	}
 	//}
-	// Follow  ΰ  Ÿ ̳ ٸ 
+	// Follow 중이지만 주인과 일정 거리 이내로 가까워졌다면 멈춤
 	else 
 		m_pkChar->SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
 	//else if (currentTime - m_dwLastActionTime > number(5000, 12000))
@@ -303,8 +303,8 @@ bool CPetActor::Update(DWORD deltaTime)
 {
 	bool bResult = true;
 
-	//   ׾ų, ȯ  ° ̻ϴٸ  . (NOTE:  ̷   ȯ  DEAD ¿  찡 -_-;)
-	//  ȯ  ų,   ° ƴ϶  .
+	// 펫 주인이 죽었거나, 소환된 펫의 상태가 이상하다면 펫을 없앰. (NOTE: 가끔가다 이런 저런 이유로 소환된 펫이 DEAD 상태에 빠지는 경우가 있음-_-;)
+	// 펫을 소환한 아이템이 없거나, 내가 가진 상태가 아니라면 펫을 없앰.
 	if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead()) 
 		|| NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())
 		|| ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner()
@@ -320,10 +320,10 @@ bool CPetActor::Update(DWORD deltaTime)
 	return bResult;
 }
 
-//NOTE : !!! MinDistance ũ   ŭ ȭ follow ʴ´,
+//NOTE : 주의!!! MinDistance를 크게 잡으면 그 변위만큼의 변화동안은 follow하지 않는다,
 bool CPetActor::Follow(float fMinDistance)
 {
-	//  ġ ٶ Ѵ.
+	// 가려는 위치를 바라봐야 한다.
 	if( !m_pkOwner || !m_pkChar) 
 		return false;
 
@@ -367,7 +367,7 @@ void CPetActor::SetSummonItem (LPITEM pItem)
 
 void CPetActor::GiveBuff()
 {
-	// Ȳ    ߻.
+	// 파황 펫 버프는 던전에서만 발생함.
 	if (34004 == m_dwVnum || 34009 == m_dwVnum)
 	{
 		if (NULL == m_pkOwner->GetDungeon())
@@ -432,15 +432,15 @@ void CPetSystem::Destroy()
 	m_petActorMap.clear();
 }
 
-///  ý Ʈ. ϵ  AI ó  .
+/// 펫 시스템 업데이트. 등록된 펫들의 AI 처리 등을 함.
 bool CPetSystem::Update(DWORD deltaTime)
 {
 	bool bResult = true;
 
 	DWORD currentTime = get_dword_time();
 
-	// CHARACTER_MANAGER ijͷ Update  Ű ִ (Pulse Ǿִ)  Ӱ ð ˾Ҵµ
-	//  ٸ ̶-_-; ⿡ Է  deltaTime ǹ̰ Ф	
+	// CHARACTER_MANAGER에서 캐릭터류 Update할 때 매개변수로 주는 (Pulse라고 되어있는)값이 이전 프레임과의 시간차이인줄 알았는데
+	// 전혀 다른 값이라서-_-; 여기에 입력으로 들어오는 deltaTime은 의미가 없음ㅠㅠ	
 	
 	if (m_dwUpdatePeriod > currentTime - m_dwLastUpdateTime)
 		return true;
@@ -473,7 +473,7 @@ bool CPetSystem::Update(DWORD deltaTime)
 	return bResult;
 }
 
-///  Ͽ  
+/// 관리 목록에서 펫을 지움
 void CPetSystem::DeletePet(DWORD mobVnum)
 {
 	TPetActorMap::iterator iter = m_petActorMap.find(mobVnum);
@@ -494,7 +494,7 @@ void CPetSystem::DeletePet(DWORD mobVnum)
 	m_petActorMap.erase(iter);	
 }
 
-///  Ͽ  
+/// 관리 목록에서 펫을 지움
 void CPetSystem::DeletePet(CPetActor* petActor)
 {
 	for (TPetActorMap::iterator iter = m_petActorMap.begin(); iter != m_petActorMap.end(); ++iter)
@@ -542,7 +542,7 @@ CPetActor* CPetSystem::Summon(DWORD mobVnum, LPITEM pSummonItem, const char* pet
 {
 	CPetActor* petActor = this->GetByVnum(mobVnum);
 
-	// ϵ  ƴ϶     Ͽ .
+	// 등록된 펫이 아니라면 새로 생성 후 관리 목록에 등록함.
 	if (0 == petActor)
 	{
 		petActor = M2_NEW CPetActor(m_pkOwner, mobVnum, options);
@@ -557,7 +557,7 @@ CPetActor* CPetSystem::Summon(DWORD mobVnum, LPITEM pSummonItem, const char* pet
 
 		info->pPetSystem = this;
 
-		m_pkPetSystemUpdateEvent = event_create(petsystem_update_event, info, PASSES_PER_SEC(1) / 4);	// 0.25	
+		m_pkPetSystemUpdateEvent = event_create(petsystem_update_event, info, PASSES_PER_SEC(1) / 4);	// 0.25초	
 	}
 
 	return petActor;
@@ -589,7 +589,7 @@ CPetActor* CPetSystem::GetByVID(DWORD vid) const
 	return bFound ? petActor : 0;
 }
 
-///    ߿ ־  VNUM  ͸ ȯϴ Լ.
+/// 등록 된 펫 중에서 주어진 몹 VNUM을 가진 액터를 반환하는 함수.
 CPetActor* CPetSystem::GetByVnum(DWORD vnum) const
 {
 	CPetActor* petActor = 0;
diff --git a/src/game/PetSystem.h b/src/game/PetSystem.h
index 6348403..176e443 100644
--- a/src/game/PetSystem.h
+++ b/src/game/PetSystem.h
@@ -1,10 +1,10 @@
-#ifndef	__HEADER_PET_SYSTEM__
+#ifndef	__HEADER_PET_SYSTEM__
 #define	__HEADER_PET_SYSTEM__
 
 
 class CHARACTER;
 
-// TODO: μ ɷġ?  ģе,  Ÿ... ġ
+// TODO: 펫으로서의 능력치? 라던가 친밀도, 배고픔 기타등등... 수치
 struct SPetAbility
 {
 };
@@ -34,8 +34,8 @@ protected:
 	virtual bool	Update(DWORD deltaTime);
 
 protected:
-	virtual bool	_UpdateFollowAI();				///<  ٴϴ AI ó
-	virtual bool	_UpdatAloneActionAI(float fMinDist, float fMaxDist);			///<  ó ȥ  AI ó
+	virtual bool	_UpdateFollowAI();				///< 주인을 따라다니는 AI 처리
+	virtual bool	_UpdatAloneActionAI(float fMinDist, float fMaxDist);			///< 주인 근처에서 혼자 노는 AI 처리
 
 	/// @TODO
 	//virtual bool	_UpdateCombatAI();
@@ -62,13 +62,13 @@ public:
 	bool			IsSummoned() const			{ return 0 != m_pkChar; }
 	void			SetSummonItem (LPITEM pItem);
 	DWORD			GetSummonItemVID () { return m_dwSummonItemVID; }
-	//  ִ Լ ŵδ Լ.
-	// ̰  Ѱ,  , 
-	// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED PointChange() Լ Ἥ   ҿ °,
-	// PointChange() Ŀ 𼱰 ComputePoints() ϸ ϴ ʱȭǰ, 
-	//  , ComputePoints() θ  Ŭ POINT   ʴ´ٴ Ŵ.
-	// ׷  ִ  ComputePoints() ο petsystem->RefreshBuff() θ Ͽ,
-	//    ClearBuff() θ, ComputePoints ϴ  Ѵ.
+	// 버프 주는 함수와 거두는 함수.
+	// 이게 좀 괴랄한게, 서버가 ㅄ라서, 
+	// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED는 PointChange()란 함수만 써서 변경해 봐야 소용이 없는게,
+	// PointChange() 이후에 어디선가 ComputePoints()를 하면 싹다 초기화되고, 
+	// 더 웃긴건, ComputePoints()를 부르지 않으면 클라의 POINT는 전혀 변하지 않는다는 거다.
+	// 그래서 버프를 주는 것은 ComputePoints() 내부에서 petsystem->RefreshBuff()를 부르도록 하였고,
+	// 버프를 빼는 것은 ClearBuff()를 부르고, ComputePoints를 하는 것으로 한다.
 	void			GiveBuff();
 	void			ClearBuff();
 
@@ -87,7 +87,7 @@ private:
 	LPCHARACTER		m_pkChar;					// Instance of pet(CHARACTER)
 	LPCHARACTER		m_pkOwner;
 
-//	SPetAbility		m_petAbility;				// ɷġ
+//	SPetAbility		m_petAbility;				// 능력치
 };
 
 /**
@@ -95,7 +95,7 @@ private:
 class CPetSystem
 {
 public:
-	typedef	std::unordered_map		TPetActorMap;		///  map. ( ijͰ  vnum     ..??)
+	typedef	std::unordered_map		TPetActorMap;		///  map. (한 캐릭터가 같은 vnum의 펫을 여러개 가질 일이 있을까..??)
 
 public:
 	CPetSystem(LPCHARACTER owner);
@@ -107,7 +107,7 @@ public:
 	bool		Update(DWORD deltaTime);
 	void		Destroy();
 
-	size_t		CountSummoned() const;			///<  ȯ(üȭ  ijͰ ִ)  
+	size_t		CountSummoned() const;			///< 현재 소환된(실체화 된 캐릭터가 있는) 펫의 개수
 
 public:
 	void		SetUpdatePeriod(DWORD ms);
@@ -117,7 +117,7 @@ public:
 	void		Unsummon(DWORD mobVnum, bool bDeleteFromList = false);
 	void		Unsummon(CPetActor* petActor, bool bDeleteFromList = false);
 
-	// TODO: ¥  ý   . (ijͰ    ߰  ...)
+	// TODO: 진짜 펫 시스템이 들어갈 때 구현. (캐릭터가 보유한 펫의 정보를 추가할 때 라던가...)
 	CPetActor*	AddPet(DWORD mobVnum, const char* petName, const SPetAbility& ability, DWORD options = CPetActor::EPetOption_Followable | CPetActor::EPetOption_Summonable | CPetActor::EPetOption_Combatable);
 
 	void		DeletePet(DWORD mobVnum);
@@ -126,8 +126,8 @@ public:
 
 private:
 	TPetActorMap	m_petActorMap;
-	LPCHARACTER		m_pkOwner;					///<  ý Owner
-	DWORD			m_dwUpdatePeriod;			///< Ʈ ֱ (ms)
+	LPCHARACTER		m_pkOwner;					///< 펫 시스템의 Owner
+	DWORD			m_dwUpdatePeriod;			///< 업데이트 주기 (ms단위)
 	DWORD			m_dwLastUpdateTime;
 	LPEVENT			m_pkPetSystemUpdateEvent;
 };
diff --git a/src/game/SpeedServer.cpp b/src/game/SpeedServer.cpp
index e564ec4..0909b8d 100644
--- a/src/game/SpeedServer.cpp
+++ b/src/game/SpeedServer.cpp
@@ -1,9 +1,9 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #include "SpeedServer.h"
 #include "locale_service.h"
 
-// 赵  ʽ ġ ý
+// 쾌도 서버 보너스 경험치 시스템
 // by rtsummit
 
 CSpeedServerManager::CSpeedServerManager()
@@ -361,13 +361,13 @@ HME CSpeedServerEmpireExp::GetCurrentExpPriv(int &duration, bool &is_change)
 
 	HME hme;
 
-	//  ¥ holiday̸ holiday bonus Ѵ.
+	// 현재 날짜가 holiday이면 holiday bonus를 도입한다.
 	if (holi_it != holiday_map.end())
 	{
 		for (std::list ::iterator it = holi_it->second.begin();
 				it != wday_exp_table[datetime->tm_wday].end(); it++)
 		{
-			//  ð ð  ȿ ԵǸ,
+			// 현재 시각이 시간 구간 안에 포함되면,
 			if (total_sec < (it->hour * 3600 + it->min * 60 ))
 			{
 				hme = *it;
@@ -380,7 +380,7 @@ HME CSpeedServerEmpireExp::GetCurrentExpPriv(int &duration, bool &is_change)
 		for (std::list ::iterator it =  wday_exp_table[datetime->tm_wday].begin();
 				it != wday_exp_table[datetime->tm_wday].end(); it++)
 		{
-			//  ð ð  ȿ ԵǸ,
+			// 현재 시각이 시간 구간 안에 포함되면,
 			if (total_sec < (it->hour * 3600 + it->min * 60 ))
 			{
 				hme = *it;
diff --git a/src/game/SpeedServer.h b/src/game/SpeedServer.h
index 69c4bda..e136736 100644
--- a/src/game/SpeedServer.h
+++ b/src/game/SpeedServer.h
@@ -1,14 +1,14 @@
-#ifndef __INC_METIN_II_GAME_SPEEDSERVER_H__
+#ifndef __INC_METIN_II_GAME_SPEEDSERVER_H__
 #define __INC_METIN_II_GAME_SPEEDSERVER_H__
 
 #include "../../common/length.h"
 #include 
 
-// castle.cpp  ִ   Ͽ
-#define EMPIRE_NONE		0	// ƹ ƴ
-#define EMPIRE_RED		1	// ż
-#define EMPIRE_YELLOW	2	// õ
-#define EMPIRE_BLUE		3	// 
+// castle.cpp 에 있는 것을 복붙 하였다
+#define EMPIRE_NONE		0	// 아무국가 아님
+#define EMPIRE_RED		1	// 신수
+#define EMPIRE_YELLOW	2	// 천조
+#define EMPIRE_BLUE		3	// 진노
 
 class HME
 {
diff --git a/src/game/TrafficProfiler.cpp b/src/game/TrafficProfiler.cpp
index aa73ee1..d3844d3 100644
--- a/src/game/TrafficProfiler.cpp
+++ b/src/game/TrafficProfiler.cpp
@@ -1,4 +1,4 @@
-/**
+/**
  *
  * @file	TrafficProfiler.cpp
  * @brief	TrafficProfiler class implementation file
diff --git a/src/game/TrafficProfiler.h b/src/game/TrafficProfiler.h
index 50aaf20..5e5e061 100644
--- a/src/game/TrafficProfiler.h
+++ b/src/game/TrafficProfiler.h
@@ -1,4 +1,4 @@
-/**
+/**
  *
  * @file	TrafficProfiler.h
  * @brief	TrafficProfiler class definition file
@@ -12,17 +12,17 @@
 
 /**
  * @class	TrafficProfiler
- * @brief	Network I/O traffic  Ŷ  ϴ profiler.
+ * @brief	Network I/O traffic 을 패킷 단위로 측정하는 profiler.
  * @author	Bang2ni
  * @version	05/07/07 Bang2ni - First release.
  *
- * ð  Network I/O  traffic  Ŷ  ϰ, Text file ·  ۼѴ.
+ * 시간대 별로 Network I/O 의 traffic 을 패킷 단위로 측정하고, Text file 형태로 보고서를 작성한다.
  */
 class TrafficProfiler : public singleton< TrafficProfiler >
 {
 	public:
 
-		/// I/O 
+		/// I/O 방향
 		enum IODirection {
 			IODIR_INPUT	= 0,	///< Input
 			IODIR_OUTPUT,	///< Output
@@ -37,25 +37,25 @@ class TrafficProfiler : public singleton< TrafficProfiler >
 		/// Destructor
 		~TrafficProfiler( void );
 
-		/// Profiling  ʿ ʱȭ Ѵ.
+		/// Profiling 에 필요한 초기화를 한다.
 		/**
-		 * @param [in]	dwFlushCycle Flush ֱ.  ̴.
-		 * @param [in]	pszLogFileName Profiling log file  ̸
-		 * @return	false   profiling log file  open  ߴ.
+		 * @param [in]	dwFlushCycle Flush 주기. 초 단위이다.
+		 * @param [in]	pszLogFileName Profiling log file 의 이름
+		 * @return	false 일 경우 profiling log file 을 open 하지 못했다.
 		 *
-		 * profiling log file  open() Ѵ.
+		 * profiling log file 을 open(생성) 한다.
 		 */
 		bool	Initialize( DWORD dwFlushCycle, const char* pszLogFileName );
 
-		/// Profiling   ۵ưų   Packet  Report Ѵ.
+		/// Profiling 을 위해 전송됐거나 전송 할 Packet 을 Report 한다.
 		/**
-		 * @param [in]	dir Profiling  Packet  
-		 * @param [in]	byHeader Packet 
-		 * @param [in]	dwSize Packet   size
-		 * @return	Initialize  ʾҴٸ false  ȯѴ.
+		 * @param [in]	dir Profiling 할 Packet 의 방향
+		 * @param [in]	byHeader Packet 헤더
+		 * @param [in]	dwSize Packet 의 총 size
+		 * @return	Initialize 되지 않았다면 false 를 반환한다.
 		 *
-		 * Packet  شϴ size  Ų.
-		 * Initialize ij ֱ Flush  Ŀ Flush ֱ ŭ ð 帥  ȣȴٸ Report  Flush Ѵ.
+		 * Packet 에 해당하는 size 를 누적시킨다.
+		 * Initialize 이후나 최근 Flush 된 이후에 Flush 주기 만큼 시간이 흐른 후 호출된다면 Report 이후 Flush 한다.
 		 */
 		bool	Report( IODirection dir, BYTE byHeader, DWORD dwSize )
 		{
@@ -65,22 +65,22 @@ class TrafficProfiler : public singleton< TrafficProfiler >
 			return true;
 		}
 
-		///  Report   Ͽ .
+		/// 현재까지 Report 된 내용을 파일에 쓴다.
 		/**
-		 * @return	Initialize  ʾҴ.
+		 * @return	Initialize 되지 않았다.
 		 */
 		bool	Flush( void );
 
 	private:
 
-		/// Profling  õ variables  ʱȭ Ѵ.
+		/// Profling 에 관련된 variables 를 초기화 한다.
 		void	InitializeProfiling( void );
 
-		/// Report  Packet  traffic  Ѵ.
+		/// Report 된 Packet 의 traffic 를 계산한다.
 		/**
-		 * @param [in]	dir Profiling  Packet  
-		 * @param [in]	byHeader Packet 
-		 * @param [in]	dwSize Packet   size
+		 * @param [in]	dir Profiling 할 Packet 의 방향
+		 * @param [in]	byHeader Packet 헤더
+		 * @param [in]	dwSize Packet 의 총 size
 		 */
 		void	ComputeTraffic( IODirection dir, BYTE byHeader, DWORD dwSize )
 		{
@@ -96,8 +96,8 @@ class TrafficProfiler : public singleton< TrafficProfiler >
 
 		/// Traffic info type.
 		/**
-		 * first:   size
-		 * second:  packet  ۵ Ƚ
+		 * first: 누적된 총 size
+		 * second: 이 packet 이 전송된 횟수
 		 */
 		typedef std::pair< DWORD, DWORD >	TrafficInfo;
 
@@ -105,11 +105,11 @@ class TrafficProfiler : public singleton< TrafficProfiler >
 		typedef std::vector< TrafficInfo >	TrafficVec;
 
 		FILE*		m_pfProfileLogFile;	///< Profile log file pointer
-		DWORD		m_dwFlushCycle;		///< Flush ֱ
-		time_t		m_tmProfileStartTime;	///<   ð. Flush   Update ȴ.
-		DWORD		m_dwTotalTraffic;	///< Report   Traffic 뷮
-		DWORD		m_dwTotalPacket;	///< Report   Packet 
-		TrafficVec	m_aTrafficVec[ IODIR_MAX ];	///< Report  Traffic   vector 迭.  ⸶ vector  .
+		DWORD		m_dwFlushCycle;		///< Flush 주기
+		time_t		m_tmProfileStartTime;	///< 프로파일을 시작한 시간. Flush 될 때마다 Update 된다.
+		DWORD		m_dwTotalTraffic;	///< Report 된 총 Traffic 용량
+		DWORD		m_dwTotalPacket;	///< Report 된 총 Packet 수
+		TrafficVec	m_aTrafficVec[ IODIR_MAX ];	///< Report 된 Traffic 을 저장할 vector의 배열. 각 방향마다 vector 를 가진다.
 };
 
 #endif // _METIN_II_TRAFFICPROFILER_H_
diff --git a/src/game/XTrapManager.cpp b/src/game/XTrapManager.cpp
index 0354501..822efcb 100644
--- a/src/game/XTrapManager.cpp
+++ b/src/game/XTrapManager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include 
 #include 
@@ -142,7 +142,7 @@ bool CXTrapManager::LoadXTrapModule()
 	//start server module
 	m_pImpl->XTrap_S_Start( 600, CSFILE_NUM, g_XTrap_ClientMap, NULL ); 
 
-	//NOTE : ϴ XProtect⿡ װ ־ ڵ念 üũ .
+	//NOTE : 일단 XProtect모듈에 버그가 있어서 코드영역 체크를 끈다.
 	m_pImpl->XTrap_S_SetActiveCode( XTRAP_ACTIVE_CODE_THEMIDA );
 
 	//setup signal
diff --git a/src/game/XTrapManager.h b/src/game/XTrapManager.h
index b3e1735..e6dc8ad 100644
--- a/src/game/XTrapManager.h
+++ b/src/game/XTrapManager.h
@@ -1,4 +1,4 @@
-
+
 #ifndef _XTRAP_MANAGER_H_
 #define _XTRAP_MANAGER_H_
 
diff --git a/src/game/affect.cpp b/src/game/affect.cpp
index cde2ac2..eb06bff 100644
--- a/src/game/affect.cpp
+++ b/src/game/affect.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #ifndef DEBUG_ALLOC
diff --git a/src/game/affect.h b/src/game/affect.h
index 756e778..0854d35 100644
--- a/src/game/affect.h
+++ b/src/game/affect.h
@@ -1,4 +1,4 @@
-#ifndef __INC_AFFECT_H
+#ifndef __INC_AFFECT_H
 #define __INC_AFFECT_H
 
 class CAffect
@@ -54,23 +54,23 @@ enum EAffectTypes
 	AFFECT_DEF_GRADE,		// 226
 
 	AFFECT_PREMIUM_START	= 500,
-	AFFECT_EXP_BONUS		= 500,	//  
-	AFFECT_ITEM_BONUS		= 501,	//  尩
+	AFFECT_EXP_BONUS		= 500,	// 경험의 반지
+	AFFECT_ITEM_BONUS		= 501,	// 도둑의 장갑
 	AFFECT_SAFEBOX		= 502,  // PREMIUM_SAFEBOX,
 	AFFECT_AUTOLOOT		= 503,	// PREMIUM_AUTOLOOT,
 	AFFECT_FISH_MIND		= 504,	// PREMIUM_FISH_MIND,
-	AFFECT_MARRIAGE_FAST	= 505,	//  
-	AFFECT_GOLD_BONUS		= 506,	//  Ȯ 50%
+	AFFECT_MARRIAGE_FAST	= 505,	// 원앙의 깃털
+	AFFECT_GOLD_BONUS		= 506,	// 돈 드롭확률 50%증가
 	AFFECT_PREMIUM_END		= 509,
 
-	AFFECT_MALL			= 510,	//   Ʈ
-	AFFECT_NO_DEATH_PENALTY	= 511,	//  ȣ (ġ гƼ ѹ ش)
-	AFFECT_SKILL_BOOK_BONUS	= 512,	//   (å   Ȯ 50% )
-	AFFECT_SKILL_NO_BOOK_DELAY	= 513,	// ־ȼ
+	AFFECT_MALL			= 510,	// 몰 아이템 에펙트
+	AFFECT_NO_DEATH_PENALTY	= 511,	// 용신의 가호 (경험치가 패널티를 한번 막아준다)
+	AFFECT_SKILL_BOOK_BONUS	= 512,	// 선인의 교훈 (책 수련 성공 확률이 50% 증가)
+	AFFECT_SKILL_NO_BOOK_DELAY	= 513,	// 주안술서
 
-	AFFECT_HAIR	= 514,	//  ȿ
-	AFFECT_COLLECT = 515, //Ʈ 
-	AFFECT_EXP_BONUS_EURO_FREE = 516, //   (  14   ⺻ ȿ)
+	AFFECT_HAIR	= 514,	// 헤어 효과
+	AFFECT_COLLECT = 515, //수집퀘스트 
+	AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
 	AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,
 	AFFECT_UNIQUE_ABILITY = 518,
 
@@ -121,8 +121,8 @@ enum EAffectBits
 	AFF_SLOW,
 	AFF_STUN,
 
-	AFF_DUNGEON_READY,		//  غ 
-	AFF_DUNGEON_UNIQUE,		//  ũ (Ŭ̾Ʈ ø)
+	AFF_DUNGEON_READY,		// 던전에서 준비 상태
+	AFF_DUNGEON_UNIQUE,		// 던전 유니크 (클라이언트에서 컬링되지않음)
 
 	AFF_BUILDING_CONSTRUCTION_SMALL,
 	AFF_BUILDING_CONSTRUCTION_LARGE,
@@ -133,34 +133,34 @@ enum EAffectBits
 
 	AFF_FISH_MIND,
 
-	AFF_JEONGWIHON,		// ȥ
-	AFF_GEOMGYEONG,		// ˰
-	AFF_CHEONGEUN,		// õ
-	AFF_GYEONGGONG,		// 
-	AFF_EUNHYUNG,		// 
-	AFF_GWIGUM,			// Ͱ
-	AFF_TERROR,			// 
-	AFF_JUMAGAP,		// ָ
-	AFF_HOSIN,			// ȣ
-	AFF_BOHO,			// ȣ
-	AFF_KWAESOK,		// 
-	AFF_MANASHIELD,		// 
-	AFF_MUYEONG,		//  affect
-	AFF_REVIVE_INVISIBLE,	// Ȱ õ 
-	AFF_FIRE,			//   
-	AFF_GICHEON,		// õ
-	AFF_JEUNGRYEOK,		// ¼
-	AFF_TANHWAN_DASH,		// źȯݿ ޸Ʈ
-	AFF_PABEOP,			// Ĺ
-	AFF_CHEONGEUN_WITH_FALL,	// õ
+	AFF_JEONGWIHON,		// 전귀혼
+	AFF_GEOMGYEONG,		// 검경
+	AFF_CHEONGEUN,		// 천근추
+	AFF_GYEONGGONG,		// 경공술
+	AFF_EUNHYUNG,		// 은형법
+	AFF_GWIGUM,			// 귀검
+	AFF_TERROR,			// 공포
+	AFF_JUMAGAP,		// 주마갑
+	AFF_HOSIN,			// 호신
+	AFF_BOHO,			// 보호
+	AFF_KWAESOK,		// 쾌속
+	AFF_MANASHIELD,		// 마나쉴드
+	AFF_MUYEONG,		// 무영진 affect
+	AFF_REVIVE_INVISIBLE,	// 부활시 잠시동안 무적
+	AFF_FIRE,			// 지속 불 데미지
+	AFF_GICHEON,		// 기천대공
+	AFF_JEUNGRYEOK,		// 증력술
+	AFF_TANHWAN_DASH,		// 탄환격용 달리기어펙트
+	AFF_PABEOP,			// 파법술
+	AFF_CHEONGEUN_WITH_FALL,	// 천근추
 	AFF_POLYMORPH,
 	AFF_WAR_FLAG1,
 	AFF_WAR_FLAG2,
 	AFF_WAR_FLAG3,
 
 	AFF_CHINA_FIREWORK,
-	AFF_HAIR,	// 
-	AFF_GERMANY, //  
+	AFF_HAIR,	// 헤어
+	AFF_GERMANY, // 독일 
 
 	AFF_BITS_MAX
 };
@@ -170,11 +170,11 @@ extern void SendAffectAddPacket(LPDESC d, CAffect * pkAff);
 // AFFECT_DURATION_BUG_FIX
 enum AffectVariable
 {
-	// Affect Ѵ  ־   .
-	// ð  ̱  ſ ū Ѵ븦 ķ̼.
-	//// 24Ʈ Ƿ 25Ʈ .
-	// ... 25Ʈ Ѵٰ س 29bit ϰ ִ û ̶ּ...
-	// collect quest  ð 60 ϰ Ƿ, ⵵ 60 .
+	// Affect가 무한대로 들어가 있어야 할 경우 사용.
+	// 시간을 계속 줄이기 때문에 매우 큰값으로 무한대를 에뮬레이션함.
+	//// 24비트는 적으므로 25비트를 사용.
+	// ... 25비트 사용한다고 해놓고선 29bit 사용하고 있는 엄청난 주석이란...
+	// collect quest에서 무한 시간을 60년으로 사용하고 있으므로, 여기도 60년으로 하자.
 
 	INFINITE_AFFECT_DURATION = 60 * 365 * 24 * 60 * 60
 };
diff --git a/src/game/affect_flag.h b/src/game/affect_flag.h
index 015c5f3..b5ef99d 100644
--- a/src/game/affect_flag.h
+++ b/src/game/affect_flag.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_AFFECT_FLAG_H__
+#ifndef __INC_METIN_II_AFFECT_FLAG_H__
 #define __INC_METIN_II_AFFECT_FLAG_H__
 
 #ifndef IS_SET
diff --git a/src/game/ani.cpp b/src/game/ani.cpp
index 3f15084..5720c1b 100644
--- a/src/game/ani.cpp
+++ b/src/game/ani.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.11.16
  * file        : ani.cpp
  * author      : mhh
@@ -56,7 +56,7 @@ const char* FN_weapon_type(int weapon)
 class ANI
 {
 	protected:
-		// [][Ϲ0Ż1][][޺]
+		// [종족][일반0탈것1][무기][콤보]
 		DWORD m_speed[MAIN_RACE_MAX_NUM][2][WEAPON_NUM_TYPES][9];
 
 	public:
@@ -127,14 +127,14 @@ ANI::ANI()
 bool ANI::load()
 {
 	const char*	dir_name[MAIN_RACE_MAX_NUM] = {
-		"data/pc/warrior",		// ()
-		"data/pc/assassin",		// ڰ()
-		"data/pc/sura",			// ()
-		"data/pc/shaman",		// ()
-		"data/pc2/warrior",		// ()
-		"data/pc2/assassin",	// ڰ()
-		"data/pc2/sura",		// ()
-		"data/pc2/shaman"		// ()
+		"data/pc/warrior",		// 무사(남)
+		"data/pc/assassin",		// 자객(여)
+		"data/pc/sura",			// 수라(남)
+		"data/pc/shaman",		// 무당(여)
+		"data/pc2/warrior",		// 무사(여)
+		"data/pc2/assassin",	// 자객(남)
+		"data/pc2/sura",		// 수라(여)
+		"data/pc2/shaman"		// 무당(남)
 	};
 
 	for (int race = 0; race GetPoint(POINT_ATT_SPEED));
 	*/
 
-	/* ڵ ҵ  ↓ݰ ¸ */
-	/*   Ѽհ ӵ        */
+	/* 투핸디드 소드의 경우 삼연참공격과 승마시 */
+	/* 오류가 많아 한손검 속도로 생각하자       */
 	if (weapon == WEAPON_TWO_HANDED)
 		weapon = WEAPON_SWORD;
 
diff --git a/src/game/ani.h b/src/game/ani.h
index 54da182..126e4ce 100644
--- a/src/game/ani.h
+++ b/src/game/ani.h
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.11.16
  * file        : ani.h
  * author      : mhh
diff --git a/src/game/any_function.h b/src/game/any_function.h
index 9f76b07..d3a0ce9 100644
--- a/src/game/any_function.h
+++ b/src/game/any_function.h
@@ -1,4 +1,4 @@
-// See http://www.boost.org/libs/any for Documentation.
+// See http://www.boost.org/libs/any for Documentation.
 
 #ifndef __IPKN_ANY_FUNCTION_VARIATION_OF_BOOST_ANY_INCLUDED
 #define __IPKN_ANY_FUNCTION_VARIATION_OF_BOOST_ANY_INCLUDED
diff --git a/src/game/arena.cpp b/src/game/arena.cpp
index de2d8b1..8ae4ce0 100644
--- a/src/game/arena.cpp
+++ b/src/game/arena.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "packet.h"
@@ -237,17 +237,17 @@ EVENTFUNC(ready_to_start_event)
 
 		if (chA != NULL)
 		{
-			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 			sys_log(0, "ARENA: Oppernent is disappered. MyPID(%d) OppPID(%d)", pArena->GetPlayerAPID(), pArena->GetPlayerBPID());
 		}
 
 		if (chB != NULL)
 		{
-			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 			sys_log(0, "ARENA: Oppernent is disappered. MyPID(%d) OppPID(%d)", pArena->GetPlayerBPID(), pArena->GetPlayerAPID());
 		}
 
-		pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT(" 밡   մϴ."));
+		pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 
 		pArena->EndDuel();
 		return 0;
@@ -264,20 +264,20 @@ EVENTFUNC(ready_to_start_event)
 
 				if (count > 10000)
 				{
-					chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ."));
-					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ."));
+					chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약 제한이 없습니다."));
+					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약 제한이 없습니다."));
 				}
 				else
 				{
 					chA->SetPotionLimit(count);
 					chB->SetPotionLimit(count);
 
-					chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d    մϴ."), chA->GetPotionLimit());
-					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d    մϴ."), chB->GetPotionLimit());
+					chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약을 %d 개 까지 사용 가능합니다."), chA->GetPotionLimit());
+					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약을 %d 개 까지 사용 가능합니다."), chB->GetPotionLimit());
 				}
-				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ۵˴ϴ."));
-				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ۵˴ϴ."));
-				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ۵˴ϴ."));
+				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 대련이 시작됩니다."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 대련이 시작됩니다."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10초뒤 대련이 시작됩니다."));
 
 				info->state++;
 				return PASSES_PER_SEC(10);
@@ -286,15 +286,15 @@ EVENTFUNC(ready_to_start_event)
 
 		case 1:
 			{
-				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
-				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
-				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
+				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
 
 				TPacketGCDuelStart duelStart;
 				duelStart.header = HEADER_GC_DUEL_START;
 				duelStart.wSize = sizeof(TPacketGCDuelStart) + 4;
 
-				DWORD dwOppList[8]; // ִ Ƽ 8 ̹Ƿ..
+				DWORD dwOppList[8]; // 최대 파티원 8명 이므로..
 
 				dwOppList[0] = (DWORD)chB->GetVID();
 				TEMP_BUFFER buf;
@@ -343,7 +343,7 @@ EVENTFUNC(ready_to_start_event)
 
 				TEMP_BUFFER buf;
 				TEMP_BUFFER buf2;
-				DWORD dwOppList[8]; // ִ Ƽ 8 ̹Ƿ..
+				DWORD dwOppList[8]; // 최대 파티원 8명 이므로..
 				TPacketGCDuelStart duelStart;
 				duelStart.header = HEADER_GC_DUEL_START;
 				duelStart.wSize = sizeof(TPacketGCDuelStart) + 4;
@@ -358,9 +358,9 @@ EVENTFUNC(ready_to_start_event)
 				buf2.write(&dwOppList[0], 4);
 				chB->GetDesc()->Packet(buf2.read_peek(), buf2.size());
 
-				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
-				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
-				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT(" ۵Ǿϴ."));
+				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("대련이 시작되었습니다."));
 
 				pArena->ClearEvent();
 
@@ -370,9 +370,9 @@ EVENTFUNC(ready_to_start_event)
 
 		default:
 			{
-				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ͽ  մϴ."));
-				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ͽ  մϴ."));
-				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("  Ͽ  մϴ."));
+				chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장 문제로 인하여 대련을 종료합니다."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장 문제로 인하여 대련을 종료합니다."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("대련장 문제로 인하여 대련을 종료합니다."));
 
 				sys_log(0, "ARENA: Something wrong in event func. info->state(%d)", info->state);
 
@@ -411,17 +411,17 @@ EVENTFUNC(duel_time_out)
 	{
 		if (chA != NULL)
 		{
-			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 			sys_log(0, "ARENA: Oppernent is disappered. MyPID(%d) OppPID(%d)", pArena->GetPlayerAPID(), pArena->GetPlayerBPID());
 		}
 
 		if (chB != NULL)
 		{
-			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 			sys_log(0, "ARENA: Oppernent is disappered. MyPID(%d) OppPID(%d)", pArena->GetPlayerBPID(), pArena->GetPlayerAPID());
 		}
 
-		pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+		pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("대련 상대가 사라져 대련을 종료합니다."));
 
 		pArena->EndDuel();
 		return 0;
@@ -431,14 +431,14 @@ EVENTFUNC(duel_time_out)
 		switch (info->state)
 		{
 			case 0:
-				pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT(" ð ʰ  ߴմϴ."));
-				pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("10ʵ  ̵մϴ."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련 시간 초과로 대련을 중단합니다."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("10초뒤 마을로 이동합니다."));
 
-				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ð ʰ  ߴմϴ."));
-				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10ʵ  ̵մϴ."));
+				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("대련 시간 초과로 대련을 중단합니다."));
+				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10초뒤 마을로 이동합니다."));
 
-				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ð ʰ  ߴմϴ."));
-				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10ʵ  ̵մϴ."));
+				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("대련 시간 초과로 대련을 중단합니다."));
+				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10초뒤 마을로 이동합니다."));
 
 				TPacketGCDuelStart duelStart;
 				duelStart.header = HEADER_GC_DUEL_START;
@@ -682,7 +682,7 @@ bool CArenaMap::CanAttack(LPCHARACTER pCharAttacker, LPCHARACTER pCharVictim)
 
 bool CArena::CanAttack(DWORD dwPIDA, DWORD dwPIDB)
 {
-	// 1:1  ٴ    ʿ
+	// 1:1 전용 다대다 할 경우 수정 필요
 	if (m_dwPIDA == dwPIDA && m_dwPIDB == dwPIDB) return true;
 	if (m_dwPIDA == dwPIDB && m_dwPIDB == dwPIDA) return true;
 
@@ -732,20 +732,20 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 
 	if (pCharA == NULL && pCharB == NULL)
 	{
-		// Ѵ   ?!
-		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("  Ͽ  ߴմϴ."));
+		// 둘다 접속이 끊어졌다 ?!
+		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련자 문제로 인하여 대련을 중단합니다."));
 		restart = false;
 	}
 	else if (pCharA == NULL && pCharB != NULL)
 	{
-		pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ij  Ͽ  մϴ."));
-		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("  Ͽ  մϴ."));
+		pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("상대방 캐릭터의 문제로 인하여 대련을 종료합니다."));
+		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련자 문제로 인하여 대련을 종료합니다."));
 		restart = false;
 	}
 	else if (pCharA != NULL && pCharB == NULL)
 	{
-		pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ij  Ͽ  մϴ."));
-		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("  Ͽ  մϴ."));
+		pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("상대방 캐릭터의 문제로 인하여 대련을 종료합니다."));
+		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("대련자 문제로 인하여 대련을 종료합니다."));
 		restart = false;
 	}
 	else if (pCharA != NULL && pCharB != NULL)
@@ -756,9 +756,9 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 
 			if (m_dwSetPointOfA >= m_dwSetCount)
 			{
-				pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharA->GetName());
-				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharA->GetName());
-				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharA->GetName());
+				pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharA->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharA->GetName());
+				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharA->GetName());
 
 				sys_log(0, "ARENA: Duel is end. Winner %s(%d) Loser %s(%d)",
 						pCharA->GetName(), GetPlayerAPID(), pCharB->GetName(), GetPlayerBPID());
@@ -766,10 +766,10 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 			else
 			{
 				restart = true;
-				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ¸Ͽϴ."), pCharA->GetName());
+				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님이 승리하였습니다."), pCharA->GetName());
 				pCharA->ChatPacket(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
 
-				pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ¸Ͽϴ."), pCharA->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님이 승리하였습니다."), pCharA->GetName());
 				pCharB->ChatPacket(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
 
 				SendChatPacketToObserver(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
@@ -783,19 +783,19 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 			m_dwSetPointOfB++;
 			if (m_dwSetPointOfB >= m_dwSetCount)
 			{
-				pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharB->GetName());
-				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharB->GetName());
-				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s  ÿ ¸Ͽϴ."), pCharB->GetName());
+				pCharA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharB->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharB->GetName());
+				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s 님이 대련에서 승리하였습니다."), pCharB->GetName());
 
 				sys_log(0, "ARENA: Duel is end. Winner(%d) Loser(%d)", GetPlayerBPID(), GetPlayerAPID());
 			}
 			else
 			{
 				restart = true;
-				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ¸Ͽϴ."), pCharB->GetName());
+				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님이 승리하였습니다."), pCharB->GetName());
 				pCharA->ChatPacket(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
 
-				pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ¸Ͽϴ."), pCharB->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님이 승리하였습니다."), pCharB->GetName());
 				pCharB->ChatPacket(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
 
 				SendChatPacketToObserver(CHAT_TYPE_NOTICE, "%s %d : %d %s", pCharA->GetName(), m_dwSetPointOfA, m_dwSetPointOfB, pCharB->GetName());
@@ -815,18 +815,18 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 	}
 	else
 	{
-		//  ȵȴ ?!
+		// 오면 안된다 ?!
 	}
 
 	if (restart == false)
 	{
 		if (pCharA != NULL)
-			pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ǵưϴ."));
+			pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 마을로 되돌아갑니다."));
 
 		if (	pCharB != NULL)
-			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ǵưϴ."));
+			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 마을로 되돌아갑니다."));
 
-		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ǵưϴ."));
+		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10초뒤 마을로 되돌아갑니다."));
 
 		if (m_pEvent != NULL) {
 			event_cancel(&m_pEvent);
@@ -842,12 +842,12 @@ bool CArena::OnDead(DWORD dwPIDA, DWORD dwPIDB)
 	else
 	{
 		if (pCharA != NULL)
-			pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ   մϴ."));
+			pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 다음 판을 시작합니다."));
 
 		if (pCharB != NULL)
-			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ   մϴ."));
+			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10초뒤 다음 판을 시작합니다."));
 
-		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10ʵ   մϴ."));
+		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10초뒤 다음 판을 시작합니다."));
 
 		if (m_pEvent != NULL) {
 			event_cancel(&m_pEvent);
@@ -953,7 +953,7 @@ void CArena::OnDisconnect(DWORD pid)
 	if (m_dwPIDA == pid)
 	{
 		if (GetPlayerB() != NULL)
-			GetPlayerB()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ijͰ  Ͽ  մϴ."));
+			GetPlayerB()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방 캐릭터가 접속을 종료하여 대련을 중지합니다."));
 
 		sys_log(0, "ARENA : Duel is end because of Opp(%d) is disconnect. MyPID(%d)", GetPlayerAPID(), GetPlayerBPID());
 		EndDuel();
@@ -961,7 +961,7 @@ void CArena::OnDisconnect(DWORD pid)
 	else if (m_dwPIDB == pid)
 	{
 		if (GetPlayerA() != NULL)
-			GetPlayerA()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ijͰ  Ͽ  մϴ."));
+			GetPlayerA()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방 캐릭터가 접속을 종료하여 대련을 중지합니다."));
 
 		sys_log(0, "ARENA : Duel is end because of Opp(%d) is disconnect. MyPID(%d)", GetPlayerBPID(), GetPlayerAPID());
 		EndDuel();
diff --git a/src/game/arena.h b/src/game/arena.h
index 7c906b9..f9d3efa 100644
--- a/src/game/arena.h
+++ b/src/game/arena.h
@@ -1,4 +1,4 @@
-#ifndef __CLASS_ARENA_MANAGER__
+#ifndef __CLASS_ARENA_MANAGER__
 #define __CLASS_ARENA_MANAGER__
 
 #include 
diff --git a/src/game/auction_manager.cpp b/src/game/auction_manager.cpp
index ffd3994..a7852f1 100644
--- a/src/game/auction_manager.cpp
+++ b/src/game/auction_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #ifdef __AUCTION__
 
 #include "desc_client.h"
@@ -215,7 +215,7 @@ void AuctionBoard::YourItemInfoList (TItemInfoVec& vec, DWORD player_id, int sta
 }
 
 // 0~1, 2~3, 4~5, 6~7, 8~9
-// ¦ descending, Ȧ accending.
+// 짝수면 descending, 홀수면 accending.
 struct FCheckGradeSatisfied
 {
 	BYTE grade;
@@ -796,7 +796,7 @@ void AuctionManager::YourBidItemInfoList (AuctionBoard::TItemInfoVec& vec, DWORD
 		}
 		else
 		{
-			// expired  ⼭ ־Ѵ.
+			// expired 만들고 여기서 넣어야한다.
 		}
 	}
 }
@@ -881,21 +881,21 @@ void AuctionManager::enroll_auction (LPCHARACTER ch, LPITEM item, BYTE empire, i
 	}
 	if (item->IsEquipped())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "    .");
+		ch->ChatPacket(CHAT_TYPE_INFO, "장착한 건 등록할 수 없어.");
 		return;
 	}
 
 	if (GetAuctionItemInfo (item->GetID()))
 	{
 		sys_err ("Item %d is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "̹  ž. ü ?");
+		ch->ChatPacket(CHAT_TYPE_INFO, "이미 등록한 거야. 도대체 뭐지?");
 		return;
 	}
 
 	if (item->GetWindow() == AUCTION)
 	{
 		sys_err ("Item %d is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "  ..");
+		ch->ChatPacket(CHAT_TYPE_INFO, "얜 또 뭐냐..");
 		return;
 	}
 
@@ -918,21 +918,21 @@ void AuctionManager::enroll_sale (LPCHARACTER ch, LPITEM item, DWORD wisher_id,
 	}
 	if (item->IsEquipped())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "    .");
+		ch->ChatPacket(CHAT_TYPE_INFO, "장착한 건 등록할 수 없어.");
 		return;
 	}
 
 	if (GetSaleItemInfo (item->GetID()))
 	{
 		sys_err ("Item %d is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "̹  ž. ü ?");
+		ch->ChatPacket(CHAT_TYPE_INFO, "이미 등록한 거야. 도대체 뭐지?");
 		return;
 	}
 
 	if (item->GetWindow() == AUCTION)
 	{
 		sys_err ("Item %d is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "  ..");
+		ch->ChatPacket(CHAT_TYPE_INFO, "얜 또 뭐냐..");
 		return;
 	}
 
@@ -959,11 +959,11 @@ void AuctionManager::bid (LPCHARACTER ch, DWORD item_id, int bid_price)
 	std::pair  mb = MyBid.GetMoney(ch->GetPlayerID(), item_id);
 	if (mb.first != -1)
 	{
-		ch->ChatPacket (CHAT_TYPE_INFO, " ϶ ̴.");
+		ch->ChatPacket (CHAT_TYPE_INFO, "재입찰을 하란 말이다.");
 	}
 	if (ch->GetGold() < bid_price)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "돈이 부족해");
 		return;
 	}
 
@@ -975,7 +975,7 @@ void AuctionManager::bid (LPCHARACTER ch, DWORD item_id, int bid_price)
 }
 
 // fixme
-// ݵ !!!
+// 반드시 돈!!!
 void AuctionManager::immediate_purchase (LPCHARACTER ch, DWORD item_id)
 {
 	TAuctionItemInfo* item_info = GetAuctionItemInfo (item_id);
@@ -988,13 +988,13 @@ void AuctionManager::immediate_purchase (LPCHARACTER ch, DWORD item_id)
 
 	if (item_info->get_impur_price() == 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "ﱸ   ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "즉구 할 수 엄서");
 		return;
 	}
 
 	if (ch->GetGold() < item_info->get_impur_price())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "돈이 부족해");
 		return;
 	}
 
@@ -1005,7 +1005,7 @@ void AuctionManager::immediate_purchase (LPCHARACTER ch, DWORD item_id)
 	db_clientdesc->DBPacket(HEADER_GD_COMMAND_AUCTION, ch->GetPlayerID(), &pack_impur, sizeof(TPacketGDCommnadAuction));
 }
 
-// 
+// 시작
 void AuctionManager::get_auctioned_item (LPCHARACTER ch, DWORD item_id, DWORD item_num)
 {
 	TItemTable* proto = ITEM_MANAGER::instance().GetTable(item_num);
@@ -1013,7 +1013,7 @@ void AuctionManager::get_auctioned_item (LPCHARACTER ch, DWORD item_id, DWORD it
 
 	if (pos == -1)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "ڸ ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "자리가 엄서");
 		return;
 	}
 
@@ -1069,13 +1069,13 @@ void AuctionManager::rebid (LPCHARACTER ch, DWORD item_id, int bid_price)
 	
 	if (lock)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ̾.");
+		ch->ChatPacket(CHAT_TYPE_INFO, "입찰 중이야.");
 		return;
 	}
 
 	if (ch->GetGold() + money < bid_price)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "돈이 부족해");
 		return;
 	}
 
@@ -1101,14 +1101,14 @@ void AuctionManager::bid_cancel (LPCHARACTER ch, DWORD item_id)
 	
 	if (lock)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ̾.");
+		ch->ChatPacket(CHAT_TYPE_INFO, "입찰 중이야.");
 		return;
 	}
 
 	TAuctionItemInfo* item_info = GetAuctionItemInfo(item_id);
 	if (item_info->get_bidder_id() == ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "ϰ ְ ھ.  .");
+		ch->ChatPacket(CHAT_TYPE_INFO, "니가 최고 입찰자야. 취소 못해.");
 		return;
 	}
 
@@ -1120,7 +1120,7 @@ void AuctionManager::bid_cancel (LPCHARACTER ch, DWORD item_id)
 	db_clientdesc->DBPacket(HEADER_GD_COMMAND_AUCTION, ch->GetPlayerID(), &pack_bc, sizeof(TPacketGDCommnadAuction));
 }
 
-// 
+// 끝
 void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuction* cmd_result)
 {
 	LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(commander_id);
@@ -1142,7 +1142,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 				Auction.InsertItemInfo (item_info);
 				if (ch != NULL)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "忡 ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "경매장에 등록했어.");
 				}
 				break;
 			}
@@ -1157,7 +1157,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 					LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID (player_item->owner);
 
 					ch->AutoGiveItem (item, true);
-					ch->ChatPacket(CHAT_TYPE_INFO, "忡  ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "경매장에 등록하지 못했어.");
 				}
 				break;
 			}
@@ -1179,7 +1179,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 				Sale.InsertItemInfo (item_info);
 				if (ch != NULL)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "Ǹ忡 ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "판매장에 등록했어.");
 				}
 				break;
 			}
@@ -1193,7 +1193,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 
 
 					ch->AutoGiveItem (item, true);
-					ch->ChatPacket(CHAT_TYPE_INFO, "Ǹ忡  ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "판매장에 등록하지 못했어.");
 				}
 				break;
 			}
@@ -1210,7 +1210,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 				Wish.InsertItemInfo (item_info);
 				if (ch != NULL)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "ϴٿ ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "삽니다에 등록했어.");
 				}
 				break;
 			}
@@ -1218,7 +1218,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			{
 				if (ch != NULL)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "ϴٿ  ߾.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "삽니다에 등록하지 못했어.");
 				}
 				break;
 			}
@@ -1238,7 +1238,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			MyBid.Insert(new_item_info->bidder_id, new_item_info->item_id, new_item_info->get_bid_price());
 			if (ch != NULL)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, "߾.");
+				ch->ChatPacket(CHAT_TYPE_INFO, "입찰했어.");
 			}
 		}
 		break;
@@ -1254,7 +1254,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			thecore_memcpy (old_item_info, new_item_info, sizeof(TAuctionItemInfo));
 			if (ch != NULL)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, "ﱸ عȾ.");
+				ch->ChatPacket(CHAT_TYPE_INFO, "즉구 해버렸어.");
 			}
 		}
 		break;
@@ -1277,7 +1277,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			{
 				LPITEM item = ITEM_MANAGER::instance().CreateItem(player_item->vnum, player_item->count, item_id);
 				ch->AutoGiveItem (item, true);
-				ch->ChatPacket(CHAT_TYPE_INFO, "Ծ.");
+				ch->ChatPacket(CHAT_TYPE_INFO, "가져왔어.");
 				if (cmd == AUCTION_GET_AUC || cmd == AUCTION_CANCEL_AUC)
 				{
 					TPacketGDCommnadAuction pack_dai;
@@ -1337,7 +1337,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			}
 			else if (ch != NULL)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, "߾.");
+				ch->ChatPacket(CHAT_TYPE_INFO, "취소했어.");
 			}
 		}
 		break;
@@ -1354,7 +1354,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 		}
 		else
 		{
-			// insertϸ lock Ǯ.
+			// insert하면 lock이 풀린다.
 			DWORD item_id = cmd_result->target;
 			cmd_result++;
 			TAuctionItemInfo* auction_info = (TAuctionItemInfo*)cmd_result;
diff --git a/src/game/auction_manager.h b/src/game/auction_manager.h
index 4ef7420..d5870f9 100644
--- a/src/game/auction_manager.h
+++ b/src/game/auction_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_AUCTION_MANAGER_H
+#ifndef __INC_AUCTION_MANAGER_H
 #define __INC_AUCTION_MANAGER_H
 
 #include "../../libsql/AsyncSQL.h"
@@ -63,7 +63,7 @@ private:
 
 	TPCMap offer_map;
 
-	// sorting  members
+	// sorting을 위한 members
 public:
 	typedef std::vector  TItemInfoVec;
 private:
@@ -76,7 +76,7 @@ private:
 public:
 	void SortedItemInfos (TItemInfoVec& vec, BYTE grade, BYTE category, int start_idx, BYTE size, BYTE order[5]);
 
-	//    Լ.
+	// 나의 경매장을 위한 함수.
 	void YourItemInfoList (TItemInfoVec& vec, DWORD player_id, int start_idx, BYTE size);
 
 };
@@ -131,7 +131,7 @@ private:
 	typedef std::pair  BidInfo;
 	typedef std::map  TItemMap;
 	typedef std::unordered_map  TMyBidBoard;
-	// bidder_id key
+	// bidder_id가 key
 	TMyBidBoard pc_map;
 
 public:
@@ -144,7 +144,7 @@ public:
 
 	BidInfo GetMoney (DWORD player_id, DWORD item_id);
 	bool Delete (DWORD player_id, DWORD item_id);
-	// ̹   .
+	// 이미 있으면 덮어 씌운다.
 	void Insert (DWORD player_id, DWORD item_id, int money);
 	void Lock (DWORD player_id, DWORD item_id);
 	void UnLock (DWORD player_id, DWORD item_id);
@@ -156,7 +156,7 @@ private :
 	typedef std::unordered_map TItemMap;
 	TItemMap auction_item_map;
 
-	// auction ϵ   ,   ̺ Ե ʴ  ϴ ͵
+	// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
 	AuctionBoard Auction;
 	SaleBoard Sale;
 	WishBoard Wish;
diff --git a/src/game/auction_packet.h b/src/game/auction_packet.h
index 7b1b1ec..a1b6bfe 100644
--- a/src/game/auction_packet.h
+++ b/src/game/auction_packet.h
@@ -1,4 +1,4 @@
-typedef struct packet_auction_simple_item_info
+typedef struct packet_auction_simple_item_info
 {
 	BYTE		header;
 	BYTE		size;
diff --git a/src/game/auth_brazil.cpp b/src/game/auth_brazil.cpp
index 727898f..cdd2ab6 100644
--- a/src/game/auth_brazil.cpp
+++ b/src/game/auth_brazil.cpp
@@ -1,4 +1,4 @@
-/* vi: set sw=4 ts=8 cino=g0,\:0 : */
+/* vi: set sw=4 ts=8 cino=g0,\:0 : */
 /*********************************************************************
  * date        : 2010.4.7
  * file        : auth_brazil.c
@@ -133,7 +133,7 @@ int auth_brazil(const char *login, const char *pwd)
 	    return AUTH_BRAZIL_SERVER_ERR;
 	}
 
-	//  쿡 query count ø.
+	// 응답받은 경우에만 query count를 늘린다.
 	auth_brazil_inc_query_count();
 
 	return FN_parse_reply(reply);
diff --git a/src/game/auth_brazil.h b/src/game/auth_brazil.h
index 5a69ee9..1486dae 100644
--- a/src/game/auth_brazil.h
+++ b/src/game/auth_brazil.h
@@ -1,4 +1,4 @@
-/* vi: set sw=4 ts=8 cino=g0,\:0 : */
+/* vi: set sw=4 ts=8 cino=g0,\:0 : */
 /*********************************************************************
  * date        : 2010.4.7
  * file        : auth_brazil.h
diff --git a/src/game/banword.cpp b/src/game/banword.cpp
index d21514e..89f6f75 100644
--- a/src/game/banword.cpp
+++ b/src/game/banword.cpp
@@ -1,9 +1,9 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "banword.h"
 #include "config.h"
 
-extern void SendLog(const char * c_pszBuf);		// ڿԸ 
+extern void SendLog(const char * c_pszBuf);		// 운영자에게만 공지
 
 CBanwordManager::CBanwordManager()
 {
diff --git a/src/game/banword.h b/src/game/banword.h
index 3c4d3f9..e6edcc0 100644
--- a/src/game/banword.h
+++ b/src/game/banword.h
@@ -1,4 +1,4 @@
-
+
 #ifndef BANWORD_MANAGER_H_
 #define BANWORD_MANAGER_H_
 
diff --git a/src/game/battle.cpp b/src/game/battle.cpp
index 2c7a2b2..854a3f1 100644
--- a/src/game/battle.cpp
+++ b/src/game/battle.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "desc.h"
@@ -48,7 +48,7 @@ bool timed_event_cancel(LPCHARACTER ch)
 	}
 
 	/* RECALL_DELAY
-	      ȯ ̰  Ǿ   ּ 
+	   차후 전투로 인해 귀환부 딜레이가 취소 되어야 할 경우 주석 해제
 	   if (ch->m_pk_RecallEvent)
 	   {
 	   event_cancel(&ch->m_pkRecallEvent);
@@ -61,11 +61,11 @@ bool timed_event_cancel(LPCHARACTER ch)
 
 bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
 {
-	//  ׾ ߴѴ.
+	// 상대방이 죽었으면 중단한다.
 	if (victim->IsDead())
 		return false;
 
-	//  ߴ
+	// 안전지대면 중단
 	{
 		SECTREE	*sectree = NULL;
 
@@ -79,7 +79,7 @@ bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
 	}
 	
 
-	//  ׾ ߴѴ.
+	// 내가 죽었으면 중단한다.
 	if (ch->IsStun() || ch->IsDead())
 		return false;
 
@@ -121,7 +121,7 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	if (test_server&&ch->IsPC())
 		sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());
 
-	// Ÿ üũ
+	// 거리 체크
 	int distance = DISTANCE_APPROX(ch->GetX() - victim->GetX(), ch->GetY() - victim->GetY());
 
 	if (!victim->IsBuilding())
@@ -130,12 +130,12 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	
 		if (false == ch->IsPC())
 		{
-			//     Ÿ 
+			// 몬스터의 경우 몬스터 공격 거리를 사용
 			max = (int) (ch->GetMobAttackRange() * 1.15f);
 		}
 		else
 		{
-			// PC  밡 melee     Ÿ ִ  Ÿ
+			// PC일 경우 상대가 melee 몹일 경우 몹의 공격 거리가 최대 공격 거리
 			if (false == victim->IsPC() && BATTLE_TYPE_MELEE == victim->GetMobBattleType())
 				max = MAX(300, (int) (victim->GetMobAttackRange() * 1.15f));
 		}
@@ -150,10 +150,10 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	}
 
 	if (timed_event_cancel(ch))
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ǿ  Ǿϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));
 
 	if (timed_event_cancel(victim))
-		victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ǿ  Ǿϴ."));
+		victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));
 
 	ch->SetPosition(POS_FIGHTING);
 	ch->SetVictim(victim);
@@ -166,7 +166,7 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	return (ret);
 }
 
-//  GET_BATTLE_VICTIM NULL  ̺Ʈ ĵ Ų.
+// 실제 GET_BATTLE_VICTIM을 NULL로 만들고 이벤트를 캔슬 시킨다.
 void battle_end_ex(LPCHARACTER ch)
 {
 	if (ch->IsPosition(POS_FIGHTING))
@@ -213,7 +213,7 @@ float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnor
 	int iARSrc;
 	int iERSrc;
 
-	if (LC_IsYMIR()) // õ
+	if (LC_IsYMIR()) // 천마
 	{
 		iARSrc = MIN(90, pkAttacker->GetPolymorphPoint(POINT_DX));
 		iERSrc = MIN(90, pkVictim->GetPolymorphPoint(POINT_DX));
@@ -243,11 +243,11 @@ float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnor
 
 int CalcAttBonus(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, int iAtk)
 {
-	// PvP 
+	// PvP에는 적용하지않음
 	if (!pkVictim->IsPC())
 		iAtk += pkAttacker->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_ATTACK_BONUS);
 
-	// PvP 
+	// PvP에는 적용하지않음
 	if (!pkAttacker->IsPC())
 	{
 		int iReduceDamagePct = pkVictim->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_TRANSFER_DAMAGE);
@@ -332,9 +332,9 @@ int CalcAttBonus(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, int iAtk)
 		}
 	}
 
-	//[ mob -> PC ]  Ӽ  
+	//[ mob -> PC ] 원소 속성 방어 적용
 	//2013/01/17
-	// Ӽ  30% شϴ ġ  .
+	//몬스터 속성공격 데미지의 30%에 해당하는 수치에만 저항이 적용됨.
 	if (pkAttacker->IsNPC() && pkVictim->IsPC())
 	{
 		if (pkAttacker->IsRaceFlag(RACE_FLAG_ATT_ELEC))
@@ -558,7 +558,7 @@ int CalcArrowDamage(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, LPITEM pkBow,
 	if (!pkArrow)
 		return 0;
 
-	// Ÿġ 
+	// 타격치 계산부
 	int iDist = (int) (DISTANCE_SQRT(pkAttacker->GetX() - pkVictim->GetX(), pkAttacker->GetY() - pkVictim->GetY()));
 	//int iGap = (iDist / 100) - 5 - pkBow->GetValue(5) - pkAttacker->GetPoint(POINT_BOW_DISTANCE);
 	int iGap = (iDist / 100) - 5 - pkAttacker->GetPoint(POINT_BOW_DISTANCE);
@@ -618,7 +618,7 @@ int CalcArrowDamage(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, LPITEM pkBow,
 
 void NormalAttackAffect(LPCHARACTER pkAttacker, LPCHARACTER pkVictim)
 {
-	//   ƯϹǷ Ư ó
+	// 독 공격은 특이하므로 특수 처리
 	if (pkAttacker->GetPoint(POINT_POISON_PCT) && !pkVictim->IsAffectFlag(AFF_POISON))
 	{
 		if (number(1, 100) <= pkAttacker->GetPoint(POINT_POISON_PCT))
@@ -646,7 +646,7 @@ int battle_hit(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, int & iRetDam)
 
 	NormalAttackAffect(pkAttacker, pkVictim);
 
-	//  
+	// 데미지 계산
 	//iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST)) / 100;
 	LPITEM pkWeapon = pkAttacker->GetWear(WEAR_WEAPON);
 
@@ -679,7 +679,7 @@ int battle_hit(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, int & iRetDam)
 		}
 
 
-	//  . (2011 2  հŹ̿Ը .)
+	//최종적인 데미지 보정. (2011년 2월 현재 대왕거미에게만 적용.)
 	float attMul = pkAttacker->GetAttMul();
 	float tempIDam = iDam;
 	iDam = attMul * tempIDam + 0.5f;
@@ -699,19 +699,19 @@ DWORD GET_ATTACK_SPEED(LPCHARACTER ch)
         return 1000;
 
 	LPITEM item = ch->GetWear(WEAR_WEAPON);	
-	DWORD default_bonus = SPEEDHACK_LIMIT_BONUS * 3;    // θ (⺻ 80) (Ϲ  speed hack  ɸ    *3 ߰. 2013.09.11 CYH)
+	DWORD default_bonus = SPEEDHACK_LIMIT_BONUS * 3;    // 유두리 공속(기본 80) (일반 유저가 speed hack 에 걸리는 것을 막기 위해 *3 추가. 2013.09.11 CYH)
 	DWORD riding_bonus = 0;
 
 	if (ch->IsRiding())
 	{
-		//   ߰ 50
+		// 뭔가를 탔으면 추가공속 50
 		riding_bonus = 50;
 	}
 
 	DWORD ani_speed = ani_attack_speed(ch);
     DWORD real_speed = (ani_speed * 100) / (default_bonus + ch->GetPoint(POINT_ATT_SPEED) + riding_bonus);
 
-	// ܰ   2
+	// 단검의 경우 공속 2배
 	if (item && item->GetSubType() == WEAPON_DAGGER)
 		real_speed /= 2;
 
diff --git a/src/game/battle.h b/src/game/battle.h
index 84c1490..6830bf3 100644
--- a/src/game/battle.h
+++ b/src/game/battle.h
@@ -1,9 +1,9 @@
-#ifndef __INC_METIN_II_GAME_BATTLE_H__
+#ifndef __INC_METIN_II_GAME_BATTLE_H__
 #define __INC_METIN_II_GAME_BATTLE_H__
 
 #include "char.h"
 
-enum EBattleTypes       //  
+enum EBattleTypes       // 상대방 기준
 {
 	BATTLE_NONE,
 	BATTLE_DAMAGE,
@@ -28,7 +28,7 @@ extern int	battle_count_attackers(LPCHARACTER ch);
 
 extern void	NormalAttackAffect(LPCHARACTER pkAttacker, LPCHARACTER pkVictim);
 
-// Ư 
+// 특성 공격
 inline void AttackAffect(LPCHARACTER pkAttacker,
 		LPCHARACTER pkVictim,
 		BYTE att_point,
diff --git a/src/game/belt_inventory_helper.h b/src/game/belt_inventory_helper.h
index da1bd67..e9156b9 100644
--- a/src/game/belt_inventory_helper.h
+++ b/src/game/belt_inventory_helper.h
@@ -1,4 +1,4 @@
-#ifndef __HEADER_BELT_INVENTORY_HELPER__
+#ifndef __HEADER_BELT_INVENTORY_HELPER__
 #define __HEADER_BELT_INVENTORY_HELPER__
 
 #include "char.h"
@@ -13,7 +13,7 @@ public:
 	{
 		static TGradeUnit beltGradeByLevelTable[] = 
 		{
-			0,			// Ʈ+0
+			0,			// 벨트+0
 			1,			// +1
 			1,			// +2
 			2,			// +3
@@ -34,20 +34,20 @@ public:
 		return beltGradeByLevelTable[level];
 	}
 
-	//  Ʈ  ,   ̿  ִ 
+	// 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴
 	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[BELT_INVENTORY_SLOT_COUNT] = {
@@ -62,14 +62,14 @@ public:
 
 	static bool IsAvailableCell(WORD cell, int beltGrade /*int beltLevel*/)
 	{
-		// ȹ  ٲ.. Ƴ...
+		// 기획 또 바뀜.. 아놔...
 		//const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel);		
 		const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade();
 
 		return ruleTable[cell] <= beltGrade;
 	}
 
-	/// pc Ʈ κ丮  ϳ ϴ  ˻ϴ Լ.
+	/// pc의 벨트 인벤토리에 아이템이 하나라도 존재하는 지 검사하는 함수.
 	static bool IsExistItemInBeltInventory(LPCHARACTER pc)
 	{
 		for (WORD i = BELT_INVENTORY_SLOT_START; i < BELT_INVENTORY_SLOT_END; ++i)
@@ -83,7 +83,7 @@ public:
 		return false;
 	}
 
-	/// item Ʈ κ丮   ִ Ÿ ˻ϴ Լ. ( Ģ ȹڰ )
+	/// item이 벨트 인벤토리에 들어갈 수 있는 타입인지 검사하는 함수. (이 규칙은 기획자가 결정함)
 	static bool CanMoveIntoBeltInventory(LPITEM item)
 	{
 		bool canMove = false;
diff --git a/src/game/blend_item.cpp b/src/game/blend_item.cpp
index cd623c6..094b9da 100644
--- a/src/game/blend_item.cpp
+++ b/src/game/blend_item.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.02.24
  * file        : blend_item.cpp
  * author      : mhh
@@ -171,10 +171,10 @@ static int FN_random_index()
 	return 0;
 }
 
-// ȯ Ȯ ̺
-// blend.txt Ȯ ޵ ġ ϰ
-//  󺰷 item proto   ϹǷ,
-// ȥ   ־ ̷ ߰Ѵ.
+// 충기환의 확률 테이블
+// blend.txt에서 확률도 받도록 고치면 깔끔하겠지만
+// 각 나라별로 item proto 등을 따로 관리하므로,
+// 혼란이 올 수 있어 이렇게 추가한다.
 // by rtsummit
 
 static int FN_ECS_random_index()
diff --git a/src/game/blend_item.h b/src/game/blend_item.h
index 4190df0..bb1480b 100644
--- a/src/game/blend_item.h
+++ b/src/game/blend_item.h
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.02.24
  * file        : blend_item.h
  * author      : mhh
diff --git a/src/game/block_country.cpp b/src/game/block_country.cpp
index 371ae2f..f9b4f8b 100644
--- a/src/game/block_country.cpp
+++ b/src/game/block_country.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.05.31
  * file        : block_country.cpp
  * author      : mhh
@@ -120,7 +120,7 @@ bool is_blocked_country_ip(const char *user_ip)
 #endif
 	{
 		dev_log(LOG_INFO, "BLOCKED_COUNTRY_IP (%s) : YES", user_ip);
-		return true;	// ǰ ϴ ϴ ó
+		return true;	// 아이피가 괴상하니 일단 블럭처리
 	}
 	ip_number = htonl(st_addr.s_addr);
 
diff --git a/src/game/block_country.h b/src/game/block_country.h
index fe69e46..de7f71e 100644
--- a/src/game/block_country.h
+++ b/src/game/block_country.h
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.05.31
  * file        : block_country.h
  * author      : mhh
diff --git a/src/game/buff_on_attributes.cpp b/src/game/buff_on_attributes.cpp
index 64366a4..577e8a8 100644
--- a/src/game/buff_on_attributes.cpp
+++ b/src/game/buff_on_attributes.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/tables.h"
 #include "item.h"
 #include "char.h"
@@ -39,8 +39,8 @@ void CBuffOnAttributes::RemoveBuffFromItem(LPITEM pItem)
 		{
 			TPlayerItemAttribute attr = pItem->GetAttribute(j);
 			TMapAttr::iterator it = m_map_additional_attrs.find(attr.bType);
-			// m_map_additional_attrs ش attribute type   ϰ,
-			//   (m_bBuffValue)%ŭ  ȿ 
+			// m_map_additional_attrs에서 해당 attribute type에 대한 값을 제거하고,
+			// 변경된 값의 (m_bBuffValue)%만큼의 버프 효과 감소
 			if (it != m_map_additional_attrs.end())
 			{
 				int& sum_of_attr_value = it->second;
@@ -76,15 +76,15 @@ void CBuffOnAttributes::AddBuffFromItem(LPITEM pItem)
 			TPlayerItemAttribute attr = pItem->GetAttribute(j);
 			TMapAttr::iterator it = m_map_additional_attrs.find(attr.bType);
 			
-			// m_map_additional_attrs ش attribute type   ٸ ߰.
-			// ߰  (m_bBuffValue)%ŭ  ȿ ߰
+			// m_map_additional_attrs에서 해당 attribute type에 대한 값이 없다면 추가.
+			// 추가된 값의 (m_bBuffValue)%만큼의 버프 효과 추가
 			if (it == m_map_additional_attrs.end())
 			{
 				m_pBuffOwner->ApplyPoint(attr.bType, attr.sValue * m_bBuffValue / 100);
 				m_map_additional_attrs.insert(TMapAttr::value_type(attr.bType, attr.sValue));
 			}
-			// m_map_additional_attrs ش attribute type   ִٸ,   Ű,
-			//   (m_bBuffValue)%ŭ  ȿ ߰
+			// m_map_additional_attrs에서 해당 attribute type에 대한 값이 있다면, 그 값을 증가시키고,
+			// 변경된 값의 (m_bBuffValue)%만큼의 버프 효과 추가
 			else
 			{
 				int& sum_of_attr_value = it->second;
@@ -105,8 +105,8 @@ void CBuffOnAttributes::ChangeBuffValue(BYTE bNewValue)
 		Off();
 	else
 	{
-		// , m_map_additional_attrs  (m_bBuffValue)%ŭ   ־Ƿ,
-		// (bNewValue)%ŭ  .
+		// 기존에, m_map_additional_attrs의 값의 (m_bBuffValue)%만큼이 버프로 들어가 있었으므로,
+		// (bNewValue)%만큼으로 값을 변경함.
 		for (TMapAttr::iterator it = m_map_additional_attrs.begin(); it != m_map_additional_attrs.end(); it++)
 		{
 			int& sum_of_attr_value = it->second;
diff --git a/src/game/buff_on_attributes.h b/src/game/buff_on_attributes.h
index ab88060..ab7b7c9 100644
--- a/src/game/buff_on_attributes.h
+++ b/src/game/buff_on_attributes.h
@@ -1,4 +1,4 @@
-#ifndef __METIN2_BUFF_ON_ATTRIBUTES_H
+#ifndef __METIN2_BUFF_ON_ATTRIBUTES_H
 #define __METIN2_BUFF_ON_ATTRIBUTES_H
 
 class CHARACTER;
@@ -9,20 +9,20 @@ public:
 	CBuffOnAttributes(LPCHARACTER pOwner, BYTE m_point_type, std::vector * vec_buff_targets);
 	~CBuffOnAttributes();
 
-	//   ̸鼭, m_p_vec_buff_wear_targets شϴ  , ش    ȿ .
+	// 장착 중 이면서, m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템으로 인해 붙은 효과를 제거.
 	void RemoveBuffFromItem(LPITEM pItem);
-	// m_p_vec_buff_wear_targets شϴ  , ش  attribute  ȿ ߰.
+	// m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템의 attribute에 대한 효과 추가.
 	void AddBuffFromItem(LPITEM pItem);
-	// m_bBuffValue ٲٰ,   ٲ.
+	// m_bBuffValue를 바꾸고, 버프의 값도 바꿈.
 	void ChangeBuffValue(BYTE bNewValue);
-	// CHRACTRE::ComputePoints Ӽġ ʱȭϰ ٽ ϹǷ, 
-	//  Ӽġ  owner .
+	// CHRACTRE::ComputePoints에서 속성치를 초기화하고 다시 계산하므로, 
+	// 버프 속성치들을 강제적으로 owner에게 줌.
 	void GiveAllAttributes();
 
-	// m_p_vec_buff_wear_targets شϴ   attribute type ջϰ,
-	//  attribute (m_bBuffValue)% ŭ  .
+	// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하고,
+	// 그 attribute들의 (m_bBuffValue)% 만큼을 버프로 줌.
 	bool On(BYTE bValue);
-	//   , ʱȭ
+	// 버프 제거 후, 초기화
 	void Off();
 
 	void Initialize();
@@ -32,9 +32,9 @@ private:
 	BYTE m_bBuffValue;
 	std::vector * m_p_vec_buff_wear_targets;
 	
-	// apply_type, apply_value  
+	// apply_type, apply_value 페어의 맵
 	typedef std::map  TMapAttr;
-	// m_p_vec_buff_wear_targets شϴ   attribute type ջϿ  .
+	// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하여 가지고 있음.
 	TMapAttr m_map_additional_attrs;
 
 };
diff --git a/src/game/buffer_manager.cpp b/src/game/buffer_manager.cpp
index 801720f..235d4cc 100644
--- a/src/game/buffer_manager.cpp
+++ b/src/game/buffer_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "buffer_manager.h"
 
 TEMP_BUFFER::TEMP_BUFFER(int Size, bool bForceDelete)
diff --git a/src/game/buffer_manager.h b/src/game/buffer_manager.h
index 65550b7..bb8f6f8 100644
--- a/src/game/buffer_manager.h
+++ b/src/game/buffer_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_BUFFER_MANAGER_H__
+#ifndef __INC_METIN_II_GAME_BUFFER_MANAGER_H__
 #define __INC_METIN_II_GAME_BUFFER_MANAGER_H__
 
 class TEMP_BUFFER
diff --git a/src/game/building.cpp b/src/game/building.cpp
index fcf2731..c8e43d8 100644
--- a/src/game/building.cpp
+++ b/src/game/building.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "sectree_manager.h"
 #include "item_manager.h"
@@ -112,7 +112,7 @@ void CObject::EncodeInsertPacket(LPENTITY entity)
 	pack.z              = GetZ();
 	pack.wRaceNum       = m_data.dwVnum;
 
-	//  ȸ (϶  ġ) ȯ
+	// 빌딩 회전 정보(벽일때는 문 위치)를 변환
 	pack.dwAffectFlag[0] = unsigned(m_data.xRot);
 	pack.dwAffectFlag[1] = unsigned(m_data.yRot);
 
@@ -298,7 +298,7 @@ void CObject::RegenNPC()
 
 	m_chNPC->SetGuild(pGuild);
 
-	//      渶 س´
+	// 힘의 신전일 경우 길드 레벨을 길마에게 저장해놓는다
 	if ( m_pProto->dwVnum == 14061 || m_pProto->dwVnum == 14062 || m_pProto->dwVnum == 14063 )
 	{
 		quest::PC* pPC = quest::CQuestManager::instance().GetPC(pGuild->GetMasterPID());
@@ -690,10 +690,10 @@ TObjectProto * CManager::GetObjectProto(DWORD dwVnum)
 
 bool CManager::LoadLand(TLand * pTable) // from DB
 {
-	// MapAllow    load ؾѴ.
-	//	ǹ(object)  忡  ִ ˱ ؼ ǹ     Ҽ ˾Ѵ.
-	//	  load    ǹ  忡 Ҽӵ   ؼ
-	//	 ǹ     Ѵ.
+	// MapAllow에 없는 맵의 땅일지라도 load를 해야한다.
+	//	건물(object)이 어느 길드에 속해 있는지 알기 위해서는 건물이 세위진 땅이 어느 길드 소속인지 알아한다.
+	//	만약 땅을 load해 놓지 않으면 길드 건물이 어느 길드에 소속된 건지 알지 못해서
+	//	길드 건물에 의한 길드 버프를 받지 못한다.
 	//if (!map_allow_find(pTable->lMapIndex))
 	//	return false;
 
@@ -1096,7 +1096,7 @@ bool CLand::RequestCreateWall(long nMapIndex, float rot)
 	int wall_half_w = 1000;
 	int wall_half_h = 1362;
 
-	if (rot == 0.0f) 		//  
+	if (rot == 0.0f) 		// 남쪽 문
 	{
 		int door_x = wall_x;
 		int door_y = wall_y + wall_half_h;
@@ -1105,7 +1105,7 @@ bool CLand::RequestCreateWall(long nMapIndex, float rot)
 		RequestCreateObject(WALL_LEFT_VNUM,	nMapIndex, wall_x - wall_half_w, wall_y, door_x, door_y,   0.0f, WALL_ANOTHER_CHECKING_ENABLE);
 		RequestCreateObject(WALL_RIGHT_VNUM,	nMapIndex, wall_x + wall_half_w, wall_y, door_x, door_y,   0.0f, WALL_ANOTHER_CHECKING_ENABLE);
 	}	
-	else if (rot == 180.0f)		//  
+	else if (rot == 180.0f)		// 북쪽 문
 	{
 		int door_x = wall_x;
 		int door_y = wall_y - wall_half_h;
@@ -1114,7 +1114,7 @@ bool CLand::RequestCreateWall(long nMapIndex, float rot)
 		RequestCreateObject(WALL_LEFT_VNUM,	nMapIndex, wall_x - wall_half_w, wall_y, door_x, door_y,   0.0f, WALL_ANOTHER_CHECKING_ENABLE);
 		RequestCreateObject(WALL_RIGHT_VNUM,	nMapIndex, wall_x + wall_half_w, wall_y, door_x, door_y,   0.0f, WALL_ANOTHER_CHECKING_ENABLE);
 	}
-	else if (rot == 90.0f)		//   
+	else if (rot == 90.0f)		// 동쪽 문 
 	{
 		int door_x = wall_x + wall_half_h;
 		int door_y = wall_y;
@@ -1123,7 +1123,7 @@ bool CLand::RequestCreateWall(long nMapIndex, float rot)
 		RequestCreateObject(WALL_LEFT_VNUM,	nMapIndex, wall_x, wall_y - wall_half_w, door_x, door_y,  90.0f, WALL_ANOTHER_CHECKING_ENABLE);
 		RequestCreateObject(WALL_RIGHT_VNUM,	nMapIndex, wall_x, wall_y + wall_half_w, door_x, door_y,  90.0f, WALL_ANOTHER_CHECKING_ENABLE);
 	}
-	else if (rot == 270.0f)		//   
+	else if (rot == 270.0f)		// 서쪽 문 
 	{
 		int door_x = wall_x - wall_half_h;
 		int door_y = wall_y;
diff --git a/src/game/building.h b/src/game/building.h
index 90b9d61..4770f81 100644
--- a/src/game/building.h
+++ b/src/game/building.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_BUILDING_H__
+#ifndef __INC_METIN_II_BUILDING_H__
 #define __INC_METIN_II_BUILDING_H__
 
 #include "../../common/building.h"
diff --git a/src/game/castle.cpp b/src/game/castle.cpp
index 2866e4f..b9b6f41 100644
--- a/src/game/castle.cpp
+++ b/src/game/castle.cpp
@@ -1,10 +1,10 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.04.07
  * file        : castle.cpp
  * author      : mhh
  * description : 
- * ȭ ȣ   : 11506 - 11510
- * ƾ ȣ : 8012 - 8014, 8024-8027
+ * 봉화 번호   : 11506 - 11510
+ * 메틴석 번호 : 8012 - 8014, 8024-8027
  */
 
 #define _castle_cpp_
@@ -21,13 +21,13 @@
 #include "char.h"
 #include "sectree_manager.h"
 
-#define EMPIRE_NONE		0	// ƹ ƴ
-#define EMPIRE_RED		1	// ż
-#define EMPIRE_YELLOW	2	// õ
-#define EMPIRE_BLUE		3	// 
+#define EMPIRE_NONE		0	// 아무국가 아님
+#define EMPIRE_RED		1	// 신수
+#define EMPIRE_YELLOW	2	// 천조
+#define EMPIRE_BLUE		3	// 진노
 
 
-#define SIEGE_EVENT_PULSE	PASSES_PER_SEC(60*5)	// 5
+#define SIEGE_EVENT_PULSE	PASSES_PER_SEC(60*5)	// 5분
 
 
 #define GET_CAHR_MANAGER()								CHARACTER_MANAGER::instance()
@@ -171,7 +171,7 @@ static POSITION	s_frog_pos[4][MAX_CASTLE_FROG] = {
 };
 
 
-/*  񱸿 */
+/* 경비병 경비구역 */
 struct GUARD_REGION
 {
 	int	sx, sy, ex, ey;
@@ -247,10 +247,10 @@ EVENTFUNC(castle_siege_event)
 
 	info->pulse += SIEGE_EVENT_PULSE;
 
-	//   30 ̳ ȳ 
+	// 공성 시작후 30분 이내라면 안내만 하자
 	if (info->pulse < PASSES_PER_SEC(30*60))
 	{
-		snprintf(buf, sizeof(buf), LC_TEXT("%s ȭ ѷΰ  Դϴ."),
+		snprintf(buf, sizeof(buf), LC_TEXT("%s에서 봉화를 둘러싸고 전투가 진행중입니다."),
 				EMPIRE_NAME(GET_SIEGE_EMPIRE()));
 		BroadcastNotice(buf);
 
@@ -264,19 +264,19 @@ EVENTFUNC(castle_siege_event)
 
 		case CASTLE_SIEGE_STRUGGLE:
 			{
-				snprintf(buf, sizeof(buf), LC_TEXT("%s  ߽ϴ."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
+				snprintf(buf, sizeof(buf), LC_TEXT("%s이 수성에 성공했습니다."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
 				BroadcastNotice(buf);
 
-				snprintf(buf, sizeof(buf), LC_TEXT("ݺ %s 30а ȭ ıϿ  ȹ   ֽϴ."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
+				snprintf(buf, sizeof(buf), LC_TEXT("지금부터 %s은 30분간 봉화를 파괴하여 보상을 획득 할 수 있습니다."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
 				BroadcastNotice(buf);
 
 				GET_SIEGE_STATE() = CASTLE_SIEGE_END;
 
-				return PASSES_PER_SEC(60*30);	// 30
+				return PASSES_PER_SEC(60*30);	// 30분
 			}
 			break;
 		case CASTLE_SIEGE_END:
-			BroadcastNotice(LC_TEXT("30 ߽ϴ.. ȭ ϴ."));
+			BroadcastNotice(LC_TEXT("30분이 경과했습니다.. 봉화가 사라집니다."));
 			castle_end_siege();
 			break;
 	}
@@ -331,7 +331,7 @@ EVENTFUNC(castle_stone_event)
 	if (NULL == sectree_map)
 		return 0;
 
-	/* 15  2 ȯ */
+	/* 15마리씩  2번 소환 */
 	const int SPAWN_COUNT = 15;
 
 	if (info->spawn_count < (SPAWN_COUNT * 2))
@@ -351,7 +351,7 @@ EVENTFUNC(castle_stone_event)
 		info->spawn_count += SPAWN_COUNT;
 
 		if (info->spawn_count < (SPAWN_COUNT * 2))
-			return PASSES_PER_SEC(30 * 60);	// 30
+			return PASSES_PER_SEC(30 * 60);	// 30분
 		else
 			return 0;
 	}
@@ -598,24 +598,24 @@ void castle_start_siege(int empire, int tower_count)
 
 	castle_spawn_tower(empire, tower_count);
 
-	/*  Ÿ̸  */
+	/* 공성 타이머 시작 */
 	{
 		castle_event_info* info = AllocEventInfo();
 
 		info->empire = empire;
 		info->pulse	= 0;
 
-		GET_SIEGE_EVENT(empire) = event_create(castle_siege_event, info, /*5*/SIEGE_EVENT_PULSE);
+		GET_SIEGE_EVENT(empire) = event_create(castle_siege_event, info, /*5분*/SIEGE_EVENT_PULSE);
 	}
 
-	/* ƾ ȯ Ÿ̸  */
+	/* 메틴석 소환 타이머 시작 */
 	{
 		castle_stone_event_info* info = AllocEventInfo();
 
 		info->spawn_count = 0;
 		info->empire = empire;
 
-		GET_STONE_EVENT(empire) = event_create(castle_stone_event, info, /* 1 */PASSES_PER_SEC(1));
+		GET_STONE_EVENT(empire) = event_create(castle_stone_event, info, /* 1초 */PASSES_PER_SEC(1));
 	}
 }
 
@@ -649,7 +649,7 @@ LPCHARACTER castle_spawn_frog(int empire)
 	int		dir = 1;
 	long	map_index	= FN_castle_map_index(empire);
 
-	/* Ȳݵβ ȯ  ֳ? */
+	/* 황금두꺼비 소환할 곳이 있나? */
 	POSITION	*empty_pos = FN_empty_frog_pos(empire);
 	if (NULL == empty_pos)
 		return NULL;
@@ -667,7 +667,7 @@ LPCHARACTER castle_spawn_frog(int empire)
 	{
 		frog->SetEmpire(empire);
 		int empty_index	= FN_empty_frog_index(empire);
-		// 
+		// 스폰성공
 		GET_FROG(empire, empty_index) = frog;
 		return frog;
 	}
@@ -778,7 +778,7 @@ bool castle_spawn_tower(int empire, int tower_count)
 	if (NULL == sectree_map)
 		return false;
 
-	// ʱȭ
+	// 초기화
 	DO_ALL_TOWER(i)
 	{
 		if (GET_TOWER(empire, i))
@@ -786,7 +786,7 @@ bool castle_spawn_tower(int empire, int tower_count)
 		GET_TOWER(empire, i) = NULL;
 	}
 
-	int	spawn_count = MINMAX(MIN_CASTLE_TOWER, tower_count, MAX_CASTLE_TOWER);	// 5 ~ 10
+	int	spawn_count = MINMAX(MIN_CASTLE_TOWER, tower_count, MAX_CASTLE_TOWER);	// 5 ~ 10마리
 
 	for (int j = 0; j < spawn_count; ++j)
 	{
@@ -796,13 +796,13 @@ bool castle_spawn_tower(int empire, int tower_count)
 	// broad cast
 	{
 		char buf[1024];
-		snprintf(buf, sizeof(buf), LC_TEXT("%s   ˸ ȭ Ÿϴ."), EMPIRE_NAME(empire));
+		snprintf(buf, sizeof(buf), LC_TEXT("%s에 전쟁의 시작을 알리는 봉화가 나타났습니다."), EMPIRE_NAME(empire));
 		BroadcastNotice(buf);
 	}
 	return true;
 }
 
-/* 񺴸  ܼϰ Ը . */
+/* 경비병리더가 죽으면 단순하게 슬롯만 비운다. */
 void castle_guard_die(LPCHARACTER ch, LPCHARACTER killer)
 {
 	int	empire = ch->GetEmpire();
@@ -823,7 +823,7 @@ void castle_guard_die(LPCHARACTER ch, LPCHARACTER killer)
 }
 
 
-/* Ȳ β  killer 1õ */
+/* 황금 두꺼비가 죽으면 killer에게 1천만냥 */
 void castle_frog_die(LPCHARACTER ch, LPCHARACTER killer)
 {
 	if (NULL == ch || NULL == killer)
@@ -837,15 +837,15 @@ void castle_frog_die(LPCHARACTER ch, LPCHARACTER killer)
 		{
 			GET_FROG(empire, i) = NULL;
 
-			killer->PointChange(POINT_GOLD, 10000000 /*1õ*/, true);
-			//CMonarch::instance().SendtoDBAddMoney(30000000/*3õ*/, killer->GetEmpire(), killer);
+			killer->PointChange(POINT_GOLD, 10000000 /*1천만*/, true);
+			//CMonarch::instance().SendtoDBAddMoney(30000000/*3천만*/, killer->GetEmpire(), killer);
 			castle_save();
 			return;
 		}
 	}
 }
 
-/* ȭ  (?)   */
+/* 봉화가 모두 죽으면(?) 공성전이 끝난다 */
 void castle_tower_die(LPCHARACTER ch, LPCHARACTER killer)
 {
 	char	buf[1024] = {0};
@@ -864,7 +864,7 @@ void castle_tower_die(LPCHARACTER ch, LPCHARACTER killer)
 		case CASTLE_SIEGE_END:
 			{
 				int	siege_end = true;
-				snprintf(buf, sizeof(buf), LC_TEXT("%s ȭ ı߽ϴ."), EMPIRE_NAME(killer_empire));
+				snprintf(buf, sizeof(buf), LC_TEXT("%s이 봉화를 파괴했습니다."), EMPIRE_NAME(killer_empire));
 				BroadcastNotice(buf);
 
 				LogManager::instance().CharLog(killer, 0, "CASTLE_TORCH_KILL", "");
@@ -885,12 +885,12 @@ void castle_tower_die(LPCHARACTER ch, LPCHARACTER killer)
 				{
 					if (GET_SIEGE_STATE() == CASTLE_SIEGE_STRUGGLE)
 					{
-						snprintf(buf, sizeof(buf), LC_TEXT("%s  Ͽ £ йϿϴ.."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
+						snprintf(buf, sizeof(buf), LC_TEXT("%s이 수성에 실패하여 전쟁에 패배하였습니다.."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
 						BroadcastNotice(buf);
 					}
 					else
 					{
-						snprintf(buf, sizeof(buf), LC_TEXT("%s  ȭ ıϿϴ."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
+						snprintf(buf, sizeof(buf), LC_TEXT("%s이 모든 봉화를 파괴하였습니다."), EMPIRE_NAME(GET_SIEGE_EMPIRE()));
 						BroadcastNotice(buf);
 					}
 					castle_end_siege();
@@ -929,27 +929,27 @@ bool castle_is_guard_vnum(DWORD vnum)
 {
 	switch (vnum)
 	{
-		/*  â */
+		/* 상급 창경비병 */
 		case 11112:
 		case 11114:
 		case 11116:
-		/* ߱ â */
+		/* 중급 창경비병 */
 		case 11106:
 		case 11108:
 		case 11110:
-		/* ϱ â */
+		/* 하급 창경비병 */
 		case 11100:
 		case 11102:
 		case 11104:
-		/*  Ȱ */
+		/* 상급 활경비병 */
 		case 11113:
 		case 11115:
 		case 11117:
-		/* ߱ Ȱ */
+		/* 중급 활경비병 */
 		case 11107:
 		case 11109:
 		case 11111:
-		/* ϱ Ȱ */
+		/* 하급 활경비병 */
 		case 11101:
 		case 11103:
 		case 11105:
@@ -963,34 +963,34 @@ int castle_cost_of_hiring_guard(DWORD group_vnum)
 {
 	switch (group_vnum)
 	{
-		/* ϱ */
-		case 9501:	/* ż â */
-		case 9511:	/*  â */
-		case 9521:	/* õ â */
+		/* 하급 */
+		case 9501:	/* 신수 창경비 */
+		case 9511:	/* 진노 창경비 */
+		case 9521:	/* 천조 창경비 */
 
-		case 9502:	/* ż Ȱ */
-		case 9512:	/*  Ȱ */
-		case 9522:	/* õ Ȱ */
+		case 9502:	/* 신수 활경비 */
+		case 9512:	/* 진노 활경비 */
+		case 9522:	/* 천조 활경비 */
 			return (100*10000);
 
-		/* ߱ */
-		case 9503:	/* ż â */
-		case 9513:	/*  â */
-		case 9523:	/* õ â */
+		/* 중급 */
+		case 9503:	/* 신수 창경비 */
+		case 9513:	/* 진노 창경비 */
+		case 9523:	/* 천조 창경비 */
 
-		case 9504:	/* ż Ȱ */
-		case 9514:	/*  Ȱ */
-		case 9524:	/* õ Ȱ */
+		case 9504:	/* 신수 활경비 */
+		case 9514:	/* 진노 활경비 */
+		case 9524:	/* 천조 활경비 */
 			return (300*10000);
 
-		/*  */
-		case 9505:	/* ż â */
-		case 9515:	/*  â */
-		case 9525:	/* õ â */
+		/* 상급 */
+		case 9505:	/* 신수 창경비 */
+		case 9515:	/* 진노 창경비 */
+		case 9525:	/* 천조 창경비 */
 
-		case 9506:	/* ż Ȱ */
-		case 9516:	/*  Ȱ */
-		case 9526:	/* õ Ȱ */
+		case 9506:	/* 신수 활경비 */
+		case 9516:	/* 진노 활경비 */
+		case 9526:	/* 천조 활경비 */
 			return (1000*10000);
 	}
 
@@ -1010,7 +1010,7 @@ bool castle_can_attack(LPCHARACTER ch, LPCHARACTER victim)
 
 	if (CASTLE_SIEGE_END == GET_SIEGE_STATE())
 	{
-		//     ȭ ĥ  
+		// 수성에 성공했을때 같은 제국만 봉화를 칠 수 있음
 		if (castle_is_tower_vnum(victim->GetRaceNum()))
 		{
 			if (ch->GetEmpire() == victim->GetEmpire())
@@ -1020,7 +1020,7 @@ bool castle_can_attack(LPCHARACTER ch, LPCHARACTER victim)
 		}
 	}
 
-	//   ı Ұ
+	// 같은 제국은 파괴 불가
 	if (ch->GetEmpire() == victim->GetEmpire())
 		return false;
 
@@ -1044,7 +1044,7 @@ bool castle_frog_to_empire_money(LPCHARACTER ch)
 		if (false == CMonarch::instance().SendtoDBAddMoney(CASTLE_FROG_PRICE, empire, ch))
 			return false;
 
-		GET_FROG(empire, i) = NULL; // 
+		GET_FROG(empire, i) = NULL; // 등록해제
 		npc->Dead(/*killer*/NULL, /*immediate_dead*/true);
 		return true;
 	}
diff --git a/src/game/castle.h b/src/game/castle.h
index b1439fd..722f5ab 100644
--- a/src/game/castle.h
+++ b/src/game/castle.h
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.04.07
  * file        : castle.h
  * author      : mhh
@@ -9,36 +9,36 @@
 #define _castle_h_
 
 
-#define MAX_CASTLE_GUARD_REGION		4	//  ġ 
-#define MAX_CASTLE_GUARD_PER_REGION	10	//  ġҼִ 񺴱׷
-#define MAX_CASTLE_FROG				20	// Ȳ β
-#define MAX_CASTLE_TOWER			10	// ȭ ִ ȯ 
-#define MIN_CASTLE_TOWER			5	// ȭ ּ ȯ 
+#define MAX_CASTLE_GUARD_REGION		4	// 경비병 배치 구역
+#define MAX_CASTLE_GUARD_PER_REGION	10	// 한지역에 배치할수있는 경비병그룹
+#define MAX_CASTLE_FROG				20	// 황금 두꺼비
+#define MAX_CASTLE_TOWER			10	// 봉화 최대 소환 개수
+#define MIN_CASTLE_TOWER			5	// 봉화 최소 소환 개수
 
 
-#define CASTLE_FROG_PRICE		100000000	// Ȳݵβ  (1)
-#define CASTLE_FROG_VNUM		11505	// Ȳݵβ ȣ
-//#define CASTLE_TOWER_VNUM		11506	// ȭ ȣ
+#define CASTLE_FROG_PRICE		100000000	// 황금두꺼비 가격 (1억)
+#define CASTLE_FROG_VNUM		11505	// 황금두꺼비 번호
+//#define CASTLE_TOWER_VNUM		11506	// 봉화 번호
 #define IS_CASTLE_MAP(map)		(181==(map)||182==(map)||(183)==(map))
 //#define IS_CASTLE_TOWER(vnum)	(11506==(vnum)||11507==(vnum)||11508==(vnum)||11509==(vnum) || 11510==(vnum))
 
 
 enum CASTLE_STATE
 {
-	CASTLE_SIEGE_NONE,			// ȭ
-	CASTLE_SIEGE_STRUGGLE,		// 
-	CASTLE_SIEGE_END			//  ߴٸ 1ð ȭ   ִ.
+	CASTLE_SIEGE_NONE,			// 평화모드
+	CASTLE_SIEGE_STRUGGLE,		// 공성중
+	CASTLE_SIEGE_END			// 수성에 성공했다면 1시간동안 봉화를 깰 수 있다.
 };
 
 
 struct CASTLE_DATA
 {
-	LPCHARACTER	frog[MAX_CASTLE_FROG];	// Ȳݵβ
+	LPCHARACTER	frog[MAX_CASTLE_FROG];	// 황금두꺼비
 
-	LPCHARACTER	guard[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION];	//  
-	DWORD		guard_group[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION];	//  
+	LPCHARACTER	guard[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION];	// 경비병 리더
+	DWORD		guard_group[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION];	// 경비병 리더
 
-	LPCHARACTER	tower[MAX_CASTLE_TOWER];	// ȭ
+	LPCHARACTER	tower[MAX_CASTLE_TOWER];	// 봉화
 
 	LPEVENT		siege_event;
 	LPEVENT		stone_event;
diff --git a/src/game/char.cpp b/src/game/char.cpp
index 949ac40..629dde7 100644
--- a/src/game/char.cpp
+++ b/src/game/char.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "../../common/teen_packet.h"
 #include "../../common/VnumHelper.h"
@@ -484,7 +484,7 @@ void CHARACTER::Destroy()
 				party->Quit(GetVID());
 		}
 
-		SetParty(NULL); // ص  ϰ.
+		SetParty(NULL); // 안해도 되지만 안전하게.
 	}
 
 	if (m_pkMobInst)
@@ -580,20 +580,20 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 {
 	if (GetPart(PART_MAIN) > 2)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("      ֽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("갑옷을 벗어야 개인 상점을 열 수 있습니다."));
 		return;
 	}
 
-	if (GetMyShop())	// ̹    ݴ´.
+	if (GetMyShop())	// 이미 샵이 열려 있으면 닫는다.
 	{
 		CloseMyShop();
 		return;
 	}
 
-	//  Ʈ     .
+	// 진행중인 퀘스트가 있으면 상점을 열 수 없다.
 	quest::PC * pPC = quest::CQuestManager::instance().GetPCForce(GetPlayerID());
 
-	// GetPCForce NULL  Ƿ  Ȯ 
+	// GetPCForce는 NULL일 수 없으므로 따로 확인하지 않음
 	if (pPC->IsRunning())
 		return;
 
@@ -612,7 +612,7 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	if (GOLD_MAX <= nTotalMoney)
 	{
 		sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", GetPlayerID(), GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20  ʰϿ   ϴ"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20억 냥을 초과하여 상점을 열수가 없습니다"));
 		return;
 	}
 
@@ -628,13 +628,13 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	{
 		if (CBanwordManager::instance().CheckString(m_stShopSign.c_str(), m_stShopSign.length()))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӿ  Ե  ̸    ϴ."));	
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("비속어나 은어가 포함된 상점 이름으로 상점을 열 수 없습니다."));	
 			return;
 		}
 	}
 
 	// MYSHOP_PRICE_LIST
-	std::map itemkind;  //   , first: vnum, second:   
+	std::map itemkind;  // 아이템 종류별 가격, first: vnum, second: 단일 수량 가격
 	// END_OF_MYSHOP_PRICE_LIST	
 
 	std::set cont;
@@ -655,19 +655,19 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 
 			if (item_table && (IS_SET(item_table->dwAntiFlags, ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_MYSHOP)))
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭ  λ Ǹ  ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("유료화 아이템은 개인상점에서 판매할 수 없습니다."));
 				return;
 			}
 
 			if (pkItem->IsEquipped() == true)
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  λ Ǹ  ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("장비중인 아이템은 개인상점에서 판매할 수 없습니다."));
 				return;
 			}
 
 			if (true == pkItem->isLocked())
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  λ Ǹ  ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용중인 아이템은 개인상점에서 판매할 수 없습니다."));
 				return;
 			}
 
@@ -680,11 +680,11 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	}
 
 	// MYSHOP_PRICE_LIST
-	//   ҽŲ. 
-	if (CountSpecifyItem(71049)) { //    ʰ  Ѵ.
+	// 보따리 개수를 감소시킨다. 
+	if (CountSpecifyItem(71049)) { // 비단 보따리는 없애지 않고 가격정보를 저장한다.
 
 		//
-		//   ϱ    Ŷ  DB ijÿ .
+		// 아이템 가격정보를 저장하기 위해 아이템 가격정보 패킷을 만들어 DB 캐시에 보낸다.
 		//
 		
 		// Old code:
@@ -728,7 +728,7 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	else if (CountSpecifyItem(50200))
 		RemoveSpecifyItem(50200, 1);
 	else
-		return; //   ߴ.
+		return; // 보따리가 없으면 중단.
 
 	if (m_pkExchange)
 		m_pkExchange->Cancel();
@@ -752,8 +752,8 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	{
 		HorseSummon( false, true );
 	}
-	// new mount ̿ ߿,    ڵ unmount
-	// StopRiding Ʈ óϸ   ׷ س   .
+	// new mount 이용 중에, 개인 상점 열면 자동 unmount
+	// StopRiding으로 뉴마운트까지 처리하면 좋은데 왜 그렇게 안해놨는지 알 수 없다.
 	else if (GetMountVnum())
 	{
 		RemoveAffect(AFFECT_MOUNT);
@@ -836,7 +836,7 @@ void CHARACTER::RestartAtSamePos()
 }
 
 
-// Entity  Ÿٰ Ŷ .
+// Entity에 내가 나타났다고 패킷을 보낸다.
 void CHARACTER::EncodeInsertPacket(LPENTITY entity)
 {
 
@@ -845,10 +845,10 @@ void CHARACTER::EncodeInsertPacket(LPENTITY entity)
 	if (!(d = entity->GetDesc()))
 		return;
 
-	// ̸   ڵ
+	// 길드이름 버그 수정 코드
 	LPCHARACTER ch = (LPCHARACTER) entity;
 	ch->SendGuildName(GetGuild());
-	// ̸   ڵ
+	// 길드이름 버그 수정 코드
 
 	TPacketGCCharacterAdd pack;
 
@@ -1137,14 +1137,14 @@ void CHARACTER::SetPosition(int pos)
 		{
 			case POS_FIGHTING:
 				if (!IsState(m_stateBattle))
-					MonsterLog("[BATTLE] ο ");
+					MonsterLog("[BATTLE] 싸우는 상태");
 
 				GotoState(m_stateBattle);
 				break;
 
 			default:
 				if (!IsState(m_stateIdle))
-					MonsterLog("[IDLE]  ");
+					MonsterLog("[IDLE] 쉬는 상태");
 
 				GotoState(m_stateIdle);
 				break;
@@ -1307,7 +1307,7 @@ void CHARACTER::SaveReal()
 
 void CHARACTER::FlushDelayedSaveItem()
 {
-	//  ȵ ǰ  Ų.
+	// 저장 안된 소지품을 전부 저장시킨다.
 	LPITEM item;
 
 	for (int i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
@@ -1375,7 +1375,7 @@ void CHARACTER::Disconnect(const char * c_pszReason)
 	if (GetParty())
 		GetParty()->Unlink(this);
 
-	// ׾  Ӳ ġ ٰ ϱ
+	// 죽었을 때 접속끊으면 경험치 줄게 하기
 	if (IsStun() || IsDead())
 	{
 		DeathPenalty(0);
@@ -1393,7 +1393,7 @@ void CHARACTER::Disconnect(const char * c_pszReason)
 	SaveAffect();
 	m_bIsLoadedAffect = false;
 
-	m_bSkipSave = true; //  Ŀ ̻ ϸ ȵȴ.
+	m_bSkipSave = true; // 이 이후에는 더이상 저장하면 안된다.
 
 	quest::CQuestManager::instance().DisconnectPC(this);
 
@@ -1824,7 +1824,7 @@ void CHARACTER::SetPlayerProto(const TPlayerTable * t)
 	SetSP(t->sp);
 	SetStamina(t->stamina);
 
-	//GM϶ ȣ  
+	//GM일때 보호모드  
 	if (!test_server)
 	{
 		if (GetGMLevel() > GM_LOW_WIZARD)
@@ -1857,7 +1857,7 @@ void CHARACTER::SetPlayerProto(const TPlayerTable * t)
 	}
 
 #ifdef __PET_SYSTEM__
-	// NOTE: ϴ ijͰ PC 쿡 PetSystem  .  ӽŴ ޸  NPC ϱ ..
+	// NOTE: 일단 캐릭터가 PC인 경우에만 PetSystem을 갖도록 함. 유럽 머신당 메모리 사용률때문에 NPC까지 하긴 좀..
 	if (m_petSystem)
 	{
 		m_petSystem->Destroy();
@@ -1944,9 +1944,9 @@ void CHARACTER::SetProto(const CMob * pkMob)
 		else
 			SetPoint(POINT_DEF_GRADE_BONUS, 15);
 
-		//Ÿ
+		//산타용
 		//m_dwPlayStartTime = get_dword_time() + 10 * 60 * 1000;
-		//ż  
+		//신선자 노해 
 		m_dwPlayStartTime = get_dword_time() + 30 * 1000;
 		if (test_server)
 			m_dwPlayStartTime = get_dword_time() + 30 * 1000;
@@ -2021,7 +2021,7 @@ float CHARACTER::GetMobDamageMultiply() const
 	float fDamMultiply = GetMobTable().fDamMultiply;
 
 	if (IsBerserk())
-		fDamMultiply = fDamMultiply * 2.0f; // BALANCE: ȭ  ι
+		fDamMultiply = fDamMultiply * 2.0f; // BALANCE: 광폭화 시 두배
 
 	return fDamMultiply;
 }
@@ -2054,7 +2054,7 @@ DWORD CHARACTER::GetMonsterDrainSPPoint() const
 BYTE CHARACTER::GetMobRank() const
 {
 	if (!m_pkMobData)
-		return MOB_RANK_KNIGHT;	// PC  KNIGHT
+		return MOB_RANK_KNIGHT;	// PC일 경우 KNIGHT급
 
 	return m_pkMobData->m_table.bRank;
 }
@@ -2117,7 +2117,7 @@ void CHARACTER::ComputeBattlePoints()
 		SetPoint(POINT_MAGIC_DEF_GRADE, GetPoint(POINT_DEF_GRADE));
 
 		//
-		// ⺻ ATK = 2lev + 2str,   2str ٲ  
+		// 기본 ATK = 2lev + 2str, 직업에 마다 2str은 바뀔 수 있음
 		//
 		int iAtk = GetLevel() * 2;
 		int iStatAtk = 0;
@@ -2143,14 +2143,14 @@ void CHARACTER::ComputeBattlePoints()
 				break;
 		}
 
-		//  Ÿ ְ,   ݷ ST*2   ST*2 Ѵ.
-		//  ߸   ݷ   ʰ ϱ ؼ.
+		// 말을 타고 있고, 스탯으로 인한 공격력이 ST*2 보다 낮으면 ST*2로 한다.
+		// 스탯을 잘못 찍은 사람 공격력이 더 낮지 않게 하기 위해서다.
 		if (GetMountVnum() && iStatAtk < 2 * GetPoint(POINT_ST))
 			iStatAtk = (2 * GetPoint(POINT_ST));
 
 		iAtk += iStatAtk;
 
-		// ¸() : ˼    
+		// 승마(말) : 검수라 데미지 감소  
 		if (GetMountVnum())
 		{
 			if (GetJob() == JOB_SURA && GetSkillGroup() == 1)
@@ -2171,7 +2171,7 @@ void CHARACTER::ComputeBattlePoints()
 		PointChange(POINT_ATT_GRADE, iAtk);
 
 		// DEF = LEV + CON + ARMOR
-		int iShowDef = GetLevel() + GetPoint(POINT_HT); // For Ymir(õ)
+		int iShowDef = GetLevel() + GetPoint(POINT_HT); // For Ymir(천마)
 		int iDef = GetLevel() + (int) (GetPoint(POINT_HT) / 1.25); // For Other
 		int iArmor = 0;
 
@@ -2187,7 +2187,7 @@ void CHARACTER::ComputeBattlePoints()
 				}
 			}
 
-		//  Ÿ      º    
+		// 말 타고 있을 때 방어력이 말의 기준 방어력보다 낮으면 기준 방어력으로 설정
 		if( true == IsHorseRiding() )
 		{
 			if (iArmor < GetHorseArmor())
@@ -2293,7 +2293,7 @@ void CHARACTER::ComputePoints()
 
 	if (IsPC())
 	{
-		// ִ /ŷ
+		// 최대 생명력/정신력
 		iMaxHP = JobInitialPoints[GetJob()].max_hp + m_points.iRandomHP + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].hp_per_ht;
 		iMaxSP = JobInitialPoints[GetJob()].max_sp + m_points.iRandomSP + GetPoint(POINT_IQ) * JobInitialPoints[GetJob()].sp_per_iq;
 		iMaxStamina = JobInitialPoints[GetJob()].max_stamina + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].stamina_per_con;
@@ -2309,7 +2309,7 @@ void CHARACTER::ComputePoints()
 			}
 		}
 
-		// ⺻ 
+		// 기본 값들
 		SetPoint(POINT_MOV_SPEED,	100);
 		SetPoint(POINT_ATT_SPEED,	100);
 		PointChange(POINT_ATT_SPEED, GetPoint(POINT_PARTY_HASTE_BONUS));
@@ -2328,9 +2328,9 @@ void CHARACTER::ComputePoints()
 
 	if (IsPC())
 	{
-		//  Ÿ   ⺻    Ⱥ   .
-		//      ̹Ƿ, / ü  
-		// ä  ö󰡰  ̴.
+		// 말 타고 있을 때는 기본 스탯이 말의 기준 스탯보다 낮으면 높게 만든다.
+		// 따라서 말의 기준 스탯이 무사 기준이므로, 수라/무당은 전체 스탯 합이
+		// 대채적으로 더 올라가게 될 것이다.
 		if (GetMountVnum()) 
 		{
 			if (GetHorseST() > GetPoint(POINT_ST))
@@ -2350,17 +2350,17 @@ void CHARACTER::ComputePoints()
 
 	ComputeBattlePoints();
 
-	// ⺻ HP/SP 
+	// 기본 HP/SP 설정
 	if (iMaxHP != GetMaxHP())
 	{
-		SetRealPoint(POINT_MAX_HP, iMaxHP); // ⺻HP RealPoint  ´.
+		SetRealPoint(POINT_MAX_HP, iMaxHP); // 기본HP를 RealPoint에 저장해 놓는다.
 	}
 
 	PointChange(POINT_MAX_HP, 0);
 
 	if (iMaxSP != GetMaxSP())
 	{
-		SetRealPoint(POINT_MAX_SP, iMaxSP); // ⺻SP RealPoint  ´.
+		SetRealPoint(POINT_MAX_SP, iMaxSP); // 기본SP를 RealPoint에 저장해 놓는다.
 	}
 
 	PointChange(POINT_MAX_SP, 0);
@@ -2379,10 +2379,10 @@ void CHARACTER::ComputePoints()
 		}
 	}
 
-	// ȥ ý
-	// ComputePoints ɸ  Ӽ ʱȭϰ,
-	// ,   õ  Ӽ ϱ ,
-	// ȥ ý۵ ActiveDeck ִ  ȥ Ӽ ٽ Ѿ Ѵ.
+	// 용혼석 시스템
+	// ComputePoints에서는 케릭터의 모든 속성값을 초기화하고,
+	// 아이템, 버프 등에 관련된 모든 속성값을 재계산하기 때문에,
+	// 용혼석 시스템도 ActiveDeck에 있는 모든 용혼석의 속성값을 다시 적용시켜야 한다.
 	if (DragonSoul_IsDeckActivated())
 	{
 		for (int i = WEAR_MAX_NUM + DS_SLOT_MAX * DragonSoul_GetActiveDeck(); 
@@ -2420,9 +2420,9 @@ void CHARACTER::ComputePoints()
 	UpdatePacket();
 }
 
-// m_dwPlayStartTime  milisecond. ͺ̽ д ϱ
-//  ÷̽ð   / 60000   ϴµ,    
-//   ⿡ dwTimeRemain ־  ǵ ־ Ѵ.
+// m_dwPlayStartTime의 단위는 milisecond다. 데이터베이스에는 분단위로 기록하기
+// 때문에 플레이시간을 계산할 때 / 60000 으로 나눠서 하는데, 그 나머지 값이 남았
+// 을 때 여기에 dwTimeRemain으로 넣어서 제대로 계산되도록 해주어야 한다.
 void CHARACTER::ResetPlayTime(DWORD dwTimeRemain)
 {
 	m_dwPlayStartTime = get_dword_time() - dwTimeRemain;
@@ -2448,7 +2448,7 @@ EVENTFUNC(recovery_event)
 	if (!ch->IsPC())
 	{
 		//
-		//  ȸ
+		// 몬스터 회복
 		//
 		if (ch->IsAffectFlag(AFF_POISON))
 			return PASSES_PER_SEC(MAX(1, ch->GetMobTable().bRegenCycle));
@@ -2506,23 +2506,23 @@ EVENTFUNC(recovery_event)
 	else
 	{
 		//
-		// PC ȸ
+		// PC 회복
 		//
 		ch->CheckTarget();
-		//ch->UpdateSectree(); // ⼭ ̰ ?
+		//ch->UpdateSectree(); // 여기서 이걸 왜하지?
 		ch->UpdateKillerMode();
 
 		if (ch->IsAffectFlag(AFF_POISON) == true)
 		{
-			// ߵ  ڵȸ 
-			// Ĺ  ڵȸ 
+			// 중독인 경우 자동회복 금지
+			// 파법술인 경우 자동회복 금지
 			return 3;
 		}
 
 		int iSec = (get_dword_time() - ch->GetLastMoveTime()) / 3000;
 
-		// SP ȸ ƾ.
-		//  ̰ɷ ؼ Լ ° ?!
+		// SP 회복 루틴.
+		// 왜 이걸로 해서 함수로 빼놨는가 ?!
 		ch->DistributeSP(ch);
 
 		if (ch->GetMaxHP() <= ch->GetHP())
@@ -2553,7 +2553,7 @@ void CHARACTER::StartRecoveryEvent()
 	if (IsDead() || IsStun())
 		return;
 
-	if (IsNPC() && GetHP() >= GetMaxHP()) // ʹ ü    Ѵ.
+	if (IsNPC() && GetHP() >= GetMaxHP()) // 몬스터는 체력이 다 차있으면 시작 안한다.
 		return;
 
 	char_event_info* info = AllocEventInfo();
@@ -2603,7 +2603,7 @@ void CHARACTER::SetRotation(float fRot)
 	m_pointsInstant.fRot = fRot;
 }
 
-// x, y   .
+// x, y 방향으로 보고 선다.
 void CHARACTER::SetRotationToXY(long x, long y)
 {
 	SetRotation(GetDegreeFromPositionXY(GetX(), GetY(), x, y));
@@ -2619,10 +2619,10 @@ bool CHARACTER::CanMove() const
 	if (CannotMoveByAffect())
 		return false;
 
-	if (GetMyShop())	//   ¿   
+	if (GetMyShop())	// 상점 연 상태에서는 움직일 수 없음
 		return false;
 
-	// 0.2 ̶   .
+	// 0.2초 전이라면 움직일 수 없다.
 	/*
 	   if (get_float_time() - m_fSyncTime < 0.2f)
 	   return false;
@@ -2630,7 +2630,7 @@ bool CHARACTER::CanMove() const
 	return true;
 }
 
-//  x, y ġ ̵ Ų.
+// 무조건 x, y 위치로 이동 시킨다.
 bool CHARACTER::Sync(long x, long y)
 {
 	if (!GetSectree())
@@ -2659,7 +2659,7 @@ bool CHARACTER::Sync(long x, long y)
 
 	if (GetDungeon())
 	{
-		//  ̺Ʈ Ӽ ȭ
+		// 던젼용 이벤트 속성 변화
 		int iLastEventAttr = m_iEventAttr;
 		m_iEventAttr = new_tree->GetEventAttribute(x, y);
 
@@ -2702,7 +2702,7 @@ bool CHARACTER::Sync(long x, long y)
 void CHARACTER::Stop()
 {
 	if (!IsState(m_stateIdle))
-		MonsterLog("[IDLE] ");
+		MonsterLog("[IDLE] 정지");
 
 	GotoState(m_stateIdle);
 
@@ -2712,8 +2712,8 @@ void CHARACTER::Stop()
 
 bool CHARACTER::Goto(long x, long y)
 {
-	// TODO Ÿüũ ʿ
-	//  ġ ̵ ʿ  (ڵ )
+	// TODO 거리체크 필요
+	// 같은 위치면 이동할 필요 없음 (자동 성공)
 	if (GetX() == x && GetY() == y)
 		return false;
 
@@ -2737,7 +2737,7 @@ bool CHARACTER::Goto(long x, long y)
 	
 	if (!IsState(m_stateMove))
 	{
-		MonsterLog("[MOVE] %s", GetVictim() ? "" : "׳̵");
+		MonsterLog("[MOVE] %s", GetVictim() ? "대상추적" : "그냥이동");
 
 		if (GetVictim())
 		{
@@ -2843,14 +2843,14 @@ void CHARACTER::CalculateMoveDuration()
 	m_dwMoveStartTime = get_dword_time();
 }
 
-// x y ġ ̵ Ѵ. (̵  ִ    Ȯ ϰ Sync ޼ҵ  ̵ Ѵ)
-//  char x, y  ٷ ٲ,
-// Ŭ󿡼  ġ ٲ x, y interpolationѴ.
-// Ȱų ٴ  char m_bNowWalking ޷ִ.
-// Warp ǵ ̶ Show  .
+// x y 위치로 이동 한다. (이동할 수 있는 가 없는 가를 확인 하고 Sync 메소드로 실제 이동 한다)
+// 서버는 char의 x, y 값을 바로 바꾸지만,
+// 클라에서는 이전 위치에서 바꾼 x, y까지 interpolation한다.
+// 걷거나 뛰는 것은 char의 m_bNowWalking에 달려있다.
+// Warp를 의도한 것이라면 Show를 사용할 것.
 bool CHARACTER::Move(long x, long y)
 {
-	//  ġ ̵ ʿ  (ڵ )
+	// 같은 위치면 이동할 필요 없음 (자동 성공)
 	if (GetX() == x && GetY() == y)
 		return true;
 
@@ -3012,7 +3012,7 @@ void CHARACTER::SetPoint(BYTE type, int val)
 
 	m_pointsInstant.points[type] = val;
 
-	//  ̵  ȳٸ ̵ ð  ٽ ؾ Ѵ.
+	// 아직 이동이 다 안끝났다면 이동 시간 계산을 다시 해야 한다.
 	if (type == POINT_MOV_SPEED && get_dword_time() < m_dwMoveStartTime + m_dwMoveDuration)
 	{
 		CalculateMoveDuration();
@@ -3080,7 +3080,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 
 		case POINT_NEXT_EXP:
 			val = GetNextExp();
-			bAmount = false;	//  bAmount false  Ѵ.
+			bAmount = false;	// 무조건 bAmount는 false 여야 한다.
 			break;
 
 		case POINT_EXP:
@@ -3088,7 +3088,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 				DWORD exp = GetExp();
 				DWORD next_exp = GetNextExp();
 
-				// ûҳ⺸ȣ
+				// 청소년보호
 				if (LC_IsNewCIBN())
 				{
 					if (IsOverTime(OT_NONE))
@@ -3107,7 +3107,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 					}
 				}
 
-				// exp 0 Ϸ  ʵ Ѵ
+				// exp가 0 이하로 가지 않도록 한다
 				if (amount < 0 && exp < -amount)
 				{
 					sys_log(1, "%s AMOUNT < 0 %d, CUR EXP: %d", GetName(), -amount, exp);
@@ -3126,7 +3126,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 
 					DWORD iExpBalance = 0;
 
-					//  !
+					// 레벨 업!
 					if (exp + amount >= next_exp)
 					{
 						iExpBalance = (exp + amount) - next_exp;
@@ -3144,7 +3144,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 					DWORD q = DWORD(next_exp / 4.0f);
 					int iLevStep = GetRealPoint(POINT_LEVEL_STEP);
 
-					// iLevStep 4 ̸̻  ö ϹǷ ⿡    ̴.
+					// iLevStep이 4 이상이면 레벨이 올랐어야 하므로 여기에 올 수 없는 값이다.
 					if (iLevStep >= 4)
 					{
 						sys_err("%s LEVEL_STEP bigger than 4! (%d)", GetName(), iLevStep);
@@ -3284,16 +3284,16 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 				
 				if (val == 0)
 				{
-					// Stamina  !
+					// Stamina가 없으니 걷자!
 					SetNowWalking(true);
 				}
 				else if (prev_val == 0)
 				{
-					//  ׹̳    
+					// 없던 스테미나가 생겼으니 이전 모드 복귀
 					ResetWalking();
 				}
 
-				if (amount < 0 && val != 0) // Ҵ ʴ´.
+				if (amount < 0 && val != 0) // 감소는 보내지않는다.
 					return;
 			}
 			break;
@@ -3303,7 +3303,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 				SetPoint(type, GetPoint(type) + amount);
 
 				//SetMaxHP(GetMaxHP() + amount);
-				// ִ  = (⺻ ִ  + ߰) * ִ%
+				// 최대 생명력 = (기본 최대 생명력 + 추가) * 최대생명력%
 				int hp = GetRealPoint(POINT_MAX_HP);
 				int add_hp = MIN(3500, hp * GetPoint(POINT_MAX_HP_PCT) / 100);
 				add_hp += GetPoint(POINT_MAX_HP);
@@ -3320,7 +3320,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 				SetPoint(type, GetPoint(type) + amount);
 
 				//SetMaxSP(GetMaxSP() + amount);
-				// ִ ŷ = (⺻ ִ ŷ + ߰) * ִŷ%
+				// 최대 정신력 = (기본 최대 정신력 + 추가) * 최대정신력%
 				int sp = GetRealPoint(POINT_MAX_SP);
 				int add_sp = MIN(800, sp * GetPoint(POINT_MAX_SP_PCT) / 100);
 				add_sp += GetPoint(POINT_MAX_SP);
@@ -3362,7 +3362,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 					return;
 				}
 
-				// ûҳ⺸ȣ
+				// 청소년보호
 				if (LC_IsNewCIBN() && amount > 0)
 				{
 					if (IsOverTime(OT_NONE))
@@ -3425,12 +3425,12 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 		case POINT_HP_RECOVERY:
 		case POINT_SP_RECOVERY:
 
-		case POINT_ATTBONUS_HUMAN:	// 42 ΰ 
-		case POINT_ATTBONUS_ANIMAL:	// 43   % 
-		case POINT_ATTBONUS_ORC:		// 44 Ϳ  % 
-		case POINT_ATTBONUS_MILGYO:	// 45 б  % 
-		case POINT_ATTBONUS_UNDEAD:	// 46 ü  % 
-		case POINT_ATTBONUS_DEVIL:	// 47 (Ǹ)  % 
+		case POINT_ATTBONUS_HUMAN:	// 42 인간에게 강함
+		case POINT_ATTBONUS_ANIMAL:	// 43 동물에게 데미지 % 증가
+		case POINT_ATTBONUS_ORC:		// 44 웅귀에게 데미지 % 증가
+		case POINT_ATTBONUS_MILGYO:	// 45 밀교에게 데미지 % 증가
+		case POINT_ATTBONUS_UNDEAD:	// 46 시체에게 데미지 % 증가
+		case POINT_ATTBONUS_DEVIL:	// 47 마귀(악마)에게 데미지 % 증가
 
 		case POINT_ATTBONUS_MONSTER:
 		case POINT_ATTBONUS_SURA:
@@ -3451,11 +3451,11 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 		case POINT_RESIST_PENETRATE:
 		case POINT_CURSE_PCT:
 
-		case POINT_STEAL_HP:		// 48  
-		case POINT_STEAL_SP:		// 49 ŷ 
+		case POINT_STEAL_HP:		// 48 생명력 흡수
+		case POINT_STEAL_SP:		// 49 정신력 흡수
 
-		case POINT_MANA_BURN_PCT:	// 50  
-		case POINT_DAMAGE_SP_RECOVER:	// 51 ݴ  ŷ ȸ Ȯ
+		case POINT_MANA_BURN_PCT:	// 50 마나 번
+		case POINT_DAMAGE_SP_RECOVER:	// 51 공격당할 시 정신력 회복 확률
 		case POINT_RESIST_NORMAL_DAMAGE:
 		case POINT_RESIST_SWORD:
 		case POINT_RESIST_TWOHAND:
@@ -3470,10 +3470,10 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 		case POINT_RESIST_ICE:
 		case POINT_RESIST_EARTH:
 		case POINT_RESIST_DARK:
-		case POINT_REFLECT_MELEE:	// 67  ݻ
-		case POINT_REFLECT_CURSE:	// 68  ݻ
-		case POINT_POISON_REDUCE:	// 69  
-		case POINT_KILL_SP_RECOVER:	// 70  Ҹ MP ȸ
+		case POINT_REFLECT_MELEE:	// 67 공격 반사
+		case POINT_REFLECT_CURSE:	// 68 저주 반사
+		case POINT_POISON_REDUCE:	// 69 독데미지 감소
+		case POINT_KILL_SP_RECOVER:	// 70 적 소멸시 MP 회복
 		case POINT_KILL_HP_RECOVERY:	// 75  
 		case POINT_HIT_HP_RECOVERY:
 		case POINT_HIT_SP_RECOVERY:
@@ -3702,7 +3702,7 @@ void CHARACTER::ApplyPoint(BYTE bApplyType, int iVal)
 		case APPLY_SKILL:
 			// SKILL_DAMAGE_BONUS
 			{
-				// ֻ Ʈ  8Ʈ vnum, 9Ʈ add, 15Ʈ change
+				// 최상위 비트 기준으로 8비트 vnum, 9비트 add, 15비트 change
 				// 00000000 00000000 00000000 00000000
 				// ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^
 				// vnum     ^ add       change
@@ -3812,11 +3812,11 @@ void CHARACTER::ApplyPoint(BYTE bApplyType, int iVal)
 		case APPLY_RESIST_ASSASSIN :
 		case APPLY_RESIST_SURA :
 		case APPLY_RESIST_SHAMAN :	
-		case APPLY_ENERGY:					// 82 
-		case APPLY_DEF_GRADE:				// 83 . DEF_GRADE_BONUS Ŭ󿡼 ι  ǵ (...) ִ.
-		case APPLY_COSTUME_ATTR_BONUS:		// 84 ڽƬ ۿ  Ӽġ ʽ
-		case APPLY_MAGIC_ATTBONUS_PER:		// 85  ݷ +x%
-		case APPLY_MELEE_MAGIC_ATTBONUS_PER:			// 86  + и ݷ +x%
+		case APPLY_ENERGY:					// 82 기력
+		case APPLY_DEF_GRADE:				// 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
+		case APPLY_COSTUME_ATTR_BONUS:		// 84 코스튬 아이템에 붙은 속성치 보너스
+		case APPLY_MAGIC_ATTBONUS_PER:		// 85 마법 공격력 +x%
+		case APPLY_MELEE_MAGIC_ATTBONUS_PER:			// 86 마법 + 밀리 공격력 +x%
 			PointChange(aApplyInfo[bApplyType].bPointType, iVal);
 			break;
 
@@ -3901,7 +3901,7 @@ void CHARACTER::MonsterLog(const char* format, ...)
 	else
 		len += len2;
 
-	// \0  
+	// \0 문자 포함
 	++len;
 
 	va_end(args);
@@ -3965,7 +3965,7 @@ void CHARACTER::mining_cancel()
 	{
 		sys_log(0, "XXX MINING CANCEL");
 		event_cancel(&m_pkMiningEvent);
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä ߴϿϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채광을 중단하였습니다."));
 	}
 }
 
@@ -3987,13 +3987,13 @@ void CHARACTER::mining(LPCHARACTER chLoad)
 
 	if (!pick || pick->GetType() != ITEM_PICK)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̸ ϼ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이를 장착하세요."));
 		return;
 	}
 
-	int count = number(5, 15); //  Ƚ,  ۴ 2
+	int count = number(5, 15); // 동작 횟수, 한 동작당 2초
 
-	// ä  
+	// 채광 동작을 보여줌
 	TPacketGCDigMotion p;
 	p.header = HEADER_GC_DIG_MOTION;
 	p.vid = GetVID();
@@ -4014,7 +4014,7 @@ void CHARACTER::fishing()
 		return;
 	}
 
-	//  Ӽ ø õѴ?
+	// 못감 속성에서 낚시를 시도한다?
 	{
 		LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER::instance().GetMap(GetMapIndex());
 
@@ -4026,23 +4026,23 @@ void CHARACTER::fishing()
 
 		if (IS_SET(dwAttr, ATTR_BLOCK))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ø   ִ  ƴմϴ"));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시를 할 수 있는 곳이 아닙니다"));
 			return;
 		}
 	}
 
 	LPITEM rod = GetWear(WEAR_WEAPON);
 
-	// ô 
+	// 낚시대 장착
 	if (!rod || rod->GetType() != ITEM_ROD)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô븦  ϼ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시대를 장착 하세요."));
 		return;
 	}
 
 	if (0 == rod->GetSocket(2))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̳   ּ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("미끼를 끼고 던져 주세요."));
 		return;
 	}
 
@@ -4068,7 +4068,7 @@ void CHARACTER::fishing_take()
 	}
 	else
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô밡 ƴ  ø   ϴ!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시대가 아닌 물건으로 낚시를 할 수 없습니다!"));
 	}
 
 	event_cancel(&m_pkFishingEvent);
@@ -4108,11 +4108,11 @@ void CHARACTER::SetNextStatePulse(int iNextPulse)
 	m_dwNextStatePulse = iNextPulse;
 
 	if (iNextPulse < 10)
-		MonsterLog("·ξ");
+		MonsterLog("다음상태로어서가자");
 }
 
 
-// ij νϽ Ʈ Լ.
+// 캐릭터 인스턴스 업데이트 함수.
 void CHARACTER::UpdateCharacter(DWORD dwPulse)
 {
 	CFSM::Update();
@@ -4151,7 +4151,7 @@ WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const
 	switch (bPartPos)
 	{
 		case PART_MAIN:
-			if (!IsPC()) // PC ƴ   Ʈ ״ 
+			if (!IsPC()) // PC가 아닌 경우 현재 파트를 그대로 리턴
 				return GetPart(PART_MAIN);
 			else
 				return m_pointsInstant.bBasePart;
@@ -4192,7 +4192,7 @@ bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
 		if (m_pkChrSyncOwner)
 			sys_log(1, "SyncRelease %s %p from %s", GetName(), this, m_pkChrSyncOwner->GetName());
 
-		// Ʈ  ʴ ʹ NULL õǾ Ѵ.
+		// 리스트에서 제거하지 않더라도 포인터는 NULL로 셋팅되어야 한다.
 		m_pkChrSyncOwner = NULL;
 	}
 	else
@@ -4200,12 +4200,12 @@ bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
 		if (!IsSyncOwner(ch))
 			return false;
 
-		// Ÿ 200 ̸̻ SyncOwner   .
+		// 거리가 200 이상이면 SyncOwner가 될 수 없다.
 		if (DISTANCE_APPROX(GetX() - ch->GetX(), GetY() - ch->GetY()) > 250)
 		{
 			sys_log(1, "SetSyncOwner distance over than 250 %s %s", GetName(), ch->GetName());
 
-			// SyncOwner  Owner ǥѴ.
+			// SyncOwner일 경우 Owner로 표시한다.
 			if (m_pkChrSyncOwner == ch)
 				return true;
 
@@ -4223,7 +4223,7 @@ bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
 			m_pkChrSyncOwner = ch;
 			m_pkChrSyncOwner->m_kLst_pkChrSyncOwned.push_back(this);
 
-			// SyncOwner ٲ LastSyncTime ʱȭѴ.
+			// SyncOwner가 바뀌면 LastSyncTime을 초기화한다.
 			static const timeval zero_tv = {0, 0};
 			SetLastSyncTime(zero_tv);
 
@@ -4233,9 +4233,9 @@ bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
 		m_fSyncTime = get_float_time();
 	}
 
-	// TODO: Sync Owner   Ŷ  Ƿ,
-	//       ȭ  ð 3 ̻   Ǯִ Ŷ
-	//         ϸ Ŷ   ִ.
+	// TODO: Sync Owner가 같더라도 계속 패킷을 보내고 있으므로,
+	//       동기화 된 시간이 3초 이상 지났을 때 풀어주는 패킷을
+	//       보내는 방식으로 하면 패킷을 줄일 수 있다.
 	TPacketGCOwnership pack;
 
 	pack.bHeader	= HEADER_GC_OWNERSHIP;
@@ -4251,7 +4251,7 @@ struct FuncClearSync
 	void operator () (LPCHARACTER ch)
 	{
 		assert(ch != NULL);
-		ch->SetSyncOwner(NULL, false);	// false ÷׷ ؾ for_each   .
+		ch->SetSyncOwner(NULL, false);	// false 플래그로 해야 for_each 가 제대로 돈다.
 	}
 };
 
@@ -4259,7 +4259,7 @@ void CHARACTER::ClearSync()
 {
 	SetSyncOwner(NULL);
 
-	// Ʒ for_each  m_pkChrSyncOwner  ڵ ͸ NULL Ѵ.
+	// 아래 for_each에서 나를 m_pkChrSyncOwner로 가진 자들의 포인터를 NULL로 한다.
 	std::for_each(m_kLst_pkChrSyncOwned.begin(), m_kLst_pkChrSyncOwned.end(), FuncClearSync());
 	m_kLst_pkChrSyncOwned.clear();
 }
@@ -4269,8 +4269,8 @@ bool CHARACTER::IsSyncOwner(LPCHARACTER ch) const
 	if (m_pkChrSyncOwner == ch)
 		return true;
 
-	//  ȭ  ð 3 ̻ ٸ  ƹԵ
-	// .  ƹ SyncOwner̹Ƿ true 
+	// 마지막으로 동기화 된 시간이 3초 이상 지났다면 소유권이 아무에게도
+	// 없다. 따라서 아무나 SyncOwner이므로 true 리턴
 	if (get_float_time() - m_fSyncTime >= 3.0f)
 		return true;
 
@@ -4307,11 +4307,11 @@ void CHARACTER::SetParty(LPPARTY pkParty)
 }
 
 // PARTY_JOIN_BUG_FIX
-/// Ƽ  event 
+/// 파티 가입 event 정보
 EVENTINFO(TPartyJoinEventInfo)
 {
-	DWORD	dwGuestPID;		///< Ƽ  ij PID
-	DWORD	dwLeaderPID;		///< Ƽ  PID
+	DWORD	dwGuestPID;		///< 파티에 참여할 캐릭터의 PID
+	DWORD	dwLeaderPID;		///< 파티 리더의 PID
 
 	TPartyJoinEventInfo() 
 	: dwGuestPID( 0 )
@@ -4349,7 +4349,7 @@ bool CHARACTER::RequestToParty(LPCHARACTER leader)
 
 	if (!leader)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ƽ  ° ƴ϶ û   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("파티장이 접속 상태가 아니라서 요청을 할 수 없습니다."));
 		return false;
 	}
 
@@ -4370,38 +4370,38 @@ bool CHARACTER::RequestToParty(LPCHARACTER leader)
 			break;
 
 		case PERR_SERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 			return false;
 
 		case PERR_DIFFEMPIRE:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ٸ  Ƽ ̷  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 다른 제국과 파티를 이룰 수 없습니다."));
 			return false;
 
 		case PERR_DUNGEON:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ʴ븦   ϴ.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티 초대를 할 수 없습니다.")); 
 			return false;
 
 		case PERR_OBSERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  忡 Ƽ ʴ븦   ϴ.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 관전 모드에선 파티 초대를 할 수 없습니다.")); 
 			return false;
 
 		case PERR_LVBOUNDARY:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> -30 ~ +30  ̳ 游 ʴ  ֽϴ.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> -30 ~ +30 레벨 이내의 상대방만 초대할 수 있습니다.")); 
 			return false;
 
 		case PERR_LOWLEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ְ   30  ʴ  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최고 레벨 보다 30레벨이 낮아 초대할 수 없습니다."));
 			return false;
 
 		case PERR_HILEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ    30  ʴ  ϴ.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최저 레벨 보다 30레벨이 높아 초대할 수 없습니다.")); 
 			return false;
 
 		case PERR_ALREADYJOIN: 	
 			return false;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ̻ Ƽ ʴ  ϴ.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 더 이상 파티원을 초대할 수 없습니다.")); 
 			return false;
 
 		default:
@@ -4417,7 +4417,7 @@ bool CHARACTER::RequestToParty(LPCHARACTER leader)
 	SetPartyRequestEvent(event_create(party_request_event, info, PASSES_PER_SEC(10)));
 
 	leader->ChatPacket(CHAT_TYPE_COMMAND, "PartyRequest %u", (DWORD) GetVID());
-	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Կ Ƽ û ߽ϴ."), leader->GetName());
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님에게 파티가입 신청을 했습니다."), leader->GetName());
 	return true;
 }
 
@@ -4471,7 +4471,7 @@ void CHARACTER::AcceptToParty(LPCHARACTER member)
 	event_cancel(&member->m_pkPartyRequestEvent);
 
 	if (!GetParty())
-		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ƽ  ʽϴ."));
+		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 파티에 속해있지 않습니다."));
 	else 
 	{
 		if (GetPlayerID() != GetParty()->GetLeaderPID())
@@ -4481,16 +4481,16 @@ void CHARACTER::AcceptToParty(LPCHARACTER member)
 		switch (errcode) 
 		{
 			case PERR_NONE: 		member->PartyJoin(this); return;
-			case PERR_SERVER:		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ.")); break;
-			case PERR_DUNGEON:		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ʴ븦   ϴ.")); break;
-			case PERR_OBSERVER: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  忡 Ƽ ʴ븦   ϴ.")); break;
-			case PERR_LVBOUNDARY:	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> -30 ~ +30  ̳ 游 ʴ  ֽϴ.")); break;
-			case PERR_LOWLEVEL: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ְ   30  ʴ  ϴ.")); break;
-			case PERR_HILEVEL: 		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ    30  ʴ  ϴ.")); break;
+			case PERR_SERVER:		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다.")); break;
+			case PERR_DUNGEON:		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티 초대를 할 수 없습니다.")); break;
+			case PERR_OBSERVER: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 관전 모드에선 파티 초대를 할 수 없습니다.")); break;
+			case PERR_LVBOUNDARY:	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> -30 ~ +30 레벨 이내의 상대방만 초대할 수 있습니다.")); break;
+			case PERR_LOWLEVEL: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최고 레벨 보다 30레벨이 낮아 초대할 수 없습니다.")); break;
+			case PERR_HILEVEL: 		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최저 레벨 보다 30레벨이 높아 초대할 수 없습니다.")); break;
 			case PERR_ALREADYJOIN: 	break;
 			case PERR_PARTYISFULL: {
-									   ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ̻ Ƽ ʴ  ϴ."));
-									   member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ο ʰϿ Ƽ   ϴ."));
+									   ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 더 이상 파티원을 초대할 수 없습니다."));
+									   member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티의 인원제한이 초과하여 파티에 참가할 수 없습니다."));
 									   break;
 								   }
 			default: sys_err("Do not process party join error(%d)", errcode);
@@ -4501,8 +4501,8 @@ void CHARACTER::AcceptToParty(LPCHARACTER member)
 }
 
 /**
- * Ƽ ʴ event callback Լ.
- * event  ߵϸ ʴ  óѴ.
+ * 파티 초대 event callback 함수.
+ * event 가 발동하면 초대 거절로 처리한다.
  */
 EVENTFUNC(party_invite_event)
 {
@@ -4529,12 +4529,12 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 {
 	if (GetParty() && GetParty()->GetLeaderPID() != GetPlayerID())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ʴ  ִ  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티원을 초대할 수 있는 권한이 없습니다."));
 		return;
 	}
 	else if (pchInvitee->IsBlockMode(BLOCK_PARTY_INVITE))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> %s  Ƽ ź Դϴ."), pchInvitee->GetName());
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> %s 님이 파티 거부 상태입니다."), pchInvitee->GetName());
 		return;
 	}
 
@@ -4546,39 +4546,39 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 			break;
 
 		case PERR_SERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 			return;
 
 		case PERR_DIFFEMPIRE:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ٸ  Ƽ ̷  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 다른 제국과 파티를 이룰 수 없습니다."));
 			return;
 
 		case PERR_DUNGEON:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ʴ븦   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티 초대를 할 수 없습니다."));
 			return;
 
 		case PERR_OBSERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  忡 Ƽ ʴ븦   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 관전 모드에선 파티 초대를 할 수 없습니다."));
 			return;
 
 		case PERR_LVBOUNDARY:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> -30 ~ +30  ̳ 游 ʴ  ֽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> -30 ~ +30 레벨 이내의 상대방만 초대할 수 있습니다."));
 			return;
 
 		case PERR_LOWLEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ְ   30  ʴ  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최고 레벨 보다 30레벨이 낮아 초대할 수 없습니다."));
 			return;
 
 		case PERR_HILEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ    30  ʴ  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최저 레벨 보다 30레벨이 높아 초대할 수 없습니다."));
 			return;
 
 		case PERR_ALREADYJOIN:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ̹ %s Ƽ  ֽϴ."), pchInvitee->GetName());
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 이미 %s님은 파티에 속해 있습니다."), pchInvitee->GetName());
 			return;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ̻ Ƽ ʴ  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 더 이상 파티원을 초대할 수 없습니다."));
 			return;
 
 		default:
@@ -4590,7 +4590,7 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 		return;
 
 	//
-	// EventMap  ̺Ʈ ߰
+	// EventMap 에 이벤트 추가
 	// 
 	TPartyJoinEventInfo* info = AllocEventInfo();
 
@@ -4600,7 +4600,7 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 	m_PartyInviteEventMap.insert(EventMap::value_type(pchInvitee->GetPlayerID(), event_create(party_invite_event, info, PASSES_PER_SEC(10))));
 
 	//
-	// ʴ ޴ character  ʴ Ŷ 
+	// 초대 받는 character 에게 초대 패킷 전송
 	// 
 
 	TPacketGCPartyInvite p;
@@ -4624,7 +4624,7 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 
 	if (GetParty() && GetParty()->GetLeaderPID() != GetPlayerID())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ʴ  ִ  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티원을 초대할 수 있는 권한이 없습니다."));
 		return;
 	}
 
@@ -4636,36 +4636,36 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 			break;
 
 		case PERR_SERVER:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 			return;
 
 		case PERR_DUNGEON:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ʴ뿡   ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티 초대에 응할 수 없습니다."));
 			return;
 
 		case PERR_OBSERVER:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  忡 Ƽ ʴ븦   ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 관전 모드에선 파티 초대를 할 수 없습니다."));
 			return;
 
 		case PERR_LVBOUNDARY:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> -30 ~ +30  ̳ 游 ʴ  ֽϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> -30 ~ +30 레벨 이내의 상대방만 초대할 수 있습니다."));
 			return;
 
 		case PERR_LOWLEVEL:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ְ   30  ʴ  ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최고 레벨 보다 30레벨이 낮아 초대할 수 없습니다."));
 			return;
 
 		case PERR_HILEVEL:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ    30  ʴ  ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티내 최저 레벨 보다 30레벨이 높아 초대할 수 없습니다."));
 			return;
 
 		case PERR_ALREADYJOIN:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ʴ뿡   ϴ."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티 초대에 응할 수 없습니다."));
 			return;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ̻ Ƽ ʴ  ϴ."));
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ο ʰϿ Ƽ   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 더 이상 파티원을 초대할 수 없습니다."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티의 인원제한이 초과하여 파티에 참가할 수 없습니다."));
 			return;
 
 		default:
@@ -4674,7 +4674,7 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 	}
 
 	//
-	// Ƽ  ó
+	// 파티 가입 처리
 	// 
 
 	if (GetParty())
@@ -4704,13 +4704,13 @@ void CHARACTER::PartyInviteDeny(DWORD dwPID)
 
 	LPCHARACTER pchInvitee = CHARACTER_MANAGER::instance().FindByPID(dwPID);
 	if (pchInvitee)
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> %s Ƽ ʴ븦 ϼ̽ϴ."), pchInvitee->GetName());
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> %s님이 파티 초대를 거절하셨습니다."), pchInvitee->GetName());
 }
 
 void CHARACTER::PartyJoin(LPCHARACTER pLeader)
 {
-	pLeader->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> %s Ƽ ϼ̽ϴ."), GetName());
-	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> %s Ƽ ϼ̽ϴ."), pLeader->GetName());
+	pLeader->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> %s님이 파티에 참가하셨습니다."), GetName());
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> %s님의 파티에 참가하셨습니다."), pLeader->GetName());
 
 	pLeader->GetParty()->Join(GetPlayerID());
 	pLeader->GetParty()->Link(this);
@@ -4887,9 +4887,9 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 	DWORD vid = GetVID();
 	sys_log(0, "OnClick %s[vnum %d ServerUniqueID %d, pid %d] by %s", GetName(), GetRaceNum(), vid, GetPlayerID(), pkChrCauser->GetName());
 
-	//  · Ʈ   .
+	// 상점을 연상태로 퀘스트를 진행할 수 없다.
 	{
-		// , ڽ ڽ  Ŭ  ִ.
+		// 단, 자신은 자신의 상점을 클릭할 수 있다.
 		if (pkChrCauser->GetMyShop() && pkChrCauser != this) 
 		{
 			sys_err("OnClick Fail (%s->%s) - pc has shop", pkChrCauser->GetName(), GetName());
@@ -4897,7 +4897,7 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 		}
 	}
 
-	// ȯ϶ Ʈ   .
+	// 교환중일때 퀘스트를 진행할 수 없다.
 	{
 		if (pkChrCauser->GetExchange())
 		{
@@ -4908,37 +4908,37 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 
 	if (IsPC())
 	{
-		// Ÿ   PC  Ŭ Ʈ óϵ մϴ.
+		// 타겟으로 설정된 경우는 PC에 의한 클릭도 퀘스트로 처리하도록 합니다.
 		if (!CTargetManager::instance().GetTargetInfo(pkChrCauser->GetPlayerID(), TARGET_TYPE_VID, GetVID()))
 		{
-			// 2005.03.17.myevan.Ÿ ƴ    ó  ۵Ų.
+			// 2005.03.17.myevan.타겟이 아닌 경우는 개인 상점 처리 기능을 작동시킨다.
 			if (GetMyShop())
 			{
 				if (pkChrCauser->IsDead() == true) return;
 
 				//PREVENT_TRADE_WINDOW
-				if (pkChrCauser == this) // ڱ 
+				if (pkChrCauser == this) // 자기는 가능
 				{
 					if ((GetExchange() || IsOpenSafebox() || GetShopOwner()) || IsCubeOpen())
 					{
-						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷ(â,ȯ,) λ   ϴ."));
+						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
 						return;
 					}
 				}
-				else // ٸ  Ŭ
+				else // 다른 사람이 클릭했을때
 				{
-					// Ŭ  ȯ/â/λ/̶̿ Ұ
+					// 클릭한 사람이 교환/창고/개인상점/상점이용중이라면 불가
 					if ((pkChrCauser->GetExchange() || pkChrCauser->IsOpenSafebox() || pkChrCauser->GetMyShop() || pkChrCauser->GetShopOwner()) || pkChrCauser->IsCubeOpen() )
 					{
-						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷ(â,ȯ,) λ   ϴ."));
+						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
 						return;
 					}
 
-					// Ŭ  ȯ/â/̶̿ Ұ
+					// 클릭한 대상이 교환/창고/상점이용중이라면 불가
 					//if ((GetExchange() || IsOpenSafebox() || GetShopOwner()))
 					if ((GetExchange() || IsOpenSafebox() || IsCubeOpen()))
 					{
-						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ٸ ŷ ϰ ִ Դϴ."));
+						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래를 하고 있는 중입니다."));
 						return;
 					}
 				}
@@ -4962,7 +4962,7 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 		}
 	}
 
-	// ûҳ Ʈ 
+	// 청소년은 퀘스트 못함
 	if (LC_IsNewCIBN())
 	{
 		if (pkChrCauser->IsOverTime(OT_3HOUR))
@@ -4986,12 +4986,12 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 	}
 
 
-	// NPC    :   
+	// NPC 전용 기능 수행 : 상점 열기 등
 	if (!IsPC())
 	{
 		if (!m_triggerOnClick.pFunc)
 		{
-			// NPC Ʈ ý α 
+			// NPC 트리거 시스템 로그 보기
 			//sys_err("%s.OnClickFailure(%s) : triggerOnClick.pFunc is EMPTY(pid=%d)", 
 			//			pkChrCauser->GetName(),
 			//			GetName(),
@@ -5056,7 +5056,7 @@ void CHARACTER::ClearStone()
 {
 	if (!m_set_pkChrSpawnedBy.empty())
 	{
-		//  Ų ͵  δ.
+		// 내가 스폰시킨 몬스터들을 모두 죽인다.
 		FuncDeadSpawnedByStone f;
 		std::for_each(m_set_pkChrSpawnedBy.begin(), m_set_pkChrSpawnedBy.end(), f);
 		m_set_pkChrSpawnedBy.clear();
@@ -5232,9 +5232,9 @@ void CHARACTER::ExitToSavedLocation()
 }
 
 // fixme 
-// ݱ privateMapIndex    ε  üũ ϴ  ܺο ϰ,
-// ٸ warpset ҷµ
-// ̸ warpset  .
+// 지금까진 privateMapIndex 가 현재 맵 인덱스와 같은지 체크 하는 것을 외부에서 하고,
+// 다르면 warpset을 불렀는데
+// 이를 warpset 안으로 넣자.
 bool CHARACTER::WarpSet(long x, long y, long lPrivateMapIndex)
 {
 	if (!IsPC())
@@ -5337,7 +5337,7 @@ void CHARACTER::WarpEnd()
 
 	if (!map_allow_find(index))
 	{
-		//     Ƿ ϱ  ǥ ǵ.
+		// 이 곳으로 워프할 수 없으므로 워프하기 전 좌표로 되돌리자.
 		sys_err("location %d %d not allowed to login this server", m_posWarp.x, m_posWarp.y);
 		GetDesc()->SetPhase(PHASE_CLOSE);
 		return;
@@ -5392,7 +5392,7 @@ bool CHARACTER::Return()
 	SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
 
 	if (test_server)
-		sys_log(0, "%s %p ϰ ư! %d %d", GetName(), this, x, y);
+		sys_log(0, "%s %p 포기하고 돌아가자! %d %d", GetName(), this, x, y);
 
 	if (GetParty())
 		GetParty()->SendMessage(this, PM_RETURN, x, y);
@@ -5411,14 +5411,14 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 	// TRENT_MONSTER
 	if (IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_NOMOVE))
 	{
-		if (pkChr->IsPC()) // Ѿư 밡 PC 
+		if (pkChr->IsPC()) // 쫓아가는 상대가 PC일 때
 		{
 			// If i'm in a party. I must obey party leader's AI.
 			if (!GetParty() || !GetParty()->GetLeader() || GetParty()->GetLeader() == this)
 			{
-				if (get_dword_time() - m_pkMobInst->m_dwLastAttackedTime >= 15000) //  ݹ 15ʰ 
+				if (get_dword_time() - m_pkMobInst->m_dwLastAttackedTime >= 15000) // 마지막으로 공격받은지 15초가 지났고
 				{
-					//     50 ̻ ̳ ϰ ư.
+					// 마지막 맞은 곳으로 부터 50미터 이상 차이나면 포기하고 돌아간다.
 					if (m_pkMobData->m_table.wAttackRange < DISTANCE_APPROX(pkChr->GetX() - GetX(), pkChr->GetY() - GetY()))
 						if (Return())
 							return true;
@@ -5432,14 +5432,14 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 	long x = pkChr->GetX();
 	long y = pkChr->GetY();
 
-	if (pkChr->IsPC()) // Ѿư 밡 PC 
+	if (pkChr->IsPC()) // 쫓아가는 상대가 PC일 때
 	{
 		// If i'm in a party. I must obey party leader's AI.
 		if (!GetParty() || !GetParty()->GetLeader() || GetParty()->GetLeader() == this)
 		{
-			if (get_dword_time() - m_pkMobInst->m_dwLastAttackedTime >= 15000) //  ݹ 15ʰ 
+			if (get_dword_time() - m_pkMobInst->m_dwLastAttackedTime >= 15000) // 마지막으로 공격받은지 15초가 지났고
 			{
-				//     50 ̻ ̳ ϰ ư.
+				// 마지막 맞은 곳으로 부터 50미터 이상 차이나면 포기하고 돌아간다.
 				if (5000 < DISTANCE_APPROX(m_pkMobInst->m_posLastAttacked.x - GetX(), m_pkMobInst->m_posLastAttacked.y - GetY()))
 					if (Return())
 						return true;
@@ -5459,9 +5459,9 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 		GetMobBattleType() != BATTLE_TYPE_MAGIC &&
 		false == IsPet())
 	{
-		//  ̵̸  ̵ Ѵ
-		//   ӵ Ÿκ  ð  
-		//   ð  ̵Ѵٰ Ͽ ű ̵Ѵ.
+		// 대상이 이동중이면 예측 이동을 한다
+		// 나와 상대방의 속도차와 거리로부터 만날 시간을 예상한 후
+		// 상대방이 그 시간까지 직선으로 이동한다고 가정하여 거기로 이동한다.
 		float rot = pkChr->GetRotation();
 		float rot_delta = GetDegreeDelta(rot, GetDegreeFromPositionXY(GetX(), GetY(), pkChr->GetX(), pkChr->GetY()));
 
@@ -5493,7 +5493,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 		}
 	}
 
-	//  ġ ٶ Ѵ.
+	// 가려는 위치를 바라봐야 한다.
 	SetRotationToXY(x, y);
 
 	float fDist = DISTANCE_SQRT(x - GetX(), y - GetY());
@@ -5505,7 +5505,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 
 	if (IsChangeAttackPosition(pkChr) && GetMobRank() < MOB_RANK_BOSS)
 	{
-		//  ֺ   ̵
+		// 상대방 주변 랜덤한 곳으로 이동
 		SetChangeAttackPositionTime();
 
 		int retry = 16;
@@ -5531,23 +5531,23 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 				break;
 		}
 
-		//sys_log(0, "ó 򰡷 ̵ %s retry %d", GetName(), retry);
+		//sys_log(0, "근처 어딘가로 이동 %s retry %d", GetName(), retry);
 		if (!Goto(dx, dy))
 			return false;
 	}
 	else
 	{
-		//  󰡱
+		// 직선 따라가기
 		float fDistToGo = fDist - fMinDistance;
 		GetDeltaByDegree(GetRotation(), fDistToGo, &fx, &fy);
 
-		//sys_log(0, " ̵ %s", GetName());
+		//sys_log(0, "직선으로 이동 %s", GetName());
 		if (!Goto(GetX() + (int) fx, GetY() + (int) fy))
 			return false;
 	}
 
 	SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
-	//MonsterLog("Ѿư; %s", pkChr->GetName());
+	//MonsterLog("쫓아가기; %s", pkChr->GetName());
 	return true;
 }
 
@@ -5570,12 +5570,12 @@ void CHARACTER::ReqSafeboxLoad(const char* pszPassword)
 {
 	if (!*pszPassword || strlen(pszPassword) > SAFEBOX_PASSWORD_MAX_LEN)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 잘못된 암호를 입력하셨습니다."));
 		return;
 	}
 	else if (m_pkSafebox)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â ̹ ֽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고가 이미 열려있습니다."));
 		return;
 	}
 
@@ -5583,12 +5583,12 @@ void CHARACTER::ReqSafeboxLoad(const char* pszPassword)
 
 	if (iPulse - GetSafeboxLoadTime()  < PASSES_PER_SEC(10))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â  10 ȿ   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고를 닫은지 10초 안에는 열 수 없습니다."));
 		return;
 	}
 	else if (GetDistanceFromSafeboxOpen() > 1000)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> Ÿ ־ â   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 거리가 멀어서 창고를 열 수 없습니다."));
 		return;
 	}
 	else if (m_bOpeningSafebox)
@@ -5859,9 +5859,9 @@ void CHARACTER::SetNowWalking(bool bWalkFlag)
 		if (IsNPC())
 		{
 			if (m_bNowWalking)
-				MonsterLog("ȴ´");
+				MonsterLog("걷는다");
 			else
-				MonsterLog("ڴ");
+				MonsterLog("뛴다");
 		}
 
 		//sys_log(0, "%s is now %s", GetName(), m_bNowWalking?"walking.":"running.");
@@ -5940,7 +5940,7 @@ void CHARACTER::ResetPoint(int iLv)
 
 	ComputePoints();
 
-	// ȸ
+	// 회복
 	PointChange(POINT_HP, GetMaxHP() - GetHP());
 	PointChange(POINT_SP, GetMaxSP() - GetSP());
 
@@ -6217,11 +6217,11 @@ void CHARACTER::SetPolymorph(DWORD dwRaceNum, bool bMaintainStat)
 		PointChange(POINT_HT, 0);
 	}
 
-	//  ¿ ״ ,  Ǯ Ǵµ
-	//   ķ valid combo interval ٸ 
-	// Combo  Ǵ Hacker νϴ 찡 ִ.
-	//   Ǯų  ϰ Ǹ,
-	// valid combo interval resetѴ.
+	// 폴리모프 상태에서 죽는 경우, 폴리모프가 풀리게 되는데
+	// 폴리 모프 전후로 valid combo interval이 다르기 때문에
+	// Combo 핵 또는 Hacker로 인식하는 경우가 있다.
+	// 따라서 폴리모프를 풀거나 폴리모프 하게 되면,
+	// valid combo interval을 reset한다.
 	SetValidComboInterval(0);
 	SetComboSequence(0);
 
@@ -6285,7 +6285,7 @@ void CHARACTER::DetermineDropMetinStone()
 				else
 				{
 					iGradePct -= iLevelGradePortion;
-					m_dwDropMetinStone += 100; //  +a -> +(a+1) ɶ 100 
+					m_dwDropMetinStone += 100; // 돌 +a -> +(a+1)이 될때마다 100씩 증가
 				}
 			}
 		}
@@ -6333,9 +6333,9 @@ void CHARACTER::MountVnum(DWORD vnum)
 	if (m_bIsObserver)
 		return;
 
-	//NOTE : MountѴٰ ؼ Client Side ü  ʴ´.
-	//׸ Side  ġ ̵  ʴ´. ֳϸ Client Side Coliision Adjust Ҽ ִµ
-	//ü Ҹ״ٰ ġ ̵Ű ̶ collision check  Ƿ 濡 ų հ   Ѵ.
+	//NOTE : Mount한다고 해서 Client Side의 객체를 삭제하진 않는다.
+	//그리고 서버Side에서 탔을때 위치 이동은 하지 않는다. 왜냐하면 Client Side에서 Coliision Adjust를 할수 있는데
+	//객체를 소멸시켰다가 서버위치로 이동시키면 이때 collision check를 하지는 않으므로 배경에 끼거나 뚫고 나가는 문제가 존재한다.
 	m_posDest.x = m_posStart.x = GetX();
 	m_posDest.y = m_posStart.y = GetY();
 	//EncodeRemovePacket(this);
@@ -6347,7 +6347,7 @@ void CHARACTER::MountVnum(DWORD vnum)
 	{
 		LPENTITY entity = (it++)->first;
 
-		//MountѴٰ ؼ Client Side ü  ʴ´.
+		//Mount한다고 해서 Client Side의 객체를 삭제하진 않는다.
 		//EncodeRemovePacket(entity);
 		//if (!m_bIsObserver)
 		EncodeInsertPacket(entity);
@@ -6581,45 +6581,45 @@ bool CHARACTER::WarpToPID(DWORD dwPID)
 			}
 			else
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ִ    ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 있는 곳으로 워프할 수 없습니다."));
 				return false;
 			}
 		}
 		else
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ִ    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 있는 곳으로 워프할 수 없습니다."));
 			return false;
 		}
 	}
 	else
 	{
-		// ٸ  αε   -> ޽  ǥ ޾ƿ
-		// 1. A.pid, B.pid  Ѹ
-		// 2. B.pid   Ѹ A.pid, ǥ  
-		// 3. 
+		// 다른 서버에 로그인된 사람이 있음 -> 메시지 보내 좌표를 받아오자
+		// 1. A.pid, B.pid 를 뿌림
+		// 2. B.pid를 가진 서버가 뿌린서버에게 A.pid, 좌표 를 보냄
+		// 3. 워프
 		CCI * pcci = P2P_MANAGER::instance().FindByPID(dwPID);
 
 		if (!pcci)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¶ ° ƴմϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 온라인 상태가 아닙니다."));
 			return false;
 		}
 
 		if (pcci->bChannel != g_bChannel)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d äο ֽϴ. ( ä %d)"), pcci->bChannel, g_bChannel);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 %d 채널에 있습니다. (현재 채널 %d)"), pcci->bChannel, g_bChannel);
 			return false;
 		}
 		else if (false == IS_SUMMONABLE_ZONE(pcci->lMapIndex))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ִ    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 있는 곳으로 워프할 수 없습니다."));
 			return false;
 		}
 		else
 		{
 			if (!CAN_ENTER_ZONE(this, pcci->lMapIndex))
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ִ    ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 있는 곳으로 워프할 수 없습니다."));
 				return false;
 			}
 
@@ -6657,7 +6657,7 @@ int CHARACTER::ComputeRefineFee(int iCost, int iMultiply) const
 		if (pGuild == GetGuild())
 			return iCost * iMultiply * 9 / 10;
 
-		// ٸ   õϴ  ߰ 3 
+		// 다른 제국 사람이 시도하는 경우 추가로 3배 더
 		LPCHARACTER chRefineNPC = CHARACTER_MANAGER::instance().Find(m_dwRefineNPCVID);
 		if (chRefineNPC && chRefineNPC->GetEmpire() != GetEmpire())
 			return iCost * iMultiply * 3;
@@ -6677,7 +6677,7 @@ void CHARACTER::PayRefineFee(int iTotalMoney)
 
 	if (pGuild)
 	{
-		// ڱ ̸ iTotalMoney ̹ 10% ܵǾִ
+		// 자기 길드이면 iTotalMoney에 이미 10%가 제외되어있다
 		if (pGuild != GetGuild())
 		{
 			pGuild->RequestDepositMoney(this, iFee);
@@ -6689,7 +6689,7 @@ void CHARACTER::PayRefineFee(int iTotalMoney)
 }
 // END_OF_ADD_REFINE_BUILDING
 
-//Hack   üũ.
+//Hack 방지를 위한 체크.
 bool CHARACTER::IsHack(bool bSendMsg, bool bCheckShopOwner, int limittime)
 {
 	const int iPulse = thecore_pulse();
@@ -6697,24 +6697,24 @@ bool CHARACTER::IsHack(bool bSendMsg, bool bCheckShopOwner, int limittime)
 	if (test_server)
 		bSendMsg = true;
 
-	//â  üũ
+	//창고 연후 체크
 	if (iPulse - GetSafeboxLoadTime() < PASSES_PER_SEC(limittime))
 	{
 		if (bSendMsg)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  %d ̳ ٸ ̵Ҽ ϴ."), limittime);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고를 연후 %d초 이내에는 다른곳으로 이동할수 없습니다."), limittime);
 
 		if (test_server)
 			ChatPacket(CHAT_TYPE_INFO, "[TestOnly]Pulse %d LoadTime %d PASS %d", iPulse, GetSafeboxLoadTime(), PASSES_PER_SEC(limittime));
 		return true; 
 	}
 
-	//ŷ â üũ
+	//거래관련 창 체크
 	if (bCheckShopOwner)
 	{
 		if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
 		{
 			if (bSendMsg)
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷâ,â   ¿ ٸ ̵, Ҽ ϴ"));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
 
 			return true;
 		}
@@ -6724,18 +6724,18 @@ bool CHARACTER::IsHack(bool bSendMsg, bool bCheckShopOwner, int limittime)
 		if (GetExchange() || GetMyShop() || IsOpenSafebox() || IsCubeOpen())
 		{
 			if (bSendMsg)
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷâ,â   ¿ ٸ ̵, Ҽ ϴ"));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
 
 			return true;
 		}
 	}
 
 	//PREVENT_PORTAL_AFTER_EXCHANGE
-	//ȯ  ðüũ
+	//교환 후 시간체크
 	if (iPulse - GetExchangeTime()  < PASSES_PER_SEC(limittime))
 	{
 		if (bSendMsg)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ  %d ̳ ٸ ̵   ϴ."), limittime );
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래 후 %d초 이내에는 다른지역으로 이동 할 수 없습니다."), limittime );
 		return true;
 	}
 	//END_PREVENT_PORTAL_AFTER_EXCHANGE
@@ -6744,14 +6744,14 @@ bool CHARACTER::IsHack(bool bSendMsg, bool bCheckShopOwner, int limittime)
 	if (iPulse - GetMyShopTime() < PASSES_PER_SEC(limittime))
 	{
 		if (bSendMsg)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ  %d ̳ ٸ ̵   ϴ."), limittime);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래 후 %d초 이내에는 다른지역으로 이동 할 수 없습니다."), limittime);
 		return true;
 	}
 
 	if (iPulse - GetRefineTime() < PASSES_PER_SEC(limittime))
 	{
 		if (bSendMsg)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  %d ̳ ȯ,ȯθ   ϴ."), limittime);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 개량후 %d초 이내에는 귀환부,귀환기억부를 사용할 수 없습니다."), limittime);
 		return true; 
 	}
 	//END_PREVENT_ITEM_COPY
@@ -6863,7 +6863,7 @@ bool CHARACTER::IsSiegeNPC() const
 //------------------------------------------------
 void CHARACTER::UpdateDepositPulse()
 {
-	m_deposit_pulse = thecore_pulse() + PASSES_PER_SEC(60*5);	// 5
+	m_deposit_pulse = thecore_pulse() + PASSES_PER_SEC(60*5);	// 5분
 }
 
 bool CHARACTER::CanDeposit() const
@@ -7065,7 +7065,7 @@ void CHARACTER::StartCheckSpeedHackEvent()
 
 	info->ch = this;
 
-	m_pkCheckSpeedHackEvent = event_create(check_speedhack_event, info, PASSES_PER_SEC(60));	// 1
+	m_pkCheckSpeedHackEvent = event_create(check_speedhack_event, info, PASSES_PER_SEC(60));	// 1분
 }
 
 void CHARACTER::GoHome()
@@ -7219,7 +7219,7 @@ BYTE CHARACTER::GetChatCounter() const
 	return m_bChatCounter;
 }
 
-// ̳ ٸ Ÿ ֳ?
+// 말이나 다른것을 타고 있나?
 bool CHARACTER::IsRiding() const
 {
 	return IsHorseRiding() || GetMountVnum();
diff --git a/src/game/char.h b/src/game/char.h
index 6eca64e..6b5a28b 100644
--- a/src/game/char.h
+++ b/src/game/char.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_CHAR_H__
+#ifndef __INC_METIN_II_CHAR_H__
 #define __INC_METIN_II_CHAR_H__
 
 #include 
@@ -83,7 +83,7 @@ enum EDamageType
 	DAMAGE_TYPE_NONE,
 	DAMAGE_TYPE_NORMAL,
 	DAMAGE_TYPE_NORMAL_RANGE,
-	//ų
+	//스킬
 	DAMAGE_TYPE_MELEE,
 	DAMAGE_TYPE_RANGE,
 	DAMAGE_TYPE_FIRE,
@@ -105,103 +105,103 @@ 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_ST,                   // 12 근력
+	POINT_HT,                   // 13 체력
+	POINT_DX,                   // 14 민첩성
+	POINT_IQ,                   // 15 정신력
 	POINT_DEF_GRADE,		// 16 ...
-	POINT_ATT_SPEED,            // 17 ݼӵ
-	POINT_ATT_GRADE,		// 18 ݷ MAX
-	POINT_MOV_SPEED,            // 19 ̵ӵ
-	POINT_CLIENT_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_WEAPON_MIN,		// 29  ּ 
-	POINT_WEAPON_MAX,		// 30  ִ 
-	POINT_PLAYTIME,             // 31 ÷̽ð
-	POINT_HP_REGEN,             // 32 HP ȸ
-	POINT_SP_REGEN,             // 33 SP ȸ
+	POINT_ATT_SPEED,            // 17 공격속도
+	POINT_ATT_GRADE,		// 18 공격력 MAX
+	POINT_MOV_SPEED,            // 19 이동속도
+	POINT_CLIENT_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_WEAPON_MIN,		// 29 무기 최소 데미지
+	POINT_WEAPON_MAX,		// 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_MONSTER,     // 53  Ϳ 
-	POINT_ATTBONUS_WARRIOR,     // 54 翡 
-	POINT_ATTBONUS_ASSASSIN,	// 55 ڰ 
-	POINT_ATTBONUS_SURA,		// 56 󿡰 
-	POINT_ATTBONUS_SHAMAN,		// 57 翡 
-	POINT_ATTBONUS_TREE,     	// 58   20050729.myevan UNUSED5 
+	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_MONSTER,     // 53 모든 몬스터에게 강함
+	POINT_ATTBONUS_WARRIOR,     // 54 무사에게 강함
+	POINT_ATTBONUS_ASSASSIN,	// 55 자객에게 강함
+	POINT_ATTBONUS_SURA,		// 56 수라에게 강함
+	POINT_ATTBONUS_SHAMAN,		// 57 무당에게 강함
+	POINT_ATTBONUS_TREE,     	// 58 나무에게 강함 20050729.myevan UNUSED5 
 
-	POINT_RESIST_WARRIOR,		// 59 翡 
-	POINT_RESIST_ASSASSIN,		// 60 ڰ 
-	POINT_RESIST_SURA,			// 61 󿡰 
-	POINT_RESIST_SHAMAN,		// 62 翡 
+	POINT_RESIST_WARRIOR,		// 59 무사에게 저항
+	POINT_RESIST_ASSASSIN,		// 60 자객에게 저항
+	POINT_RESIST_SURA,			// 61 수라에게 저항
+	POINT_RESIST_SHAMAN,		// 62 무당에게 저항
 
-	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_RECOVERY,		// 87
 
@@ -225,7 +225,7 @@ enum EPointTypes
 
 	POINT_HIT_HP_RECOVERY,		// 100
 	POINT_HIT_SP_RECOVERY, 		// 101
-	POINT_MANASHIELD,			// 102 żȣ ų   ȿ 
+	POINT_MANASHIELD,			// 102 흑신수호 스킬에 의한 마나쉴드 효과 정도
 
 	POINT_PARTY_BUFFER_BONUS,		// 103
 	POINT_PARTY_SKILL_MASTER_BONUS,	// 104
@@ -234,56 +234,56 @@ enum EPointTypes
 	POINT_SP_RECOVER_CONTINUE,		// 106
 
 	POINT_STEAL_GOLD,			// 107 
-	POINT_POLYMORPH,			// 108   ȣ
-	POINT_MOUNT,			// 109 Ÿִ  ȣ
+	POINT_POLYMORPH,			// 108 변신한 몬스터 번호
+	POINT_MOUNT,			// 109 타고있는 몬스터 번호
 
 	POINT_PARTY_HASTE_BONUS,		// 110
 	POINT_PARTY_DEFENDER_BONUS,		// 111
-	POINT_STAT_RESET_COUNT,		// 112  ܾ     Ʈ (1 1Ʈ °)
+	POINT_STAT_RESET_COUNT,		// 112 피의 단약 사용을 통한 스텟 리셋 포인트 (1당 1포인트 리셋가능)
 
 	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_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_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)%
 
 	// DEFEND_BONUS_ATTRIBUTES
-	POINT_SKILL_DEFEND_BONUS,		// 123 ų  
-	POINT_NORMAL_HIT_DEFEND_BONUS,	// 124 Ÿ  
+	POINT_SKILL_DEFEND_BONUS,		// 123 스킬 방어 데미지
+	POINT_NORMAL_HIT_DEFEND_BONUS,	// 124 평타 방어 데미지
 	// END_OF_DEFEND_BONUS_ATTRIBUTES
 
 	// PC_BANG_ITEM_ADD 
-	POINT_PC_BANG_EXP_BONUS,		// 125 PC  ġ ʽ
-	POINT_PC_BANG_DROP_BONUS,		// 126 PC  ӷ ʽ
+	POINT_PC_BANG_EXP_BONUS,		// 125 PC방 전용 경험치 보너스
+	POINT_PC_BANG_DROP_BONUS,		// 126 PC방 전용 드롭률 보너스
 	// END_PC_BANG_ITEM_ADD
-	POINT_RAMADAN_CANDY_BONUS_EXP,			// 󸶴  ġ 
+	POINT_RAMADAN_CANDY_BONUS_EXP,			// 라마단 사탕 경험치 증가용
 
-	POINT_ENERGY = 128,					// 128 
+	POINT_ENERGY = 128,					// 128 기력
 
-	//  ui .
-	//   ʱ⸸, Ŭ̾Ʈ   ð POINT ϱ  ̷ Ѵ.
-	//  β
-	POINT_ENERGY_END_TIME = 129,					// 129   ð
+	// 기력 ui 용.
+	// 서버에서 쓰지 않기만, 클라이언트에서 기력의 끝 시간을 POINT로 관리하기 때문에 이렇게 한다.
+	// 아 부끄럽다
+	POINT_ENERGY_END_TIME = 129,					// 129 기력 종료 시간
 
 	POINT_COSTUME_ATTR_BONUS = 130,
 	POINT_MAGIC_ATT_BONUS_PER = 131,
 	POINT_MELEE_MAGIC_ATT_BONUS_PER = 132,
 
-	// ߰ Ӽ 
-	POINT_RESIST_ICE = 133,          //   ñ    : ݿ   
-	POINT_RESIST_EARTH = 134,        //       : ݿ   
-	POINT_RESIST_DARK = 135,         //       : ݿ   
+	// 추가 속성 저항
+	POINT_RESIST_ICE = 133,          //   냉기 저항   : 얼음공격에 대한 대미지 감소
+	POINT_RESIST_EARTH = 134,        //   대지 저항   : 얼음공격에 대한 대미지 감소
+	POINT_RESIST_DARK = 135,         //   어둠 저항   : 얼음공격에 대한 대미지 감소
 
-	POINT_RESIST_CRITICAL = 136,		// ũƼ 	:  ũƼ Ȯ 
-	POINT_RESIST_PENETRATE = 137,		// Ÿ 	:  Ÿ Ȯ 
+	POINT_RESIST_CRITICAL = 136,		// 크리티컬 저항	: 상대의 크리티컬 확률을 감소
+	POINT_RESIST_PENETRATE = 137,		// 관통타격 저항	: 상대의 관통타격 확률을 감소
 
 	//POINT_MAX_NUM = 129	common/length.h
 };
@@ -352,7 +352,7 @@ struct DynamicCharacterPtr {
 	uint32_t id;
 };
 
-/* ϴ  */
+/* 저장하는 데이터 */
 typedef struct character_point
 {
 	long			points[POINT_MAX_NUM];
@@ -375,7 +375,7 @@ typedef struct character_point
 	BYTE			skill_group;
 } CHARACTER_POINT;
 
-/*  ʴ ij  */
+/* 저장되지 않는 캐릭터 데이터 */
 typedef struct character_point_instant
 {
 	long			points[POINT_MAX_NUM];
@@ -397,7 +397,7 @@ typedef struct character_point_instant
 	LPITEM			pItems[INVENTORY_AND_EQUIP_SLOT_MAX];
 	BYTE			bItemGrid[INVENTORY_AND_EQUIP_SLOT_MAX];
 
-	// ȥ κ丮.
+	// 용혼석 인벤토리.
 	LPITEM			pDSItems[DRAGON_SOUL_INVENTORY_MAX_NUM];
 	WORD			wDSItemGrid[DRAGON_SOUL_INVENTORY_MAX_NUM];
 
@@ -409,7 +409,7 @@ typedef struct character_point_instant
 
 	BYTE			gm_level;
 
-	BYTE			bBasePart;	//  ȣ
+	BYTE			bBasePart;	// 평상복 번호
 
 	int				iMaxStamina;
 
@@ -507,7 +507,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 {
 	protected:
 		//////////////////////////////////////////////////////////////////////////////////
-		// Entity 
+		// Entity 관련
 		virtual void	EncodeInsertPacket(LPENTITY entity);
 		virtual void	EncodeRemovePacket(LPENTITY entity);
 		//////////////////////////////////////////////////////////////////////////////////
@@ -517,7 +517,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void				UpdatePacket();
 
 		//////////////////////////////////////////////////////////////////////////////////
-		// FSM (Finite State Machine) 
+		// FSM (Finite State Machine) 관련
 	protected:
 		CStateTemplate	m_stateMove;
 		CStateTemplate	m_stateBattle;
@@ -587,13 +587,13 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		DWORD			GetPlayerID() const	{ return m_dwPlayerID; }
 
 		void			SetPlayerProto(const TPlayerTable * table);
-		void			CreatePlayerProto(TPlayerTable & tab);	//   
+		void			CreatePlayerProto(TPlayerTable & tab);	// 저장 시 사용
 
 		void			SetProto(const CMob * c_pkMob);
 		WORD			GetRaceNum() const;
 
 		void			Save();		// DelayedSave
-		void			SaveReal();	//  
+		void			SaveReal();	// 실제 저장
 		void			FlushDelayedSaveItem();
 
 		const char *	GetName() const;
@@ -634,7 +634,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		DWORD			GetExp() const		{ return m_points.exp;	}
 		void			SetExp(DWORD exp)	{ m_points.exp = exp;	}
 		DWORD			GetNextExp() const;
-		LPCHARACTER		DistributeExp();	//     Ѵ.
+		LPCHARACTER		DistributeExp();	// 제일 많이 때린 사람을 리턴한다.
 		void			DistributeHP(LPCHARACTER pkKiller);
 		void			DistributeSP(LPCHARACTER pkKiller, int iMethod=0);
 
@@ -717,14 +717,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		DWORD			GetPolymorphItemVnum() const;
 		DWORD			GetMonsterDrainSPPoint() const;
 
-		void			MainCharacterPacket();	//  ijͶ ش.
+		void			MainCharacterPacket();	// 내가 메인캐릭터라고 보내준다.
 
 		void			ComputePoints();
 		void			ComputeBattlePoints();
 		void			PointChange(BYTE type, int amount, bool bAmount = false, bool bBroadcast = false);
 		void			PointsPacket();
 		void			ApplyPoint(BYTE bApplyType, int iVal);
-		void			CheckMaximumPoints();	// HP, SP    ִ밪   ˻ϰ ٸ .
+		void			CheckMaximumPoints();	// HP, SP 등의 현재 값이 최대값 보다 높은지 검사하고 높다면 낮춘다.
 
 		bool			Show(long lMapIndex, long x, long y, long z = LONG_MAX, bool bShowSpawnMotion = false);
 
@@ -749,7 +749,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool			IsBlockMode(BYTE bFlag) const	{ return (m_pointsInstant.bBlockMode & bFlag)?true:false; }
 
 		bool			IsPolymorphed() const		{ return m_dwPolymorphRace>0; }
-		bool			IsPolyMaintainStat() const	{ return m_bPolyMaintainStat; } //   ϴ .
+		bool			IsPolyMaintainStat() const	{ return m_bPolyMaintainStat; } // 이전 스텟을 유지하는 폴리모프.
 		void			SetPolymorph(DWORD dwRaceNum, bool bMaintainStat = false);
 		DWORD			GetPolymorphVnum() const	{ return m_dwPolymorphRace; }
 		int				GetPolymorphPower() const;
@@ -806,15 +806,15 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void			SetNowWalking(bool bWalkFlag);	
 		void			ResetWalking()			{ SetNowWalking(m_bWalking); }
 
-		bool			Goto(long x, long y);	// ٷ ̵ Ű ʰ ǥ ġ BLENDING Ų.
+		bool			Goto(long x, long y);	// 바로 이동 시키지 않고 목표 위치로 BLENDING 시킨다.
 		void			Stop();
 
-		bool			CanMove() const;		// ̵  ִ°?
+		bool			CanMove() const;		// 이동할 수 있는가?
 
 		void			SyncPacket();
-		bool			Sync(long x, long y);	//   ޼ҵ ̵ Ѵ (  ǿ  ̵ Ұ )
-		bool			Move(long x, long y);	//  ˻ϰ Sync ޼ҵ带  ̵ Ѵ.
-		void			OnMove(bool bIsAttack = false);	// ϶ Ҹ. Move() ޼ҵ ̿ܿ Ҹ  ִ.
+		bool			Sync(long x, long y);	// 실제 이 메소드로 이동 한다 (각 종 조건에 의한 이동 불가가 없음)
+		bool			Move(long x, long y);	// 조건을 검사하고 Sync 메소드를 통해 이동 한다.
+		void			OnMove(bool bIsAttack = false);	// 움직일때 불린다. Move() 메소드 이외에서도 불릴 수 있다.
 		DWORD			GetMotionMode() const;
 		float			GetMoveMotionSpeed() const;
 		float			GetMoveSpeed() const;
@@ -825,7 +825,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		DWORD			GetLastMoveTime() const		{ return m_dwLastMoveTime; }
 		DWORD			GetLastAttackTime() const	{ return m_dwLastAttackTime; }
 
-		void			SetLastAttacked(DWORD time);	//  ݹ ð  ġ 
+		void			SetLastAttacked(DWORD time);	// 마지막으로 공격받은 시간 및 위치를 저장함
 
 		bool			SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList = true);
 		bool			IsSyncOwner(LPCHARACTER ch) const;
@@ -852,7 +852,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 		float			m_fSyncTime;
 		LPCHARACTER		m_pkChrSyncOwner;
-		CHARACTER_LIST	m_kLst_pkChrSyncOwned;	//  SyncOwner ڵ
+		CHARACTER_LIST	m_kLst_pkChrSyncOwned;	// 내가 SyncOwner인 자들
 
 		PIXEL_POSITION	m_posDest;
 		PIXEL_POSITION	m_posStart;
@@ -875,7 +875,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool			m_bStaminaConsume;
 		// End
 
-		// Quickslot 
+		// Quickslot 관련
 	public:
 		void			SyncQuickslot(BYTE bType, BYTE bOldPos, BYTE bNewPos);
 		bool			GetQuickslot(BYTE pos, TQuickslot ** ppSlot);
@@ -904,7 +904,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void			LoadAffect(DWORD dwCount, TPacketAffectElement * pElements);
 		void			SaveAffect();
 
-		// Affect loading  ΰ?
+		// Affect loading이 끝난 상태인가?
 		bool			IsLoadedAffect() const	{ return m_bIsLoadedAffect; }		
 
 		bool			IsGoodAffect(BYTE bAffectType) const;
@@ -930,25 +930,25 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void			DenyToParty(LPCHARACTER member);
 		void			AcceptToParty(LPCHARACTER member);
 
-		/// ڽ Ƽ ٸ character  ʴѴ.
+		/// 자신의 파티에 다른 character 를 초대한다.
 		/**
-		 * @param	pchInvitee ʴ  character. Ƽ   ̾ Ѵ.
+		 * @param	pchInvitee 초대할 대상 character. 파티에 참여 가능한 상태이어야 한다.
 		 *
-		 *  character  ° Ƽ ʴϰ ʴ  ִ ° ƴ϶ ʴϴ ijͿ شϴ ä ޼ Ѵ.
+		 * 양측 character 의 상태가 파티에 초대하고 초대받을 수 있는 상태가 아니라면 초대하는 캐릭터에게 해당하는 채팅 메세지를 전송한다.
 		 */
 		void			PartyInvite(LPCHARACTER pchInvitee);
 
-		/// ʴߴ character   óѴ.
+		/// 초대했던 character 의 수락을 처리한다.
 		/**
-		 * @param	pchInvitee Ƽ  character. Ƽ  ̾ Ѵ.
+		 * @param	pchInvitee 파티에 참여할 character. 파티에 참여가능한 상태이어야 한다.
 		 *
-		 * pchInvitee  Ƽ   ִ Ȳ ƴ϶ شϴ ä ޼ Ѵ.
+		 * pchInvitee 가 파티에 가입할 수 있는 상황이 아니라면 해당하는 채팅 메세지를 전송한다.
 		 */
 		void			PartyInviteAccept(LPCHARACTER pchInvitee);
 
-		/// ʴߴ character  ʴ źθ óѴ.
+		/// 초대했던 character 의 초대 거부를 처리한다.
 		/**
-		 * @param [in]	dwPID ʴ ߴ character  PID
+		 * @param [in]	dwPID 초대 했던 character 의 PID
 		 */
 		void			PartyInviteDeny(DWORD dwPID);
 
@@ -961,45 +961,45 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 	protected:
 
-		/// Ƽ Ѵ.
+		/// 파티에 가입한다.
 		/**
-		 * @param	pkLeader  Ƽ 
+		 * @param	pkLeader 가입할 파티의 리더
 		 */
 		void			PartyJoin(LPCHARACTER pkLeader);
 
 		/**
-		 * Ƽ      ڵ.
-		 * Error code  ð ΰ  氡(mutable) type  (static) type  .
-		 * Error code   PERR_SEPARATOR   氡 type ̰   type ̴.
+		 * 파티 가입을 할 수 없을 경우의 에러코드.
+		 * Error code 는 시간에 의존적인가에 따라 변경가능한(mutable) type 과 정적(static) type 으로 나뉜다.
+		 * Error code 의 값이 PERR_SEPARATOR 보다 낮으면 변경가능한 type 이고 높으면 정적 type 이다.
 		 */
 		enum PartyJoinErrCode {
-			PERR_NONE		= 0,	///< ó
-			PERR_SERVER,			///<  Ƽ ó Ұ
-			PERR_DUNGEON,			///< ijͰ  
-			PERR_OBSERVER,			///< 
-			PERR_LVBOUNDARY,		///<  ijͿ ̰ 
-			PERR_LOWLEVEL,			///< Ƽ ְ 30 
-			PERR_HILEVEL,			///< Ƽ  30 
-			PERR_ALREADYJOIN,		///< Ƽ  ijͰ ̹ Ƽ
-			PERR_PARTYISFULL,		///< Ƽο  ʰ
+			PERR_NONE		= 0,	///< 처리성공
+			PERR_SERVER,			///< 서버문제로 파티관련 처리 불가
+			PERR_DUNGEON,			///< 캐릭터가 던전에 있음
+			PERR_OBSERVER,			///< 관전모드임
+			PERR_LVBOUNDARY,		///< 상대 캐릭터와 레벨차이가 남
+			PERR_LOWLEVEL,			///< 상대파티의 최고레벨보다 30레벨 낮음
+			PERR_HILEVEL,			///< 상대파티의 최저레벨보다 30레벨 높음
+			PERR_ALREADYJOIN,		///< 파티가입 대상 캐릭터가 이미 파티중
+			PERR_PARTYISFULL,		///< 파티인원 제한 초과
 			PERR_SEPARATOR,			///< Error type separator.
-			PERR_DIFFEMPIRE,		///<  ijͿ ٸ 
-			PERR_MAX				///< Error code ְġ.  տ Error code  ߰Ѵ.
+			PERR_DIFFEMPIRE,		///< 상대 캐릭터와 다른 제국임
+			PERR_MAX				///< Error code 최고치. 이 앞에 Error code 를 추가한다.
 		};
 
-		/// Ƽ ̳ Ἲ   ˻Ѵ.
+		/// 파티 가입이나 결성 가능한 조건을 검사한다.
 		/**
-		 * @param 	pchLeader Ƽ leader ̰ų ʴ character
-		 * @param	pchGuest ʴ޴ character
-		 * @return	 PartyJoinErrCode  ȯ  ִ.
+		 * @param 	pchLeader 파티의 leader 이거나 초대한 character
+		 * @param	pchGuest 초대받는 character
+		 * @return	모든 PartyJoinErrCode 가 반환될 수 있다.
 		 */
 		static PartyJoinErrCode	IsPartyJoinableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
 
-		/// Ƽ ̳ Ἲ    ˻Ѵ.
+		/// 파티 가입이나 결성 가능한 동적인 조건을 검사한다.
 		/**
-		 * @param 	pchLeader Ƽ leader ̰ų ʴ character
-		 * @param	pchGuest ʴ޴ character
-		 * @return	mutable type  code  ȯѴ.
+		 * @param 	pchLeader 파티의 leader 이거나 초대한 character
+		 * @param	pchGuest 초대받는 character
+		 * @return	mutable type 의 code 만 반환한다.
 		 */
 		static PartyJoinErrCode	IsPartyJoinableMutableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
 
@@ -1008,11 +1008,11 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		LPEVENT			m_pkPartyRequestEvent;
 
 		/**
-		 * Ƽû Event map.
-		 * key: ʴ ij PID
-		 * value: event pointer
+		 * 파티초청 Event map.
+		 * key: 초대받은 캐릭터의 PID
+		 * value: event의 pointer
 		 *
-		 * ʴ ij͵鿡  event map.
+		 * 초대한 캐릭터들에 대한 event map.
 		 */
 		typedef std::map< DWORD, LPEVENT >	EventMap;
 		EventMap		m_PartyInviteEventMap;
@@ -1046,7 +1046,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		////////////////////////////////////////////////////////////////////////////////////////
 		// Item related
 	public:
-		bool			CanHandleItem(bool bSkipRefineCheck = false, bool bSkipObserver = false); //      ִ°?
+		bool			CanHandleItem(bool bSkipRefineCheck = false, bool bSkipObserver = false); // 아이템 관련 행위를 할 수 있는가?
 
 		bool			IsItemLoaded() const	{ return m_bItemLoaded; }
 		void			SetItemLoaded()	{ m_bItemLoaded = true; }
@@ -1061,14 +1061,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		LPITEM			GetWear(BYTE bCell) const;
 
 		// MYSHOP_PRICE_LIST
-		void			UseSilkBotary(void); 		///    
+		void			UseSilkBotary(void); 		/// 비단 보따리 아이템의 사용
 
-		/// DB ij÷  ޾ƿ  Ʈ  ϰ    óѴ.
+		/// DB 캐시로 부터 받아온 가격정보 리스트를 유저에게 전송하고 보따리 아이템 사용을 처리한다.
 		/**
-		 * @param [in] p	 Ʈ Ŷ
+		 * @param [in] p	가격정보 리스트 패킷
 		 *
-		 *   ó      UseSilkBotary  DB ij÷  Ʈ ûϰ
-		 *    Լ  ܺ  óѴ.
+		 * 접속한 후 처음 비단 보따리 아이템 사용 시 UseSilkBotary 에서 DB 캐시로 가격정보 리스트를 요청하고
+		 * 응답받은 시점에 이 함수에서 실제 비단보따리 사용을 처리한다.
 		 */
 		void			UseSilkBotaryReal(const TPacketMyshopPricelistHeader* p);
 		// END_OF_MYSHOP_PRICE_LIST
@@ -1114,10 +1114,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool			EquipItem(LPITEM item, int iCandidateCell = -1);
 		bool			UnequipItem(LPITEM item);
 
-		//  item   ִ  Ȯϰ, Ұ ϴٸ ijͿ  ˷ִ Լ
+		// 현재 item을 착용할 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
 		bool			CanEquipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
 
-		//  item   ִ  Ȯϰ, Ұ ϴٸ ijͿ  ˷ִ Լ
+		// 착용중인 item을 벗을 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
 		bool			CanUnequipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
 
 		bool			SwapItem(BYTE bCell, BYTE bDestCell);
@@ -1149,14 +1149,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 	protected:
 
-		///  ۿ   Ѵ.
+		/// 한 아이템에 대한 가격정보를 전송한다.
 		/**
-		 * @param [in]	dwItemVnum  vnum
-		 * @param [in]	dwItemPrice  
+		 * @param [in]	dwItemVnum 아이템 vnum
+		 * @param [in]	dwItemPrice 아이템 가격
 		 */
 		void			SendMyShopPriceListCmd(DWORD dwItemVnum, DWORD dwItemPrice);
 
-		bool			m_bNoOpenedShop;	///< ̹   λ   ִ (  ٸ true)
+		bool			m_bNoOpenedShop;	///< 이번 접속 후 개인상점을 연 적이 있는지의 여부(열었던 적이 없다면 true)
 
 		bool			m_bItemLoaded;
 		int				m_iRefineAdditionalCell;
@@ -1170,7 +1170,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void			SetGold(INT gold)	{ m_points.gold = gold;	}
 		bool			DropGold(INT gold);
 		INT				GetAllowedGold() const;
-		void			GiveGold(INT iAmount);	// Ƽ  Ƽ й, α  ó
+		void			GiveGold(INT iAmount);	// 파티가 있으면 파티 분배, 로그 등의 처리
 		// End of Money
 
 		////////////////////////////////////////////////////////////////////////////////////////
@@ -1236,9 +1236,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool				CanFight() const;
 
 		bool				CanBeginFight() const;
-		void				BeginFight(LPCHARACTER pkVictim); // pkVictimr ο Ѵ. (,   ֳ üũϷ CanBeginFight )
+		void				BeginFight(LPCHARACTER pkVictim); // pkVictimr과 싸우기 시작한다. (강제적임, 시작할 수 있나 체크하려면 CanBeginFight을 사용)
 
-		bool				CounterAttack(LPCHARACTER pkChr); // ݰϱ (͸ )
+		bool				CounterAttack(LPCHARACTER pkChr); // 반격하기 (몬스터만 사용)
 
 		bool				IsStun() const;
 		void				Stun();
@@ -1268,7 +1268,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void				UpdateAlignment(int iAmount);
 		int					GetAlignment() const;
 
-		//ġ  
+		//선악치 얻기 
 		int					GetRealAlignment() const;
 		void				ShowAlignment(bool bShow);
 
@@ -1317,7 +1317,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 		DWORD				m_dwFlyTargetID;
 		std::vector	m_vec_dwFlyTargets;
-		TDamageMap			m_map_kDamage;	//  ijͰ  󸶸ŭ  ־°?
+		TDamageMap			m_map_kDamage;	// 어떤 캐릭터가 나에게 얼마만큼의 데미지를 주었는가?
 //		AttackLog			m_kAttackLog;
 		DWORD				m_dwKillerPID;
 
@@ -1340,8 +1340,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		BYTE				GetDropMetinStonePct() const { return m_bDropMetinStonePct; }
 
 	protected:
-		LPCHARACTER			m_pkChrStone;		//   
-		CHARACTER_SET		m_set_pkChrSpawnedBy;	//   
+		LPCHARACTER			m_pkChrStone;		// 나를 스폰한 돌
+		CHARACTER_SET		m_set_pkChrSpawnedBy;	// 내가 스폰한 놈들
 		DWORD				m_dwDropMetinStone;
 		BYTE				m_bDropMetinStonePct;
 		// End of Stone
@@ -1399,7 +1399,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 	private:
 		bool				m_bDisableCooltime;
-		DWORD				m_dwLastSkillTime;	///<  skill   ð(millisecond).
+		DWORD				m_dwLastSkillTime;	///< 마지막으로 skill 을 쓴 시간(millisecond).
 		// End of Skill
 
 		// MOB_SKILL
@@ -1456,10 +1456,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		// AI related
 	public:
 		void			AssignTriggers(const TMobTable * table);
-		LPCHARACTER		GetVictim() const;	//   
+		LPCHARACTER		GetVictim() const;	// 공격할 대상 리턴
 		void			SetVictim(LPCHARACTER pkVictim);
 		LPCHARACTER		GetNearestVictim(LPCHARACTER pkChr);
-		LPCHARACTER		GetProtege() const;	// ȣؾ   
+		LPCHARACTER		GetProtege() const;	// 보호해야 할 대상 리턴
 
 		bool			Follow(LPCHARACTER pkChr, float fMinimumDistance = 150.0f);
 		bool			Return();
@@ -1483,8 +1483,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		////////////////////////////////////////////////////////////////////////////////////////
 		// Target
 	protected:
-		LPCHARACTER				m_pkChrTarget;		//  Ÿ
-		CHARACTER_SET	m_set_pkChrTargetedBy;	//  Ÿ  ִ 
+		LPCHARACTER				m_pkChrTarget;		// 내 타겟
+		CHARACTER_SET	m_set_pkChrTargetedBy;	// 나를 타겟으로 가지고 있는 사람들
 
 	public:
 		void				SetTarget(LPCHARACTER pkChrTarget);
@@ -1505,19 +1505,19 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void				ChangeSafeboxSize(BYTE bSize);
 		void				CloseSafebox();
 
-		/// â  û
+		/// 창고 열기 요청
 		/**
-		 * @param [in]	pszPassword 1 ̻ 6  â йȣ
+		 * @param [in]	pszPassword 1자 이상 6자 이하의 창고 비밀번호
 		 *
-		 * DB  â⸦ ûѴ.
-		 * â ߺ  ϸ, ֱ â  ð  10 ̳   Ѵ.
+		 * DB 에 창고열기를 요청한다.
+		 * 창고는 중복으로 열지 못하며, 최근 창고를 닫은 시간으로 부터 10초 이내에는 열 지 못한다.
 		 */
 		void				ReqSafeboxLoad(const char* pszPassword);
 
-		/// â  û 
+		/// 창고 열기 요청의 취소
 		/**
-		 * ReqSafeboxLoad  ȣϰ CloseSafebox  ʾ   Լ ȣϸ â   ִ.
-		 * â û DB   ޾   Լ ؼ û   ְ ش.
+		 * ReqSafeboxLoad 를 호출하고 CloseSafebox 하지 않았을 때 이 함수를 호출하면 창고를 열 수 있다.
+		 * 창고열기의 요청이 DB 서버에서 실패응답을 받았을 경우 이 함수를 사용해서 요청을 할 수 있게 해준다.
 		 */
 		void				CancelSafeboxLoad( void ) { m_bOpeningSafebox = false; }
 
@@ -1535,7 +1535,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		CSafebox *			m_pkSafebox;
 		int					m_iSafeboxSize;
 		int					m_iSafeboxLoadTime;
-		bool				m_bOpeningSafebox;	///< â  û ̰ų ִ° , true   ṵ̂ų .
+		bool				m_bOpeningSafebox;	///< 창고가 열기 요청 중이거나 열려있는가 여부, true 일 경우 열기요청이거나 열려있음.
 
 		CSafebox *			m_pkMall;
 		int					m_iMallLoadTime;
@@ -1569,7 +1569,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 		void				HorseSummon(bool bSummon, bool bFromFar = false, DWORD dwVnum = 0, const char* name = 0);
 
-		LPCHARACTER			GetHorse() const			{ return m_chHorse; }	 //  ȯ 
+		LPCHARACTER			GetHorse() const			{ return m_chHorse; }	 // 현재 소환중인 말
 		LPCHARACTER			GetRider() const; // rider on horse
 		void				SetRider(LPCHARACTER ch);
 
@@ -1631,7 +1631,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		////////////////////////////////////////////////////////////////////////////////////////
 		// Resists & Proofs
 	public:
-		bool				CannotMoveByAffect() const;	// Ư ȿ     ΰ?
+		bool				CannotMoveByAffect() const;	// 특정 효과에 의해 움직일 수 없는 상태인가?
 		bool				IsImmune(DWORD dwImmuneFlag);
 		void				SetImmuneFlag(DWORD dw) { m_pointsInstant.dwImmuneFlag = dw; }
 
@@ -1671,7 +1671,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void				UpdateStateMachine(DWORD dwPulse);
 		void				SetNextStatePulse(int iPulseNext);
 
-		// ij νϽ Ʈ Լ.  ̻ ӱ CFSM::Update Լ ȣϰų UpdateStateMachine Լ ߴµ,  Ʈ Լ ߰.
+		// 캐릭터 인스턴스 업데이트 함수. 기존엔 이상한 상속구조로 CFSM::Update 함수를 호출하거나 UpdateStateMachine 함수를 사용했는데, 별개의 업데이트 함수 추가함.
 		void				UpdateCharacter(DWORD dwPulse);
 
 	protected:
@@ -1741,9 +1741,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		int				m_aiPremiumTimes[PREMIUM_MAX_NUM];
 
 		// CHANGE_ITEM_ATTRIBUTES
-		static const DWORD		msc_dwDefaultChangeItemAttrCycle;	///< Ʈ  Ӽ  ֱ
-		static const char		msc_szLastChangeItemAttrFlag[];		///< ֱ  Ӽ  ð Quest Flag ̸
-		static const char		msc_szChangeItemAttrCycleFlag[];		///<  Ӽ  ֱ Quest Flag ̸
+		static const DWORD		msc_dwDefaultChangeItemAttrCycle;	///< 디폴트 아이템 속성변경 가능 주기
+		static const char		msc_szLastChangeItemAttrFlag[];		///< 최근 아이템 속성을 변경한 시간의 Quest Flag 이름
+		static const char		msc_szChangeItemAttrCycleFlag[];		///< 아이템 속성병경 가능 주기의 Quest Flag 이름
 		// END_OF_CHANGE_ITEM_ATTRIBUTES
 
 		// PC_BANG_ITEM_ADD
@@ -1824,7 +1824,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		int		GetMyShopTime() const	{ return m_iMyShopTime; }
 		void	SetMyShopTime() { m_iMyShopTime = thecore_pulse(); }
 
-		// Hack   üũ.
+		// Hack 방지를 위한 체크.
 		bool	IsHack(bool bSendMsg = true, bool bCheckShopOwner = true, int limittime = g_nPortalLimitTime);
 
 		// MONARCH
@@ -1874,9 +1874,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool IsSiegeNPC() const;
 
 	private:
-		//߱ 
-		//18 ̸ 
-		//3ð : 50 % 5 ð 0%
+		//중국 전용
+		//18세 미만 전용
+		//3시간 : 50 % 5 시간 0%
 		e_overtime m_eOverTime;
 
 	public:
@@ -1964,7 +1964,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 
 		typedef std::map  TMapBuffOnAttrs;
 		TMapBuffOnAttrs m_map_buff_on_attrs;
-		//  : Ȱ ׽Ʈ Ͽ.
+		// 무적 : 원활한 테스트를 위하여.
 	public:
 		void SetArmada() { cannot_dead = true; }
 		void ResetArmada() { cannot_dead = false; }
@@ -1979,7 +1979,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool IsPet() { return m_bIsPet; }
 #endif
 
-	//  .
+	//최종 데미지 보정.
 	private:
 		float m_fAttMul;
 		float m_fDamMul;
@@ -1992,7 +1992,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 	private:
 		bool IsValidItemPosition(TItemPos Pos) const;
 
-		//   Ŷ ӽ 
+		//독일 선물 기능 패킷 임시 저장
 	private:
 		unsigned int itemAward_vnum;
 		char		 itemAward_cmd[20];
@@ -2006,10 +2006,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		//void		 SetItemAward_flag(bool flag) { itemAward_flag = flag; }
 
 	public:
-		//ȥ
+		//용혼석
 		
-		// ij affect, quest load DZ  DragonSoul_Initialize ȣϸ ȵȴ.
-		// affect   εǾ LoadAffect ȣ.
+		// 캐릭터의 affect, quest가 load 되기 전에 DragonSoul_Initialize를 호출하면 안된다.
+		// affect가 가장 마지막에 로드되어 LoadAffect에서 호출함.
 		void	DragonSoul_Initialize();
 
 		bool	DragonSoul_IsQualified() const;
@@ -2020,17 +2020,17 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool	DragonSoul_ActivateDeck(int deck_idx);
 
 		void	DragonSoul_DeactivateAll();
-		// ݵ ClearItem  ҷ Ѵ.
-		// ֳϸ....
-		// ȥ ϳ ϳ deactivate   active ȥ ִ Ȯϰ,
-		// active ȥ ϳ ٸ, ij ȥ affect, Ȱ ¸ Ѵ.
+		// 반드시 ClearItem 전에 불러야 한다.
+		// 왜냐하면....
+		// 용혼석 하나 하나를 deactivate할 때마다 덱에 active인 용혼석이 있는지 확인하고,
+		// active인 용혼석이 하나도 없다면, 캐릭터의 용혼석 affect와, 활성 상태를 제거한다.
 		// 
-		//  ClearItem , ijͰ ϰ ִ   unequipϴ ٶ,
-		// ȥ Affect ŵǰ, ᱹ α , ȥ Ȱȭ ʴ´.
-		// (Unequip  α׾ƿ , ƴ   .)
-		// ȥ deactivateŰ ij ȥ  Ȱ ´ ǵ帮 ʴ´.
+		// 하지만 ClearItem 시, 캐릭터가 착용하고 있는 모든 아이템을 unequip하는 바람에,
+		// 용혼석 Affect가 제거되고, 결국 로그인 시, 용혼석이 활성화되지 않는다.
+		// (Unequip할 때에는 로그아웃 상태인지, 아닌지 알 수 없다.)
+		// 용혼석만 deactivate시키고 캐릭터의 용혼석 덱 활성 상태는 건드리지 않는다.
 		void	DragonSoul_CleanUp();
-		// ȥ ȭâ
+		// 용혼석 강화창
 	public:
 		bool		DragonSoul_RefineWindow_Open(LPENTITY pEntity);
 		bool		DragonSoul_RefineWindow_Close();
@@ -2038,8 +2038,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool		DragonSoul_RefineWindow_CanRefine();
 
 	private:
-		// SyncPosition ǿϿ Ÿ ̻    ϱ Ͽ,
-		// SyncPosition Ͼ  .
+		// SyncPosition을 악용하여 타유저를 이상한 곳으로 보내는 핵 방어하기 위하여,
+		// SyncPosition이 일어날 때를 기록.
 		timeval		m_tvLastSyncTime;
 		int			m_iSyncHackCount;
 	public:
diff --git a/src/game/char_affect.cpp b/src/game/char_affect.cpp
index 5fd655d..f9c5520 100644
--- a/src/game/char_affect.cpp
+++ b/src/game/char_affect.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "config.h"
@@ -84,13 +84,13 @@ EVENTFUNC(affect_event)
 	if (!ch->UpdateAffect())
 		return 0;
 	else
-		return passes_per_sec; // 1
+		return passes_per_sec; // 1초
 }
 
 bool CHARACTER::UpdateAffect()
 {
-	// affect_event  ó  ƴ, 1¥ ̺Ʈ óϴ 
-	// ̰ ̶ ⼭  ó Ѵ.
+	// affect_event 에서 처리할 일은 아니지만, 1초짜리 이벤트에서 처리하는 것이
+	// 이것 뿐이라 여기서 물약 처리를 한다.
 	if (GetPoint(POINT_HP_RECOVERY) > 0)
 	{
 		if (GetMaxHP() <= GetHP())
@@ -146,7 +146,7 @@ bool CHARACTER::UpdateAffect()
 	AutoRecoveryItemProcess( AFFECT_AUTO_HP_RECOVERY );
 	AutoRecoveryItemProcess( AFFECT_AUTO_SP_RECOVERY );
 
-	// ׹̳ ȸ
+	// 스테미나 회복
 	if (GetMaxStamina() > GetStamina())
 	{
 		int iSec = (get_dword_time() - GetStopTime()) / 3000;
@@ -155,7 +155,7 @@ bool CHARACTER::UpdateAffect()
 	}
 
 
-	// ProcessAffect affect  true Ѵ.
+	// ProcessAffect는 affect가 없으면 true를 리턴한다.
 	if (ProcessAffect())
 		if (GetPoint(POINT_HP_RECOVERY) == 0 && GetPoint(POINT_SP_RECOVERY) == 0 && GetStamina() == GetMaxStamina())
 		{
@@ -226,7 +226,7 @@ int CHARACTER::ProcessAffect()
 	CAffect	*pkAff	= NULL;
 
 	//
-	// ̾ ó
+	// 프리미엄 처리
 	//
 	for (int i = 0; i <= PREMIUM_MAX_NUM; ++i)
 	{
@@ -300,8 +300,8 @@ int CHARACTER::ProcessAffect()
 		}
 
 		// AFFECT_DURATION_BUG_FIX
-		//  ȿ ۵ ð δ.
-		// ð ſ ũ     ̶ .
+		// 무한 효과 아이템도 시간을 줄인다.
+		// 시간을 매우 크게 잡기 때문에 상관 없을 것이라 생각됨.
 		if ( --pkAff->lDuration <= 0 )
 		{
 			bEnd = true;
@@ -472,7 +472,7 @@ void CHARACTER::LoadAffect(DWORD dwCount, TPacketAffectElement * pElements)
 
 	for (DWORD i = 0; i < dwCount; ++i, ++pElements)
 	{
-		//  εʴ´.
+		// 무영진은 로드하지않는다.
 		if (pElements->dwType == SKILL_MUYEONG)
 			continue;
 
@@ -529,7 +529,7 @@ void CHARACTER::LoadAffect(DWORD dwCount, TPacketAffectElement * pElements)
 
 	m_bIsLoadedAffect = true;
 
-	// ȥ  ε  ʱȭ
+	// 용혼석 셋팅 로드 및 초기화
 	DragonSoul_Initialize();
 }
 
@@ -538,7 +538,7 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, long lApplyValue, DWORD d
 	// CHAT_BLOCK
 	if (dwType == AFFECT_BLOCK_CHAT && lDuration > 1)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ä  Ǿϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("운영자 제제로 채팅이 금지 되었습니다."));
 	}
 	// END_OF_CHAT_BLOCK
 
@@ -567,10 +567,10 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, long lApplyValue, DWORD d
 		}
 	}
 
-	// ̹ ִ ȿ   ó
+	// 이미 있는 효과를 덮어 쓰는 처리
 	if (pkAff && bOverride)
 	{
-		ComputeAffect(pkAff, false); // ϴ ȿ ϰ
+		ComputeAffect(pkAff, false); // 일단 효과를 삭제하고
 
 		if (GetDesc())
 			SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn);
@@ -578,9 +578,9 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, long lApplyValue, DWORD d
 	else
 	{
 		//
-		//  带 ߰
+		// 새 에펙를 추가
 		//
-		// NOTE:   type ε  Ʈ   ִ.
+		// NOTE: 따라서 같은 type 으로도 여러 에펙트를 붙을 수 있다.
 		// 
 		pkAff = CAffect::Acquire();
 		m_list_pkAffect.push_back(pkAff);
@@ -683,15 +683,15 @@ bool CHARACTER::RemoveAffect(CAffect * pkAff)
 
 	ComputeAffect(pkAff, false);
 
-	//   .
-	//  ״  ų ->а-> (AFFECT_REVIVE_INVISIBLE)  ٷ   쿡 ߻Ѵ.
-	//  а ϴ ,  ų ȿ ϰ а ȿ ǰ Ǿִµ,
-	//    ٷ ϸ RemoveAffect Ҹ ǰ, ComputePointsϸ鼭 а ȿ +  ų ȿ ȴ.
-	// ComputePoints а ¸  ų ȿ   ϸ DZ ϴµ,
-	// ComputePoints ϰ ǰ ־ ū ȭ ִ  .( side effect ߻ ˱ .)
-	//  AFFECT_REVIVE_INVISIBLE RemoveAffect Ǵ 츸 Ѵ.
-	// ð  Ǿ  ȿ Ǯ  װ ߻ Ƿ ׿ Ȱ .
-	//		(ProcessAffect  ð  Ǿ Affect Ǵ , ComputePoints θ ʴ´.)
+	// 백기 버그 수정.
+	// 백기 버그는 버프 스킬 시전->둔갑->백기 사용(AFFECT_REVIVE_INVISIBLE) 후 바로 공격 할 경우에 발생한다.
+	// 원인은 둔갑을 시전하는 시점에, 버프 스킬 효과를 무시하고 둔갑 효과만 적용되게 되어있는데,
+	// 백기 사용 후 바로 공격하면 RemoveAffect가 불리게 되고, ComputePoints하면서 둔갑 효과 + 버프 스킬 효과가 된다.
+	// ComputePoints에서 둔갑 상태면 버프 스킬 효과 안 먹히도록 하면 되긴 하는데,
+	// ComputePoints는 광범위하게 사용되고 있어서 큰 변화를 주는 것이 꺼려진다.(어떤 side effect가 발생할지 알기 힘들다.)
+	// 따라서 AFFECT_REVIVE_INVISIBLE가 RemoveAffect로 삭제되는 경우만 수정한다.
+	// 시간이 다 되어 백기 효과가 풀리는 경우는 버그가 발생하지 않으므로 그와 똑같이 함.
+	//		(ProcessAffect를 보면 시간이 다 되어서 Affect가 삭제되는 경우, ComputePoints를 부르지 않는다.)
 	if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType)
 	{
 		ComputePoints();
@@ -720,7 +720,7 @@ bool CHARACTER::RemoveAffect(DWORD dwType)
 	// CHAT_BLOCK
 	if (dwType == AFFECT_BLOCK_CHAT)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä  ǮȽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채팅 금지가 풀렸습니다."));
 	}
 	// END_OF_CHAT_BLOCK
 
@@ -802,41 +802,41 @@ bool CHARACTER::IsGoodAffect(BYTE bAffectType) const
 void CHARACTER::RemoveBadAffect()
 {
 	sys_log(0, "RemoveBadAffect %s", GetName());
-	// 
+	// 독
 	RemovePoison();
 	RemoveFire();
 
-	//            : Value%  5ʰ Ӹ   ư. ( 1/2 Ȯ Ǯ)               AFF_STUN
+	// 스턴           : Value%로 상대방을 5초간 머리 위에 별이 돌아간다. (때리면 1/2 확률로 풀림)               AFF_STUN
 	RemoveAffect(AFFECT_STUN);
 
-	// ο         : Value%  /̼  . õ  ޶    쿡   AFF_SLOW
+	// 슬로우         : Value%로 상대방의 공속/이속 모두 느려진다. 수련도에 따라 달라짐 기술로 사용 한 경우에   AFF_SLOW
 	RemoveAffect(AFFECT_SLOW);
 
-	// Ӹ
+	// 투속마령
 	RemoveAffect(SKILL_TUSOK);
 
-	// 
+	// 저주
 	//RemoveAffect(SKILL_CURSE);
 
-	// Ĺ
+	// 파법술
 	//RemoveAffect(SKILL_PABUP);
 
-	//            : Value%  Ų. 2                                                       AFF_FAINT
+	// 기절           : Value%로 상대방을 기절시킨다. 2초                                                       AFF_FAINT
 	//RemoveAffect(AFFECT_FAINT);
 
-	// ٸ       : Value%  ̵ӵ Ʈ. 5ʰ -40                                      AFF_WEB
+	// 다리묶임       : Value%로 상대방의 이동속도를 떨어트린다. 5초간 -40                                      AFF_WEB
 	//RemoveAffect(AFFECT_WEB);
 
-	//          : Value%  10ʰ . ( Ǯ)                                        AFF_SLEEP
+	// 잠들기         : Value%로 상대방을 10초간 잠재운다. (때리면 풀림)                                        AFF_SLEEP
 	//RemoveAffect(AFFECT_SLEEP);
 
-	//            : Value%  /  Ʈ. õ  ޶    쿡 AFF_CURSE
+	// 저주           : Value%로 상대방의 공등/방등 모두 떨어트린다. 수련도에 따라 달라짐 기술로 사용 한 경우에 AFF_CURSE
 	//RemoveAffect(AFFECT_CURSE);
 
-	//            : Value%  4ʰ Ų.                                                     AFF_PARA
+	// 마비           : Value%로 상대방을 4초간 마비시킨다.                                                     AFF_PARA
 	//RemoveAffect(AFFECT_PARALYZE);
 
-	// εں       :  
+	// 부동박부       : 무당 기술
 	//RemoveAffect(SKILL_BUDONG);
 }
 
diff --git a/src/game/char_battle.cpp b/src/game/char_battle.cpp
index 9d9cfe0..eae869c 100644
--- a/src/game/char_battle.cpp
+++ b/src/game/char_battle.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "desc.h"
@@ -149,7 +149,7 @@ void CHARACTER::DistributeSP(LPCHARACTER pkKiller, int iMethod)
 			else if (bMoving)
 				iAmount = 3 + GetMaxSP() * 2 / 100;
 			else
-				iAmount = 10 + GetMaxSP() * 3 / 100; // 
+				iAmount = 10 + GetMaxSP() * 3 / 100; // 평상시
 
 			iAmount += (iAmount * pkKiller->GetPoint(POINT_SP_REGEN)) / 100;
 			pkKiller->PointChange(POINT_SP, iAmount);
@@ -164,11 +164,11 @@ void CHARACTER::DistributeSP(LPCHARACTER pkKiller, int iMethod)
 				iAmount = 2 + pkKiller->GetMaxSP() / 100;
 			else
 			{
-				// 
+				// 평상시
 				if (pkKiller->GetHP() < pkKiller->GetMaxHP())
-					iAmount = 2 + (pkKiller->GetMaxSP() / 100); //   á
+					iAmount = 2 + (pkKiller->GetMaxSP() / 100); // 피 다 안찼을때
 				else
-					iAmount = 9 + (pkKiller->GetMaxSP() / 100); // ⺻
+					iAmount = 9 + (pkKiller->GetMaxSP() / 100); // 기본
 			}
 
 			iAmount += (iAmount * pkKiller->GetPoint(POINT_SP_REGEN)) / 100;
@@ -216,7 +216,7 @@ bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
 	if (bType == 0)
 	{
 		//
-		// Ϲ 
+		// 일반 공격
 		//
 		switch (GetMobBattleType())
 		{
@@ -291,14 +291,14 @@ void CHARACTER::DeathPenalty(BYTE bTown)
 	if (GetLevel() < 10)
 	{
 		sys_log(0, "NO_DEATH_PENALTY_LESS_LV10(%s)", GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용신의 가호로 경험치가 떨어지지 않았습니다."));
 		return;
 	}
 
    	if (number(0, 2))
 	{
 		sys_log(0, "NO_DEATH_PENALTY_LUCK(%s)", GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용신의 가호로 경험치가 떨어지지 않았습니다."));
 		return;
 	}
 
@@ -307,22 +307,22 @@ void CHARACTER::DeathPenalty(BYTE bTown)
 		REMOVE_BIT(m_pointsInstant.instant_flag, INSTANT_FLAG_DEATH_PENALTY);
 
 		// NO_DEATH_PENALTY_BUG_FIX 
-		if (LC_IsYMIR()) // õ    ȣ  üũѴ.
+		if (LC_IsYMIR()) // 천마 버전에서는 언제나 용신의 가호 아이템을 체크한다.
 		{
 			if (FindAffect(AFFECT_NO_DEATH_PENALTY))
 			{
 				sys_log(0, "NO_DEATH_PENALTY_AFFECT(%s)", GetName());
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용신의 가호로 경험치가 떨어지지 않았습니다."));
 				RemoveAffect(AFFECT_NO_DEATH_PENALTY);
 				return;
 			}
 		}
-		else if (!bTown) //   ڸ Ȱø  ȣ Ѵ. ( ͽô ġ гƼ )
+		else if (!bTown) // 국제 버전에서는 제자리 부활시만 용신의 가호를 사용한다. (마을 복귀시는 경험치 패널티 없음)
 		{
 			if (FindAffect(AFFECT_NO_DEATH_PENALTY))
 			{
 				sys_log(0, "NO_DEATH_PENALTY_AFFECT(%s)", GetName());
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용신의 가호로 경험치가 떨어지지 않았습니다."));
 				RemoveAffect(AFFECT_NO_DEATH_PENALTY);
 				return;
 			}
@@ -416,7 +416,7 @@ void CHARACTER::Stun()
 
 	CloseMyShop();
 
-	event_cancel(&m_pkRecoveryEvent); // ȸ ̺Ʈ δ.
+	event_cancel(&m_pkRecoveryEvent); // 회복 이벤트를 죽인다.
 
 	TPacketGCStun pack;
 	pack.header	= HEADER_GC_STUN;
@@ -540,7 +540,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 	bool isAutoLoot = 
 		(pkAttacker->GetPremiumRemainSeconds(PREMIUM_AUTOLOOT) > 0 ||
 		 pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_AUTOLOOT))
-		? true : false; // 3 
+		? true : false; // 제3의 손
 	// END_OF_ADD_PREMIUM
 
 	PIXEL_POSITION pos;
@@ -551,7 +551,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 	int iTotalGold = 0;
 	//
-	// ---------   Ȯ  ----------
+	// --------- 돈 드롭 확률 계산 ----------
 	//
 	int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;
 
@@ -585,35 +585,35 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 	int iGoldMultipler = GetGoldMultipler();
 
-	if (1 == number(1, 50000)) // 1/50000 Ȯ  10
+	if (1 == number(1, 50000)) // 1/50000 확률로 돈이 10배
 		iGoldMultipler *= 10;
-	else if (1 == number(1, 10000)) // 1/10000 Ȯ  5
+	else if (1 == number(1, 10000)) // 1/10000 확률로 돈이 5배
 		iGoldMultipler *= 5;
 
-	//  
+	// 개인 적용
 	if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
 		if (number(1, 100) <= pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
 			iGoldMultipler *= 2;
 
 	//
-	// ---------     ----------
+	// --------- 돈 드롭 배수 결정 ----------
 	//
 	if (test_server)
 		pkAttacker->ChatPacket(CHAT_TYPE_PARTY, "gold_mul %d rate %d", iGoldMultipler, CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker));
 
 	//
-	// ---------   ó -------------
+	// --------- 실제 드롭 처리 -------------
 	// 
 	LPITEM item;
 
 	int iGold10DropPct = 100;
 	iGold10DropPct = (iGold10DropPct * 100) / (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD10_DROP));
 
-	// MOB_RANK BOSS   ź
+	// MOB_RANK가 BOSS보다 높으면 무조건 돈폭탄
 	if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
 	{
 		if (1 == number(1, iGold10DropPct))
-			iGoldMultipler *= 10; // 1% Ȯ  10
+			iGoldMultipler *= 10; // 1% 확률로 돈 10배
 
 		int iSplitCount = number(25, 35);
 
@@ -636,7 +636,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 				sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
 			}
 
-			// NOTE:  ź  3  ó  
+			// NOTE: 돈 폭탄은 제 3의 손 처리를 하지 않음
 			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
 			{
 				pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23);
@@ -649,11 +649,11 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 			}
 		}
 	}
-	// 1% Ȯ  10  ߸. (10 )
+	// 1% 확률로 돈을 10개 떨어 뜨린다. (10배 드롭임)
 	else if (1 == number(1, iGold10DropPct))
 	{
 		//
-		//  ź 
+		// 돈 폭탄식 드롭
 		//
 		for (int i = 0; i < 10; ++i)
 		{
@@ -666,7 +666,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 				continue;
 			}
 
-			// NOTE:  ź  3  ó  
+			// NOTE: 돈 폭탄은 제 3의 손 처리를 하지 않음
 			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
 			{
 				pos.x = GetX() + (number(-7, 7) * 20);
@@ -682,7 +682,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 	else
 	{
 		//
-		// Ϲ   
+		// 일반적인 방식의 돈 드롭
 		//
 		int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
 		iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
@@ -729,7 +729,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 void CHARACTER::Reward(bool bItemDrop)
 {
-	if (GetRaceNum() == 5001) // ֱ   
+	if (GetRaceNum() == 5001) // 왜구는 돈을 무조건 드롭
 	{
 		PIXEL_POSITION pos;
 
@@ -816,7 +816,7 @@ void CHARACTER::Reward(bool bItemDrop)
 		return;
 
 	//
-	//  
+	// 돈 드롭
 	//
 	//PROF_UNIT pu2("r2");
 	if (test_server)
@@ -825,7 +825,7 @@ void CHARACTER::Reward(bool bItemDrop)
 	//pu2.Pop();
 
 	//
-	//  
+	// 아이템 드롭
 	//
 	//PROF_UNIT pu3("r3");
 	LPITEM item;
@@ -888,7 +888,7 @@ void CHARACTER::Reward(bool bItemDrop)
 
 			if (v.empty())
 			{
-				//  Ư      
+				// 데미지를 특별히 많이 준 사람이 없으니 소유권 없음
 				while (iItemIdx >= 0)
 				{
 					item = s_vec_item[iItemIdx--];
@@ -900,7 +900,7 @@ void CHARACTER::Reward(bool bItemDrop)
 					}
 
 					item->AddToGround(GetMapIndex(), pos);
-					// 10%     Ǿ
+					// 10% 이하 데미지 준 사람끼리는 소유권없음
 					//item->SetOwnership(pkAttacker);
 					item->StartDestroyEvent();
 
@@ -914,7 +914,7 @@ void CHARACTER::Reward(bool bItemDrop)
 			}
 			else
 			{
-				//       
+				// 데미지 많이 준 사람들 끼리만 소유권 나눠가짐
 				std::vector::iterator it = v.begin();
 
 				while (iItemIdx >= 0)
@@ -970,20 +970,20 @@ struct TItemDropPenalty
 
 TItemDropPenalty aItemDropPenalty_kor[9] =
 {
-	{   0,   0,  0,  0 },	// 
-	{   0,   0,  0,  0 },	// 
-	{   0,   0,  0,  0 },	// 
-	{   0,   0,  0,  0 },	// 
-	{   0,   0,  0,  0 },	// 
-	{  25,   1,  5,  1 },	// 
-	{  50,   2, 10,  1 },	// 
-	{  75,   4, 15,  1 },	// 
-	{ 100,   8, 20,  1 },	// п
+	{   0,   0,  0,  0 },	// 선왕
+	{   0,   0,  0,  0 },	// 영웅
+	{   0,   0,  0,  0 },	// 성자
+	{   0,   0,  0,  0 },	// 지인
+	{   0,   0,  0,  0 },	// 양민
+	{  25,   1,  5,  1 },	// 낭인
+	{  50,   2, 10,  1 },	// 악인
+	{  75,   4, 15,  1 },	// 마두
+	{ 100,   8, 20,  1 },	// 패왕
 };
 
 void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller)
 {
-	// λ  ¿   ʴ´.
+	// 개인상점을 연 상태에서는 아이템을 드롭하지 않는다.
 	if (GetMyShop())
 		return;
 
@@ -1218,7 +1218,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 	if (!pkKiller && m_dwKillerPID)
 		pkKiller = CHARACTER_MANAGER::instance().FindByPID(m_dwKillerPID);
 
-	m_dwKillerPID = 0; // ݵ ʱȭ ؾ DO NOT DELETE THIS LINE UNLESS YOU ARE 1000000% SURE
+	m_dwKillerPID = 0; // 반드시 초기화 해야함 DO NOT DELETE THIS LINE UNLESS YOU ARE 1000000% SURE
 
 	bool isAgreedPVP = false;
 	bool isUnderGuildWar = false;
@@ -1318,7 +1318,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 
 				if (GetPoint(POINT_EMPIRE_POINT) < 10)
 				{
-					// TODO : Ա  ڵ带 ־ Ѵ.
+					// TODO : 입구로 날리는 코드를 넣어야 한다.
 				}
 
 				char buf[256];
@@ -1344,7 +1344,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 					}
 
 					if (number(1, 100) < iNoPenaltyProb)
-						pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ   ʾҽϴ."));
+						pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용신의 보호로 아이템이 떨어지지 않았습니다."));
 					else
 					{
 						if (g_iUseLocale && pkKiller->GetParty())
@@ -1386,7 +1386,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 	ClearSync();
 
 	//sys_log(1, "stun cancel %s[%d]", GetName(), (DWORD)GetVID());
-	event_cancel(&m_pkStunEvent); //  ̺Ʈ δ.
+	event_cancel(&m_pkStunEvent); // 기절 이벤트는 죽인다.
 
 	if (IsPC())
 	{
@@ -1396,12 +1396,12 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 	}
 	else
 	{
-		// 忡 ݹ ʹ   Ѵ.
+		// 가드에게 공격받은 몬스터는 보상이 없어야 한다.
 		if (!IS_SET(m_pointsInstant.instant_flag, INSTANT_FLAG_NO_REWARD))
 		{
 			if (!(pkKiller && pkKiller->IsPC() && pkKiller->GetGuild() && pkKiller->GetGuild()->UnderAnyWar(GUILD_WAR_TYPE_FIELD)))
 			{
-				// Ȱϴ ʹ   ʴ´.
+				// 부활하는 몬스터는 보상을 주지 않는다.
 				if (GetMobTable().dwResurrectionVnum)
 				{
 					// DUNGEON_MONSTER_REBIRTH_BUG_FIX
@@ -1428,7 +1428,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 				if (pkKiller->m_dwUnderGuildWarInfoMessageTime < get_dword_time())
 				{
 					pkKiller->m_dwUnderGuildWarInfoMessageTime = get_dword_time() + 60000;
-					pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߿ ɿ   ϴ."));
+					pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전중에는 사냥에 따른 이익이 없습니다."));
 				}
 			}
 		}
@@ -1453,10 +1453,10 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 
 	REMOVE_BIT(m_pointsInstant.instant_flag, INSTANT_FLAG_STUN);
 
-	// ÷̾ ij̸
+	// 플레이어 캐릭터이면
 	if (GetDesc() != NULL) {
 		//
-		// Ŭ̾Ʈ Ʈ Ŷ ٽ .
+		// 클라이언트에 에펙트 패킷을 다시 보낸다.
 		//
 		itertype(m_list_pkAffect) it = m_list_pkAffect.begin();
 
@@ -1465,11 +1465,11 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 	}
 
 	//
-	// Dead ̺Ʈ ,
+	// Dead 이벤트 생성,
 	//
-	// Dead ̺Ʈ    Ŀ Destroy ǵ ָ,
-	// PC  3 ִٰ    ش. 3  κ
-	//   , ⼭    ޴´.
+	// Dead 이벤트에서는 몬스터의 경우 몇초 후에 Destroy 되도록 해주며,
+	// PC의 경우 3분 있다가 마을에서 나오도록 해 준다. 3분 내에는 유저로부터
+	// 마을에서 시작할 건지, 여기서 시작할 건지 결정을 받는다.
 	if (isDuel == false)
 	{
 		if (m_pkDeadEvent)
@@ -1593,12 +1593,12 @@ void CHARACTER::SendDamagePacket(LPCHARACTER pAttacker, int Damage, BYTE DamageF
 }
 
 //
-// CHARACTER::Damage ޼ҵ this  ԰ Ѵ.
+// CHARACTER::Damage 메소드는 this가 데미지를 입게 한다.
 //
 // Arguments
-//    pAttacker		: 
-//    dam		: 
-//    EDamageType	:   ΰ?
+//    pAttacker		: 공격자
+//    dam		: 데미지
+//    EDamageType	: 어떤 형식의 공격인가?
 //    
 // Return value
 //    true		: dead
@@ -1671,7 +1671,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 	}
 
-	// Ÿ ƴ   ó
+	// 평타가 아닐 때는 공포 처리
 	if (type != DAMAGE_TYPE_NORMAL && type != DAMAGE_TYPE_NORMAL_RANGE)
 	{
 		if (IsAffectFlag(AFF_TERROR))
@@ -1703,19 +1703,19 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	//PROF_UNIT puAttr("Attr");
 
 	//
-	//  ų,  ų(ڰ) ũƼð,   Ѵ.
-	//   ʾƾ ϴµ Nerf(ٿ뷱)ġ    ũƼð
-	//     ʰ, /2 ̻Ͽ Ѵ.
+	// 마법형 스킬과, 레인지형 스킬은(궁자객) 크리티컬과, 관통공격 계산을 한다.
+	// 원래는 하지 않아야 하는데 Nerf(다운밸런스)패치를 할 수 없어서 크리티컬과
+	// 관통공격의 원래 값을 쓰지 않고, /2 이상하여 적용한다.
 	// 
-	//  ̾߱Ⱑ Ƽ и ų ߰
+	// 무사 이야기가 많아서 밀리 스킬도 추가
 	//
-	// 20091109 : 簡  û   г,     70% 
+	// 20091109 : 무사가 결과적으로 엄청나게 강해진 것으로 결론남, 독일 기준 무사 비율 70% 육박
 	//
 	if (type == DAMAGE_TYPE_MELEE || type == DAMAGE_TYPE_RANGE || type == DAMAGE_TYPE_MAGIC)
 	{
 		if (pAttacker)
 		{
-			// ũƼ
+			// 크리티컬
 			int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);
 
 			if (!IsPC())
@@ -1723,12 +1723,12 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 			if (iCriticalPct)
 			{
-				if (iCriticalPct >= 10) // 10 ũ 5% + (4 1% ),  ġ 50̸ 20%
+				if (iCriticalPct >= 10) // 10보다 크면 5% + (4마다 1%씩 증가), 따라서 수치가 50이면 20%
 					iCriticalPct = 5 + (iCriticalPct - 10) / 4;
-				else // 10  ܼ  , 10 = 5%
+				else // 10보다 작으면 단순히 반으로 깎음, 10 = 5%
 					iCriticalPct /= 2;
 
-				//ũƼ   .
+				//크리티컬 저항 값 적용.
 				iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL);
 
 				if (number(1, 100) <= iCriticalPct)
@@ -1744,7 +1744,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// 
+			// 관통공격
 			int iPenetratePct = pAttacker->GetPoint(POINT_PENETRATE_PCT);
 
 			if (!IsPC())
@@ -1766,16 +1766,16 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 				if (iPenetratePct >= 10)
 				{
-					// 10 ũ 5% + (4 1% ),  ġ 50̸ 20%
+					// 10보다 크면 5% + (4마다 1%씩 증가), 따라서 수치가 50이면 20%
 					iPenetratePct = 5 + (iPenetratePct - 10) / 4;
 				}
 				else
 				{
-					// 10  ܼ  , 10 = 5%
+					// 10보다 작으면 단순히 반으로 깎음, 10 = 5%
 					iPenetratePct /= 2;
 				}
 
-				//Ÿ   .
+				//관통타격 저항 값 적용.
 				iPenetratePct -= GetPoint(POINT_RESIST_PENETRATE);
 
 				if (number(1, 100) <= iPenetratePct)
@@ -1783,7 +1783,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 					IsPenetrate = true;
 
 					if (test_server)
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߰  %d"), GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100);
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("관통 추가 데미지 %d"), GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100);
 
 					dam += GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100;
 
@@ -1796,19 +1796,19 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 	}
 	// 
-	// ޺ , Ȱ ,  Ÿ   Ӽ  Ѵ.
+	// 콤보 공격, 활 공격, 즉 평타 일 때만 속성값들을 계산을 한다.
 	//
 	else if (type == DAMAGE_TYPE_NORMAL || type == DAMAGE_TYPE_NORMAL_RANGE)
 	{
 		if (type == DAMAGE_TYPE_NORMAL)
 		{
-			//  Ÿ    
+			// 근접 평타일 경우 막을 수 있음
 			if (GetPoint(POINT_BLOCK) && number(1, 100) <= GetPoint(POINT_BLOCK))
 			{
 				if (test_server)
 				{
-					pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
+					pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 블럭! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 블럭! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
 				}
 
 				SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
@@ -1817,13 +1817,13 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 		else if (type == DAMAGE_TYPE_NORMAL_RANGE)
 		{
-			// Ÿ Ÿ    
+			// 원거리 평타의 경우 피할 수 있음
 			if (GetPoint(POINT_DODGE) && number(1, 100) <= GetPoint(POINT_DODGE))
 			{
 				if (test_server)
 				{
-					pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ȸ! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ȸ! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
+					pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 회피! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 회피! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
 				}
 
 				SendDamagePacket(pAttacker, 0, DAMAGE_DODGE);
@@ -1841,19 +1841,19 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 			dam = dam * (100 - GetPoint(POINT_RESIST_NORMAL_DAMAGE)) / 100;
 
 		//
-		//  Ӽ 
+		// 공격자 속성 적용
 		//
 		if (pAttacker)
 		{
 			if (type == DAMAGE_TYPE_NORMAL)
 			{
-				// ݻ
+				// 반사
 				if (GetPoint(POINT_REFLECT_MELEE))
 				{
 					int reflectDamage = dam * GetPoint(POINT_REFLECT_MELEE) / 100;
 
-					// NOTE: ڰ IMMUNE_REFLECT Ӽ ִٸ ݻ縦  ϴ  
-					// ƴ϶ 1/3  ؼ  ȹ û.
+					// NOTE: 공격자가 IMMUNE_REFLECT 속성을 갖고있다면 반사를 안 하는 게 
+					// 아니라 1/3 데미지로 고정해서 들어가도록 기획에서 요청.
 					if (pAttacker->IsImmune(IMMUNE_REFLECT))
 						reflectDamage = int(reflectDamage / 3.0f + 0.5f);
 
@@ -1861,7 +1861,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ũƼ
+			// 크리티컬
 			int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);
 
 			if (!IsPC())
@@ -1869,7 +1869,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 			if (iCriticalPct)
 			{
-				//ũƼ   .
+				//크리티컬 저항 값 적용.
 				iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL);
 
 				if (number(1, 100) <= iCriticalPct)
@@ -1880,7 +1880,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// 
+			// 관통공격
 			int iPenetratePct = pAttacker->GetPoint(POINT_PENETRATE_PCT);
 
 			if (!IsPC())
@@ -1901,7 +1901,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 			if (iPenetratePct)
 			{
 				
-				//Ÿ   .
+				//관통타격 저항 값 적용.
 				iPenetratePct -= GetPoint(POINT_RESIST_PENETRATE);
 
 				if (number(1, 100) <= iPenetratePct)
@@ -1909,12 +1909,12 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 					IsPenetrate = true;
 
 					if (test_server)
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߰  %d"), GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100);
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("관통 추가 데미지 %d"), GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100);
 					dam += GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100;
 				}
 			}
 
-			// HP ƿ
+			// HP 스틸
 			if (pAttacker->GetPoint(POINT_STEAL_HP))
 			{
 				int pct = 1;
@@ -1932,7 +1932,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// SP ƿ
+			// SP 스틸
 			if (pAttacker->GetPoint(POINT_STEAL_SP))
 			{
 				int pct = 1;
@@ -1959,7 +1959,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			//  ƿ
+			// 돈 스틸
 			if (pAttacker->GetPoint(POINT_STEAL_GOLD))
 			{
 				if (number(1, 100) <= pAttacker->GetPoint(POINT_STEAL_GOLD))
@@ -1970,8 +1970,8 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ĥ  HPȸ
-			if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% Ȯ
+			// 칠 때마다 HP회복
+			if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% 확률
 			{
 				// int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;
 				int i = ((iCurHP>=0)?MIN(dam, iCurHP):dam) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100; // Fix
@@ -1983,8 +1983,8 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ĥ  SPȸ
-			if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% Ȯ
+			// 칠 때마다 SP회복
+			if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% 확률
 			{
 				// int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;
 				int i = ((iCurHP>=0)?MIN(dam, iCurHP):dam) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100; // Fix
@@ -1996,7 +1996,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			//   ش.
+			// 상대방의 마나를 없앤다.
 			if (pAttacker->GetPoint(POINT_MANA_BURN_PCT))
 			{
 				if (number(1, 100) <= pAttacker->GetPoint(POINT_MANA_BURN_PCT))
@@ -2006,7 +2006,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	}
 
 	//
-	// Ÿ Ǵ ų  ʽ / 
+	// 평타 또는 스킬로 인한 보너스 피해/방어 계산
 	// 
 	switch (type)
 	{
@@ -2037,16 +2037,16 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	}
 
 	//
-	// (żȣ)
+	// 마나쉴드(흑신수호)
 	//
 	if (IsAffectFlag(AFF_MANASHIELD))
 	{
-		// POINT_MANASHIELD  ۾ 
+		// POINT_MANASHIELD 는 작아질수록 좋다
 		int iDamageSPPart = dam / 3;
 		int iDamageToSP = iDamageSPPart * GetPoint(POINT_MANASHIELD) / 100;
 		int iSP = GetSP();
 
-		// SP     
+		// SP가 있으면 무조건 데미지 절반 감소
 		if (iDamageToSP <= iSP)
 		{
 			PointChange(POINT_SP, -iDamageToSP);
@@ -2054,14 +2054,14 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 		else
 		{
-			// ŷ ڶ ǰ  ←ҋ
+			// 정신력이 모자라서 피가 더 깍여야할떄
 			PointChange(POINT_SP, -GetSP());
 			dam -= iSP * 100 / MAX(GetPoint(POINT_MANASHIELD), 1);
 		}
 	}
 
 	//
-	// ü   ( )
+	// 전체 방어력 상승 (몰 아이템)
 	// 
 	if (GetPoint(POINT_MALL_DEFBONUS) > 0)
 	{
@@ -2072,7 +2072,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	if (pAttacker)
 	{
 		//
-		// ü ݷ  ( )
+		// 전체 공격력 상승 (몰 아이템)
 		//
 		if (pAttacker->GetPoint(POINT_MALL_ATTBONUS) > 0)
 		{
@@ -2081,7 +2081,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 
 		//
-		//   ʽ (ѱ õ  )
+		// 제국으로 인한 보너스 (한국 올드 버전만 적용)
 		//
 		int iEmpire = GetEmpire();
 		long lMapIndex = GetMapIndex();
@@ -2101,7 +2101,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 			lMapIndex = pAttacker->GetMapIndex();
 			iMapEmpire = SECTREE_MANAGER::instance().GetEmpireFromMapIndex(lMapIndex);
 
-			// ٸ     10% 
+			// 다른 제국 사람인 경우 데미지 10% 감소
 			if (iEmpire && iMapEmpire && iEmpire != iMapEmpire)
 			{
 				int percent = 10;
@@ -2146,17 +2146,17 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 
 		//
-		//  ݰ &  
+		// 군주의 금강권 & 사자후 
 		//
 		if (pAttacker->IsPC() && CMonarch::instance().IsPowerUp(pAttacker->GetEmpire()))
 		{
-			// 10%  
+			// 10% 피해 증가
 			dam += dam / 10;
 		}
 
 		if (IsPC() && CMonarch::instance().IsDefenceUp(GetEmpire()))
 		{
-			// 10%  
+			// 10% 피해 감소
 			dam -= dam / 10;
 		}
 	}
@@ -2172,7 +2172,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		else
 			SetLastAttacked(get_dword_time());
 
-		//   :  
+		// 몬스터 대사 : 맞을 때
 		MonsterChat(MONSTER_CHAT_ATTACKED);
 	}
 
@@ -2185,7 +2185,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	if (IsDead())
 		return true;
 
-	//    ʵ .
+	// 독 공격으로 죽지 않도록 함.
 	if (type == DAMAGE_TYPE_POISON)
 	{
 		if (GetHP() - dam <= 0)
@@ -2195,7 +2195,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	}
 
 	// ------------------------
-	//  ̾  
+	// 독일 프리미엄 모드 
 	// -----------------------
 	if (LC_IsGermany() && pAttacker && pAttacker->IsPC())
 	{
@@ -2203,7 +2203,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		dam = dam * iDmgPct / 100;
 	}
 
-	// STONE SKIN :   
+	// STONE SKIN : 피해 반으로 감소
 	if (IsMonster() && IsStoneSkinner())
 	{
 		if (GetHPPct() < GetMobTable().bStoneSkinPoint)
@@ -2213,7 +2213,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	//PROF_UNIT puRest1("Rest1");
 	if (pAttacker)
 	{
-		// DEATH BLOW : Ȯ  4  (!?  ̺Ʈ  ͸ )
+		// DEATH BLOW : 확률 적으로 4배 피해 (!? 현재 이벤트나 공성전용 몬스터만 사용함)
 		if (pAttacker->IsMonster() && pAttacker->IsDeathBlower())
 		{
 			if (pAttacker->IsDeathBlow())
@@ -2243,7 +2243,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 			damageFlag |= DAMAGE_PENETRATE;
 
 
-		//  
+		//최종 데미지 보정
 		float damMul = this->GetDamMul();
 		float tempDam = dam;
 		dam = tempDam * damMul + 0.5f;
@@ -2278,12 +2278,12 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 		if (m_bDetailLog)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s[%d]  ġ: %d %d"), pAttacker->GetName(), (DWORD) pAttacker->GetVID(), pAttacker->GetX(), pAttacker->GetY());
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s[%d]가 공격 위치: %d %d"), pAttacker->GetName(), (DWORD) pAttacker->GetVID(), pAttacker->GetX(), pAttacker->GetY());
 		}
 	}
 
 	//
-	// !!!!!!!!!  HP ̴ κ !!!!!!!!!
+	// !!!!!!!!! 실제 HP를 줄이는 부분 !!!!!!!!!
 	//
 	if (!cannot_dead)
 	{
@@ -2310,7 +2310,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		//puRest20.Pop();
 
 		//PROF_UNIT puRest21("Rest21");
-		StartRecoveryEvent(); // ʹ   ȸ Ѵ.
+		StartRecoveryEvent(); // 몬스터는 데미지를 입으면 회복을 시작한다.
 		//puRest21.Pop();
 
 		//PROF_UNIT puRest22("Rest22");
@@ -2335,40 +2335,40 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 void CHARACTER::DistributeHP(LPCHARACTER pkKiller)
 {
-	if (pkKiller->GetDungeon()) //  ΰʴ´
+	if (pkKiller->GetDungeon()) // 던젼내에선 만두가나오지않는다
 		return;
 }
 
 static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 {
-	//  ġ 
+	// 레벨차 경험치 가감비율
 	iExp = CALCULATE_VALUE_LVDELTA(to->GetLevel(), from->GetLevel(), iExp);
 
-	// ܺ ׽Ʈ  ġ 3 ʽ
+	// 외부 테스트 서버 경험치 3배 보너스
 	if (distribution_test_server)
 		iExp *= 3;
 
 	int iBaseExp = iExp;
 
-	// , ȸ ġ ̺Ʈ 
+	// 점술, 회사 경험치 이벤트 적용
 	iExp = iExp * (100 + CPrivManager::instance().GetPriv(to, PRIV_EXP_PCT)) / 100;
 
-	// ӳ ⺻ Ǵ ġ ʽ
+	// 게임내 기본 제공되는 경험치 보너스
 	{
-		// 뵿 ޴
+		// 노동절 메달
 		if (to->IsEquipUniqueItem(UNIQUE_ITEM_LARBOR_MEDAL))
 			iExp += iExp * 20 /100;
 
-		// Ÿ ġ ʽ
+		// 사귀타워 경험치 보너스
 		if (to->GetMapIndex() >= 660000 && to->GetMapIndex() < 670000) 
-			iExp += iExp * 20 / 100; // 1.2 (20%)
+			iExp += iExp * 20 / 100; // 1.2배 (20%)
 
-		//  ġ ι Ӽ
+		// 아이템 경험치 두배 속성
 		if (to->GetPoint(POINT_EXP_DOUBLE_BONUS))
 			if (number(1, 100) <= to->GetPoint(POINT_EXP_DOUBLE_BONUS))
-				iExp += iExp * 30 / 100; // 1.3 (30%)
+				iExp += iExp * 30 / 100; // 1.3배 (30%)
 
-		//   (2ð¥)
+		// 경험의 반지 (2시간짜리)
 		if (to->IsEquipUniqueItem(UNIQUE_ITEM_DOUBLE_EXP))
 			iExp += iExp * 50 / 100;
 
@@ -2392,16 +2392,16 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			case 20123:
 			case 20124:
 			case 20125:
-				//  ġ ʽ
+				// 백사자 경험치 보너스
 				iExp += iExp * 30 / 100;
 				break;
 		}
 	}
 
-	//   Ǹ ġ ʽ
+	// 아이템 몰 판매 경험치 보너스
 	if (LC_IsHongKong() || LC_IsEurope() || LC_IsCanada())
 	{
-		//  : ġ 
+		// 아이템 몰: 경험치 결제
 		if (to->GetPremiumRemainSeconds(PREMIUM_EXP) > 0)
 		{
 			iExp += (iExp * 50 / 100);
@@ -2412,19 +2412,19 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += (iExp * 50 / 100);
 		}
 
-		// PC  ġ ʽ
+		// PC방 아템 경치 보너스
 		if (to->GetPoint(POINT_PC_BANG_EXP_BONUS) > 0)
 		{
 			if (to->IsPCBang() == true)
 				iExp += (iExp * to->GetPoint(POINT_PC_BANG_EXP_BONUS)/100);
 		}
 
-		// ȥ ʽ
+		// 결혼 보너스
 		iExp += iExp * to->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_EXP_BONUS) / 100;
 	}
 	else if (/*LC_IsNewCIBN() || */LC_IsBrazil())
 	{
-		//  : ġ 
+		// 아이템 몰: 경험치 결제
 		if (to->GetPremiumRemainSeconds(PREMIUM_EXP) > 0)
 		{
 			iExp += iExp;
@@ -2435,19 +2435,19 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += iExp;
 		}
 
-		// PC  ġ ʽ
+		// PC방 아템 경치 보너스
 		if (to->GetPoint(POINT_PC_BANG_EXP_BONUS) > 0)
 		{
 			if (to->IsPCBang() == true)
 				iExp += (iExp * to->GetPoint(POINT_PC_BANG_EXP_BONUS)/100);
 		}
 
-		// ȥ ʽ
+		// 결혼 보너스
 		iExp += iExp * to->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_EXP_BONUS) / 100;
 	}
 	else
 	{
-		//  : ġ 
+		// 아이템 몰: 경험치 결제
 		if (to->GetPremiumRemainSeconds(PREMIUM_EXP) > 0)
 		{
 			iExp += (iExp * 20 / 100);
@@ -2458,14 +2458,14 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += (iExp * 20 / 100);
 		}
 
-		// PC  ġ ʽ
+		// PC방 아템 경치 보너스
 		if (to->GetPoint(POINT_PC_BANG_EXP_BONUS) > 0)
 		{
 			if (to->IsPCBang() == true)
 				iExp += (iExp * to->GetPoint(POINT_PC_BANG_EXP_BONUS)/100);
 		}
 
-		// ȥ ʽ
+		// 결혼 보너스
 		iExp += iExp * to->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_EXP_BONUS) / 100;
 	}
 
@@ -2488,10 +2488,10 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			   );
 	}
 
-	// ȹ  2005.04.21  85%
+	// 기획측 조정값 2005.04.21 현재 85%
 	iExp = iExp * CHARACTER_MANAGER::instance().GetMobExpRate(to) / 100;
 
-	// ġ ѹ ȹ淮 
+	// 경험치 한번 획득량 제한
 	iExp = MIN(to->GetNextExp() / 10, iExp);
 
 	if (test_server)
@@ -2507,10 +2507,10 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 
 	{
 		LPCHARACTER you = to->GetMarryPartner();
-		// κΰ  Ƽ̸ ݽ 
+		// 부부가 서로 파티중이면 금슬이 오른다
 		if (you)
 		{
-			// 1 100%
+			// 1억이 100%
 			DWORD dwUpdatePoint = 2000*iExp/to->GetLevel()/to->GetLevel()/3;
 
 			if (to->GetPremiumRemainSeconds(PREMIUM_MARRIAGE_FAST) > 0 || 
@@ -2629,7 +2629,7 @@ typedef struct SDamageInfo
 					pParty->ChatPacketToAllMember(CHAT_TYPE_INFO, "exp party bonus %d%%", pParty->GetExpBonusPercent());
 			}
 
-			// ġ ֱ (Ƽ ȹ ġ 5%   )
+			// 경험치 몰아주기 (파티가 획득한 경험치를 5% 빼서 먼저 줌)
 			if (pParty->GetExpCentralizeCharacter())
 			{
 				LPCHARACTER tch = pParty->GetExpCentralizeCharacter();
@@ -2668,7 +2668,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 
 	TDamageMap::iterator it = m_map_kDamage.begin();
 
-	// ϴ    ɷ . (50m)
+	// 일단 주위에 없는 사람을 걸러 낸다. (50m)
 	while (it != m_map_kDamage.end())
 	{
 		const VID & c_VID = it->first;
@@ -2678,7 +2678,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 
 		LPCHARACTER pAttacker = CHARACTER_MANAGER::instance().Find(c_VID);
 
-		// NPC ⵵ ϳ? -.-;
+		// NPC가 때리기도 하나? -.-;
 		if (!pAttacker || pAttacker->IsNPC() || DISTANCE_APPROX(GetX()-pAttacker->GetX(), GetY()-pAttacker->GetY())>5000)
 			continue;
 
@@ -2728,10 +2728,10 @@ LPCHARACTER CHARACTER::DistributeExp()
 	SetExp(0);
 	//m_map_kDamage.clear();
 
-	if (iTotalDam == 0)	//  ذ 0̸ 
+	if (iTotalDam == 0)	// 데미지 준게 0이면 리턴
 		return NULL;
 
-	if (m_pkChrStone)	//    ġ   ѱ.
+	if (m_pkChrStone)	// 돌이 있을 경우 경험치의 반을 돌에게 넘긴다.
 	{
 		//sys_log(0, "__ Give half to Stone : %d", iExpToDistribute>>1);
 		int iExp = iExpToDistribute >> 1;
@@ -2747,11 +2747,11 @@ LPCHARACTER CHARACTER::DistributeExp()
 	if (damage_info_table.empty())
 		return NULL;
 
-	//      HP ȸ Ѵ.
-	DistributeHP(pkChrMostAttacked);	//  ý
+	// 제일 데미지를 많이 준 사람이 HP 회복을 한다.
+	DistributeHP(pkChrMostAttacked);	// 만두 시스템
 
 	{
-		//     ̳ Ƽ  ġ 20% + ڱⰡ ŭ ġ Դ´.
+		// 제일 데미지를 많이 준 사람이나 파티가 총 경험치의 20% + 자기가 때린만큼의 경험치를 먹는다.
 		TDamageInfoTable::iterator di = damage_info_table.begin();
 		{
 			TDamageInfoTable::iterator it;
@@ -2780,7 +2780,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 
 		di->Distribute(this, iExp);
 
-		// 100%  Ծ Ѵ.
+		// 100% 다 먹었으면 리턴한다.
 		if (fPercent == 1.0f)
 			return pkChrMostAttacked;
 
@@ -2788,7 +2788,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 	}
 
 	{
-		//  80% ġ йѴ.
+		// 남은 80%의 경험치를 분배한다.
 		TDamageInfoTable::iterator it;
 
 		for (it = damage_info_table.begin(); it != damage_info_table.end(); ++it)
@@ -2811,7 +2811,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 	return pkChrMostAttacked;
 }
 
-// ȭ   
+// 화살 개수를 리턴해 줌
 int CHARACTER::GetArrowAndBow(LPITEM * ppkBow, LPITEM * ppkArrow, int iArrowCount/* = 1 */)
 {
 	LPITEM pkBow;
@@ -2883,7 +2883,7 @@ class CFuncShoot
 			if (!pkVictim)
 				return;
 
-			//  Ұ
+			// 공격 불가
 			if (!battle_is_attackable(m_me, pkVictim))
 				return;
 
@@ -2897,7 +2897,7 @@ class CFuncShoot
 
 			switch (m_bType)
 			{
-				case 0: // ϹȰ
+				case 0: // 일반활
 					{
 						int iDam = 0;
 
@@ -2931,7 +2931,7 @@ class CFuncShoot
 
 						NormalAttackAffect(m_me, pkVictim);
 
-						//  
+						// 데미지 계산
 						iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_BOW)) / 100;
 
 						//sys_log(0, "%s arrow %s dam %d", m_me->GetName(), pkVictim->GetName(), iDam);
@@ -2943,11 +2943,11 @@ class CFuncShoot
 							pkVictim->BeginFight(m_me);
 
 						pkVictim->Damage(m_me, iDam, DAMAGE_TYPE_NORMAL_RANGE);
-						// Ÿġ  
+						// 타격치 계산부 끝
 					}
 					break;
 
-				case 1: // Ϲ 
+				case 1: // 일반 마법
 					{
 						int iDam;
 
@@ -2958,7 +2958,7 @@ class CFuncShoot
 
 						NormalAttackAffect(m_me, pkVictim);
 
-						//  
+						// 데미지 계산
 						iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_MAGIC)) / 100;
 
 						//sys_log(0, "%s arrow %s dam %d", m_me->GetName(), pkVictim->GetName(), iDam);
@@ -2970,16 +2970,16 @@ class CFuncShoot
 							pkVictim->BeginFight(m_me); 
 
 						pkVictim->Damage(m_me, iDam, DAMAGE_TYPE_MAGIC);
-						// Ÿġ  
+						// 타격치 계산부 끝
 					}
 					break;
 
-				case SKILL_YEONSA:	// 
+				case SKILL_YEONSA:	// 연사
 					{
 						//int iUseArrow = 2 + (m_me->GetSkillPower(SKILL_YEONSA) *6/100);
 						int iUseArrow = 1;
 
-						// Ż ϴ°
+						// 토탈만 계산하는경우
 						{
 							if (iUseArrow == m_me->GetArrowAndBow(&pkBow, &pkArrow, iUseArrow))
 							{
@@ -3111,7 +3111,7 @@ class CFuncShoot
 						sys_log(0, "%s - Skill %d -> %s", m_me->GetName(), m_bType, pkVictim->GetName());
 						m_me->ComputeSkill(m_bType, pkVictim);
 
-						// TODO     ϱ
+						// TODO 여러명에게 슉 슉 슉 하기
 					}
 					break;
 
@@ -3208,7 +3208,7 @@ LPCHARACTER CHARACTER::GetNearestVictim(LPCHARACTER pkChr)
 
 	TDamageMap::iterator it = m_map_kDamage.begin();
 
-	// ϴ    ɷ .
+	// 일단 주위에 없는 사람을 걸러 낸다.
 	while (it != m_map_kDamage.end())
 	{
 		const VID & c_VID = it->first;
@@ -3241,7 +3241,7 @@ void CHARACTER::SetVictim(LPCHARACTER pkVictim)
 	if (!pkVictim)
 	{
 		if (0 != (DWORD)m_kVIDVictim)
-			MonsterLog("  ");
+			MonsterLog("공격 대상을 해제");
 
 		m_kVIDVictim.Reset();
 		battle_end(this);
@@ -3249,7 +3249,7 @@ void CHARACTER::SetVictim(LPCHARACTER pkVictim)
 	else
 	{
 		if (m_kVIDVictim != pkVictim->GetVID())
-			MonsterLog("  : %s", pkVictim->GetName());
+			MonsterLog("공격 대상을 설정: %s", pkVictim->GetName());
 
 		m_kVIDVictim = pkVictim->GetVID();
 		m_dwLastVictimSetTime = get_dword_time();
@@ -3261,7 +3261,7 @@ LPCHARACTER CHARACTER::GetVictim() const
 	return CHARACTER_MANAGER::instance().Find(m_kVIDVictim);
 }
 
-LPCHARACTER CHARACTER::GetProtege() const // ȣؾ   
+LPCHARACTER CHARACTER::GetProtege() const // 보호해야 할 대상을 리턴
 {
 	if (m_pkChrStone)
 		return m_pkChrStone;
@@ -3414,7 +3414,7 @@ struct FuncAggregateMonster
 			if (ch->GetVictim())
 				return;
 
-			if (number(1, 100) <= 50) // ӽ÷ 50% Ȯ  ´
+			if (number(1, 100) <= 50) // 임시로 50% 확률로 적을 끌어온다
 				if (DISTANCE_APPROX(ch->GetX() - m_ch->GetX(), ch->GetY() - m_ch->GetY()) < 5000)
 					if (ch->CanBeginFight())
 						ch->BeginFight(m_ch);
@@ -3542,7 +3542,7 @@ void CHARACTER::PullMonster()
 
 void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int dam, CHARACTER::TBattleInfo & info)
 {
-	// Ư ŸԿ   ö󰣴
+	// 특정 공격타입에 따라 더 올라간다
 	switch (type)
 	{
 		case DAMAGE_TYPE_NORMAL_RANGE:
@@ -3561,7 +3561,7 @@ void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int d
 			break;
 	}
 
-	// ڰ    ʽ ش.
+	// 공격자가 현재 대상인 경우 보너스를 준다.
 	if (pAttacker == GetVictim())
 		dam = (int) (dam * 1.2f);
 
@@ -3575,7 +3575,7 @@ void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int d
 	{
 		LPPARTY pParty = GetParty();
 
-		//     ϴ
+		// 리더인 경우 영향력이 좀더 강하다
 		int iPartyAggroDist = dam;
 
 		if (pParty->GetLeaderPID() == GetVID())
@@ -3607,7 +3607,7 @@ void CHARACTER::UpdateAggrPoint(LPCHARACTER pAttacker, EDamageType type, int dam
 
 void CHARACTER::ChangeVictimByAggro(int iNewAggro, LPCHARACTER pNewVictim)
 {
-	if (get_dword_time() - m_dwLastVictimSetTime < 3000) // 3ʴ ٷѴ
+	if (get_dword_time() - m_dwLastVictimSetTime < 3000) // 3초는 기다려야한다
 		return;
 
 	if (pNewVictim == GetVictim())
@@ -3618,7 +3618,7 @@ void CHARACTER::ChangeVictimByAggro(int iNewAggro, LPCHARACTER pNewVictim)
 			return;
 		}
 
-		// Aggro  
+		// Aggro가 감소한 경우
 		TDamageMap::iterator it;
 		TDamageMap::iterator itFind = m_map_kDamage.end();
 
diff --git a/src/game/char_change_empire.cpp b/src/game/char_change_empire.cpp
index 59d25c1..51c2842 100644
--- a/src/game/char_change_empire.cpp
+++ b/src/game/char_change_empire.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "config.h"
 #include "char.h"
@@ -9,12 +9,12 @@
 
 /*
    Return Value
-		0 :     or  
-		1 :   ٲٷ
-		2 :   ijͰ 
-		3 : ȥ ijͰ 
+		0 : 알 수 없는 에러 or 쿼리 에러
+		1 : 동일한 제국으로 바꾸려고함
+		2 : 길드 가입한 캐릭터가 있음
+		3 : 결혼한 캐릭터가 있음
 
-		999 :  ̵ 
+		999 : 제국 이동 성공
 */
 int CHARACTER::ChangeEmpire(BYTE empire)
 {
@@ -27,7 +27,7 @@ int CHARACTER::ChangeEmpire(BYTE empire)
 	memset(dwPID, 0, sizeof(dwPID));
 
 	{
-		// 1.    pid  ´
+		// 1. 내 계정의 모든 pid를 얻어 온다
 		snprintf(szQuery, sizeof(szQuery), 
 				"SELECT id, pid1, pid2, pid3, pid4 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", 
 				get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());
@@ -51,8 +51,8 @@ int CHARACTER::ChangeEmpire(BYTE empire)
 	const int loop = 4;
 
 	{
-		// 2.  ij   ´.
-		//    ijͶ 忡  Ǿ ִٸ,  ̵   .
+		// 2. 각 캐릭터의 길드 정보를 얻어온다.
+		//   한 캐릭터라도 길드에 가입 되어 있다면, 제국 이동을 할 수 없다.
 		DWORD dwGuildID[4];
 		CGuild * pGuild[4];
 		SQLMsg * pMsg = NULL;
@@ -91,8 +91,8 @@ int CHARACTER::ChangeEmpire(BYTE empire)
 	}
 
 	{
-		// 3.  ij ȥ  ´.
-		//    ijͶ ȥ ¶  ̵   .
+		// 3. 각 캐릭터의 결혼 정보를 얻어온다.
+		//   한 캐릭터라도 결혼 상태라면 제국 이동을 할 수 없다.
 		for (int i = 0; i < loop; ++i)
 		{
 			if (marriage::CManager::instance().IsEngagedOrMarried(dwPID[i]) == true)
@@ -101,7 +101,7 @@ int CHARACTER::ChangeEmpire(BYTE empire)
 	}
 	
 	{
-		// 4. db   Ʈ Ѵ.
+		// 4. db의 제국 정보를 업데이트 한다.
 		snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", 
 				get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());
 
@@ -109,7 +109,7 @@ int CHARACTER::ChangeEmpire(BYTE empire)
 
 		if (msg->Get()->uiAffectedRows > 0)
 		{
-			// 5.   ̷ ߰Ѵ.
+			// 5. 제국 변경 이력을 추가한다.
 			SetChangeEmpireCount();
 
 			return 999;
diff --git a/src/game/char_dragonsoul.cpp b/src/game/char_dragonsoul.cpp
index 25105c9..7136381 100644
--- a/src/game/char_dragonsoul.cpp
+++ b/src/game/char_dragonsoul.cpp
@@ -1,18 +1,18 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 #include "item.h"
 #include "desc.h"
 #include "DragonSoul.h"
 #include "log.h"
 
-// ȥ ʱȭ
-// ȥ on/off Affect DZ ,
-// ȥ Affect ִٸ  ִ ȥ activateؾѴ.
-//  ȥ  ڰ QuestFlag  ұ , 
-// Ʈ Flag ȥ  ڰ о´.
+// 용혼석 초기화
+// 용혼석 on/off는 Affect로 저장되기 때문에,
+// 용혼석 Affect가 있다면 덱에 있는 용혼석을 activate해야한다.
+// 또한 용혼석 사용 자격은 QuestFlag로 저장해 놓았기 때문에, 
+// 퀘스트 Flag에서 용혼석 사용 자격을 읽어온다.
 
-// ij affect, quest load DZ  DragonSoul_Initialize ȣϸ ȵȴ.
-// affect   εǾ LoadAffect ȣ.
+// 캐릭터의 affect, quest가 load 되기 전에 DragonSoul_Initialize를 호출하면 안된다.
+// affect가 가장 마지막에 로드되어 LoadAffect에서 호출함.
 void CHARACTER::DragonSoul_Initialize()
 {
 	for (int i = INVENTORY_MAX_NUM + WEAR_MAX_NUM; i < DRAGON_SOUL_EQUIP_SLOT_END; i++)
@@ -55,7 +55,7 @@ void CHARACTER::DragonSoul_GiveQualification()
 	}
 	AddAffect(AFFECT_DRAGON_SOUL_QUALIFIED, APPLY_NONE, 0, AFF_NONE, INFINITE_AFFECT_DURATION, 0, false, false);
 	//SetQuestFlag("dragon_soul.is_qualified", 1);
-	//// ڰִٸ POINT_DRAGON_SOUL_IS_QUALIFIED  1
+	//// 자격있다면 POINT_DRAGON_SOUL_IS_QUALIFIED는 무조건 1
 	//PointChange(POINT_DRAGON_SOUL_IS_QUALIFIED, 1 - GetPoint(POINT_DRAGON_SOUL_IS_QUALIFIED));
 }
 
@@ -73,7 +73,7 @@ bool CHARACTER::DragonSoul_ActivateDeck(int deck_idx)
 
 	if (!DragonSoul_IsQualified())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ڰ Ȱȭ ʾҽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("용혼석 상자가 활성화되지 않았습니다."));
 		return false;
 	}
 
diff --git a/src/game/char_hackshield.cpp b/src/game/char_hackshield.cpp
index fb800ce..3bff0cf 100644
--- a/src/game/char_hackshield.cpp
+++ b/src/game/char_hackshield.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "char.h"
diff --git a/src/game/char_horse.cpp b/src/game/char_horse.cpp
index 6617c75..6212fb6 100644
--- a/src/game/char_horse.cpp
+++ b/src/game/char_horse.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "char.h"
 #include "char_manager.h"
@@ -17,22 +17,22 @@ bool CHARACTER::StartRiding()
 {
 	if (IsDead() == true)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿  Ż  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쓰러진 상태에서는 말에 탈 수 없습니다."));
 		return false;
 	}
 	
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿  Ż  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신 상태에서는 말에 탈 수 없습니다."));
 		return false;
 	}
 
-	// νõ    Ÿ 
+	// 턱시도 입은 상태의 말 타기 금지
 	LPITEM armor = GetWear(WEAR_BODY);
 
 	if (armor && (armor->GetVnum() >= 11901 && armor->GetVnum() <= 11904))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ¿  Ż  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("예복을 입은 상태에서 말을 탈 수 없습니다."));
 		return false;
 	}
 
@@ -48,16 +48,16 @@ bool CHARACTER::StartRiding()
 	if (false == CHorseRider::StartRiding())
 	{
 		if (GetHorseLevel() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϰ  ʽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 소유하고 있지 않습니다."));
 		else if (GetHorseHealth() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׾ִ  Դϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말이 죽어있는 상태 입니다."));
 		else if (GetHorseStamina() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׹̳ʰ Ͽ  Ż  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말의 스테미너가 부족하여 말을 탈 수 없습니다."));
 
 		return false;
 	}
 
-	// ȯ  ְ
+	// 소환한 말 없애고
 	HorseSummon(false);
 
 	MountVnum(dwMountVnum);
@@ -79,7 +79,7 @@ bool CHARACTER::StopRiding()
 			DWORD dwOldVnum = GetMountVnum();
 			MountVnum(0);
 
-			// [NOTE]    ڱⰡ  ȯϵ 
+			// [NOTE] 말에서 내릴 땐 자기가 탔던걸 소환하도록 수정
 			HorseSummon(true, false, dwOldVnum);
 		}
 		else
@@ -140,14 +140,14 @@ void CHARACTER::HorseSummon(bool bSummon, bool bFromFar, DWORD dwVnum, const cha
 {
 	if ( bSummon )
 	{
-		//NOTE : summonߴµ ̹ horse  ƹ͵ Ѵ.
+		//NOTE : summon했는데 이미 horse가 있으면 아무것도 안한다.
 		if( m_chHorse != NULL )
 			return;
 
 		if (GetHorseLevel() <= 0)
 			return;
 
-		// 𰡸 Ÿ ִٸ 
+		// 무언가를 타고 있다면 실패
 		if (IsRiding())
 			return;
 
@@ -178,16 +178,16 @@ void CHARACTER::HorseSummon(bool bSummon, bool bFromFar, DWORD dwVnum, const cha
 
 		if (!m_chHorse)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȯ Ͽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말 소환에 실패하였습니다."));
 			return;
 		}
 
 		if (GetHorseHealth() <= 0)
 		{
-			// ó ְ ϴ ó
+			// 죽은거처럼 있게 하는 처리
 			m_chHorse->SetPosition(POS_DEAD);
 
-			// ðִ  .
+			// 일정시간있다 사라지게 하자.
 			char_event_info* info = AllocEventInfo();
 			info->ch = this;
 			m_chHorse->m_pkDeadEvent = event_create(horse_dead_event, info, PASSES_PER_SEC(60));
@@ -204,7 +204,7 @@ void CHARACTER::HorseSummon(bool bSummon, bool bFromFar, DWORD dwVnum, const cha
 		else
 		{
 			m_chHorse->m_stName = GetName();
-			m_chHorse->m_stName += LC_TEXT(" ");
+			m_chHorse->m_stName += LC_TEXT("님의 말");
 		}
 
 		if (!m_chHorse->Show(GetMapIndex(), x, y, GetZ()))
@@ -240,7 +240,7 @@ void CHARACTER::HorseSummon(bool bSummon, bool bFromFar, DWORD dwVnum, const cha
 		}
 		else
 		{
-			// ־鼭  ó ϱ
+			// 멀어지면서 사라지는 처리 하기
 			chHorse->SetNowWalking(false);
 			float fx, fy;
 			chHorse->SetRotation(GetDegreeFromPositionXY(chHorse->GetX(), chHorse->GetY(), GetX(), GetY())+180);
@@ -311,7 +311,7 @@ void CHARACTER::SendHorseInfo()
 3: 70% < ~ <= 100%
 2: 30% < ~ <= 70%
 1:  0% < ~ <= 30%
-0: 
+0: 사망
 
 STM
 
@@ -344,8 +344,8 @@ STM
 		{
 			ChatPacket(CHAT_TYPE_COMMAND, "horse_state %d %d %d", GetHorseLevel(), iHealthGrade, iStaminaGrade);
 
-			// FIX : Ŭ̾Ʈ "  "  ǥ   Լ Կ returnν Ʒ ڵ带 Ѵٸ
-			//  Ѵ ȯϴ ù װ .. Ȯ  ľ غ .
+			// FIX : 클라이언트에 "말 상태 버프" 아이콘을 표시하지 않을 목적으로 함수 초입에 return함으로써 아래 코드를 무시한다면
+			// 말을 무한대로 소환하는 무시무시한 버그가 생김.. 정확한 원인은 파악 안해봐서 모름.
 			m_bSendHorseLevel = GetHorseLevel();
 			m_bSendHorseHealthGrade = iHealthGrade;
 			m_bSendHorseStaminaGrade = iStaminaGrade;
@@ -367,7 +367,7 @@ bool CHARACTER::CanUseHorseSkill()
 			if (GetMountVnum() >= 20209 && GetMountVnum() <= 20212)
 				return true;
 
-			//󸶴 渶
+			//라마단 흑마
 			if (CMobVnumHelper::IsRamadanBlackHorse(GetMountVnum()))
 				return true;
 		}
diff --git a/src/game/char_item.cpp b/src/game/char_item.cpp
index 0c2403f..8e4dd82 100644
--- a/src/game/char_item.cpp
+++ b/src/game/char_item.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include 
 
@@ -78,7 +78,7 @@ struct FFindStone
 };
 
 
-//ȯ, ȯ, ȥ
+//귀환부, 귀환기억부, 결혼반지
 static bool IS_SUMMON_ITEM(int vnum)
 {
 	switch (vnum)
@@ -111,38 +111,38 @@ static bool IS_MONKEY_DUNGEON(int map_index)
 
 bool IS_SUMMONABLE_ZONE(int map_index)
 {
-	// Ű
+	// 몽키던전
 	if (IS_MONKEY_DUNGEON(map_index))
 		return false;
-	// 
+	// 성
 	if (IS_CASTLE_MAP(map_index))
 		return false;
 
 	switch (map_index)
 	{
-		case 66 : // Ÿ
-		case 71 : // Ź  2
-		case 72 : // õ 
-		case 73 : // õ  2
-		case 193 : // Ź  2-1
+		case 66 : // 사귀타워
+		case 71 : // 거미 던전 2층
+		case 72 : // 천의 동굴
+		case 73 : // 천의 동굴 2층
+		case 193 : // 거미 던전 2-1층
 #if 0
-		case 184 : // õ (ż)
-		case 185 : // õ  2(ż)
-		case 186 : // õ (õ)
-		case 187 : // õ  2(õ)
-		case 188 : // õ ()
-		case 189 : // õ  2()
+		case 184 : // 천의 동굴(신수)
+		case 185 : // 천의 동굴 2층(신수)
+		case 186 : // 천의 동굴(천조)
+		case 187 : // 천의 동굴 2층(천조)
+		case 188 : // 천의 동굴(진노)
+		case 189 : // 천의 동굴 2층(진노)
 #endif
-//		case 206 : // Ʊ͵
-		case 216 : // Ʊ͵
-		case 217 : // Ź  3
-		case 208 : // õ  ()
+//		case 206 : // 아귀동굴
+		case 216 : // 아귀동굴
+		case 217 : // 거미 던전 3층
+		case 208 : // 천의 동굴 (용방)
 			return false;
 	}
 
 	if (CBattleArena::IsBattleArenaMap(map_index)) return false;
 
-	//  private   Ұ
+	// 모든 private 맵으론 워프 불가능
 	if (map_index > 10000) return false;
 
 	return true;
@@ -166,7 +166,7 @@ bool IS_BOTARYABLE_ZONE(int nMapIndex)
 	return false;
 }
 
-// item socket  Ÿ԰  üũ -- by mhh
+// item socket 이 프로토타입과 같은지 체크 -- by mhh
 static bool FN_check_item_socket(LPITEM item)
 {
 	for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
@@ -178,7 +178,7 @@ static bool FN_check_item_socket(LPITEM item)
 	return true;
 }
 
-// item socket  -- by mhh
+// item socket 복사 -- by mhh
 static void FN_copy_item_socket(LPITEM dest, LPITEM src)
 {
 	for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
@@ -188,13 +188,13 @@ static void FN_copy_item_socket(LPITEM dest, LPITEM src)
 }
 static bool FN_check_item_sex(LPCHARACTER ch, LPITEM item)
 {
-	//  
+	// 남자 금지
 	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_MALE))
 	{
 		if (SEX_MALE==GET_SEX(ch))
 			return false;
 	}
-	// ڱ
+	// 여자금지
 	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_FEMALE)) 
 	{
 		if (SEX_FEMALE==GET_SEX(ch))
@@ -280,7 +280,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 		assert(!"GetOwner exist");
 		return;
 	}
-	// ⺻ κ丮
+	// 기본 인벤토리
 	switch(window_type)
 	{
 	case INVENTORY:
@@ -326,8 +326,8 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 						if (p >= INVENTORY_MAX_NUM)
 							continue;
 
-						// wCell + 1  ϴ   üũ  
-						//  óϱ 
+						// wCell + 1 로 하는 것은 빈곳을 체크할 때 같은
+						// 아이템은 예외처리하기 위함
 						m_pointsInstant.bItemGrid[p] = wCell + 1;
 					}
 				}
@@ -338,7 +338,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 			m_pointsInstant.pItems[wCell] = pItem;
 		}
 		break;
-	// ȥ κ丮
+	// 용혼석 인벤토리
 	case DRAGON_SOUL_INVENTORY:
 		{
 			LPITEM pOld = m_pointsInstant.pDSItems[wCell];
@@ -381,8 +381,8 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 						if (p >= DRAGON_SOUL_INVENTORY_MAX_NUM)
 							continue;
 
-						// wCell + 1  ϴ   üũ  
-						//  óϱ 
+						// wCell + 1 로 하는 것은 빈곳을 체크할 때 같은
+						// 아이템은 예외처리하기 위함
 						m_pointsInstant.wDSItemGrid[p] = wCell + 1;
 					}
 				}
@@ -400,7 +400,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 
 	if (GetDesc())
 	{
-		// Ȯ :   ÷  
+		// 확장 아이템: 서버에서 아이템 플래그 정보를 보낸다
 		if (pItem)
 		{
 			TPacketGCItemSet pack;
@@ -454,7 +454,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 
 LPITEM CHARACTER::GetWear(BYTE bCell) const
 {
-	// > WEAR_MAX_NUM : ȥ Ե.
+	// > WEAR_MAX_NUM : 용혼석 슬롯들.
 	if (bCell >= WEAR_MAX_NUM + DRAGON_SOUL_DECK_MAX_NUM * DS_SLOT_MAX)
 	{
 		sys_err("CHARACTER::GetWear: invalid wear cell %d", bCell);
@@ -466,7 +466,7 @@ LPITEM CHARACTER::GetWear(BYTE bCell) const
 
 void CHARACTER::SetWear(BYTE bCell, LPITEM item)
 {
-	// > WEAR_MAX_NUM : ȥ Ե.
+	// > WEAR_MAX_NUM : 용혼석 슬롯들.
 	if (bCell >= WEAR_MAX_NUM + DRAGON_SOUL_DECK_MAX_NUM * DS_SLOT_MAX)
 	{
 		sys_err("CHARACTER::SetItem: invalid item cell %d", bCell);
@@ -477,7 +477,7 @@ void CHARACTER::SetWear(BYTE bCell, LPITEM item)
 
 	if (!item && bCell == WEAR_WEAPON)
 	{
-		// Ͱ    ̶ ȿ ־ Ѵ.
+		// 귀검 사용 시 벗는 것이라면 효과를 없애야 한다.
 		if (IsAffectFlag(AFF_GWIGUM))
 			RemoveAffect(SKILL_GWIGEOM);
 
@@ -525,8 +525,8 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 		{
 			BYTE bCell = Cell.cell;
 
-			// bItemCell 0 false Ÿ  + 1 ؼ óѴ.
-			//  iExceptionCell 1  Ѵ.
+			// bItemCell은 0이 false임을 나타내기 위해 + 1 해서 처리한다.
+			// 따라서 iExceptionCell에 1을 더해 비교한다.
 			++iExceptionCell;
 
 			if (Cell.IsBeltInventoryPosition())
@@ -586,7 +586,7 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 					return false;
 			}
 
-			// ũⰡ 1̸ ĭ ϴ ̹Ƿ ׳ 
+			// 크기가 1이면 한칸을 차지하는 것이므로 그냥 리턴
 			if (1 == bSize)
 				return true;
 			else
@@ -620,8 +620,8 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 			if (wCell >= DRAGON_SOUL_INVENTORY_MAX_NUM)
 				return false;
 
-			// bItemCell 0 false Ÿ  + 1 ؼ óѴ.
-			//  iExceptionCell 1  Ѵ.
+			// bItemCell은 0이 false임을 나타내기 위해 + 1 해서 처리한다.
+			// 따라서 iExceptionCell에 1을 더해 비교한다.
 			iExceptionCell++;
 
 			if (m_pointsInstant.wDSItemGrid[wCell])
@@ -652,7 +652,7 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 					return false;
 			}
 
-			// ũⰡ 1̸ ĭ ϴ ̹Ƿ ׳ 
+			// 크기가 1이면 한칸을 차지하는 것이므로 그냥 리턴
 			if (1 == bSize)
 				return true;
 			else
@@ -680,8 +680,8 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 
 int CHARACTER::GetEmptyInventory(BYTE size) const
 {
-	// NOTE:   Լ  , ȹ     κ丮  ĭ ã  ǰ ִµ,
-	//		Ʈ κ丮 Ư κ丮̹Ƿ ˻ ʵ Ѵ. (⺻ κ丮: INVENTORY_MAX_NUM  ˻)
+	// NOTE: 현재 이 함수는 아이템 지급, 획득 등의 행위를 할 때 인벤토리의 빈 칸을 찾기 위해 사용되고 있는데,
+	//		벨트 인벤토리는 특수 인벤토리이므로 검사하지 않도록 한다. (기본 인벤토리: INVENTORY_MAX_NUM 까지만 검사)
 	for ( int i = 0; i < INVENTORY_MAX_NUM; ++i)
 		if (IsEmptyItemGrid(TItemPos (INVENTORY, i), size))
 			return i;
@@ -741,7 +741,7 @@ void TransformRefineItem(LPITEM pkOldItem, LPITEM pkNewItem)
 	// END_OF_ACCESSORY_REFINE
 	else
 	{
-		// ⼭  ڵ û 
+		// 여기서 깨진석이 자동적으로 청소 됨
 		for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 		{
 			if (!pkOldItem->GetSocket(i))
@@ -750,7 +750,7 @@ void TransformRefineItem(LPITEM pkOldItem, LPITEM pkNewItem)
 				pkNewItem->SetSocket(i, 1);
 		}
 
-		//  
+		// 소켓 설정
 		int slot = 0;
 
 		for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
@@ -763,7 +763,7 @@ void TransformRefineItem(LPITEM pkOldItem, LPITEM pkNewItem)
 
 	}
 
-	//   
+	// 매직 아이템 설정
 	pkOldItem->CopyAttributeTo(pkNewItem);
 }
 
@@ -807,8 +807,8 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 		return false;
 	}
 	
-	// ð : upgrade_refine_scroll.quest   5̳ Ϲ  
-	//Ҽ 
+	//개량 시간제한 : upgrade_refine_scroll.quest 에서 개량후 5분이내에 일반 개량을 
+	//진행할수 없음
 	if (quest::CQuestManager::instance().GetEventFlag("update_refine_time") != 0)
 	{
 		if (get_global_time() < quest::CQuestManager::instance().GetEventFlag("update_refine_time") + (60 * 5))
@@ -834,7 +834,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 	{
 		if (!item->CheckItemUseLevel(20) || item->GetType() != ITEM_WEAPON)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȸ 20  ⸸ մϴ"));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무료 개량 기회는 20 이하의 무기만 가능합니다"));
 			return false;
 		}
 
@@ -845,7 +845,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 
 	if (result_vnum == 0)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -857,7 +857,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 	if (!pProto)
 	{
 		sys_err("DoRefine NOT GET ITEM PROTO %d", item->GetRefinedVnum());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -873,7 +873,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 				case LIMIT_LEVEL:
 					if (GetLevel() < limit)
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ѻ  ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량된 후 아이템의 레벨 제한보다 레벨이 낮습니다."));
 						return false;
 					}
 					break;
@@ -884,7 +884,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 	// REFINE_COST
 	if (GetGold() < cost)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ   մϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
 		return false;
 	}
 
@@ -898,7 +898,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 				{
 					ChatPacket(CHAT_TYPE_INFO, "Find %d, count %d, require %d", prt->materials[i].vnum, CountSpecifyItem(prt->materials[i].vnum), prt->materials[i].count);
 				}
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ  ᰡ մϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 재료가 부족합니다."));
 				return false;
 			}
 		}
@@ -916,7 +916,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 
 	if (prob <= prt->prob)
 	{
-		// !   ,  Ӽ ٸ  ȹ
+		// 성공! 모든 아이템이 사라지고, 같은 속성의 다른 아이템 획득
 		LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false);
 
 		if (pkNewItem)
@@ -945,7 +945,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 		else
 		{
 			// DETAIL_REFINE_LOG
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			sys_err("cannot create item %u", result_vnum);
 			NotifyRefineFail(this, item, IsRefineThroughGuild() ? "GUILD" : "POWER");
 			// END_OF_DETAIL_REFINE_LOG
@@ -953,7 +953,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 	}
 	else
 	{
-		// !   .
+		// 실패! 모든 아이템이 사라짐.
 		DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -cost);
 		NotifyRefineFail(this, item, IsRefineThroughGuild() ? "GUILD" : "POWER");
 		item->AttrLog();
@@ -969,7 +969,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 enum enum_RefineScrolls
 {
 	CHUKBOK_SCROLL = 0,
-	HYUNIRON_CHN   = 1, // ߱ 
+	HYUNIRON_CHN   = 1, // 중국에서만 사용
 	YONGSIN_SCROLL = 2,
 	MUSIN_SCROLL   = 3,
 	YAGONG_SCROLL  = 4,
@@ -987,8 +987,8 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	ClearRefineMode();
 
-	// ð : upgrade_refine_scroll.quest   5̳ Ϲ  
-	//Ҽ 
+	//개량 시간제한 : upgrade_refine_scroll.quest 에서 개량후 5분이내에 일반 개량을 
+	//진행할수 없음
 	if (quest::CQuestManager::instance().GetEventFlag("update_refine_time") != 0)
 	{
 		if (get_global_time() < quest::CQuestManager::instance().GetEventFlag("update_refine_time") + (60 * 5))
@@ -1005,7 +1005,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	LPITEM pkItemScroll;
 
-	//  üũ
+	// 개량서 체크
 	if (m_iRefineAdditionalCell < 0)
 		return false;
 
@@ -1025,7 +1025,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	if (result_vnum == 0)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -1034,7 +1034,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	{
 		if (item->GetRefineLevel() >= 4)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ̻   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 개량서로 더 이상 개량할 수 없습니다."));
 			return false;
 		}
 	}
@@ -1044,7 +1044,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	{
 		if (item->GetRefineLevel() != pkItemScroll->GetValue(1))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 개량서로 개량할 수 없습니다."));
 			return false;
 		}
 	}
@@ -1052,7 +1052,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	{
 		if (item->GetType() != ITEM_METIN || item->GetRefineLevel() != 4)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템으로 개량할 수 없습니다."));
 			return false;
 		}
 	}
@@ -1062,7 +1062,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	if (!pProto)
 	{
 		sys_err("DoRefineWithScroll NOT GET ITEM PROTO %d", item->GetRefinedVnum());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -1078,7 +1078,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 				case LIMIT_LEVEL:
 					if (GetLevel() < limit)
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ѻ  ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량된 후 아이템의 레벨 제한보다 레벨이 낮습니다."));
 						return false;
 					}
 					break;
@@ -1088,7 +1088,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	if (GetGold() < prt->cost)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ   մϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
 		return false;
 	}
 
@@ -1100,7 +1100,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 			{
 				ChatPacket(CHAT_TYPE_INFO, "Find %d, count %d, require %d", prt->materials[i].vnum, CountSpecifyItem(prt->materials[i].vnum), prt->materials[i].count);
 			}
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϱ  ᰡ մϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 재료가 부족합니다."));
 			return false;
 		}
 	}
@@ -1116,7 +1116,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	if (pkItemScroll->GetValue(0) == HYUNIRON_CHN || 
 		pkItemScroll->GetValue(0) == YONGSIN_SCROLL || 
-		pkItemScroll->GetValue(0) == YAGONG_SCROLL) // ö,  ູ, ߰   ó
+		pkItemScroll->GetValue(0) == YAGONG_SCROLL) // 현철, 용신의 축복서, 야공의 비전서  처리
 	{
 		const char hyuniron_prob[9] = { 100, 75, 65, 55, 45, 40, 35, 25, 20 };
 		const char hyuniron_prob_euckr[9] = { 100, 75, 65, 55, 45, 40, 35, 30, 25 };
@@ -1147,7 +1147,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 		{
 			ChatPacket(CHAT_TYPE_INFO, "[Only Test] Success_Prob %d, RefineLevel %d ", success_prob, item->GetRefineLevel());
 		}
-		if (pkItemScroll->GetValue(0) == HYUNIRON_CHN) // ö  μ Ѵ.
+		if (pkItemScroll->GetValue(0) == HYUNIRON_CHN) // 현철은 아이템이 부서져야 한다.
 			bDestroyWhenFail = true;
 
 		// DETAIL_REFINE_LOG
@@ -1167,7 +1167,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	}
 
 	// DETAIL_REFINE_LOG
-	if (pkItemScroll->GetValue(0) == MUSIN_SCROLL) //  ູ 100%  (+4)
+	if (pkItemScroll->GetValue(0) == MUSIN_SCROLL) // 무신의 축복서는 100% 성공 (+4까지만)
 	{
 		success_prob = 100;
 
@@ -1189,7 +1189,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 
 	if (prob <= success_prob)
 	{
-		// !   ,  Ӽ ٸ  ȹ
+		// 성공! 모든 아이템이 사라지고, 같은 속성의 다른 아이템 획득
 		LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false);
 
 		if (pkNewItem)
@@ -1211,14 +1211,14 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 		}
 		else
 		{
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			sys_err("cannot create item %u", result_vnum);
 			NotifyRefineFail(this, item, szRefineType);
 		}
 	}
 	else if (!bDestroyWhenFail && result_fail_vnum)
 	{
-		// !   ,  Ӽ    ȹ
+		// 실패! 모든 아이템이 사라지고, 같은 속성의 낮은 등급의 아이템 획득
 		LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_fail_vnum, 1, 0, false);
 
 		if (pkNewItem)
@@ -1242,14 +1242,14 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 		}
 		else
 		{
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			sys_err("cannot create item %u", result_fail_vnum);
 			NotifyRefineFail(this, item, szRefineType);
 		}
 	}
 	else
 	{
-		NotifyRefineFail(this, item, szRefineType); //    
+		NotifyRefineFail(this, item, szRefineType); // 개량시 아이템 사라지지 않음
 		
 		PayRefineFee(prt->cost);
 	}
@@ -1270,7 +1270,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	// REFINE_COST
 	if (bType == REFINE_TYPE_MONEY_ONLY && !GetQuestFlag("deviltower_zone.can_refine"))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ÿ Ϸ  ѹ 밡մϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사귀 타워 완료 보상은 한번까지 사용가능합니다."));
 		return false;
 	}
 	// END_OF_REFINE_COST
@@ -1286,7 +1286,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	if (p.result_vnum == 0)
 	{
 		sys_err("RefineInformation p.result_vnum == 0");
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -1294,7 +1294,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	{
 		if (bType == 0)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   δ   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 이 방식으로는 개량할 수 없습니다."));
 			return false;
 		}
 		else
@@ -1302,8 +1302,8 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 			LPITEM itemScroll = GetInventoryItem(iAdditionalCell);
 			if (!itemScroll || item->GetVnum() == itemScroll->GetVnum())
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ĥ  ϴ."));
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ູ  ö ĥ  ֽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같은 개량서를 합칠 수는 없습니다."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("축복의 서와 현철을 합칠 수 있습니다."));
 				return false;
 			}
 		}
@@ -1316,7 +1316,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	if (!prt)
 	{
 		sys_err("RefineInformation NOT GET REFINE SET %d", item->GetRefineSet());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 		return false;
 	}
 
@@ -1325,10 +1325,10 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	//MAIN_QUEST_LV7
 	if (GetQuestFlag("main_quest_lv7.refine_chance") > 0)
 	{
-		// Ϻ 
+		// 일본은 제외
 		if (!item->CheckItemUseLevel(20) || item->GetType() != ITEM_WEAPON)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȸ 20  ⸸ մϴ"));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무료 개량 기회는 20 이하의 무기만 가능합니다"));
 			return false;
 		}
 		p.cost = 0;
@@ -1363,8 +1363,8 @@ bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
 
 	if (pkItem->GetSubType() == USE_TUNING)
 	{
-		// XXX ,   ϴ...
-		// XXX ɰ ູ  Ǿ!
+		// XXX 성능, 소켓 개량서는 사라졌습니다...
+		// XXX 성능개량서는 축복의 서가 되었다!
 		// MUSIN_SCROLL
 		if (pkItem->GetValue(0) == MUSIN_SCROLL)
 			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_MUSIN, pkItem->GetCell());
@@ -1408,7 +1408,7 @@ bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
 					AutoGiveItem(socket);
 					//TItemTable* pTable = ITEM_MANAGER::instance().GetTable(pkTarget->GetSocket(i));
 					//pkTarget->SetSocket(i, pTable->alValues[2]);
-					//  üش
+					// 깨진돌로 대체해준다
 					pkTarget->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
 				}
 			}
@@ -1417,7 +1417,7 @@ bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
 		}
 		else
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ִ ƾ ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("빼낼 수 있는 메틴석이 없습니다."));
 			return false;
 		}
 	}
@@ -1469,18 +1469,18 @@ bool CHARACTER::GiveRecallItem(LPITEM item)
 
 	if (iEmpireByMapIndex && GetEmpire() != iEmpireByMapIndex)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ġ Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("기억해 둘 수 없는 위치 입니다."));
 		return false;
 	}
 
 	int pos;
 
-	if (item->GetCount() == 1)	//  ϳ ׳ .
+	if (item->GetCount() == 1)	// 아이템이 하나라면 그냥 셋팅.
 	{
 		item->SetSocket(0, GetX());
 		item->SetSocket(1, GetY());
 	}
-	else if ((pos = GetEmptyInventory(item->GetSize())) != -1) // ׷ ʴٸ ٸ κ丮  ã´.
+	else if ((pos = GetEmptyInventory(item->GetSize())) != -1) // 그렇지 않다면 다른 인벤토리 슬롯을 찾는다.
 	{
 		LPITEM item2 = ITEM_MANAGER::instance().CreateItem(item->GetVnum(), 1);
 
@@ -1495,7 +1495,7 @@ bool CHARACTER::GiveRecallItem(LPITEM item)
 	}
 	else
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지품에 빈 공간이 없습니다."));
 		return false;
 	}
 
@@ -1526,14 +1526,14 @@ void CHARACTER::ProcessRecallItem(LPITEM item)
 		case 216:
 			iEmpireByMapIndex = -1;
 			break;
-		// Ƿ決 ϶
+		// 악룡군도 일때
 		case 301:
 		case 302:
 		case 303:
 		case 304:
 			if( GetLevel() < 90 )
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ѻ  ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템의 레벨 제한보다 레벨이 낮습니다."));
 				return;
 			}
 			else
@@ -1542,7 +1542,7 @@ void CHARACTER::ProcessRecallItem(LPITEM item)
 
 	if (iEmpireByMapIndex && GetEmpire() != iEmpireByMapIndex)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ġ Ÿ  ־ ȯ  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("기억된 위치가 타제국에 속해 있어서 귀환할 수 없습니다."));
 		item->SetSocket(0, 0);
 		item->SetSocket(1, 0);
 	}
@@ -1565,7 +1565,7 @@ void CHARACTER::__OpenPrivateShop()
 			ChatPacket(CHAT_TYPE_COMMAND, "OpenPrivateShop");
 			break;
 		default:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("      ֽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("갑옷을 벗어야 개인 상점을 열 수 있습니다."));
 			break;
 	}
 }
@@ -1580,14 +1580,14 @@ void CHARACTER::SendMyShopPriceListCmd(DWORD dwItemVnum, DWORD dwItemPrice)
 }
 
 //
-// DB ij÷   Ʈ User  ϰ   Ŀǵ带 .
+// DB 캐시로 부터 받은 리스트를 User 에게 전송하고 상점을 열라는 커맨드를 보낸다.
 //
 void CHARACTER::UseSilkBotaryReal(const TPacketMyshopPricelistHeader* p)
 {
 	const TItemPriceInfo* pInfo = (const TItemPriceInfo*)(p + 1);
 
 	if (!p->byCount)
-		//  Ʈ . dummy ͸  Ŀǵ带 ش.
+		// 가격 리스트가 없다. dummy 데이터를 넣은 커맨드를 보내준다.
 		SendMyShopPriceListCmd(1, 0);
 	else {
 		for (int idx = 0; idx < p->byCount; idx++)
@@ -1598,8 +1598,8 @@ void CHARACTER::UseSilkBotaryReal(const TPacketMyshopPricelistHeader* p)
 }
 
 //
-// ̹   ó  Open ϴ  Ʈ Load ϱ  DB ijÿ  Ʈ û Ŷ .
-// ĺʹ ٷ    .
+// 이번 접속 후 처음 상점을 Open 하는 경우 리스트를 Load 하기 위해 DB 캐시에 가격정보 리스트 요청 패킷을 보낸다.
+// 이후부터는 바로 상점을 열라는 응답을 보낸다.
 //
 void CHARACTER::UseSilkBotary(void)
 {
@@ -1627,14 +1627,14 @@ int CalculateConsume(LPCHARACTER ch)
 		const int needLife = ch->GetMaxHP() * needPercent / 100;
 		if (curLife < needLife)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ڶ   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("남은 생명력 양이 모자라 사용할 수 없습니다."));
 			return -1;
 		}
 
 		consumeLife = needLife;
 
 
-		// CheckMinLifeForWarp:  ؼ  ȵǹǷ  ּҷ ش
+		// CheckMinLifeForWarp: 독에 의해서 죽으면 안되므로 생명력 최소량는 남겨준다
 		const int minPercent	= WARP_MIN_LIFE_PERCENT;
 		const int minLife	= ch->GetMaxHP() * minPercent / 100;
 		if (curLife - needLife < minLife)
@@ -1656,7 +1656,7 @@ int CalculateConsumeSP(LPCHARACTER lpChar)
 
 	if (curSP < needSP)
 	{
-		lpChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ŷ  ڶ   ϴ."));
+		lpChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("남은 정신력 양이 모자라 사용할 수 없습니다."));
 		return -1;
 	}
 
@@ -1679,7 +1679,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			case LIMIT_LEVEL:
 				if (GetLevel() < limitValue)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ѻ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템의 레벨 제한보다 레벨이 낮습니다."));
 					return false;
 				}
 				break;
@@ -1701,17 +1701,17 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 	if ( CArenaManager::instance().IsLimitedItem( GetMapIndex(), item->GetVnum() ) == true )
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 		return false;
 	}
 
-	//    ĺʹ  ʾƵ ð Ǵ  ó. 
+	// 아이템 최초 사용 이후부터는 사용하지 않아도 시간이 차감되는 방식 처리. 
 	if (-1 != iLimitRealtimeStartFirstUseFlagIndex)
 	{
-		//  ̶   δ Socket1  ǴѴ. (Socket1 Ƚ )
+		// 한 번이라도 사용한 아이템인지 여부는 Socket1을 보고 판단한다. (Socket1에 사용횟수 기록)
 		if (0 == item->GetSocket(1))
 		{
-			// 밡ɽð Default  Limit Value  ϵ, Socket0     ϵ Ѵ. ( )
+			// 사용가능시간은 Default 값으로 Limit Value 값을 사용하되, Socket0에 값이 있으면 그 값을 사용하도록 한다. (단위는 초)
 			long duration = (0 != item->GetSocket(0)) ? item->GetSocket(0) : item->GetProto()->aLimits[iLimitRealtimeStartFirstUseFlagIndex].lValue;
 
 			if (0 == duration)
@@ -1738,7 +1738,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			{
 				if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 					return false;
 				}
 			}
@@ -1765,13 +1765,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 				if (!tree)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ں ǿ   Դϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("모닥불을 피울 수 없는 지점입니다."));
 					return false;
 				}
 
 				if (tree->IsAttr((long)(GetX()+fx), (long)(GetY()+fy), ATTR_WATER))
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ ں ǿ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물 속에 모닥불을 피울 수 없습니다."));
 					return false;
 				}
 
@@ -1856,7 +1856,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 								switch (item->GetVnum())
 								{
-									case 71049: // ܺ
+									case 71049: // 비단보따리
 										if (LC_IsYMIR() == true || LC_IsKorea() == true)
 										{
 											if (IS_BOTARYABLE_ZONE(GetMapIndex()) == true)
@@ -1865,7 +1865,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     Դϴ"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개인 상점을 열 수 없는 지역입니다"));
 											}
 										}
 										else
@@ -1892,8 +1892,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 		case ITEM_WEAPON:
 		case ITEM_ARMOR:
 		case ITEM_ROD:
-		case ITEM_RING:		// ű  
-		case ITEM_BELT:		// ű Ʈ 
+		case ITEM_RING:		// 신규 반지 아이템
+		case ITEM_BELT:		// 신규 벨트 아이템
 			// MINING
 		case ITEM_PICK:
 			// END_OF_MINING
@@ -1902,10 +1902,10 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			else
 				UnequipItem(item);
 			break;
-			//   ȥ   .
-			//  Ŭ, ȥ Ͽ item use Ŷ   .
-			// ȥ  item move Ŷ Ѵ.
-			//  ȥ Ѵ.
+			// 착용하지 않은 용혼석은 사용할 수 없다.
+			// 정상적인 클라라면, 용혼석에 관하여 item use 패킷을 보낼 수 없다.
+			// 용혼석 착용은 item move 패킷으로 한다.
+			// 착용한 용혼석은 추출한다.
 		case ITEM_DS:
 			{
 				if (!item->IsEquipped())
@@ -1924,7 +1924,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			{
 				if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 					return false;
 				}
 
@@ -1936,7 +1936,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 		case ITEM_TREASURE_BOX:
 			{
 				return false;
-				//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("  ־  ʴ° . 踦 غ."));
+				//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열쇠로 잠겨 있어서 열리지 않는것 같다. 열쇠를 구해보자."));
 			}
 			break;
 
@@ -1952,13 +1952,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 				if (item2->GetType() != ITEM_TREASURE_BOX)
 				{
-					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("   ƴѰ ."));
+					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열쇠로 여는 물건이 아닌것 같다."));
 					return false;
 				}
 
 				if (item->GetValue(0) == item2->GetValue(0))
 				{
-					//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("   ִ κ  ȵǾϴ."));
+					//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열쇠는 맞으나 아이템 주는 부분 구현이 안되었습니다."));
 					DWORD dwBoxVnum = item2->GetVnum();
 					std::vector  dwVnums;
 					std::vector  dwCounts;
@@ -1974,34 +1974,34 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							switch (dwVnums[i])
 							{
 								case CSpecialItemGroup::GOLD:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), dwCounts[i]);
 									break;
 								case CSpecialItemGroup::EXP:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ  ź  ɴϴ."));
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ġ ȹ߽ϴ."), dwCounts[i]);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 부터 신비한 빛이 나옵니다."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d의 경험치를 획득했습니다."), dwCounts[i]);
 									break;
 								case CSpecialItemGroup::MOB:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 									break;
 								case CSpecialItemGroup::SLOW:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 빨간 연기를 들이마시자 움직이는 속도가 느려졌습니다!"));
 									break;
 								case CSpecialItemGroup::DRAIN_HP:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자가 갑자기 폭발하였습니다! 생명력이 감소했습니다."));
 									break;
 								case CSpecialItemGroup::POISON:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 녹색 연기를 들이마시자 독이 온몸으로 퍼집니다!"));
 									break;
 								case CSpecialItemGroup::MOB_GROUP:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 									break;
 								default:
 									if (item_gets[i])
 									{
 										if (dwCounts[i] > 1)
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  %d  Խϴ."), item_gets[i]->GetName(), dwCounts[i]);
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 %d 개 나왔습니다."), item_gets[i]->GetName(), dwCounts[i]);
 										else
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  Խϴ."), item_gets[i]->GetName());
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 나왔습니다."), item_gets[i]->GetName());
 
 									}
 							}
@@ -2009,13 +2009,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 					}
 					else
 					{
-						ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("谡  ʴ  ."));
+						ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열쇠가 맞지 않는 것 같다."));
 						return false;
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("谡  ʴ  ."));
+					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열쇠가 맞지 않는 것 같다."));
 					return false;
 				}
 			}
@@ -2029,20 +2029,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				std::vector  item_gets;
 				int count = 0;
 
-				if (dwBoxVnum == 50033 && LC_IsYMIR()) // ˼ 
+				if (dwBoxVnum == 50033 && LC_IsYMIR()) // 알수없는 상자
 				{
 					if (GetLevel() < 15)
 					{
-						ChatPacket(CHAT_TYPE_INFO, "15 Ͽ   ϴ.");
+						ChatPacket(CHAT_TYPE_INFO, "15레벨 이하에서는 사용할 수 없습니다.");
 						return false;
 					}
 				}
 
-				if( (dwBoxVnum > 51500 && dwBoxVnum < 52000) || (dwBoxVnum >= 50255 && dwBoxVnum <= 50260) )	// ȥ
+				if( (dwBoxVnum > 51500 && dwBoxVnum < 52000) || (dwBoxVnum >= 50255 && dwBoxVnum <= 50260) )	// 용혼원석들
 				{
 					if( !(this->DragonSoul_IsQualified()) )
 					{
-						ChatPacket(CHAT_TYPE_INFO,LC_TEXT(" ȥ Ʈ Ϸϼž մϴ."));
+						ChatPacket(CHAT_TYPE_INFO,LC_TEXT("먼저 용혼석 퀘스트를 완료하셔야 합니다."));
 						return false;
 					}
 				}
@@ -2055,41 +2055,41 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						switch (dwVnums[i])
 						{
 						case CSpecialItemGroup::GOLD:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), dwCounts[i]);
 							break;
 						case CSpecialItemGroup::EXP:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ  ź  ɴϴ."));
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ġ ȹ߽ϴ."), dwCounts[i]);
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 부터 신비한 빛이 나옵니다."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d의 경험치를 획득했습니다."), dwCounts[i]);
 							break;
 						case CSpecialItemGroup::MOB:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 							break;
 						case CSpecialItemGroup::SLOW:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 빨간 연기를 들이마시자 움직이는 속도가 느려졌습니다!"));
 							break;
 						case CSpecialItemGroup::DRAIN_HP:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자가 갑자기 폭발하였습니다! 생명력이 감소했습니다."));
 							break;
 						case CSpecialItemGroup::POISON:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 녹색 연기를 들이마시자 독이 온몸으로 퍼집니다!"));
 							break;
 						case CSpecialItemGroup::MOB_GROUP:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 							break;
 						default:
 							if (item_gets[i])
 							{
 								if (dwCounts[i] > 1)
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  %d  Խϴ."), item_gets[i]->GetName(), dwCounts[i]);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 %d 개 나왔습니다."), item_gets[i]->GetName(), dwCounts[i]);
 								else
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  Խϴ."), item_gets[i]->GetName());
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 나왔습니다."), item_gets[i]->GetName());
 							}
 						}
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ƹ͵   ϴ."));
+					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("아무것도 얻을 수 없었습니다."));
 					return false;
 				}
 			}
@@ -2108,10 +2108,10 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				if (SkillLevelDown(dwVnum))
 				{
 					ITEM_MANAGER::instance().RemoveItem(item);
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ų  µ Ͽϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("스킬 레벨을 내리는데 성공하였습니다."));
 				}
 				else
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ų    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("스킬 레벨을 내릴 수 없습니다."));
 			}
 			break;
 
@@ -2119,7 +2119,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			{
 				if (IsPolymorphed())
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 					return false;
 				}
 
@@ -2131,7 +2131,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				}
 				else
 				{
-					// ο ü value 0  ų ȣ Ƿ װ .
+					// 새로운 수련서는 value 0 에 스킬 번호가 있으므로 그것을 사용.
 					dwVnum = item->GetValue(0);
 				}
 
@@ -2151,7 +2151,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 					if (distribution_test_server)
 						iReadDelay /= 3;
 
-					//ѱ  쿡 ð 24ð 
+					//한국 본섭의 경우에는 시간을 24시간 고정
 					if (LC_IsKorea())
 						iReadDelay = 86400;
 
@@ -2177,7 +2177,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						case USE_ABILITY_UP:
 							if (FindAffect(affect_type, apply_type))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 								return false;
 							}
 
@@ -2218,18 +2218,18 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						{
 							if (FindAffect(AFFECT_EXP_BONUS_EURO_FREE, aApplyInfo[item->GetValue(1)].bPointType))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 							}
 							else
 							{
 								// PC_BANG_ITEM_ADD
 								if (item->IsPCBangItem() == true)
 								{
-									// PC üũؼ ó
+									// PC방인지 체크해서 처리
 									if (CPCBangManager::instance().IsPCBangIP(GetDesc()->GetHostName()) == false)
 									{
-										// PC ƴ!
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  PC濡   ֽϴ."));
+										// PC방이 아님!
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 PC방에서만 사용할 수 있습니다."));
 										return false;
 									}
 								}
@@ -2247,7 +2247,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (quest::CQuestManager::instance().GetEventFlag("arena_potion_limit") > 0)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 									return false;
 								}
 
@@ -2261,14 +2261,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (m_nPotionLimit <= 0)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용 제한량을 초과하였습니다."));
 												return false;
 											}
 										}
 										break;
 
 									default :
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 										return false;
 										break;
 								}
@@ -2276,7 +2276,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							bool used = false;
 
-							if (item->GetValue(0) != 0) // HP 밪 ȸ
+							if (item->GetValue(0) != 0) // HP 절대값 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -2286,7 +2286,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(1) != 0)	// SP 밪 ȸ
+							if (item->GetValue(1) != 0)	// SP 절대값 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -2296,7 +2296,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(3) != 0) // HP % ȸ
+							if (item->GetValue(3) != 0) // HP % 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -2306,7 +2306,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(4) != 0) // SP % ȸ
+							if (item->GetValue(4) != 0) // SP % 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -2321,7 +2321,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								if (item->GetVnum() == 50085 || item->GetVnum() == 50086)
 								{
 									if (test_server)
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ǵ   Ͽϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("월병 또는 종자 를 사용하였습니다"));
 									SetUseSeedOrMoonBottleTime();
 								}
 								if (GetDungeon())
@@ -2348,7 +2348,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				{
 					if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 						return false;
 					}
 				}
@@ -2367,7 +2367,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								return false;
 							}
-							// 켱 ȥ ؼ ϵ Ѵ.
+							// 우선 용혼석에 관해서만 하도록 한다.
 							if (pDestItem->IsDragonSoul())
 							{
 								int ret;
@@ -2391,7 +2391,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										sprintf(buf, "Inc %ds by item{VN:%d VAL%d:%d}", ret, item->GetVnum(), ITEM_VALUE_CHARGING_AMOUNT_IDX, item->GetValue(ITEM_VALUE_CHARGING_AMOUNT_IDX));
 									}
 
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ŭ Ǿϴ."), ret);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d초 만큼 충전되었습니다."), ret);
 									item->SetCount(item->GetCount() - 1);
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_SUCCESS", buf);
 									return true;
@@ -2407,7 +2407,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										sprintf(buf, "No change by item{VN:%d VAL%d:%d}", item->GetVnum(), ITEM_VALUE_CHARGING_AMOUNT_IDX, item->GetValue(ITEM_VALUE_CHARGING_AMOUNT_IDX));
 									}
 
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("충전할 수 없습니다."));
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_FAILED", buf);
 									return false;
 								}
@@ -2423,14 +2423,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								return false;
 							}
-							// 켱 ȥ ؼ ϵ Ѵ.
+							// 우선 용혼석에 관해서만 하도록 한다.
 							if (pDestItem->IsDragonSoul())
 							{
 								int ret = pDestItem->GiveMoreTime_Fix(item->GetValue(ITEM_VALUE_CHARGING_AMOUNT_IDX));
 								char buf[128];
 								if (ret)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ŭ Ǿϴ."), ret);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d초 만큼 충전되었습니다."), ret);
 									sprintf(buf, "Increase %ds by item{VN:%d VAL%d:%d}", ret, item->GetVnum(), ITEM_VALUE_CHARGING_AMOUNT_IDX, item->GetValue(ITEM_VALUE_CHARGING_AMOUNT_IDX));
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_SUCCESS", buf);
 									item->SetCount(item->GetCount() - 1);
@@ -2438,7 +2438,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								else
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("충전할 수 없습니다."));
 									sprintf(buf, "No change by item{VN:%d VAL%d:%d}", item->GetVnum(), ITEM_VALUE_CHARGING_AMOUNT_IDX, item->GetValue(ITEM_VALUE_CHARGING_AMOUNT_IDX));
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_FAILED", buf);
 									return false;
@@ -2452,20 +2452,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						
 						switch (item->GetVnum())
 						{
-							//ũ 
+							//크리스마스 란주
 							case ITEM_NOG_POCKET:
 								{
 									/*
-									ִɷġ : item_proto value ǹ
-										̵ӵ  value 1
-										ݷ	  value 2
-										ġ    value 3
-										ӽð  value 0 ( )
+									란주능력치 : item_proto value 의미
+										이동속도  value 1
+										공격력	  value 2
+										경험치    value 3
+										지속시간  value 0 (단위 초)
 
 									*/
 									if (FindAffect(AFFECT_NOG_ABILITY))
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 										return false;
 									}
 									long time = item->GetValue(0);
@@ -2479,15 +2479,15 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 								
-							//󸶴ܿ 
+							//라마단용 사탕
 							case ITEM_RAMADAN_CANDY:
 								{
 									/*
-									ɷġ : item_proto value ǹ
-										̵ӵ  value 1
-										ݷ	  value 2
-										ġ    value 3
-										ӽð  value 0 ( )
+									사탕능력치 : item_proto value 의미
+										이동속도  value 1
+										공격력	  value 2
+										경험치    value 3
+										지속시간  value 0 (단위 초)
 
 									*/
 									long time = item->GetValue(0);
@@ -2509,7 +2509,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (CArenaManager::instance().IsArenaMap(pMarriage->ch1->GetMapIndex()) == true)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 												break;
 											}
 										}
@@ -2518,7 +2518,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (CArenaManager::instance().IsArenaMap(pMarriage->ch2->GetMapIndex()) == true)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 												break;
 											}
 										}
@@ -2533,13 +2533,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										WarpToPID(pMarriage->GetOther(GetPlayerID()));
 									}
 									else
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ° ƴϸ ȥ   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("결혼 상태가 아니면 결혼반지를 사용할 수 없습니다."));
 								}
 								break;
 
-								//  
+								//기존 용기의 망토
 							case UNIQUE_ITEM_CAPE_OF_COURAGE:
-								//󸶴   
+								//라마단 보상용 용기의 망토
 							case 70057:
 							case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
 								AggregateMonster();
@@ -2558,7 +2558,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							case 30094:
 							case 30095:
 							case 30096:
-								// ָӴ
+								// 복주머니
 								{
 									const int MAX_BAG_INFO = 26;
 									static struct LuckyBagInfo
@@ -2646,7 +2646,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (bi[i].vnum == 50300)
 									{
-										// ųü Ưϰ ش.
+										// 스킬수련서는 특수하게 준다.
 										GiveRandomSkillBook();
 									}
 									else if (bi[i].vnum == 1)
@@ -2661,7 +2661,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50004: // ̺Ʈ 
+							case 50004: // 이벤트용 감지기
 								{
 									if (item->GetSocket(0))
 									{
@@ -2669,7 +2669,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										// ó 
+										// 처음 사용시
 										int iMapIndex = GetMapIndex();
 
 										PIXEL_POSITION pos;
@@ -2682,7 +2682,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ̺Ʈ Ⱑ  ʴ° ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 곳에선 이벤트용 감지기가 동작하지 않는것 같습니다."));
 											return false;
 										}
 									}
@@ -2692,10 +2692,10 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (distance < 1000.0f)
 									{
-										// ߰!
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̺Ʈ Ⱑ źο   ϴ."));
+										// 발견!
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이벤트용 감지기가 신비로운 빛을 내며 사라집니다."));
 
-										// Ƚ  ִ  ٸ Ѵ.
+										// 사용횟수에 따라 주는 아이템을 다르게 한다.
 										struct TEventStoneInfo
 										{
 											DWORD dwVnum;
@@ -2794,7 +2794,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 														pdw[0] = info[i].dwVnum;
 														pdw[1] = info[i].count;
 
-														// ÷  Ѵ
+														// 추첨서는 소켓을 설정한다
 														DBManager::instance().ReturnQuery(QID_LOTTO, GetPlayerID(), pdw,
 																"INSERT INTO lotto_list VALUES(0, 'server%s', %u, NOW())", 
 																get_table_postfix(), GetPlayerID());
@@ -2814,7 +2814,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (len < 0 || len >= (int) sizeof(chatbuf))
 											len = sizeof(chatbuf) - 1;
 
-										++len;  // \0 ڱ 
+										++len;  // \0 문자까지 보내기
 
 										TPacketGCChat pack_chat;
 										pack_chat.header	= HEADER_GC_CHAT;
@@ -2840,11 +2840,11 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									else
 										dist = 3;
 
-									//   .
+									// 많이 사용했으면 사라진다.
 									const int STONE_DETECT_MAX_TRY = 10;
 									if (item->GetSocket(0) >= STONE_DETECT_MAX_TRY)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̺Ʈ Ⱑ   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이벤트용 감지기가 흔적도 없이 사라집니다."));
 										ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (DETECT_EVENT_STONE) 0");
 										AutoGiveItem(27002);
 										return true;
@@ -2860,7 +2860,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (len < 0 || len >= (int) sizeof(chatbuf))
 											len = sizeof(chatbuf) - 1;
 
-										++len;  // \0 ڱ 
+										++len;  // \0 문자까지 보내기
 
 										TPacketGCChat pack_chat;
 										pack_chat.header	= HEADER_GC_CHAT;
@@ -2880,8 +2880,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 27989: // 
-							case 76006: //  
+							case 27989: // 영석감지기
+							case 76006: // 선물용 영석감지기
 								{
 									LPSECTREE_MAP pMap = SECTREE_MANAGER::instance().GetMap(GetMapIndex());
 
@@ -2925,12 +2925,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("⸦ ۿϿ Ǵ  ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("감지기를 작용하였으나 감지되는 영석이 없습니다."));
 											}
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("⸦ ۿϿ Ǵ  ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("감지기를 작용하였으나 감지되는 영석이 없습니다."));
 										}
 
 										if (item->GetSocket(0) >= 6)
@@ -2943,13 +2943,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 27996: // 
+							case 27996: // 독병
 								item->SetCount(item->GetCount() - 1);
 								/*if (GetSkillLevel(SKILL_CREATE_POISON))
 								  AddAffect(AFFECT_ATT_GRADE, POINT_ATT_GRADE, 3, AFF_DRINK_POISON, 15*60, 0, true);
 								  else
 								  {
-								// ٷⰡ  50%  50% ݷ +2
+								// 독다루기가 없으면 50% 즉사 50% 공격력 +2
 								if (number(0, 1))
 								{
 								if (GetHP() > 100)
@@ -2962,12 +2962,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}*/
 								break;
 
-							case 27987: // 
-								// 50   47990
-								// 30  
-								// 10   47992
-								// 7   û 47993
-								// 3    47994
+							case 27987: // 조개
+								// 50  돌조각 47990
+								// 30  꽝
+								// 10  백진주 47992
+								// 7   청진주 47993
+								// 3   피진주 47994
 								{
 									item->SetCount(item->GetCount() - 1);
 
@@ -2975,7 +2975,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (r <= 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Խϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("조개에서 돌조각이 나왔습니다."));
 										AutoGiveItem(27990);
 									}
 									else
@@ -2994,33 +2994,33 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 										if (r <= prob_table[0])
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("조개가 흔적도 없이 사라집니다."));
 										}
 										else if (r <= prob_table[1])
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("조개에서 백진주가 나왔습니다."));
 											AutoGiveItem(27992);
 										}
 										else if (r <= prob_table[2])
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ûְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("조개에서 청진주가 나왔습니다."));
 											AutoGiveItem(27993);
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("조개에서 피진주가 나왔습니다."));
 											AutoGiveItem(27994);
 										}
 									}
 								}
 								break;
 
-							case 71013: // 
+							case 71013: // 축제용폭죽
 								CreateFly(number(FLY_FIREWORK1, FLY_FIREWORK6), this);
 								item->SetCount(item->GetCount() - 1);
 								break;
 
-							case 50100: // 
+							case 50100: // 폭죽
 							case 50101:
 							case 50102:
 							case 50103:
@@ -3031,7 +3031,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								item->SetCount(item->GetCount() - 1);
 								break;
 
-							case 50200: // 
+							case 50200: // 보따리
 								if (LC_IsYMIR() == true || LC_IsKorea() == true)
 								{
 									if (IS_BOTARYABLE_ZONE(GetMapIndex()) == true)
@@ -3040,7 +3040,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     Դϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개인 상점을 열 수 없는 지역입니다"));
 									}
 								}
 								else
@@ -3054,13 +3054,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								item->SetCount(item->GetCount() - 1);
 								break;
 
-							case 50301: // ַ ü
+							case 50301: // 통솔력 수련서
 							case 50302:
 							case 50303:
 								{
 									if (IsPolymorphed() == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 										return false;
 									}
 
@@ -3068,13 +3068,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (lv < item->GetValue(0))
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å ʹ  ϱⰡ ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 책은 너무 어려워 이해하기가 힘듭니다."));
 										return false;
 									}
 
 									if (lv >= item->GetValue(1))
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å ƹ      ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 책은 아무리 봐도 도움이 될 것 같지 않습니다."));
 										return false;
 									}
 
@@ -3090,31 +3090,31 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50304: //  ü
+							case 50304: // 연계기 수련서
 							case 50305:
 							case 50306:
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
 									if (GetSkillLevel(SKILL_COMBO) == 0 && GetLevel() < 30)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 30 DZ       ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("레벨 30이 되기 전에는 습득할 수 있을 것 같지 않습니다."));
 										return false;
 									}
 
 									if (GetSkillLevel(SKILL_COMBO) == 1 && GetLevel() < 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 50 DZ       ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("레벨 50이 되기 전에는 습득할 수 있을 것 같지 않습니다."));
 										return false;
 									}
 
 									if (GetSkillLevel(SKILL_COMBO) >= 2)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("연계기는 더이상 수련할 수 없습니다."));
 										return false;
 									}
 
@@ -3131,13 +3131,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 								}
 								break;
-							case 50311: //  ü
+							case 50311: // 언어 수련서
 							case 50312:
 							case 50313:
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
@@ -3145,7 +3145,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									int iPct = MINMAX(0, item->GetValue(1), 100);
 									if (GetSkillLevel(dwSkillVnum)>=20 || dwSkillVnum-SKILL_LANGUAGE1+1 == GetEmpire())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ϻϰ ˾Ƶ  ִ ̴."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 완벽하게 알아들을 수 있는 언어이다."));
 										return false;
 									}
 
@@ -3161,11 +3161,11 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50061 : // Ϻ  ȯ ų ü
+							case 50061 : // 일본 말 소환 스킬 수련서
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
@@ -3174,7 +3174,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum) >= 10)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 수련할 수 없습니다."));
 										return false;
 									}
 
@@ -3190,13 +3190,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50314: case 50315: case 50316: //  ü
-							case 50323: case 50324: //  ü
-							case 50325: case 50326: // ö ü
+							case 50314: case 50315: case 50316: // 변신 수련서
+							case 50323: case 50324: // 증혈 수련서
+							case 50325: case 50326: // 철통 수련서
 								{
 									if (IsPolymorphed() == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 										return false;
 									}
 									
@@ -3229,25 +3229,25 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetLevel() < iLevelLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å    ÷ մϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 책을 읽으려면 레벨을 더 올려야 합니다."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) >= 40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 수련할 수 없습니다."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) < iSkillLevelLowLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å ʹ  ϱⰡ ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 책은 너무 어려워 이해하기가 힘듭니다."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) >= iSkillLevelHighLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" åδ  ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 책으로는 더 이상 수련할 수 없습니다."));
 										return false;
 									}
 
@@ -3269,7 +3269,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
@@ -3278,7 +3278,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum)>=40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 수련할 수 없습니다."));
 										return false;
 									}
 
@@ -3311,7 +3311,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
@@ -3320,7 +3320,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum)>=40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 수련할 수 없습니다."));
 										return false;
 									}
 
@@ -3341,7 +3341,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변신중에는 책을 읽을수 없습니다."));
 										return false;
 										
 									}
@@ -3350,7 +3350,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetLevel() < 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¸ ų   ִ  ƴմϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 승마 스킬을 수련할 수 있는 레벨이 아닙니다."));
 										return false;
 									}
 
@@ -3358,9 +3358,9 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									{
 										if (FindAffect(AFFECT_SKILL_NO_BOOK_DELAY))
 										{
-											// ־ȼ ߿ ð  
+											// 주안술서 사용중에는 시간 제한 무시
 											RemoveAffect(AFFECT_SKILL_NO_BOOK_DELAY);
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("־ȼ  ȭԸ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("주안술서를 통해 주화입마에서 빠져나왔습니다."));
 										}
 										else
 										{
@@ -3373,14 +3373,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											GetSkillLevel(SKILL_HORSE_WILDATTACK) + GetSkillLevel(SKILL_HORSE_CHARGE) + GetSkillLevel(SKILL_HORSE_ESCAPE) >= 60 ||
 											GetSkillLevel(SKILL_HORSE_WILDATTACK_RANGE) + GetSkillLevel(SKILL_HORSE_CHARGE) + GetSkillLevel(SKILL_HORSE_ESCAPE) >= 60)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻ ¸ ü   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 승마 수련서를 읽을 수 없습니다."));
 										return false;
 									}
 
 									if (number(1, 100) <= iPct)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ ü о ¸ ų Ʈ ϴ."));
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ʈδ ¸ ų  ø  ֽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("승마 수련서를 읽어 승마 스킬 포인트를 얻었습니다."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("얻은 포인트로는 승마 스킬의 레벨을 올릴 수 있습니다."));
 										PointChange(POINT_HORSE_SKILL, 1);
 
 										int iReadDelay = number(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
@@ -3391,15 +3391,15 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ ü ؿ Ͽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("승마 수련서 이해에 실패하였습니다."));
 									}
 
 									ITEM_MANAGER::instance().RemoveItem(item);
 								}
 								break;
 
-							case 70102: // 
-							case 70103: // 
+							case 70102: // 선두
+							case 70103: // 선두
 								{
 									if (GetAlignment() >= 0)
 										return false;
@@ -3413,13 +3413,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (delta / 10 > 0)
 									{
-										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT(" ±.   𰡰   ̾."));
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ %d Ͽϴ."), delta/10);
+										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("마음이 맑아지는군. 가슴을 짓누르던 무언가가 좀 가벼워진 느낌이야."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("선악치가 %d 증가하였습니다."), delta/10);
 									}
 								}
 								break;
 
-							case 71107: // õ
+							case 71107: // 천도복숭아
 								{
 									int val = item->GetValue(0);
 									int interval = item->GetValue(1);
@@ -3430,18 +3430,18 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									{
 										if (test_server == false)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 사용할 수 없습니다."));
 											return false;
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׽Ʈ  ð "));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("테스트 서버 시간제한 통과"));
 										}
 									}
 									
 									if (GetAlignment() == 200000)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ  ̻ ø  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("선악치를 더 이상 올릴 수 없습니다."));
 										return false;
 									}
 									
@@ -3457,8 +3457,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									item->SetCount(item->GetCount()-1);
 									pPC->SetFlag("mythical_peach.last_use_time", get_global_time());
 
-									ChatPacket(CHAT_TYPE_TALKING, LC_TEXT(" ±.   𰡰   ̾."));
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ %d Ͽϴ."), val);
+									ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("마음이 맑아지는군. 가슴을 짓누르던 무언가가 좀 가벼워진 느낌이야."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("선악치가 %d 증가하였습니다."), val);
 
 									char buf[256 + 1];
 									snprintf(buf, sizeof(buf), "%d %d", old_alignment, GetAlignment() / 10);
@@ -3466,7 +3466,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71109: // Ż
+							case 71109: // 탈석서
 							case 72719:
 								{
 									LPITEM item2;
@@ -3490,7 +3490,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											case ARMOR_EAR:
 											case ARMOR_WRIST:
 											case ARMOR_NECK:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("빼낼 영석이 없습니다"));
 												return false;
 											}
 											break;
@@ -3517,7 +3517,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (socket.size() == 0)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("빼낼 영석이 없습니다"));
 										return false;
 									}
 
@@ -3537,17 +3537,17 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 70201:   // Ż
-							case 70202:   // ()
-							case 70203:   // (ݻ)
-							case 70204:   // ()
-							case 70205:   // ()
-							case 70206:   // ()
+							case 70201:   // 탈색제
+							case 70202:   // 염색약(흰색)
+							case 70203:   // 염색약(금색)
+							case 70204:   // 염색약(빨간색)
+							case 70205:   // 염색약(갈색)
+							case 70206:   // 염색약(검은색)
 								{
 									// NEW_HAIR_STYLE_ADD
 									if (GetPart(PART_HAIR) >= 1001)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ŸϿ  Ż Ұմϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("현재 헤어스타일에서는 염색과 탈색이 불가능합니다."));
 									}
 									// END_NEW_HAIR_STYLE_ADD
 									else
@@ -3575,7 +3575,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d  Ǿ ٽ Ͻ  ֽϴ."), last_dye_level+3);
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 레벨이 되어야 다시 염색하실 수 있습니다."), last_dye_level+3);
 											}
 										}
 									}
@@ -3595,7 +3595,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										for (int i = 0; i < count; i++)
 										{
 											if (dwVnums[i] == CSpecialItemGroup::GOLD)
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), dwCounts[i]);
 										}
 
 										item->SetCount(item->GetCount() - 1);
@@ -3616,8 +3616,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									if (item->GetVnum() == ITEM_VALENTINE_ROSE && SEX_MALE==GET_SEX(this) ||
 										item->GetVnum() == ITEM_VALENTINE_CHOCOLATE && SEX_FEMALE==GET_SEX(this))
 									{
-										//  ʾ   .
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+										// 성별이 맞지않아 쓸 수 없다.
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성별이 맞지않아 이 아이템을 열 수 없습니다."));
 										return false;
 									}
 
@@ -3640,8 +3640,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									if (item->GetVnum() == ITEM_WHITEDAY_CANDY && SEX_MALE==GET_SEX(this) ||
 										item->GetVnum() == ITEM_WHITEDAY_ROSE && SEX_FEMALE==GET_SEX(this))
 									{
-										//  ʾ   .
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+										// 성별이 맞지않아 쓸 수 없다.
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성별이 맞지않아 이 아이템을 열 수 없습니다."));
 										return false;
 									}
 
@@ -3651,7 +3651,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50011: // 
+							case 50011: // 월광보합
 								{
 									DWORD dwBoxVnum = 50011;
 									std::vector  dwVnums;
@@ -3673,41 +3673,41 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											switch (dwVnums[i])
 											{
 											case CSpecialItemGroup::GOLD:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), dwCounts[i]);
 												break;
 
 											case CSpecialItemGroup::EXP:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ  ź  ɴϴ."));
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ġ ȹ߽ϴ."), dwCounts[i]);
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 부터 신비한 빛이 나옵니다."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d의 경험치를 획득했습니다."), dwCounts[i]);
 												break;
 
 											case CSpecialItemGroup::MOB:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 												break;
 
 											case CSpecialItemGroup::SLOW:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 빨간 연기를 들이마시자 움직이는 속도가 느려졌습니다!"));
 												break;
 
 											case CSpecialItemGroup::DRAIN_HP:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자가 갑자기 폭발하였습니다! 생명력이 감소했습니다."));
 												break;
 
 											case CSpecialItemGroup::POISON:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 나온 녹색 연기를 들이마시자 독이 온몸으로 퍼집니다!"));
 												break;
 
 											case CSpecialItemGroup::MOB_GROUP:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 몬스터가 나타났습니다!"));
 												break;
 
 											default:
 												if (item_gets[i])
 												{
 													if (dwCounts[i] > 1)
-														ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  %d  Խϴ."), item_gets[i]->GetName(), dwCounts[i]);
+														ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 %d 개 나왔습니다."), item_gets[i]->GetName(), dwCounts[i]);
 													else
-														ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ %s  Խϴ."), item_gets[i]->GetName());
+														ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상자에서 %s 가 나왔습니다."), item_gets[i]->GetName());
 												}
 												break;
 											}
@@ -3715,7 +3715,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ƹ͵   ϴ."));
+										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("아무것도 얻을 수 없었습니다."));
 										return false;
 									}
 								}
@@ -3732,7 +3732,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							case 50107:
 								{
 									EffectPacket(SE_CHINA_FIREWORK);
-									//   ÷ش
+									// 스턴 공격을 올려준다
 									AddAffect(AFFECT_CHINA_FIREWORK, POINT_STUN_PCT, 30, AFF_CHINA_FIREWORK, 5*60, 0, true);
 									item->SetCount(item->GetCount()-1);
 								}
@@ -3742,12 +3742,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 										return false;
 									}
 
 									EffectPacket(SE_SPIN_TOP);
-									//   ÷ش
+									// 스턴 공격을 올려준다
 									AddAffect(AFFECT_CHINA_FIREWORK, POINT_STUN_PCT, 30, AFF_CHINA_FIREWORK, 5*60, 0, true);
 									item->SetCount(item->GetCount()-1);
 								}
@@ -3773,16 +3773,16 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								VCardUse(this, this, item);
 								break;
 
-							case ITEM_ELK_VNUM: // ٷ
+							case ITEM_ELK_VNUM: // 돈꾸러미
 								{
 									int iGold = item->GetSocket(0);
 									ITEM_MANAGER::instance().RemoveItem(item);
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), iGold);
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), iGold);
 									PointChange(POINT_GOLD, iGold);
 								}
 								break;
 
-								// ǥ 
+								//군주의 증표 
 							case 70021:
 								{
 									int HealPrice = quest::CQuestManager::instance().GetEventFlag("MonarchHealGold");
@@ -3792,10 +3792,10 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									if (CMonarch::instance().HealMyEmpire(this, HealPrice))
 									{
 										char szNotice[256];
-										snprintf(szNotice, sizeof(szNotice), LC_TEXT(" ູ  %s  HP,SP  äϴ."), EMPIRE_NAME(GetEmpire()));
+										snprintf(szNotice, sizeof(szNotice), LC_TEXT("군주의 축복으로 이지역 %s 유저는 HP,SP가 모두 채워집니다."), EMPIRE_NAME(GetEmpire()));
 										SendNoticeMap(szNotice, GetMapIndex(), false);
 										
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ູ Ͽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주의 축복을 사용하였습니다."));
 									}
 								}
 								break;
@@ -3805,7 +3805,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71092 : //  ü ӽ
+							case 71092 : // 변신 해체부 임시
 								{
 									if (m_pkChrTarget != NULL)
 									{
@@ -3826,9 +3826,9 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71051 : // 簡
+							case 71051 : // 진재가
 								{
-									// , ̰, Ʈ 簡 
+									// 유럽, 싱가폴, 베트남 진재가 사용금지
 									// if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam())
 										// return false;
 
@@ -3848,13 +3848,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 										return false;
 									}
 
 									if (item2->AddRareAttribute() == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ӽ ߰ Ǿϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성공적으로 속성이 추가 되었습니다"));
 
 										int iAddedIdx = item2->GetRareAttrCount() + 4;
 										char buf[21];
@@ -3874,14 +3874,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   Ӽ ߰  ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 이 아이템으로 속성을 추가할 수 없습니다"));
 									}
 								}
 								break;
 
-							case 71052 : // 
+							case 71052 : // 진재경
 								{
-									// , ̰, Ʈ 簡 
+									// 유럽, 싱가폴, 베트남 진재가 사용금지
 									// if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam())
 										// return false;
 
@@ -3901,7 +3901,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 										return false;
 									}
 
@@ -3915,7 +3915,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų Ӽ ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변경 시킬 속성이 없습니다"));
 									}
 								}
 								break;
@@ -3928,8 +3928,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							case ITEM_AUTO_SP_RECOVERY_M:
 							case ITEM_AUTO_SP_RECOVERY_L:
 							case ITEM_AUTO_SP_RECOVERY_X:
-							// ù  ϴ  ġ ...
-							// ׷ ׳ ϵ ڵ.  ڿ ڵ ۵.
+							// 무시무시하지만 이전에 하던 걸 고치기는 무섭고...
+							// 그래서 그냥 하드 코딩. 선물 상자용 자동물약 아이템들.
 							case REWARD_BOX_ITEM_AUTO_SP_RECOVERY_XS: 
 							case REWARD_BOX_ITEM_AUTO_SP_RECOVERY_S: 
 							case REWARD_BOX_ITEM_AUTO_HP_RECOVERY_XS: 
@@ -3939,7 +3939,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 										return false;
 									}
 
@@ -3982,7 +3982,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 										if (-1 == pos)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지품에 빈 공간이 없습니다."));
 											break;
 										}
 
@@ -4092,7 +4092,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (get_global_time() - last_use_time < 10*60)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 사용할 수 없습니다."));
 										return false;
 									}
 
@@ -4111,7 +4111,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (quest::CQuestManager::instance().GetEventFlag("arena_potion_limit") > 0)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 									return false;
 								}
 
@@ -4125,21 +4125,21 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (m_nPotionLimit <= 0)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용 제한량을 초과하였습니다."));
 												return false;
 											}
 										}
 										break;
 
 									default :
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 										return false;
 								}
 							}
 
 							bool used = false;
 
-							if (item->GetValue(0) != 0) // HP 밪 ȸ
+							if (item->GetValue(0) != 0) // HP 절대값 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -4149,7 +4149,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(1) != 0)	// SP 밪 ȸ
+							if (item->GetValue(1) != 0)	// SP 절대값 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -4159,7 +4159,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(3) != 0) // HP % ȸ
+							if (item->GetValue(3) != 0) // HP % 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -4169,7 +4169,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(4) != 0) // SP % ȸ
+							if (item->GetValue(4) != 0) // SP % 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -4184,7 +4184,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								if (item->GetVnum() == 50085 || item->GetVnum() == 50086)
 								{
 									if (test_server)
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ǵ   Ͽϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("월병 또는 종자 를 사용하였습니다"));
 									SetUseSeedOrMoonBottleTime();
 								}
 								if (GetDungeon())
@@ -4207,7 +4207,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						{
 							if (quest::CQuestManager::instance().GetEventFlag("arena_potion_limit") > 0)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 								return false;
 							}
 						
@@ -4223,14 +4223,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									{
 										if (m_nPotionLimit <= 0)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용 제한량을 초과하였습니다."));
 											return false;
 										}
 									}
 									break;
 
 								default :
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 									return false;
 							}
 						}
@@ -4351,22 +4351,22 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							const int MEMORY_PORTAL = 2;
 
 
-							// gm_guild_build, oxevent ʿ ȯ ȯ  ϰ 
+							// gm_guild_build, oxevent 맵에서 귀환부 귀환기억부 를 사용못하게 막음
 							if (GetMapIndex() == 200 || GetMapIndex() == 113)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ġ   ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("현재 위치에서 사용할 수 없습니다."));
 								return false;
 							}
 
 							if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 중에는 이용할 수 없는 물품입니다."));
 								return false;
 							}
 
 							if (m_pkWarpEvent)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̵ غ Ǿ ȯθ Ҽ ϴ"));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이동할 준비가 되어있음으로 귀환부를 사용할수 없습니다"));
 								return false;
 							}
 
@@ -4377,7 +4377,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								return false;
 							// END_OF_CONSUME_LIFE_WHEN_USE_WARP_ITEM
 
-							if (item->GetValue(0) == TOWN_PORTAL) // ȯ
+							if (item->GetValue(0) == TOWN_PORTAL) // 귀환부
 							{
 								if (item->GetSocket(0) == 0)
 								{
@@ -4403,20 +4403,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								else
 								{
 									if (test_server)
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ġ "));	
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("원래 위치로 복귀"));	
 
 									ProcessRecallItem(item);
 								}
 							}
-							else if (item->GetValue(0) == MEMORY_PORTAL) // ȯ
+							else if (item->GetValue(0) == MEMORY_PORTAL) // 귀환기억부
 							{
 								if (item->GetSocket(0) == 0)
 								{
 									if (GetDungeon())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȿ %s%s   ϴ."),
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("던전 안에서는 %s%s 사용할 수 없습니다."),
 												item->GetName(),
-												g_iUseLocale ? "" : (under_han(item->GetName()) ? LC_TEXT("") : LC_TEXT("")));
+												g_iUseLocale ? "" : (under_han(item->GetName()) ? LC_TEXT("을") : LC_TEXT("를")));
 										return false;
 									}
 
@@ -4449,21 +4449,21 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							if (item2->IsEquipped()) // Fix
 								return false;
 	
-							if (item2->GetVnum() >= 28330 && item2->GetVnum() <= 28343) // +3
+							if (item2->GetVnum() >= 28330 && item2->GetVnum() <= 28343) // 영석+3
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("+3      ϴ"));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("+3 영석은 이 아이템으로 개량할 수 없습니다"));
 								return false;
 							}
 							
-							if (item2->GetVnum() >= 28430 && item2->GetVnum() <= 28443)  // +4
+							if (item2->GetVnum() >= 28430 && item2->GetVnum() <= 28443)  // 영석+4
 							{
-								if (item->GetVnum() == 71056) // ûǼ
+								if (item->GetVnum() == 71056) // 청룡의숨결
 								{
 									RefineItem(item, item2);
 								}
 								else
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ϴ"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("영석은 이 아이템으로 개량할 수 없습니다"));
 								}
 							}
 							else
@@ -4493,12 +4493,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								BuffOnAttr_RemoveBuffsFromItem(item2);
 							}
 
-							// [NOTE] ڽƬ ۿ     Ӽ οϵ, 簡  ƴ޶ û ־.
-							//  ANTI_CHANGE_ATTRIBUTE   Flag ߰Ͽ ȹ  ϰ Ʈ   ֵ  ̾
-							// ׵ ʿ ġ  ش޷ ׳ ⼭ ... -_-
+							// [NOTE] 코스튬 아이템에는 아이템 최초 생성시 랜덤 속성을 부여하되, 재경재가 등등은 막아달라는 요청이 있었음.
+							// 원래 ANTI_CHANGE_ATTRIBUTE 같은 아이템 Flag를 추가하여 기획 레벨에서 유연하게 컨트롤 할 수 있도록 할 예정이었으나
+							// 그딴거 필요없으니 닥치고 빨리 해달래서 그냥 여기서 막음... -_-
 							if (ITEM_COSTUME == item2->GetType())
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 								return false;
 							}
 
@@ -4521,7 +4521,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 										if (i == ITEM_SOCKET_MAX_NUM)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("û   ʽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("청소할 석이 박혀있지 않습니다."));
 											return false;
 										}
 
@@ -4553,21 +4553,21 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								case USE_CHANGE_ATTRIBUTE :
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 										return false;
 									}
 
 									if (item2->GetAttributeCount() == 0)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ӽ ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변경할 속성이 없습니다."));
 										return false;
 									}
 
 									if (GM_PLAYER == GetGMLevel() && false == test_server)
 									{
 										//
-										// Event Flag     Ӽ   ð   ð 귶 ˻ϰ
-										// ð  귶ٸ  Ӽ濡  ð  ش.
+										// Event Flag 를 통해 이전에 아이템 속성 변경을 한 시간으로 부터 충분한 시간이 흘렀는지 검사하고
+										// 시간이 충분히 흘렀다면 현재 속성변경에 대한 시간을 설정해 준다.
 										//
 
 										DWORD dwChangeItemAttrCycle = quest::CQuestManager::instance().GetEventFlag(msc_szChangeItemAttrCycleFlag);
@@ -4584,7 +4584,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 											// if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)
 											// {
-												// ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ٲ %d ̳ ٽ   ϴ.(%d  )"),
+												// ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 바꾼지 %d분 이내에는 다시 변경할 수 없습니다.(%d 분 남음)"),
 														// dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
 												// return false;
 											// }
@@ -4614,8 +4614,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									else
 									{
-										//  Ưó
-										//  簡 ߰ ȵɰŶ Ͽ ϵ ڵ.
+										// 연재경 특수처리
+										// 절대로 연재가 추가 안될거라 하여 하드 코딩함.
 										if (item->GetVnum() == 71151 || item->GetVnum() == 76023)
 										{
 											if ((item2->GetType() == ITEM_WEAPON)
@@ -4632,20 +4632,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												}
 												if (false == bCanUse)
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ұմϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적용 레벨보다 높아 사용이 불가능합니다."));
 													break;
 												}
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʿ  մϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무기와 갑옷에만 사용 가능합니다."));
 												break;
 											}
 										}
 										item2->ChangeAttribute();
 									}
 
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ Ͽϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경하였습니다."));
 									{
 										char buf[21];
 										snprintf(buf, sizeof(buf), "%u", item2->GetID());
@@ -4658,14 +4658,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								case USE_ADD_ATTRIBUTE :
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 										return false;
 									}
 
 									if (item2->GetAttributeCount() < 4)
 									{
-										// 簡 Ưó
-										//  簡 ߰ ȵɰŶ Ͽ ϵ ڵ.
+										// 연재가 특수처리
+										// 절대로 연재가 추가 안될거라 하여 하드 코딩함.
 										if (item->GetVnum() == 71152 || item->GetVnum() == 76024)
 										{
 											if ((item2->GetType() == ITEM_WEAPON)
@@ -4682,13 +4682,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												}
 												if (false == bCanUse)
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ұմϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적용 레벨보다 높아 사용이 불가능합니다."));
 													break;
 												}
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʿ  մϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무기와 갑옷에만 사용 가능합니다."));
 												break;
 											}
 										}
@@ -4698,7 +4698,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
 										{
 											item2->AddAttribute();
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성 추가에 성공하였습니다."));
 
 											int iAddedIdx = item2->GetAttributeCount() - 1;
 											LogManager::instance().ItemLog(
@@ -4713,7 +4713,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성 추가에 실패하였습니다."));
 											LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE_FAIL", buf);
 										}
 
@@ -4721,20 +4721,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̻   ̿Ͽ Ӽ ߰  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더이상 이 아이템을 이용하여 속성을 추가할 수 없습니다."));
 									}
 									break;
 
 								case USE_ADD_ATTRIBUTE2 :
-									// ູ  
-									// 簡񼭸  Ӽ 4 ߰ Ų ۿ ؼ ϳ Ӽ  ٿش.
+									// 축복의 구슬 
+									// 재가비서를 통해 속성을 4개 추가 시킨 아이템에 대해서 하나의 속성을 더 붙여준다.
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
 										return false;
 									}
 
-									// Ӽ ̹ 4 ߰ Ǿ  Ӽ ߰ ϴ.
+									// 속성이 이미 4개 추가 되었을 때만 속성을 추가 가능하다.
 									if (item2->GetAttributeCount() == 4)
 									{
 										char buf[21];
@@ -4743,7 +4743,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (number(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
 										{
 											item2->AddAttribute();
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성 추가에 성공하였습니다."));
 
 											int iAddedIdx = item2->GetAttributeCount() - 1;
 											LogManager::instance().ItemLog(
@@ -4758,7 +4758,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성 추가에 실패하였습니다."));
 											LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE2_FAIL", buf);
 										}
 
@@ -4766,11 +4766,11 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else if (item2->GetAttributeCount() == 5)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ̿Ͽ Ӽ ߰  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 이상 이 아이템을 이용하여 속성을 추가할 수 없습니다."));
 									}
 									else if (item2->GetAttributeCount() < 4)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 簡񼭸 ̿Ͽ Ӽ ߰ ּ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("먼저 재가비서를 이용하여 속성을 추가시켜 주세요."));
 									}
 									else
 									{
@@ -4791,12 +4791,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												if (number(1, 100) <= 50)
 												{
 													item2->SetAccessorySocketMaxGrade(item2->GetAccessorySocketMaxGrade() + 1);
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߰Ǿϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소켓이 성공적으로 추가되었습니다."));
 													LogManager::instance().ItemLog(this, item, "ADD_SOCKET_SUCCESS", buf);
 												}
 												else
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߰ Ͽϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소켓 추가에 실패하였습니다."));
 													LogManager::instance().ItemLog(this, item, "ADD_SOCKET_FAIL", buf);
 												}
 
@@ -4804,12 +4804,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׼ ̻  ߰  ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 액세서리에는 더이상 소켓을 추가할 공간이 없습니다."));
 											}
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ߰   Դϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템으로 소켓을 추가할 수 없는 아이템입니다."));
 										}
 									}
 									break;
@@ -4826,12 +4826,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											if (number(1, 100) <= aiAccessorySocketPutPct[item2->GetAccessorySocketGrade()])
 											{
 												item2->SetAccessorySocketGrade(item2->GetAccessorySocketGrade() + 1);
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͽϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("장착에 성공하였습니다."));
 												LogManager::instance().ItemLog(this, item, "PUT_SOCKET_SUCCESS", buf);
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͽϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("장착에 실패하였습니다."));
 												LogManager::instance().ItemLog(this, item, "PUT_SOCKET_FAIL", buf);
 											}
 
@@ -4840,19 +4840,19 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										else
 										{
 											if (item2->GetAccessorySocketMaxGrade() == 0)
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̾Ƹ Ǽ  ߰ؾմϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("먼저 다이아몬드로 악세서리에 소켓을 추가해야합니다."));
 											else if (item2->GetAccessorySocketMaxGrade() < ITEM_ACCESSORY_SOCKET_MAX_NUM)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׼ ̻   ϴ."));
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̾Ƹ  ߰ؾմϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 액세서리에는 더이상 장착할 소켓이 없습니다."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다이아몬드로 소켓을 추가해야합니다."));
 											}
 											else
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׼ ̻    ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 액세서리에는 더이상 보석을 장착할 수 없습니다."));
 										}
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템을 장착할 수 없습니다."));
 									}
 									break;
 							}
@@ -4869,7 +4869,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (m_pkFishingEvent)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̳ Ƴ  ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시 중에 미끼를 갈아끼울 수 없습니다."));
 								return false;
 							}
 
@@ -4880,11 +4880,11 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (weapon->GetSocket(2))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ִ ̳  %s ϴ."), item->GetName());
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 꽂혀있던 미끼를 빼고 %s를 끼웁니다."), item->GetName());
 							}
 							else
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô뿡 %s ̳ ϴ."), item->GetName());
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시대에 %s를 미끼로 끼웁니다."), item->GetName());
 							}
 
 							weapon->SetSocket(2, item->GetValue(0));
@@ -4901,18 +4901,18 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						{
 							if (FindAffect(item->GetValue(0), aApplyInfo[item->GetValue(1)].bPointType))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 							}
 							else
 							{
 								// PC_BANG_ITEM_ADD
 								if (item->IsPCBangItem() == true)
 								{
-									// PC üũؼ ó
+									// PC방인지 체크해서 처리
 									if (CPCBangManager::instance().IsPCBangIP(GetDesc()->GetHostName()) == false)
 									{
-										// PC ƴ!
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  PC濡   ֽϴ."));
+										// PC방이 아님!
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 PC방에서만 사용할 수 있습니다."));
 										return false;
 									}
 								}
@@ -4929,7 +4929,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						item->SetCount(item->GetCount() - 1);
 						break;
 
-					//   ų  ó	
+					// 물약 제조 스킬용 레시피 처리	
 					case USE_RECIPE :
 						{
 							LPITEM pSource1 = FindSpecifyItem(item->GetValue(1));
@@ -4942,7 +4942,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource1 == NULL)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ᰡ մϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약 조합을 위한 재료가 부족합니다."));
 									return false;
 								}
 							}
@@ -4951,7 +4951,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource2 == NULL)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ᰡ մϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약 조합을 위한 재료가 부족합니다."));
 									return false;
 								}
 							}
@@ -4960,7 +4960,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource1->GetCount() < dwSourceCount1)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) մϴ."), pSource1->GetName());
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("재료(%s)가 부족합니다."), pSource1->GetName());
 									return false;
 								}
 
@@ -4971,7 +4971,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource2->GetCount() < dwSourceCount2)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) մϴ."), pSource2->GetName());
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("재료(%s)가 부족합니다."), pSource2->GetName());
 									return false;
 								}
 
@@ -4982,7 +4982,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (!pBottle || pBottle->GetCount() < 1)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ڸϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("빈 병이 모자릅니다."));
 								return false;
 							}
 
@@ -4990,7 +4990,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (number(1, 100) > item->GetValue(5))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߽ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("물약 제조에 실패했습니다."));
 								return false;
 							}
 
@@ -5033,7 +5033,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 					if (item->GetValue(5) == p->alValues[5])
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ƾ    ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같은 종류의 메틴석은 여러개 부착할 수 없습니다."));
 						return false;
 					}
 				}
@@ -5042,7 +5042,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				{
 					if (!IS_SET(item->GetWearFlag(), WEARABLE_BODY) || !IS_SET(item2->GetWearFlag(), WEARABLE_BODY))
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ƾ    ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 장비에 부착할 수 없습니다."));
 						return false;
 					}
 				}
@@ -5050,28 +5050,28 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				{
 					if (!IS_SET(item->GetWearFlag(), WEARABLE_WEAPON))
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ƾ ⿡   ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 무기에 부착할 수 없습니다."));
 						return false;
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ִ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
 					return false;
 				}
 
 				for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 					if (item2->GetSocket(i) >= 1 && item2->GetSocket(i) <= 2 && item2->GetSocket(i) >= item->GetValue(2))
 					{
-						//  Ȯ
+						// 석 확률
 						if (number(1, 100) <= 30)
 						{
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ƾ  Ͽϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 성공하였습니다."));
 							item2->SetSocket(i, item->GetVnum());
 						}
 						else
 						{
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ƾ  Ͽϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 실패하였습니다."));
 							item2->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
 						}
 
@@ -5081,7 +5081,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 					}
 
 				if (i == ITEM_SOCKET_MAX_NUM)
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ִ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
 			}
 			break;
 
@@ -5100,7 +5100,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			break;
 
 		case ITEM_BLEND:
-			// ο ʵ
+			// 새로운 약초들
 			sys_log(0,"ITEM_BLEND!!");
 			if (Blend_Item_find(item->GetVnum()))
 			{
@@ -5116,13 +5116,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				
 				if (FindAffect(affect_type, apply_type))
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 				}
 				else
 				{
 					if (FindAffect(AFFECT_EXP_BONUS_EURO_FREE, POINT_RESIST_MAGIC))
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
 					}
 					else
 					{
@@ -5194,7 +5194,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 	if (!item->CanUsedBy(this))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군직이 맞지않아 이 아이템을 사용할 수 없습니다."));
 		return false;
 	}
 
@@ -5203,7 +5203,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 	if (false == FN_check_item_sex(this, item))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성별이 맞지않아 이 아이템을 사용할 수 없습니다."));
 		return false;
 	}
 
@@ -5212,43 +5212,43 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 	{
 		if (false == IS_SUMMONABLE_ZONE(GetMapIndex()))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ҽ ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용할수 없습니다."));
 			return false;
 		}
 
-		// ȥ   SUMMONABLE_ZONE ִ° WarpToPC() üũ
+		// 경혼반지 사용지 상대방이 SUMMONABLE_ZONE에 있는가는 WarpToPC()에서 체크
 		
-		//Ÿ  ʿ ȯθ ƹ.
+		//삼거리 관려 맵에서는 귀환부를 막아버린다.
 		if (CThreeWayWar::instance().IsThreeWayWarMapIndex(GetMapIndex()))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ  ߿ ȯ,ȯθ Ҽ ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("삼거리 전투 참가중에는 귀환부,귀환기억부를 사용할수 없습니다."));
 			return false;
 		}
 		int iPulse = thecore_pulse();
 
-		//â  üũ
+		//창고 연후 체크
 		if (iPulse - GetSafeboxLoadTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  %d ̳ ȯ,ȯθ   ϴ."), g_nPortalLimitTime);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고를 연후 %d초 이내에는 귀환부,귀환기억부를 사용할 수 없습니다."), g_nPortalLimitTime);
 
 			if (test_server)
 				ChatPacket(CHAT_TYPE_INFO, "[TestOnly]Pulse %d LoadTime %d PASS %d", iPulse, GetSafeboxLoadTime(), PASSES_PER_SEC(g_nPortalLimitTime));
 			return false; 
 		}
 
-		//ŷ â üũ
+		//거래관련 창 체크
 		if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷâ,â   ¿ ȯ,ȯ  Ҽ ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
 			return false;
 		}
 
 		//PREVENT_REFINE_HACK
-		// ðüũ 
+		//개량후 시간체크 
 		{
 			if (iPulse - GetRefineTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  %d ̳ ȯ,ȯθ   ϴ."), g_nPortalLimitTime);
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 개량후 %d초 이내에는 귀환부,귀환기억부를 사용할 수 없습니다."), g_nPortalLimitTime);
 				return false;
 			}
 		}
@@ -5259,7 +5259,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 		{
 			if (iPulse - GetMyShopTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("λ  %d ̳ ȯ,ȯθ   ϴ."), g_nPortalLimitTime);
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개인상점 사용후 %d초 이내에는 귀환부,귀환기억부를 사용할 수 없습니다."), g_nPortalLimitTime);
 				return false;
 			}
 			
@@ -5267,7 +5267,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 		//END_PREVENT_ITEM_COPY
 		
 
-		//ȯ Ÿüũ
+		//귀환부 거리체크
 		if (item->GetVnum() != 70302)
 		{
 			PIXEL_POSITION posWarp;
@@ -5277,13 +5277,13 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 			double nDist = 0;
 			const double nDistant = 5000.0;
-			//ȯ 
+			//귀환기억부 
 			if (item->GetVnum() == 22010)
 			{
 				x = item->GetSocket(0) - GetX();
 				y = item->GetSocket(1) - GetY();
 			}
-			//ȯ
+			//귀환부
 			else if (item->GetVnum() == 22000) 
 			{
 				SECTREE_MANAGER::instance().GetRecallPositionByEmpire(GetMapIndex(), GetEmpire(), posWarp);
@@ -5304,7 +5304,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 			if (nDistant > nDist)
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̵ Ǿ ġ ʹ  ȯθ Ҽ ϴ."));				
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이동 되어질 위치와 너무 가까워 귀환부를 사용할수 없습니다."));				
 				if (test_server)
 					ChatPacket(CHAT_TYPE_INFO, "PossibleDistant %f nNowDist %f", nDistant,nDist); 
 				return false;
@@ -5312,29 +5312,29 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 		}
 
 		//PREVENT_PORTAL_AFTER_EXCHANGE
-		//ȯ  ðüũ
+		//교환 후 시간체크
 		if (iPulse - GetExchangeTime()  < PASSES_PER_SEC(g_nPortalLimitTime))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ  %d ̳ ȯ,ȯε   ϴ."), g_nPortalLimitTime);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래 후 %d초 이내에는 귀환부,귀환기억부등을 사용할 수 없습니다."), g_nPortalLimitTime);
 			return false;
 		}
 		//END_PREVENT_PORTAL_AFTER_EXCHANGE
 
 	}
 
-	//   ŷâ  üũ 
+	//보따리 비단 사용시 거래창 제한 체크 
 	if (item->GetVnum() == 50200 | item->GetVnum() == 71049)
 	{
 		if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷâ,â   ¿ ,ܺ Ҽ ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 보따리,비단보따리를 사용할수 없습니다."));
 			return false;
 		}
 
 	}
 	//END_PREVENT_TRADE_WINDOW
 
-	if (IS_SET(item->GetFlag(), ITEM_FLAG_LOG)) //  α׸   ó
+	if (IS_SET(item->GetFlag(), ITEM_FLAG_LOG)) // 사용 로그를 남기는 아이템 처리
 	{
 		DWORD vid = item->GetVID();
 		DWORD oldCount = item->GetCount();
@@ -5348,7 +5348,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 		bool ret = UseItemEx(item, DestCell);
 
-		if (NULL == ITEM_MANAGER::instance().FindByVID(vid)) // UseItemEx   Ǿ.  α׸ 
+		if (NULL == ITEM_MANAGER::instance().FindByVID(vid)) // UseItemEx에서 아이템이 삭제 되었다. 삭제 로그를 남김
 		{
 			LogManager::instance().ItemLog(this, vid, vnum, "REMOVE", hint);
 		}
@@ -5370,7 +5370,7 @@ bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
 	if (!CanHandleItem())
 	{
 		if (NULL != DragonSoul_RefineWindow_GetOpener())
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭâ  ¿  ű  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화창을 연 상태에서는 아이템을 옮길 수 없습니다."));
 		return false;
 	}
 
@@ -5391,14 +5391,14 @@ bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
 
 	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_DROP | ITEM_ANTIFLAG_GIVE))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("버릴 수 없는 아이템입니다."));
 		return false;
 	}
 
 	if (bCount == 0 || bCount > item->GetCount())
 		bCount = item->GetCount();
 
-	SyncQuickslot(QUICKSLOT_TYPE_ITEM, Cell.cell, 255);	// Quickslot  
+	SyncQuickslot(QUICKSLOT_TYPE_ITEM, Cell.cell, 255);	// Quickslot 에서 지움
 
 	LPITEM pkItemToDrop;
 
@@ -5453,12 +5453,12 @@ bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
 
 	if (pkItemToDrop->AddToGround(GetMapIndex(), pxPos))
 	{
-		// ѱ   ش޶  Ƽ
-		//  ٴڿ   Ӽα׸ .
+		// 한국에는 아이템을 버리고 복구해달라는 진상유저들이 많아서
+		// 아이템을 바닥에 버릴 시 속성로그를 남긴다.
 		if (LC_IsYMIR())
 			item->AttrLog();
 
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  3  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("떨어진 아이템은 3분 후 사라집니다."));
 		pkItemToDrop->StartDestroyEvent();
 
 		ITEM_MANAGER::instance().FlushDelayedSave(pkItemToDrop);
@@ -5488,7 +5488,7 @@ bool CHARACTER::DropGold(int gold)
 	{
 		if (get_dword_time() < m_dwLastGoldDropTime+g_GoldDropTimeLimitValue)
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 带   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 골드를 버릴 수 없습니다."));
 			return false;
 		}
 	}
@@ -5506,11 +5506,11 @@ bool CHARACTER::DropGold(int gold)
 			//Motion(MOTION_PICKUP);
 			PointChange(POINT_GOLD, -gold, true);
 
-			//   ٴ װ ִµ,
-			//  ó ߿ ϳ,
-			// ũγ,  Ἥ 1000     带 0 , 
-			//  ٰ  ûϴ   ִ.
-			//  ׷ 츦    ġ 忡 ؼ α׸ .
+			// 브라질에 돈이 없어진다는 버그가 있는데,
+			// 가능한 시나리오 중에 하나는,
+			// 메크로나, 핵을 써서 1000원 이하의 돈을 계속 버려 골드를 0으로 만들고, 
+			// 돈이 없어졌다고 복구 신청하는 것일 수도 있다.
+			// 따라서 그런 경우를 잡기 위해 낮은 수치의 골드에 대해서도 로그를 남김.
 			if (LC_IsBrazil() == true)
 			{
 				if (gold >= 213)
@@ -5518,19 +5518,19 @@ bool CHARACTER::DropGold(int gold)
 			}
 			else
 			{
-				if (gold > 1000) // õ ̻ Ѵ.
+				if (gold > 1000) // 천원 이상만 기록한다.
 					LogManager::instance().CharLog(this, gold, "DROP_GOLD", "");
 			}
 
 			if (false == LC_IsBrazil())
 			{
 				item->StartDestroyEvent(150);
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  %d  ϴ."), 150/60);
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("떨어진 아이템은 %d분 후 사라집니다."), 150/60);
 			}
 			else
 			{
 				item->StartDestroyEvent(60);
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  %d  ϴ."), 1);
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("떨어진 아이템은 %d분 후 사라집니다."), 1);
 			}
 		}
 
@@ -5574,26 +5574,26 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
 	if (!CanHandleItem())
 	{
 		if (NULL != DragonSoul_RefineWindow_GetOpener())
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȭâ  ¿  ű  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화창을 연 상태에서는 아이템을 옮길 수 없습니다."));
 		return false;
 	}
 
-	// ȹ û Ʈ κ丮 Ư Ÿ ۸   ִ.
+	// 기획자의 요청으로 벨트 인벤토리에는 특정 타입의 아이템만 넣을 수 있다.
 	if (DestCell.IsBeltInventoryPosition() && false == CBeltInventoryHelper::CanMoveIntoBeltInventory(item))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ κ丮 ű  ϴ."));			
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 벨트 인벤토리로 옮길 수 없습니다."));			
 		return false;
 	}
 
-	// ̹   ٸ  ű , 'å '   Ȯϰ ű
+	// 이미 착용중인 아이템을 다른 곳으로 옮기는 경우, '장책 해제' 가능한 지 확인하고 옮김
 	if (Cell.IsEquipPosition() && !CanUnequipNow(item))
 		return false;
 
 	if (DestCell.IsEquipPosition())
 	{
-		if (GetItem(DestCell))	//     ˻ص ȴ.
+		if (GetItem(DestCell))	// 장비일 경우 한 곳만 검사해도 된다.
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹  ϰ ֽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 장비를 착용하고 있습니다."));
 			
 			return false;
 		}
@@ -5619,7 +5619,7 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
 					return false;
 			}
 		}
-		// ȥ ƴ  ȥ κ   .
+		// 용혼석이 아닌 아이템은 용혼석 인벤에 들어갈 수 없다.
 		else if (DRAGON_SOUL_INVENTORY == DestCell.window_type)
 			return false;
 
@@ -5627,7 +5627,7 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
 
 		if ((item2 = GetItem(DestCell)) && item != item2 && item2->IsStackable() &&
 				!IS_SET(item2->GetAntiFlag(), ITEM_ANTIFLAG_STACK) &&
-				item2->GetVnum() == item->GetVnum()) // ĥ  ִ  
+				item2->GetVnum() == item->GetVnum()) // 합칠 수 있는 아이템의 경우
 		{
 			for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 				if (item2->GetSocket(i) != item->GetSocket(i))
@@ -5746,7 +5746,7 @@ namespace NPartyPickupDistribute
 				{
 					ch->PointChange(POINT_GOLD, iMoney, true);
 
-					if (iMoney > 1000) // õ ̻ Ѵ.
+					if (iMoney > 1000) // 천원 이상만 기록한다.
 						LogManager::instance().CharLog(ch, iMoney, "GET_GOLD", "");
 				}
 		}
@@ -5764,7 +5764,7 @@ void CHARACTER::GiveGold(int iAmount)
 	{
 		LPPARTY pParty = GetParty();
 
-		// Ƽ ִ   .
+		// 파티가 있는 경우 나누어 가진다.
 		DWORD dwTotal = iAmount;
 		DWORD dwMyAmount = dwTotal;
 
@@ -5783,18 +5783,18 @@ void CHARACTER::GiveGold(int iAmount)
 
 		PointChange(POINT_GOLD, dwMyAmount, true);
 
-		if (dwMyAmount > 1000) // õ ̻ Ѵ.
+		if (dwMyAmount > 1000) // 천원 이상만 기록한다.
 			LogManager::instance().CharLog(this, dwMyAmount, "GET_GOLD", "");
 	}
 	else
 	{
 		PointChange(POINT_GOLD, iAmount, true);
 
-		//   ٴ װ ִµ,
-		//  ó ߿ ϳ,
-		// ũγ,  Ἥ 1000     带 0 , 
-		//  ٰ  ûϴ   ִ.
-		//  ׷ 츦    ġ 忡 ؼ α׸ .
+		// 브라질에 돈이 없어진다는 버그가 있는데,
+		// 가능한 시나리오 중에 하나는,
+		// 메크로나, 핵을 써서 1000원 이하의 돈을 계속 버려 골드를 0으로 만들고, 
+		// 돈이 없어졌다고 복구 신청하는 것일 수도 있다.
+		// 따라서 그런 경우를 잡기 위해 낮은 수치의 골드에 대해서도 로그를 남김.
 		if (LC_IsBrazil() == true)
 		{
 			if (iAmount >= 213)
@@ -5802,7 +5802,7 @@ void CHARACTER::GiveGold(int iAmount)
 		}
 		else
 		{
-			if (iAmount > 1000) // õ ̻ Ѵ.
+			if (iAmount > 1000) // 천원 이상만 기록한다.
 				LogManager::instance().CharLog(this, iAmount, "GET_GOLD", "");
 		}
 	}
@@ -5822,7 +5822,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 	{
 		if (item->IsOwnership(this))
 		{
-			//   ϴ  ũ
+			// 만약 주으려 하는 아이템이 엘크라면
 			if (item->GetType() == ITEM_ELK)
 			{
 				GiveGold(item->GetCount());
@@ -5832,7 +5832,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 
 				Save();
 			}
-			//  ̶
+			// 평범한 아이템이라면
 			else
 			{
 				if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
@@ -5864,7 +5864,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 
 							if (bCount == 0)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), item2->GetName());
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
 								M2_DESTROY_ITEM(item);
 								if (item2->GetType() == ITEM_QUEST)
 									quest::CQuestManager::instance().PickupItem (GetPlayerID(), item2);
@@ -5882,7 +5882,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 					if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
 					{
 						sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
 						return false;
 					}
 				}
@@ -5891,7 +5891,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 					if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
 					{
 						sys_log(0, "No empty inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
 						return false;
 					}
 				}
@@ -5906,7 +5906,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 				char szHint[32+1];
 				snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
 				LogManager::instance().ItemLog(this, item, "GET", szHint);
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), item->GetName());
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
 
 				if (item->GetType() == ITEM_QUEST)
 					quest::CQuestManager::instance().PickupItem (GetPlayerID(), item);
@@ -5917,7 +5917,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 		}
 		else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP) && GetParty())
 		{
-			// ٸ Ƽ    Ѵٸ
+			// 다른 파티원 소유권 아이템을 주으려고 한다면
 			NPartyPickupDistribute::FFindOwnership funcFindOwnership(item);
 
 			GetParty()->ForEachOnlineMember(funcFindOwnership);
@@ -5934,7 +5934,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 
 					if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
 					{
-						owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
 						return false;
 					}
 				}
@@ -5947,7 +5947,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 
 					if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
 					{
-						owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
 						return false;
 					}
 				}
@@ -5965,11 +5965,11 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 			LogManager::instance().ItemLog(owner, item, "GET", szHint);
 
 			if (owner == this)
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), item->GetName());
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
 			else
 			{
-				owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s κ %s"), GetName(), item->GetName());
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" : %s Կ %s"), owner->GetName(), item->GetName());
+				owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s 님으로부터 %s"), GetName(), item->GetName());
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 전달: %s 님에게 %s"), owner->GetName(), item->GetName());
 			}
 
 			if (item->GetType() == ITEM_QUEST)
@@ -5989,23 +5989,23 @@ bool CHARACTER::SwapItem(BYTE bCell, BYTE bDestCell)
 
 	TItemPos srcCell(INVENTORY, bCell), destCell(INVENTORY, bDestCell);
 
-	// ùٸ Cell  ˻
-	// ȥ Swap  Ƿ, ⼭ ɸ.
+	// 올바른 Cell 인지 검사
+	// 용혼석은 Swap할 수 없으므로, 여기서 걸림.
 	//if (bCell >= INVENTORY_MAX_NUM + WEAR_MAX_NUM || bDestCell >= INVENTORY_MAX_NUM + WEAR_MAX_NUM)
 	if (srcCell.IsDragonSoulEquipPosition() || destCell.IsDragonSoulEquipPosition())
 		return false;
 
-	//  CELL  ˻
+	// 같은 CELL 인지 검사
 	if (bCell == bDestCell)
 		return false;
 
-	//   â ġ Swap   .
+	// 둘 다 장비창 위치면 Swap 할 수 없다.
 	if (srcCell.IsEquipPosition() && destCell.IsEquipPosition())
 		return false;
 
 	LPITEM item1, item2;
 
-	// item2 â ִ  ǵ.
+	// item2가 장비창에 있는 것이 되도록.
 	if (srcCell.IsEquipPosition())
 	{
 		item1 = GetInventoryItem(bDestCell);
@@ -6026,21 +6026,21 @@ bool CHARACTER::SwapItem(BYTE bCell, BYTE bDestCell)
 	    return false;
 	}
 
-	// item2 bCellġ   ִ ȮѴ.
+	// item2가 bCell위치에 들어갈 수 있는지 확인한다.
 	if (!IsEmptyItemGrid(TItemPos (INVENTORY, item1->GetCell()), item2->GetSize(), item1->GetCell()))
 		return false;
 
-	// ٲ  â 
+	// 바꿀 아이템이 장비창에 있으면
 	if (TItemPos(EQUIPMENT, item2->GetCell()).IsEquipPosition())
 	{
 		BYTE bEquipCell = item2->GetCell() - INVENTORY_MAX_NUM;
 		BYTE bInvenCell = item1->GetCell();
 
-		//     ְ,      ¿߸ 
+		// 착용중인 아이템을 벗을 수 있고, 착용 예정 아이템이 착용 가능한 상태여야만 진행
 		if (false == CanUnequipNow(item2) || false == CanEquipNow(item1))
 			return false;
 
-		if (bEquipCell != item1->FindEquipCell(this)) //  ġ϶ 
+		if (bEquipCell != item1->FindEquipCell(this)) // 같은 위치일때만 허용
 			return false;
 
 		item2->RemoveFromCharacter();
@@ -6095,7 +6095,7 @@ bool CHARACTER::UnequipItem(LPITEM item)
 }
 
 //
-// @version	05/07/05 Bang2ni - Skill  1.5  ̳   
+// @version	05/07/05 Bang2ni - Skill 사용후 1.5 초 이내에 장비 착용 금지
 //
 bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
 {
@@ -6113,50 +6113,50 @@ bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
 	if (iWearCell < 0)
 		return false;
 
-	// 𰡸 ź ¿ νõ Ա 
+	// 무언가를 탄 상태에서 턱시도 입기 금지
 	if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11901 && item->GetVnum() <= 11904))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ź ¿    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 탄 상태에서 예복을 입을 수 없습니다."));
 		return false;
 	}
 
 	if (iWearCell != WEAR_ARROW && IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 착용중인 장비를 변경할 수 없습니다."));
 		return false;
 	}
 
 	if (FN_check_item_sex(this, item) == false)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성별이 맞지않아 이 아이템을 사용할 수 없습니다."));
 		return false;
 	}
 
-	//ű Ż    뿩 üũ
+	//신규 탈것 사용시 기존 말 사용여부 체크
 	if(item->IsRideItem() && IsRiding())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ż ̿Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 탈것을 이용중입니다."));
 		return false;
 	}
 
-	// ȭ ̿ܿ   ð Ǵ ų  1.5 Ŀ  ü 
+	// 화살 이외에는 마지막 공격 시간 또는 스킬 사용 1.5 후에 장비 교체가 가능
 	DWORD dwCurTime = get_dword_time();
 
 	if (iWearCell != WEAR_ARROW 
 		&& (dwCurTime - GetLastAttackTime() <= 1500 || dwCurTime - m_dwLastSkillTime <= 1500))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ֽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("가만히 있을 때만 착용할 수 있습니다."));
 		return false;
 	}
 
-	// ȥ Ư ó
+	// 용혼석 특수 처리
 	if (item->IsDragonSoul())
 	{
-		//  Ÿ ȥ ̹  ִٸ   .
-		// ȥ swap ϸ ȵ.
+		// 같은 타입의 용혼석이 이미 들어가 있다면 착용할 수 없다.
+		// 용혼석은 swap을 지원하면 안됨.
 		if(GetInventoryItem(INVENTORY_MAX_NUM + iWearCell))
 		{
-			ChatPacket(CHAT_TYPE_INFO, "̹   ȥ ϰ ֽϴ.");
+			ChatPacket(CHAT_TYPE_INFO, "이미 같은 종류의 용혼석을 착용하고 있습니다.");
 			return false;
 		}
 		
@@ -6165,13 +6165,13 @@ bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
 			return false;
 		}
 	}
-	// ȥ ƴ.
+	// 용혼석이 아님.
 	else
 	{
-		//    ִٸ,
+		// 착용할 곳에 아이템이 있다면,
 		if (GetWear(iWearCell) && !IS_SET(GetWear(iWearCell)->GetFlag(), ITEM_FLAG_IRREMOVABLE))
 		{
-			//   ѹ   Ұ. swap   Ұ
+			// 이 아이템은 한번 박히면 변경 불가. swap 역시 완전 불가
 			if (item->GetWearFlag() == WEARABLE_ABILITY) 
 				return false;
 
@@ -6193,13 +6193,13 @@ bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
 
 	if (true == item->IsEquipped())
 	{
-		//    ĺʹ  ʾƵ ð Ǵ  ó. 
+		// 아이템 최초 사용 이후부터는 사용하지 않아도 시간이 차감되는 방식 처리. 
 		if (-1 != item->GetProto()->cLimitRealTimeFirstUseIndex)
 		{
-			//  ̶   δ Socket1  ǴѴ. (Socket1 Ƚ )
+			// 한 번이라도 사용한 아이템인지 여부는 Socket1을 보고 판단한다. (Socket1에 사용횟수 기록)
 			if (0 == item->GetSocket(1))
 			{
-				// 밡ɽð Default  Limit Value  ϵ, Socket0     ϵ Ѵ. ( )
+				// 사용가능시간은 Default 값으로 Limit Value 값을 사용하되, Socket0에 값이 있으면 그 값을 사용하도록 한다. (단위는 초)
 				long duration = (0 != item->GetSocket(0)) ? item->GetSocket(0) : item->GetProto()->aLimits[item->GetProto()->cLimitRealTimeFirstUseIndex].lValue;
 
 				if (0 == duration)
@@ -6217,27 +6217,27 @@ bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
 
 		const DWORD& dwVnum = item->GetVnum();
 
-		// 󸶴 ̺Ʈ ʽ´ (71135)  Ʈ ߵ
+		// 라마단 이벤트 초승달의 반지(71135) 착용시 이펙트 발동
 		if (true == CItemVnumHelper::IsRamadanMoonRing(dwVnum))
 		{
 			this->EffectPacket(SE_EQUIP_RAMADAN_RING);
 		}
-		// ҷ (71136)  Ʈ ߵ
+		// 할로윈 사탕(71136) 착용시 이펙트 발동
 		else if (true == CItemVnumHelper::IsHalloweenCandy(dwVnum))
 		{
 			this->EffectPacket(SE_EQUIP_HALLOWEEN_CANDY);
 		}
-		// ູ (71143)  Ʈ ߵ
+		// 행복의 반지(71143) 착용시 이펙트 발동
 		else if (true == CItemVnumHelper::IsHappinessRing(dwVnum))
 		{
 			this->EffectPacket(SE_EQUIP_HAPPINESS_RING);
 		}
-		//  ҴƮ(71145)  Ʈ ߵ
+		// 사랑의 팬던트(71145) 착용시 이펙트 발동
 		else if (true == CItemVnumHelper::IsLovePendant(dwVnum))
 		{
 			this->EffectPacket(SE_EQUIP_LOVE_PENDANT);
 		}
-		// ITEM_UNIQUE , SpecialItemGroup ǵǾ ְ, (item->GetSIGVnum() != NULL)
+		// ITEM_UNIQUE의 경우, SpecialItemGroup에 정의되어 있고, (item->GetSIGVnum() != NULL)
 		// 
 		else if (ITEM_UNIQUE == item->GetType() && 0 != item->GetSIGVnum())
 		{
@@ -6387,7 +6387,7 @@ int CHARACTER::CountSpecifyItem(DWORD vnum) const
 		item = GetInventoryItem(i);
 		if (NULL != item && item->GetVnum() == vnum)
 		{
-			//   ϵ ̸ Ѿ.
+			// 개인 상점에 등록된 물건이면 넘어간다.
 			if (m_pkMyShop && m_pkMyShop->IsSellingItem(item->GetID()))
 			{
 				continue;
@@ -6415,7 +6415,7 @@ void CHARACTER::RemoveSpecifyItem(DWORD vnum, DWORD count)
 		if (GetInventoryItem(i)->GetVnum() != vnum)
 			continue;
 
-		//  ϵ ̸ Ѿ. (  Ǹŵɶ  κ   !)
+		//개인 상점에 등록된 물건이면 넘어간다. (개인 상점에서 판매될때 이 부분으로 들어올 경우 문제!)
 		if(m_pkMyShop)
 		{
 			bool isItemSelling = m_pkMyShop->IsSellingItem(GetInventoryItem(i)->GetID());
@@ -6441,7 +6441,7 @@ void CHARACTER::RemoveSpecifyItem(DWORD vnum, DWORD count)
 		}
 	}
 
-	// ó ϴ.
+	// 예외처리가 약하다.
 	if (count)
 		sys_log(0, "CHARACTER::RemoveSpecifyItem cannot remove enough item vnum %u, still remain %d", vnum, count);
 }
@@ -6475,7 +6475,7 @@ void CHARACTER::RemoveSpecifyTypeItem(BYTE type, DWORD count)
 		if (GetInventoryItem(i)->GetType() != type)
 			continue;
 
-		//  ϵ ̸ Ѿ. (  Ǹŵɶ  κ   !)
+		//개인 상점에 등록된 물건이면 넘어간다. (개인 상점에서 판매될때 이 부분으로 들어올 경우 문제!)
 		if(m_pkMyShop)
 		{
 			bool isItemSelling = m_pkMyShop->IsSellingItem(GetInventoryItem(i)->GetID());
@@ -6591,7 +6591,7 @@ LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool
 				if (bCount == 0)
 				{
 					if (bMsg)
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), item->GetName());
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
 
 					return item;
 				}
@@ -6643,7 +6643,7 @@ LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool
 	if (iEmptyCell != -1)
 	{
 		if (bMsg)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), item->GetName());
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
 
 		if (item->IsDragonSoul())
 			item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
@@ -6668,9 +6668,9 @@ LPITEM CHARACTER::AutoGiveItem(DWORD dwItemVnum, BYTE bCount, int iRarePct, bool
 	{
 		item->AddToGround(GetMapIndex(), GetXYZ());
 		item->StartDestroyEvent();
-		// Ƽ  flag ɷִ  , 
-		// κ    ¿   Ʈ Ǹ,
-		// ownership   (300) Ѵ.
+		// 안티 드랍 flag가 걸려있는 아이템의 경우, 
+		// 인벤에 빈 공간이 없어서 어쩔 수 없이 떨어트리게 되면,
+		// ownership을 아이템이 사라질 때까지(300초) 유지한다.
 		if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_DROP))
 			item->SetOwnership(this, 300);
 		else
@@ -6784,12 +6784,12 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 		case 20101:
 		case 20102:
 		case 20103:
-			// ʱ 
+			// 초급 말
 			if (item->GetVnum() == ITEM_REVIVE_HORSE_1)
 			{
 				if (!IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ʸ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽지 않은 말에게 선초를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6798,7 +6798,7 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 			{
 				if (IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ḧ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽은 말에게 사료를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6811,12 +6811,12 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 		case 20104:
 		case 20105:
 		case 20106:
-			// ߱ 
+			// 중급 말
 			if (item->GetVnum() == ITEM_REVIVE_HORSE_2)
 			{
 				if (!IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ʸ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽지 않은 말에게 선초를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6825,7 +6825,7 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 			{
 				if (IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ḧ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽은 말에게 사료를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6838,12 +6838,12 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 		case 20107:
 		case 20108:
 		case 20109:
-			//  
+			// 고급 말
 			if (item->GetVnum() == ITEM_REVIVE_HORSE_3)
 			{
 				if (!IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ʸ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽지 않은 말에게 선초를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6852,7 +6852,7 @@ bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const
 			{
 				if (IsDead())
 				{
-					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ḧ   ϴ."));
+					from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("죽은 말에게 사료를 먹일 수 없습니다."));
 					return false;
 				}
 				return true;
@@ -6902,7 +6902,7 @@ void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
 			}
 			else
 			{
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 			}
 			break;
 			// END_OF_DEVILTOWER_NPC
@@ -6919,7 +6919,7 @@ void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
 			}
 			else
 			{
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템은 개량할 수 없습니다."));
 			}
 			break;
 
@@ -6938,14 +6938,14 @@ void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
 			{
 				from->ReviveHorse();
 				item->SetCount(item->GetCount()-1);
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʸ ־ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말에게 선초를 주었습니다."));
 			}
 			else if (item->GetVnum() == ITEM_HORSE_FOOD_1 ||
 					item->GetVnum() == ITEM_HORSE_FOOD_2 ||
 					item->GetVnum() == ITEM_HORSE_FOOD_3)
 			{
 				from->FeedHorse();
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ḧ ־ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말에게 사료를 주었습니다."));
 				item->SetCount(item->GetCount()-1);
 				EffectPacket(SE_HPUP_RED);
 			}
@@ -6975,7 +6975,7 @@ bool CHARACTER::IsEquipUniqueItem(DWORD dwItemVnum) const
 			return true;
 	}
 
-	//   (ߺ)  üũѴ.
+	// 언어반지인 경우 언어반지(견본) 인지도 체크한다.
 	if (dwItemVnum == UNIQUE_ITEM_RING_OF_LANGUAGE)
 		return IsEquipUniqueItem(UNIQUE_ITEM_RING_OF_LANGUAGE_SAMPLE);
 
@@ -7136,8 +7136,8 @@ bool CHARACTER::ItemProcess_Hair(LPITEM item, int iDestCell)
 {
 	if (item->CheckItemUseLevel(GetLevel()) == false)
 	{
-		//  ѿ ɸ
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ӹ    Դϴ."));
+		// 레벨 제한에 걸림
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 이 머리를 사용할 수 없는 레벨입니다."));
 		return false;
 	}
 
@@ -7146,7 +7146,7 @@ bool CHARACTER::ItemProcess_Hair(LPITEM item, int iDestCell)
 	switch (GetJob())
 	{
 		case JOB_WARRIOR :
-			hair -= 72000; // 73001 - 72000 = 1001   ȣ 
+			hair -= 72000; // 73001 - 72000 = 1001 부터 헤어 번호 시작
 			break;
 
 		case JOB_ASSASSIN :
@@ -7168,7 +7168,7 @@ bool CHARACTER::ItemProcess_Hair(LPITEM item, int iDestCell)
 
 	if (hair == GetPart(PART_HAIR))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ӹ ŸϷδ ü  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("동일한 머리 스타일로는 교체할 수 없습니다."));
 		return true;
 	}
 
@@ -7185,13 +7185,13 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 {
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 둔갑중인 상태입니다."));
 		return false;
 	}
 
 	if (true == IsRiding())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а   Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑할 수 없는 상태입니다."));
 		return false;
 	}
 
@@ -7199,7 +7199,7 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 	if (dwVnum == 0)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߸ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("잘못된 둔갑 아이템입니다."));
 		item->SetCount(item->GetCount()-1);
 		return false;
 	}
@@ -7208,7 +7208,7 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 	if (pMob == NULL)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߸ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("잘못된 둔갑 아이템입니다."));
 		item->SetCount(item->GetCount()-1);
 		return false;
 	}
@@ -7221,14 +7221,14 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 		case 70107 :
 		case 71093 :
 			{
-				// а ó
+				// 둔갑구 처리
 				sys_log(0, "USE_POLYMORPH_BALL PID(%d) vnum(%d)", GetPlayerID(), dwVnum);
 
-				//   üũ
+				// 레벨 제한 체크
 				int iPolymorphLevelLimit = MAX(0, 20 - GetLevel() * 3 / 10);
 				if (pMob->m_table.bLevel >= GetLevel() + iPolymorphLevelLimit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʹ   ͷδ    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나보다 너무 높은 레벨의 몬스터로는 변신 할 수 없습니다."));
 					return false;
 				}
 
@@ -7255,11 +7255,11 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 		case 50322:
 			{
-				// 
+				// 보류
 
-				// а ó
-				// 0                1           2   
-				// а  ȣ           а 
+				// 둔갑서 처리
+				// 소켓0                소켓1           소켓2   
+				// 둔갑할 몬스터 번호   수련정도        둔갑서 레벨
 				sys_log(0, "USE_POLYMORPH_BOOK: %s(%u) vnum(%u)", GetName(), GetPlayerID(), dwVnum);
 
 				if (CPolymorphUtils::instance().PolymorphCharacter(this, item, pMob) == true)
@@ -7377,8 +7377,8 @@ void CHARACTER::AutoRecoveryItemProcess(const EAffectTypes type)
 						const int pct_of_will_used = (amount_of_used + amount) * 100 / amount_of_full;
 
 						bool bLog = false;
-						// 뷮 10%  α׸ 
-						// (뷮 %,  ڸ ٲ  α׸ .)
+						// 사용량의 10% 단위로 로그를 남김
+						// (사용량의 %에서, 십의 자리가 바뀔 때마다 로그를 남김.)
 						if ((pct_of_will_used / 10) - (pct_of_used / 10) >= 1)
 							bLog = true;
 						pItem->SetSocket(idx_of_amount_of_used, amount_of_used + amount, bLog);
@@ -7450,7 +7450,7 @@ bool CHARACTER::IsValidItemPosition(TItemPos Pos) const
 }
 
 
-// Ƽ  ũ.. exp true msg ϰ return false ϴ ũ (Ϲ verify 뵵 return  ణ ݴ ̸ 򰥸  ְڴ..)
+// 귀찮아서 만든 매크로.. exp가 true면 msg를 출력하고 return false 하는 매크로 (일반적인 verify 용도랑은 return 때문에 약간 반대라 이름때문에 헷갈릴 수도 있겠다..)
 #define VERIFY_MSG(exp, msg)  \
 	if (true == (exp)) { \
 			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(msg)); \
@@ -7458,7 +7458,7 @@ bool CHARACTER::IsValidItemPosition(TItemPos Pos) const
 	}
 
 		
-///  ij ¸  ־ item   ִ  Ȯϰ, Ұ ϴٸ ijͿ  ˷ִ Լ
+/// 현재 캐릭터의 상태를 바탕으로 주어진 item을 착용할 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
 bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell) /*const*/
 {
 	const TItemTable* itemTable = item->GetProto();
@@ -7496,7 +7496,7 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 			case LIMIT_LEVEL:
 				if (GetLevel() < limit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("레벨이 낮아 착용할 수 없습니다."));
 					return false;
 				}
 				break;
@@ -7504,7 +7504,7 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 			case LIMIT_STR:
 				if (GetPoint(POINT_ST) < limit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٷ    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("근력이 낮아 착용할 수 없습니다."));
 					return false;
 				}
 				break;
@@ -7512,7 +7512,7 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 			case LIMIT_INT:
 				if (GetPoint(POINT_IQ) < limit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("지능이 낮아 착용할 수 없습니다."));
 					return false;
 				}
 				break;
@@ -7520,7 +7520,7 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 			case LIMIT_DEX:
 				if (GetPoint(POINT_DX) < limit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ø    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("민첩이 낮아 착용할 수 없습니다."));
 					return false;
 				}
 				break;
@@ -7528,7 +7528,7 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 			case LIMIT_CON:
 				if (GetPoint(POINT_HT) < limit)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ü    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("체력이 낮아 착용할 수 없습니다."));
 					return false;
 				}
 				break;
@@ -7540,14 +7540,14 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 		if ((GetWear(WEAR_UNIQUE1) && GetWear(WEAR_UNIQUE1)->IsSameSpecialGroup(item)) ||
 			(GetWear(WEAR_UNIQUE2) && GetWear(WEAR_UNIQUE2)->IsSameSpecialGroup(item)))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ũ    ÿ   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같은 종류의 유니크 아이템 두 개를 동시에 장착할 수 없습니다."));
 			return false;
 		}
 
 		if (marriage::CManager::instance().IsMarriageUniqueItem(item->GetVnum()) && 
 			!marriage::CManager::instance().IsMarried(GetPlayerID()))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ  ¿    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("결혼하지 않은 상태에서 예물을 착용할 수 없습니다."));
 			return false;
 		}
 
@@ -7556,18 +7556,18 @@ bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TI
 	return true;
 }
 
-///  ij ¸    item   ִ  Ȯϰ, Ұ ϴٸ ijͿ  ˷ִ Լ
+/// 현재 캐릭터의 상태를 바탕으로 착용 중인 item을 벗을 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
 bool CHARACTER::CanUnequipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell) /*const*/
 {	
 
 	if (ITEM_BELT == item->GetType())
-		VERIFY_MSG(CBeltInventoryHelper::IsExistItemInBeltInventory(this), "Ʈ κ丮  ϸ   ϴ.");
+		VERIFY_MSG(CBeltInventoryHelper::IsExistItemInBeltInventory(this), "벨트 인벤토리에 아이템이 존재하면 해제할 수 없습니다.");
 
-	//     
+	// 영원히 해제할 수 없는 아이템
 	if (IS_SET(item->GetFlag(), ITEM_FLAG_IRREMOVABLE))
 		return false;
 
-	//  unequip κ丮 ű   ڸ ִ  Ȯ
+	// 아이템 unequip시 인벤토리로 옮길 때 빈 자리가 있는 지 확인
 	{
 		int pos = -1;
 
@@ -7576,7 +7576,7 @@ bool CHARACTER::CanUnequipNow(const LPITEM item, const TItemPos& srcCell, const
 		else
 			pos = GetEmptyInventory(item->GetSize());
 
-		VERIFY_MSG( -1 == pos, "ǰ   ϴ." );
+		VERIFY_MSG( -1 == pos, "소지품에 빈 공간이 없습니다." );
 	}
 
 
diff --git a/src/game/char_manager.cpp b/src/game/char_manager.cpp
index 7543cd9..e2f00f6 100644
--- a/src/game/char_manager.cpp
+++ b/src/game/char_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "utils.h"
 #include "desc.h"
@@ -113,7 +113,7 @@ void CHARACTER_MANAGER::DestroyCharacter(LPCHARACTER ch, const char* file, size_
 		return; // prevent duplicated destrunction
 	}
 
-	//  Ҽӵ ʹ  ϵ.
+	// 던전에 소속된 몬스터는 던전에서도 삭제하도록.
 	if (ch->IsNPC() && !ch->IsPet() && ch->GetRider() == NULL)
 	{
 		if (ch->GetDungeon())
@@ -229,7 +229,7 @@ LPCHARACTER CHARACTER_MANAGER::FindPC(const char * name)
 
 LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, long lMapIndex)
 {
-	// ֱ    ְ
+	// 왜구 스폰할지말지를 결정할 수 있게함
 	{
 		if (dwVnum == 5001 && !quest::CQuestManager::instance().GetEventFlag("japan_regen"))
 		{
@@ -238,7 +238,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, long lMapInd
 		}
 	}
 
-	// ¸     ְ 
+	// 해태를 스폰할지 말지를 결정할 수 있게 함
 	{
 		if (dwVnum == 5002 && !quest::CQuestManager::instance().GetEventFlag("newyear_mob"))
 		{
@@ -247,7 +247,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, long lMapInd
 		}
 	}
 
-	//  ̺Ʈ 
+	// 광복절 이벤트 
 	{
 		if (dwVnum == 5004 && !quest::CQuestManager::instance().GetEventFlag("independence_day"))
 		{
@@ -447,7 +447,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRange(DWORD dwVnum, long lMapIndex, int s
 	if (!pkMob)
 		return NULL;
 
-	if (pkMob->m_table.bType == CHAR_TYPE_STONE)	//   SPAWN  ִ.
+	if (pkMob->m_table.bType == CHAR_TYPE_STONE)	// 돌은 무조건 SPAWN 모션이 있다.
 		bSpawnMotion = true;
 
 	int i = 16;
@@ -511,7 +511,7 @@ bool CHARACTER_MANAGER::SpawnMoveGroup(DWORD dwVnum, long lMapIndex, int sx, int
 
 		if (!tch)
 		{
-			if (i == 0)	//  Ͱ  쿡 ׳ 
+			if (i == 0)	// 못만든 몬스터가 대장일 경우에는 그냥 실패
 				return false;
 
 			continue;
@@ -595,7 +595,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnGroup(DWORD dwVnum, long lMapIndex, int sx,
 
 		if (!tch)
 		{
-			if (i == 0)	//  Ͱ  쿡 ׳ 
+			if (i == 0)	// 못만든 몬스터가 대장일 경우에는 그냥 실패
 				return NULL;
 
 			continue;
@@ -648,11 +648,11 @@ void CHARACTER_MANAGER::Update(int iPulse)
 
 	BeginPendingDestroy();
 
-	// PC ij Ʈ
+	// PC 캐릭터 업데이트
 	{
 		if (!m_map_pkPCChr.empty())
 		{
-			// ̳ 
+			// 컨테이너 복사
 			CHARACTER_VECTOR v;
 			v.reserve(m_map_pkPCChr.size());
 			transform(m_map_pkPCChr.begin(), m_map_pkPCChr.end(), back_inserter(v), boost::bind(&NAME_MAP::value_type::second, _1));
@@ -668,7 +668,7 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		}
 	}
 
-	//  Ʈ
+	// 몬스터 업데이트
 	{
 		if (!m_set_pkChrState.empty())
 		{
@@ -679,7 +679,7 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		}
 	}
 
-	// Ÿ  Ʈ
+	// 산타 따로 업데이트
 	{
 		CharacterVectorInteractor i;
 
@@ -689,7 +689,7 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		}
 	}
 
-	// 1ð ѹ     
+	// 1시간에 한번씩 몹 사냥 개수 기록 
 	if (0 == (iPulse % PASSES_PER_SEC(3600)))
 	{
 		for (itertype(m_map_dwMobKillCount) it = m_map_dwMobKillCount.begin(); it != m_map_dwMobKillCount.end(); ++it)
@@ -707,11 +707,11 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		m_map_dwMobKillCount.clear();
 	}
 
-	// ׽Ʈ  60ʸ ij  
+	// 테스트 서버에서는 60초마다 캐릭터 개수를 센다
 	if (test_server && 0 == (iPulse % PASSES_PER_SEC(60)))
 		sys_log(0, "CHARACTER COUNT vid %zu pid %zu", m_map_pkChrByVID.size(), m_map_pkChrByPID.size());
 
-	//  DestroyCharacter ϱ
+	// 지연된 DestroyCharacter 하기
 	FlushPendingDestroy();
 }
 
@@ -828,7 +828,7 @@ void CHARACTER_MANAGER::RegisterRaceNumMap(LPCHARACTER ch)
 {
 	DWORD dwVnum = ch->GetRaceNum();
 
-	if (m_set_dwRegisteredRaceNum.find(dwVnum) != m_set_dwRegisteredRaceNum.end()) // ϵ ȣ ̸
+	if (m_set_dwRegisteredRaceNum.find(dwVnum) != m_set_dwRegisteredRaceNum.end()) // 등록된 번호 이면
 	{
 		sys_log(0, "RegisterRaceNumMap %s %u", ch->GetName(), dwVnum);
 		m_map_pkChrByRaceNum[dwVnum].insert(ch);
@@ -852,7 +852,7 @@ bool CHARACTER_MANAGER::GetCharactersByRaceNum(DWORD dwRaceNum, CharacterVectorI
 	if (it == m_map_pkChrByRaceNum.end())
 		return false;
 
-	// ̳ 
+	// 컨테이너 복사
 	i = it->second;
 	return true;
 }
@@ -1049,8 +1049,8 @@ void CHARACTER_MANAGER::SendScriptToMap(long lMapIndex, const std::string & s)
 
 bool CHARACTER_MANAGER::BeginPendingDestroy()
 {
-	// Begin  Ŀ Begin  ϴ 쿡 Flush  ʴ   
-	// ̹ ۵Ǿ false  ó
+	// Begin 이 후에 Begin을 또 하는 경우에 Flush 하지 않는 기능 지원을 위해
+	// 이미 시작되어있으면 false 리턴 처리
 	if (m_bUsePendingDestroy)
 		return false;
 
@@ -1062,7 +1062,7 @@ void CHARACTER_MANAGER::FlushPendingDestroy()
 {
 	using namespace std;
 
-	m_bUsePendingDestroy = false; // ÷׸  ؾ  Destroy ó 
+	m_bUsePendingDestroy = false; // 플래그를 먼저 설정해야 실제 Destroy 처리가 됨
 
 	if (!m_set_pkChrPendingDestroy.empty())
 	{
diff --git a/src/game/char_manager.h b/src/game/char_manager.h
index 6702b44..56920b4 100644
--- a/src/game/char_manager.h
+++ b/src/game/char_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_CHARACTER_MANAGER_H__
+#ifndef __INC_METIN_II_GAME_CHARACTER_MANAGER_H__
 #define __INC_METIN_II_GAME_CHARACTER_MANAGER_H__
 
 #ifdef M2_USE_POOL
@@ -24,7 +24,7 @@ class CHARACTER_MANAGER : public singleton
 
 		void                    Destroy();
 
-		void			GracefulShutdown();	//  ˴ٿ  . PC  Ű Destroy Ѵ.
+		void			GracefulShutdown();	// 정상적 셧다운할 때 사용. PC를 모두 저장시키고 Destroy 한다.
 
 		DWORD			AllocVID();
 
@@ -56,11 +56,11 @@ class CHARACTER_MANAGER : public singleton
 		bool			AddToStateList(LPCHARACTER ch);
 		void			RemoveFromStateList(LPCHARACTER ch);
 
-		// DelayedSave:  ƾ   ؾ    ϸ 
-		//  ʹ Ƿ " Ѵ"  ǥø صΰ 
-		// (: 1 frame) Ŀ Ų.
+		// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
+		// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
+		// (예: 1 frame) 후에 저장시킨다.
 		void                    DelayedSave(LPCHARACTER ch);
-		bool                    FlushDelayedSave(LPCHARACTER ch); // Delayed Ʈ ִٸ  Ѵ.  ó  .
+		bool                    FlushDelayedSave(LPCHARACTER ch); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
 		void			ProcessDelayedSave();
 
 		template	Func for_each_pc(Func f);
@@ -124,7 +124,7 @@ class CHARACTER_MANAGER : public singleton
 		NAME_MAP			m_map_pkPCChr;
 
 		char				dummy1[1024];	// memory barrier
-		CHARACTER_SET		m_set_pkChrState;	// FSM ư ִ 
+		CHARACTER_SET		m_set_pkChrState;	// FSM이 돌아가고 있는 놈들
 		CHARACTER_SET		m_set_pkChrForDelayedSave;
 		CHARACTER_SET		m_set_pkChrMonsterLog;
 
diff --git a/src/game/char_quickslot.cpp b/src/game/char_quickslot.cpp
index 884cd3b..d0269a3 100644
--- a/src/game/char_quickslot.cpp
+++ b/src/game/char_quickslot.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "char.h"
 #include "desc.h"
@@ -9,7 +9,7 @@
 /////////////////////////////////////////////////////////////////////////////
 // QUICKSLOT HANDLING
 /////////////////////////////////////////////////////////////////////////////
-void CHARACTER::SyncQuickslot(BYTE bType, BYTE bOldPos, BYTE bNewPos) // bNewPos == 255  DELETE
+void CHARACTER::SyncQuickslot(BYTE bType, BYTE bOldPos, BYTE bNewPos) // bNewPos == 255 면 DELETE
 {
 	if (bOldPos == bNewPos)
 		return;
@@ -121,7 +121,7 @@ bool CHARACTER::SwapQuickslot(BYTE a, BYTE b)
 	if (a >= QUICKSLOT_MAX_NUM || b >= QUICKSLOT_MAX_NUM)
 		return false;
 
-	//   ڸ  ٲ۴.
+	// 퀵 슬롯 자리를 서로 바꾼다.
 	quickslot = m_quickslot[a];
 
 	m_quickslot[a] = m_quickslot[b];
diff --git a/src/game/char_resist.cpp b/src/game/char_resist.cpp
index 06d0c69..795aa45 100644
--- a/src/game/char_resist.cpp
+++ b/src/game/char_resist.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "char.h"
@@ -6,7 +6,7 @@
 #include "affect.h"
 #include "locale_service.h"
 
-// 
+// 독
 const int poison_damage_rate[MOB_RANK_MAX_NUM] = 
 {
 	80, 50, 40, 30, 25, 1
@@ -135,7 +135,7 @@ EVENTFUNC(fire_event)
 
 /*
 
-   LEVEL ..
+   LEVEL에 의한..
 
    +8   0%
    +7   5%
@@ -184,7 +184,7 @@ void CHARACTER::AttackedByPoison(LPCHARACTER pkAttacker)
 	if (m_pkPoisonEvent)
 		return;
 
-	if (m_bHasPoisoned && !IsPC()) // ʹ  ѹ ɸ.
+	if (m_bHasPoisoned && !IsPC()) // 몬스터는 독이 한번만 걸린다.
 		return;
 
 	if (pkAttacker && pkAttacker->GetLevel() < GetLevel())
@@ -201,7 +201,7 @@ void CHARACTER::AttackedByPoison(LPCHARACTER pkAttacker)
 	/*if (IsImmune(IMMUNE_POISON))
 	  return;*/
 
-	//    ,  ɷȴ!
+	// 독 내성 굴림 실패, 독에 걸렸다!
 	m_bHasPoisoned = true;
 
 	AddAffect(AFFECT_POISON, POINT_NONE, 0, AFF_POISON, POISON_LENGTH + 1, 0, true);
diff --git a/src/game/char_skill.cpp b/src/game/char_skill.cpp
index cab42d5..b68edbc 100644
--- a/src/game/char_skill.cpp
+++ b/src/game/char_skill.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 
 #include "utils.h"
@@ -62,7 +62,7 @@ void CHARACTER::SetSkillNextReadTime(DWORD dwVnum, time_t time)
 
 bool TSkillUseInfo::HitOnce(DWORD dwVnum)
 {
-	// ʾ  Ѵ.
+	// 쓰지도않았으면 때리지도 못한다.
 	if (!bUsed)
 		return false;
 
@@ -97,7 +97,7 @@ bool TSkillUseInfo::UseSkill(bool isGrandMaster, DWORD vid, DWORD dwCooltime, in
 	this->isGrandMaster = isGrandMaster;
 	DWORD dwCur = get_dword_time();
 
-	//  Ÿ  ʾҴ.
+	// 아직 쿨타임이 끝나지 않았다.
 	if (bUsed && dwNextSkillUsableTime > dwCur)
 	{
 		sys_log(0, "cooltime is not over delta %u", dwNextSkillUsableTime - dwCur);
@@ -268,7 +268,7 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 
 	if (!IsLearnableSkill(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ųԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("수련할 수 없는 스킬입니다."));
 		return false;
 	}
 
@@ -281,9 +281,9 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 	   {
 	   if (FindAffect(AFFECT_SKILL_NO_BOOK_DELAY))
 	   {
-	// ־ȼ ߿ ð  
+	// 주안술서 사용중에는 시간 제한 무시
 	RemoveAffect(AFFECT_SKILL_NO_BOOK_DELAY);
-	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("־ȼ  ȭԸ Խϴ."));
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("주안술서를 통해 주화입마에서 빠져나왔습니다."));
 	}
 	else 	    
 	{
@@ -294,19 +294,19 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 	}
 	 */
 
-	// bType 0̸ ó å  
+	// bType이 0이면 처음부터 책으로 수련 가능
 	if (pkSk->dwType == 0)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷      ųԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그랜드 마스터 수련을 할 수 없는 스킬입니다."));
 		return false;
 	}
 
 	if (GetSkillMasterType(dwSkillVnum) != SKILL_GRAND_MASTER)
 	{
 		if (GetSkillMasterType(dwSkillVnum) > SKILL_GRAND_MASTER)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ ͵ ųԴϴ.  ̻    ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퍼펙트 마스터된 스킬입니다. 더 이상 수련 할 수 없습니다."));
 		else
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų  ׷     ̸ ʾҽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 스킬은 아직 그랜드 마스터 수련을 할 경지에 이르지 않았습니다."));
 		return false;
 	}
 
@@ -317,7 +317,7 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 		strTrainSkill = os.str();
 	}
 
-	// ⼭ Ȯ մϴ.
+	// 여기서 확률을 계산합니다.
 	BYTE bLastLevel = GetSkillLevel(dwSkillVnum);
 
 	int idx = MIN(9, GetSkillLevel(dwSkillVnum) - 30);
@@ -387,15 +387,15 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 
 	if (bLastLevel == GetSkillLevel(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ũ, Ⱑ ϰ ־! ̰  ȭԸΰ!? !"));
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" з ϴ. ٽ ֽñ ٶϴ."));
+		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("크윽, 기가 역류하고 있어! 이거 설마 주화입마인가!? 젠장!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("수련이 실패로 끝났습니다. 다시 도전해주시기 바랍니다."));
 		LogManager::instance().CharLog(this, dwSkillVnum, "GM_READ_FAIL", "");
 		return false;
 	}
 
-	ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("     ̾!"));
-	ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("߰ſ   ġ ־! ̰, ̰!"));
-	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ̽ϴ."));
+	ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("몸에서 뭔가 힘이 터져 나오는 기분이야!"));
+	ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("뜨거운 무엇이 계속 용솟음치고 있어! 이건, 이것은!"));
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더 높은 경지의 수련을 성공적으로 끝내셨습니다."));
 	LogManager::instance().CharLog(this, dwSkillVnum, "GM_READ_SUCCESS", "");
 	return true;
 }
@@ -422,7 +422,7 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 	if (!IsLearnableSkill(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ųԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("수련할 수 없는 스킬입니다."));
 		return false;
 	}
 
@@ -434,20 +434,20 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 		if ( GetExp() < need_exp )
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ Ͽ å   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("경험치가 부족하여 책을 읽을 수 없습니다."));
 			return false;
 		}
 	}
 
-	// bType 0̸ ó å  
+	// bType이 0이면 처음부터 책으로 수련 가능
 	if (pkSk->dwType != 0)
 	{
 		if (GetSkillMasterType(dwSkillVnum) != SKILL_MASTER)
 		{
 			if (GetSkillMasterType(dwSkillVnum) > SKILL_MASTER)
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų å ̻   ϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 스킬은 책으로 더이상 수련할 수 없습니다."));
 			else
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų  å   ̸ ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 스킬은 아직 책으로 수련할 경지에 이르지 않았습니다."));
 			return false;
 		}
 	}
@@ -458,9 +458,9 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 		{
 			if (FindAffect(AFFECT_SKILL_NO_BOOK_DELAY))
 			{
-				// ־ȼ ߿ ð  
+				// 주안술서 사용중에는 시간 제한 무시
 				RemoveAffect(AFFECT_SKILL_NO_BOOK_DELAY);
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("־ȼ  ȭԸ Խϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("주안술서를 통해 주화입마에서 빠져나왔습니다."));
 			}
 			else 	    
 			{
@@ -470,7 +470,7 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 		}
 	}
 
-	// ⼭ Ȯ մϴ.
+	// 여기서 확률을 계산합니다.
 	BYTE bLastLevel = GetSkillLevel(dwSkillVnum);
 
 	if (bProb != 0)
@@ -530,13 +530,13 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 				if (number(1, 100) > percent)
 				{
-					// åб⿡ 
+					// 책읽기에 성공
 					if (read_count >= need_bookcount)
 					{
 						SkillLevelUp(dwSkillVnum, SKILL_UP_BY_BOOK);
 						pPC->SetFlag(flag, 0);
 
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("å      ̽ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("책으로 더 높은 경지의 수련을 성공적으로 끝내셨습니다."));
 						LogManager::instance().CharLog(this, dwSkillVnum, "READ_SUCCESS", "");
 						return true;
 					}
@@ -547,27 +547,27 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 						switch (number(1, 3))
 						{
 							case 1:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("    ذ Ǿ  ѵ ѵ.."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("어느정도 이 기술에 대해 이해가 되었지만 조금 부족한듯 한데.."));
 								break;
 											
 							case 2:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("  ̴ ǰ...    ϱⰡ ʹ .."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("드디어 끝이 보이는 건가...  이 기술은 이해하기가 너무 힘들어.."));
 								break;
 
 							case 3:
 							default:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT(" ϴ   ͸   ִ  ̴.."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("열심히 하는 배움을 가지는 것만이 기술을 배울수 있는 유일한 길이다.."));
 								break;
 						}
 
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d   о  Ϸ   ֽϴ."), need_bookcount - read_count);
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 권을 더 읽어야 수련을 완료 할 수 있습니다."), need_bookcount - read_count);
 						return true;
 					}
 				}
 			}
 			else
 			{
-				//  Ʈ  ε 
+				// 사용자의 퀘스트 정보 로드 실패
 			}
 		}
 		// INTERNATIONAL_VERSION
@@ -605,15 +605,15 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 	if (bLastLevel != GetSkillLevel(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("     ̾!"));
-		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("߰ſ   ġ ־! ̰, ̰!"));
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("å      ̽ϴ."));
+		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("몸에서 뭔가 힘이 터져 나오는 기분이야!"));
+		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("뜨거운 무엇이 계속 용솟음치고 있어! 이건, 이것은!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("책으로 더 높은 경지의 수련을 성공적으로 끝내셨습니다."));
 		LogManager::instance().CharLog(this, dwSkillVnum, "READ_SUCCESS", "");
 	}
 	else
 	{
-		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ũ, Ⱑ ϰ ־! ̰  ȭԸΰ!? !"));
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" з ϴ. ٽ ֽñ ٶϴ."));
+		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("크윽, 기가 역류하고 있어! 이거 설마 주화입마인가!? 젠장!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("수련이 실패로 끝났습니다. 다시 도전해주시기 바랍니다."));
 		LogManager::instance().CharLog(this, dwSkillVnum, "READ_FAIL", "");
 	}
 
@@ -697,7 +697,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 		return;
 	}
 
@@ -724,7 +724,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 	if (!IsLearnableSkill(dwVnum))
 		return;
 
-	// ׷ ʹ Ʈθ డ
+	// 그랜드 마스터는 퀘스트로만 수행가능
 	if (pkSk->dwType != 0)
 	{
 		switch (GetSkillMasterType(pkSk->dwVnum))
@@ -741,7 +741,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 
 	if (bMethod == SKILL_UP_BY_POINT)
 	{
-		// Ͱ ƴ ¿ ð
+		// 마스터가 아닌 상태에서만 수련가능
 		if (GetSkillMasterType(pkSk->dwVnum) != SKILL_NORMAL)
 			return;
 
@@ -750,7 +750,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 	}
 	else if (bMethod == SKILL_UP_BY_BOOK)
 	{
-		if (pkSk->dwType != 0) //   ʾҰų Ʈ ø  ų ó å   ִ.
+		if (pkSk->dwType != 0) // 직업에 속하지 않았거나 포인트로 올릴수 없는 스킬은 처음부터 책으로 배울 수 있다.
 			if (GetSkillMasterType(pkSk->dwVnum) != SKILL_MASTER)
 				return;
 	}
@@ -804,11 +804,11 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 
 	if (pkSk->dwType != 0)
 	{
-		// ڱ ׷̵ ϴ ڵ
+		// 갑자기 그레이드 업하는 코딩
 		switch (GetSkillMasterType(pkSk->dwVnum))
 		{
 			case SKILL_NORMAL:
-				//  ų ׷̵ 17~20    
+				// 번섭은 스킬 업그레이드 17~20 사이 랜덤 마스터 수련
 				if (GetSkillLevel(pkSk->dwVnum) >= 17)
 				{
 					if (GetQuestFlag("reset_scroll.force_to_master_skill") > 0)
@@ -866,7 +866,7 @@ void CHARACTER::ResetSkill()
 	if (NULL == m_pSkillLevels)
 		return;
 
-	//  ų ½Ű ʴ´
+	// 보조 스킬은 리셋시키지 않는다
 	std::vector > vec;
 	size_t count = sizeof(s_adwSubSkillVnums) / sizeof(s_adwSubSkillVnums[0]);
 
@@ -997,7 +997,7 @@ EVENTFUNC(ChainLightningEvent)
 
 	sys_log(1, "chainlighting event %s", pkChr->GetName());
 
-	if (pkChrVictim->GetParty()) // Ƽ 
+	if (pkChrVictim->GetParty()) // 파티 먼저
 	{
 		pkTarget = pkChrVictim->GetParty()->GetNextOwnership(NULL, pkChrVictim->GetX(), pkChrVictim->GetY());
 		if (pkTarget == pkChrVictim || !number(0, 2) || pkChr->GetChainLightingExcept().find(pkTarget) != pkChr->GetChainLightingExcept().end())
@@ -1096,7 +1096,7 @@ struct FuncSplashDamage
 		}
 
 		if (m_pkChr->IsPC())
-			//  ų Ÿ ó  ʴ´.
+			// 길드 스킬은 쿨타임 처리를 하지 않는다.
 			if (!(m_pkSk->dwVnum >= GUILD_SKILL_START && m_pkSk->dwVnum <= GUILD_SKILL_END))
 				if (!m_bDisableCooltime && m_pInfo && !m_pInfo->HitOnce(m_pkSk->dwVnum) && m_pkSk->dwVnum != SKILL_MUYEONG)
 				{
@@ -1166,7 +1166,7 @@ struct FuncSplashDamage
 		m_pkSk->SetPointVar("chain", m_pkChr->GetChainLightningIndex());
 		m_pkChr->IncChainLightningIndex();
 
-		bool bUnderEunhyung = m_pkChr->GetAffectedEunhyung() > 0; // ̰  ⼭ ??
+		bool bUnderEunhyung = m_pkChr->GetAffectedEunhyung() > 0; // 이건 왜 여기서 하지??
 
 		m_pkSk->SetPointVar("ek", m_pkChr->GetAffectedEunhyung()*1./100);
 		//m_pkChr->ClearAffectedEunhyung();
@@ -1185,7 +1185,7 @@ struct FuncSplashDamage
 
 		if (test_server && iAmount == 0 && m_pkSk->bPointOn != POINT_NONE)
 		{
-			m_pkChr->ChatPacket(CHAT_TYPE_INFO, "ȿ ϴ. ų  Ȯϼ");
+			m_pkChr->ChatPacket(CHAT_TYPE_INFO, "효과가 없습니다. 스킬 공식을 확인하세요");
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		iAmount = -iAmount;
@@ -1249,11 +1249,11 @@ struct FuncSplashDamage
 
 		if (m_pkChr->IsPC() && m_pkChr->m_SkillUseInfo[m_pkSk->dwVnum].GetMainTargetVID() != (DWORD) pkChrVictim->GetVID())
 		{
-			//  
+			// 데미지 감소
 			iDam = (int) (iDam * m_pkSk->kSplashAroundDamageAdjustPoly.Eval());
 		}
 
-		// TODO ų   Ÿ ؾѴ.
+		// TODO 스킬에 따른 데미지 타입 기록해야한다.
 		EDamageType dt = DAMAGE_TYPE_NONE;
 
 		switch (m_pkSk->bSkillAttrType)
@@ -1276,7 +1276,7 @@ struct FuncSplashDamage
 
 							case WEAPON_TWO_HANDED:
 								iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_TWOHAND)) / 100;
-								// հ Ƽ 10%
+								// 양손검 페널티 10%
 								//iDam = iDam * 95 / 100;
 
 								break;
@@ -1301,8 +1301,8 @@ struct FuncSplashDamage
 
 			case SKILL_ATTR_TYPE_RANGE:
 				dt = DAMAGE_TYPE_RANGE;
-				// ƾƾƾ
-				//  ߴ װ ־   ٽϸ  
+				// 으아아아악
+				// 예전에 적용안했던 버그가 있어서 방어력 계산을 다시하면 유저가 난리남
 				//iDam -= pkChrVictim->GetPoint(POINT_DEF_GRADE);
 				iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_BOW)) / 100;
 				break;
@@ -1310,8 +1310,8 @@ struct FuncSplashDamage
 			case SKILL_ATTR_TYPE_MAGIC:
 				dt = DAMAGE_TYPE_MAGIC;
 				iDam = CalcAttBonus(m_pkChr, pkChrVictim, iDam);
-				// ƾƾƾ
-				//  ߴ װ ־   ٽϸ  
+				// 으아아아악
+				// 예전에 적용안했던 버그가 있어서 방어력 계산을 다시하면 유저가 난리남
 				//iDam -= pkChrVictim->GetPoint(POINT_MAGIC_DEF_GRADE);
 				iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_MAGIC)) / 100;
 				break;
@@ -1322,13 +1322,13 @@ struct FuncSplashDamage
 		}
 
 		//
-		// 20091109  ų Ӽ û ۾
-		//  ų ̺ SKILL_FLAG_WIND, SKILL_FLAG_ELEC, SKILL_FLAG_FIRE  ų
-		//  Ƿ  RESIST_WIND, RESIST_ELEC, RESIST_FIRE  ʰ ־.
+		// 20091109 독일 스킬 속성 요청 작업
+		// 기존 스킬 테이블에 SKILL_FLAG_WIND, SKILL_FLAG_ELEC, SKILL_FLAG_FIRE를 가진 스킬이
+		// 전혀 없었으므로 몬스터의 RESIST_WIND, RESIST_ELEC, RESIST_FIRE도 사용되지 않고 있었다.
 		//
-		// PvP PvE뷱 и  ǵ NPC ϵ   뷱 
-		//  ϱ  mob_proto RESIST_MAGIC RESIST_WIND, RESIST_ELEC, RESIST_FIRE
-		// Ͽ.
+		// PvP와 PvE밸런스 분리를 위해 의도적으로 NPC만 적용하도록 했으며 기존 밸런스와 차이점을
+		// 느끼지 못하기 위해 mob_proto의 RESIST_MAGIC을 RESIST_WIND, RESIST_ELEC, RESIST_FIRE로
+		// 복사하였다.
 		//
 		if (pkChrVictim->IsNPC())
 		{
@@ -1638,7 +1638,7 @@ EVENTFUNC(skill_gwihwan_event)
 	{
 		PIXEL_POSITION pos;
 
-		// 
+		// 성공
 		if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(ch->GetMapIndex(), ch->GetEmpire(), pos))
 		{
 			sys_log(1, "Recall: %s %d %d -> %d %d", ch->GetName(), ch->GetX(), ch->GetY(), pos.x, pos.y);
@@ -1652,8 +1652,8 @@ EVENTFUNC(skill_gwihwan_event)
 	}
 	else
 	{
-		//
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯ Ͽϴ."));
+		//실패
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("귀환에 실패하였습니다."));
 	}
 	return 0;
 }
@@ -1680,11 +1680,11 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 				GetName(), dwVnum, posTarget.x, posTarget.y, bSkillLevel); 
 	}
 
-	//   ų  ġ .
+	// 나에게 쓰는 스킬은 내 위치를 쓴다.
 	//if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
 	//	posTarget = GetXYZ();
 
-	// ÷ ƴ ų ̸ ̻ϴ
+	// 스플래쉬가 아닌 스킬은 주위이면 이상하다
 	if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_SPLASH))
 		return BATTLE_NONE;
 
@@ -1768,7 +1768,7 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 
 	if (test_server && iAmount == 0 && pkSk->bPointOn != POINT_NONE)
 	{
-		ChatPacket(CHAT_TYPE_INFO, "ȿ ϴ. ų  Ȯϼ");
+		ChatPacket(CHAT_TYPE_INFO, "효과가 없습니다. 스킬 공식을 확인하세요");
 	}
 
 	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_REMOVE_BAD_AFFECT))
@@ -1783,7 +1783,7 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK | SKILL_FLAG_USE_MELEE_DAMAGE | SKILL_FLAG_USE_MAGIC_DAMAGE))
 	{
 		//
-		//  ų 
+		// 공격 스킬일 경우
 		//
 		bool bAdded = false;
 
@@ -1810,7 +1810,7 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 			int iDur = (int) pkSk->kDurationPoly.Eval();
 
 			if (IsPC())
-				if (!(dwVnum >= GUILD_SKILL_START && dwVnum <= GUILD_SKILL_END)) //  ų Ÿ ó  ʴ´.
+				if (!(dwVnum >= GUILD_SKILL_START && dwVnum <= GUILD_SKILL_END)) // 길드 스킬은 쿨타임 처리를 하지 않는다.
 					if (!m_bDisableCooltime && !m_SkillUseInfo[dwVnum].HitOnce(dwVnum) && dwVnum != SKILL_MUYEONG)
 					{
 						//if (dwVnum == SKILL_CHAIN) sys_log(0, "CHAIN skill cannot hit %s", GetName());
@@ -1901,7 +1901,7 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 		if (iDur > 0)
 		{
 			iDur += GetPoint(POINT_PARTY_BUFFER_BONUS);
-			// AffectFlag ų, toggle ϴ  ƴ϶..
+			// AffectFlag가 없거나, toggle 하는 것이 아니라면..
 			pkSk->kDurationSPCostPoly.SetVar("k", k/*bSkillLevel*/);
 
 			AddAffect(pkSk->dwVnum,
@@ -1956,13 +1956,13 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
 	}
 }
 
-// bSkillLevel ڰ 0 ƴ 쿡 m_abSkillLevels  ʰ 
-// bSkillLevel Ѵ.
+// bSkillLevel 인자가 0이 아닐 경우에는 m_abSkillLevels를 사용하지 않고 강제로
+// bSkillLevel로 계산한다.
 int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel)
 {
 	const bool bCanUseHorseSkill = CanUseHorseSkill();
 
-	//  Ÿ ų    ¶ return
+	// 말을 타고있지만 스킬은 사용할 수 없는 상태라면 return
 	if (false == bCanUseHorseSkill && true == IsRiding())
 		return BATTLE_NONE;
 
@@ -1984,7 +1984,7 @@ int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel
 		return BATTLE_NONE;
 	
 
-	// 濡   ƴϸ   Ѵ.
+	// 상대방에게 쓰는 것이 아니면 나에게 써야 한다.
 	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
 		pkVictim = this;
 
@@ -2113,7 +2113,7 @@ int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel
 
 	if (test_server && iAmount == 0 && pkSk->bPointOn != POINT_NONE)
 	{
-		ChatPacket(CHAT_TYPE_INFO, "ȿ ϴ. ų  Ȯϼ");
+		ChatPacket(CHAT_TYPE_INFO, "효과가 없습니다. 스킬 공식을 확인하세요");
 	}
 	// END_OF_ADD_GRANDMASTER_SKILL
 
@@ -2157,7 +2157,7 @@ int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel
 			
 
 			if (IsPC())
-				if (!(dwVnum >= GUILD_SKILL_START && dwVnum <= GUILD_SKILL_END)) //  ų Ÿ ó  ʴ´.
+				if (!(dwVnum >= GUILD_SKILL_START && dwVnum <= GUILD_SKILL_END)) // 길드 스킬은 쿨타임 처리를 하지 않는다.
 					if (!m_bDisableCooltime && !m_SkillUseInfo[dwVnum].HitOnce(dwVnum) && dwVnum != SKILL_MUYEONG)
 					{
 						return BATTLE_NONE;
@@ -2270,7 +2270,7 @@ int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel
 		if (iDur > 0)
 		{
 			iDur += GetPoint(POINT_PARTY_BUFFER_BONUS);
-			// AffectFlag ų, toggle ϴ  ƴ϶..
+			// AffectFlag가 없거나, toggle 하는 것이 아니라면..
 			pkSk->kDurationSPCostPoly.SetVar("k", k/*bSkillLevel*/);
 
 			if (pkSk->bPointOn2 != POINT_NONE)
@@ -2445,14 +2445,14 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 			return false;
 
 		if (GetHorseLevel() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϴ. °  ãư."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말이 없습니다. 마굿간 경비병을 찾아가세요."));
 		else
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȯ  ϼ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말 소환 아이템을 사용하세요."));
 
 		return true;
 	}
 
-	//  Ÿ ų    ¶ return false
+	// 말을 타고있지만 스킬은 사용할 수 없는 상태라면 return false
 	if (false == bCanUseHorseSkill && true == IsRiding())
 		return false;
 
@@ -2498,7 +2498,7 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 			}
 
 			m_SkillUseInfo[dwVnum].SetMainTargetVID(pkVictim->GetVID());
-			// DASH  źȯ ݱ
+			// DASH 상태의 탄환격은 공격기술
 			ComputeSkill(dwVnum, pkVictim);
 			RemoveAffect(dwVnum);
 			return true;
@@ -2516,7 +2516,7 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 		return true;
 	}
 
-	// Toggle   SP   (SelfOnly )
+	// Toggle 할 때는 SP를 쓰지 않음 (SelfOnly로 구분)
 	if ((0 != pkSk->dwAffectFlag || pkSk->dwVnum == SKILL_MUYEONG) && (pkSk->dwFlag & SKILL_FLAG_TOGGLE) && RemoveAffect(pkSk->dwVnum))
 	{
 		return true;
@@ -2530,7 +2530,7 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 	pkSk->SetPointVar("k", k);
 	pkSk->kSplashAroundDamageAdjustPoly.SetVar("k", k);
 
-	// Ÿ üũ
+	// 쿨타임 체크
 	pkSk->kCooldownPoly.SetVar("k", k);
 	int iCooltime = (int) pkSk->kCooldownPoly.Eval();
 	int lMaxHit = pkSk->lMaxHit ? pkSk->lMaxHit : -1;
@@ -2584,7 +2584,7 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 			return false;
 
 		if (test_server)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s SPҸ: %d"), pkSk->szName, iNeededSP);
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s SP소모: %d"), pkSk->szName, iNeededSP);
 
 		PointChange(POINT_SP, -iNeededSP);
 	}
@@ -2594,7 +2594,7 @@ bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaste
 
 	if (pkSk->dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill() && !IsAffectFlag(AFF_TANHWAN_DASH) && !pkVictim)
 	{
-		// ó ϴ  ڽſ Affect δ.
+		// 처음 사용하는 무영진은 자신에게 Affect를 붙인다.
 		pkVictim = this;
 	}
 
@@ -2667,7 +2667,7 @@ int CHARACTER::GetSkillMasterType(DWORD dwVnum) const
 
 int CHARACTER::GetSkillPower(DWORD dwVnum, BYTE bLevel) const
 {
-	// ξ 
+	// 인어반지 아이템
 	if (dwVnum >= SKILL_LANGUAGE1 && dwVnum <= SKILL_LANGUAGE3 && IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE))
 	{
 		return 100;
@@ -2770,41 +2770,41 @@ void CHARACTER::SkillLearnWaitMoreTimeMessage(DWORD ms)
 	//const char* str = "";
 	//
 	if (ms < 3 * 60)
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("  ̱߰.   . ̴ ⸦ Ű."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("몸 속이 뜨겁군. 하지만 아주 편안해. 이대로 기를 안정시키자."));
 	else if (ms < 5 * 60)
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("׷, õõ.  õõ, ׷   !"));
-	else if (ms < 10 * 60) // 10
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("׷,  ̾. ü Ⱑ  游."));
-	else if (ms < 30 * 60) // 30
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("그래, 천천히. 좀더 천천히, 그러나 막힘 없이 빠르게!"));
+	else if (ms < 10 * 60) // 10분
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("그래, 이 느낌이야. 체내에 기가 아주 충만해."));
+	else if (ms < 30 * 60) // 30분
 	{
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT(" о!  ޿ ִ  ſ ⸦ ⸸ ϸ,"));
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("װ   ž!"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("다 읽었다! 이제 비급에 적혀있는 대로 전신에 기를 돌리기만 하면,"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("그것으로 수련은 끝난 거야!"));
 	}
-	else if (ms < 1 * 3600) // 1ð
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT(" å  ̾!    ̰ ־!"));
-	else if (ms < 2 * 3600) // 2ð
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("  Ҿ! ݸ !"));
+	else if (ms < 1 * 3600) // 1시간
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("이제 책의 마지막 장이야! 수련의 끝이 눈에 보이고 있어!"));
+	else if (ms < 2 * 3600) // 2시간
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("얼마 안 남았어! 조금만 더!"));
 	else if (ms < 3 * 3600)
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Ҿ! ݸ   ̴!"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("좋았어! 조금만 더 읽으면 끝이다!"));
 	else if (ms < 6 * 3600)
 	{
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("å嵵    ʾұ."));
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("  ȿ    ."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("책장도 이제 얼마 남지 않았군."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("뭔가 몸 안에 힘이 생기는 기분인 걸."));
 	}
 	else if (ms < 12 * 3600)
 	{
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("      ."));
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT(",  ⼼  !"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("이제 좀 슬슬 가닥이 잡히는 것 같은데."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("좋아, 이 기세로 계속 나간다!"));
 	}
 	else if (ms < 18 * 3600)
 	{
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("ƴ     о Ӹ  ."));
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("ϱ Ⱦ."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("아니 어떻게 된 게 종일 읽어도 머리에 안 들어오냐."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("공부하기 싫어지네."));
 	}
 	else //if (ms < 2 * 86400)
 	{
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("ŭ бⰡ  ʱ. ص ư 뵵 ."));
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("̷ ΰ ȵȴٱ."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("생각만큼 읽기가 쉽지가 않군. 이해도 어렵고 내용도 난해해."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("이래서야 공부가 안된다구."));
 	}
 	/*
 	   str = "30%";
@@ -3164,10 +3164,10 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 
 	static DWORD s_anMotion2SkillVnumList[MOTION_MAX_NUM][SKILL_LIST_MAX_COUNT] =
 	{
-		// ų   罺ųID  ڰųID  ųID  罺ųID
+		// 스킬수   무사스킬ID  자객스킬ID  수라스킬ID  무당스킬ID
 		{   0,		0,			0,			0,			0		}, //  0
 
-		// 1  ⺻ ų
+		// 1번 직군 기본 스킬
 		{   4,		1,			31,			61,			91		}, //  1
 		{   4,		2,			32,			62,			92		}, //  2
 		{   4,		3,			33,			63,			93		}, //  3
@@ -3176,9 +3176,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		6,			36,			66,			96		}, //  6
 		{   0,		0,			0,			0,			0		}, //  7
 		{   0,		0,			0,			0,			0		}, //  8
-		// 1  ⺻ ų 
+		// 1번 직군 기본 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  9
 		{   0,		0,			0,			0,			0		}, //  10
 		{   0,		0,			0,			0,			0		}, //  11
@@ -3186,9 +3186,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   0,		0,			0,			0,			0		}, //  13
 		{   0,		0,			0,			0,			0		}, //  14
 		{   0,		0,			0,			0,			0		}, //  15
-		//  
+		// 여유분 끝
 
-		// 2  ⺻ ų
+		// 2번 직군 기본 스킬
 		{   4,		16,			46,			76,			106		}, //  16
 		{   4,		17,			47,			77,			107		}, //  17
 		{   4,		18,			48,			78,			108		}, //  18
@@ -3197,14 +3197,14 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		21,			51,			81,			111		}, //  21
 		{   0,		0,			0,			0,			0		}, //  22
 		{   0,		0,			0,			0,			0		}, //  23
-		// 2  ⺻ ų 
+		// 2번 직군 기본 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  24
 		{   0,		0,			0,			0,			0		}, //  25
-		//  
+		// 여유분 끝
 
-		// 1   ų
+		// 1번 직군 마스터 스킬
 		{   4,		1,			31,			61,			91		}, //  26
 		{   4,		2,			32,			62,			92		}, //  27
 		{   4,		3,			33,			63,			93		}, //  28
@@ -3213,9 +3213,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		6,			36,			66,			96		}, //  31
 		{   0,		0,			0,			0,			0		}, //  32
 		{   0,		0,			0,			0,			0		}, //  33
-		// 1   ų 
+		// 1번 직군 마스터 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  34
 		{   0,		0,			0,			0,			0		}, //  35
 		{   0,		0,			0,			0,			0		}, //  36
@@ -3223,9 +3223,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   0,		0,			0,			0,			0		}, //  38
 		{   0,		0,			0,			0,			0		}, //  39
 		{   0,		0,			0,			0,			0		}, //  40
-		//  
+		// 여유분 끝
 
-		// 2   ų
+		// 2번 직군 마스터 스킬
 		{   4,		16,			46,			76,			106		}, //  41
 		{   4,		17,			47,			77,			107		}, //  42
 		{   4,		18,			48,			78,			108		}, //  43
@@ -3234,14 +3234,14 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		21,			51,			81,			111		}, //  46
 		{   0,		0,			0,			0,			0		}, //  47
 		{   0,		0,			0,			0,			0		}, //  48
-		// 2   ų 
+		// 2번 직군 마스터 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  49
 		{   0,		0,			0,			0,			0		}, //  50
-		//  
+		// 여유분 끝
 
-		// 1  ׷  ų
+		// 1번 직군 그랜드 마스터 스킬
 		{   4,		1,			31,			61,			91		}, //  51
 		{   4,		2,			32,			62,			92		}, //  52
 		{   4,		3,			33,			63,			93		}, //  53
@@ -3250,9 +3250,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		6,			36,			66,			96		}, //  56
 		{   0,		0,			0,			0,			0		}, //  57
 		{   0,		0,			0,			0,			0		}, //  58
-		// 1  ׷  ų 
+		// 1번 직군 그랜드 마스터 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  59
 		{   0,		0,			0,			0,			0		}, //  60
 		{   0,		0,			0,			0,			0		}, //  61
@@ -3260,9 +3260,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   0,		0,			0,			0,			0		}, //  63
 		{   0,		0,			0,			0,			0		}, //  64
 		{   0,		0,			0,			0,			0		}, //  65
-		//  
+		// 여유분 끝
 
-		// 2  ׷  ų
+		// 2번 직군 그랜드 마스터 스킬
 		{   4,		16,			46,			76,			106		}, //  66
 		{   4,		17,			47,			77,			107		}, //  67
 		{   4,		18,			48,			78,			108		}, //  68
@@ -3271,14 +3271,14 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		21,			51,			81,			111		}, //  71
 		{   0,		0,			0,			0,			0		}, //  72
 		{   0,		0,			0,			0,			0		}, //  73
-		// 2  ׷  ų 
+		// 2번 직군 그랜드 마스터 스킬 끝
 
-		//
+		//여유분
 		{   0,		0,			0,			0,			0		}, //  74
 		{   0,		0,			0,			0,			0		}, //  75
-		//  
+		// 여유분 끝
 
-		// 1  Ʈ  ų
+		// 1번 직군 퍼펙트 마스터 스킬
 		{   4,		1,			31,			61,			91		}, //  76
 		{   4,		2,			32,			62,			92		}, //  77
 		{   4,		3,			33,			63,			93		}, //  78
@@ -3287,9 +3287,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		6,			36,			66,			96		}, //  81
 		{   0,		0,			0,			0,			0		}, //  82
 		{   0,		0,			0,			0,			0		}, //  83
-		// 1  Ʈ  ų 
+		// 1번 직군 퍼펙트 마스터 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  84
 		{   0,		0,			0,			0,			0		}, //  85
 		{   0,		0,			0,			0,			0		}, //  86
@@ -3297,9 +3297,9 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   0,		0,			0,			0,			0		}, //  88
 		{   0,		0,			0,			0,			0		}, //  89
 		{   0,		0,			0,			0,			0		}, //  90
-		//  
+		// 여유분 끝
 
-		// 2  Ʈ  ų
+		// 2번 직군 퍼펙트 마스터 스킬
 		{   4,		16,			46,			76,			106		}, //  91
 		{   4,		17,			47,			77,			107		}, //  92
 		{   4,		18,			48,			78,			108		}, //  93
@@ -3308,23 +3308,23 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   4,		21,			51,			81,			111		}, //  96
 		{   0,		0,			0,			0,			0		}, //  97
 		{   0,		0,			0,			0,			0		}, //  98
-		// 2  Ʈ  ų 
+		// 2번 직군 퍼펙트 마스터 스킬 끝
 
-		// 
+		// 여유분
 		{   0,		0,			0,			0,			0		}, //  99
 		{   0,		0,			0,			0,			0		}, //  100
-		//  
+		// 여유분 끝
 
-		//  ų
+		// 길드 스킬
 		{   1,  152,    0,    0,    0}, //  101
 		{   1,  153,    0,    0,    0}, //  102
 		{   1,  154,    0,    0,    0}, //  103
 		{   1,  155,    0,    0,    0}, //  104
 		{   1,  156,    0,    0,    0}, //  105
 		{   1,  157,    0,    0,    0}, //  106
-		//  ų 
+		// 길드 스킬 끝
 
-		// 
+		// 여유분
 		{   0,    0,    0,    0,    0}, //  107
 		{   0,    0,    0,    0,    0}, //  108
 		{   0,    0,    0,    0,    0}, //  109
@@ -3339,13 +3339,13 @@ bool CHARACTER::IsUsableSkillMotion(DWORD dwMotionIndex) const
 		{   0,    0,    0,    0,    0}, //  118
 		{   0,    0,    0,    0,    0}, //  119
 		{   0,    0,    0,    0,    0}, //  120
-		//  
+		// 여유분 끝
 
-		// ¸ ų
+		// 승마 스킬
 		{   2,  137,  140,    0,    0}, //  121
 		{   1,  138,    0,    0,    0}, //  122
 		{   1,  139,    0,    0,    0}, //  123
-		// ¸ ų 
+		// 승마 스킬 끝
 	};
 
 	if (dwMotionIndex >= MOTION_MAX_NUM)
@@ -3499,7 +3499,7 @@ bool CHARACTER::CanUseSkill(DWORD dwSkillVnum) const
 	
 	if (true == IsRiding())
 	{
-		//Ʈ Ż ޸ ų 밡
+		//마운트 탈것중 고급말만 스킬 사용가능
 		if(GetMountVnum())
 		{
 			if( GetMountVnum() < 20209 && GetMountVnum() > 20212)
diff --git a/src/game/char_state.cpp b/src/game/char_state.cpp
index bdfdb94..835b72e 100644
--- a/src/game/char_state.cpp
+++ b/src/game/char_state.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "utils.h"
 #include "vector.h"
@@ -63,7 +63,7 @@ namespace
 						!pkChr->IsAffectFlag(AFF_WAR_FLAG2) &&
 						!pkChr->IsAffectFlag(AFF_WAR_FLAG3))
 				{
-					// 츮  
+					// 우리편 깃발일 경우
 					if ((DWORD) m_pkChr->GetPoint(POINT_STAT) == pkChr->GetGuild()->GetID())
 					{
 						CWarMap * pMap = pkChr->GetWarMap();
@@ -72,8 +72,8 @@ namespace
 						if (!pMap || !pMap->GetTeamIndex(pkChr->GetGuild()->GetID(), idx))
 							return;
 
-						// 츮      ̴´. ȱ׷  ִ 
-						//  ΰ   Ƿ..
+						// 우리편 기지에 깃발이 없을 때만 깃발을 뽑는다. 안그러면 기지에 있는 깃발을
+						// 가만히 두고 싶은데도 뽑힐수가 있으므로..
 						if (!pMap->IsFlagOnBase(idx))
 						{
 							m_pkChrFind = pkChr;
@@ -82,7 +82,7 @@ namespace
 					}
 					else
 					{
-						//     ̴´.
+						// 상대편 깃발인 경우 무조건 뽑는다.
 						m_pkChrFind = pkChr;
 						m_iMinDistance = iDist;
 					}
@@ -155,7 +155,7 @@ namespace
 								//pkChr->RemoveAffect(AFFECT_WAR_FLAG);
 
 								char buf[256];
-								snprintf(buf, sizeof(buf), LC_TEXT("%s 尡 %s   Ѿҽϴ!"), pMap->GetGuild(idx)->GetName(), pMap->GetGuild(idx_opp)->GetName());
+								snprintf(buf, sizeof(buf), LC_TEXT("%s 길드가 %s 길드의 깃발을 빼앗았습니다!"), pMap->GetGuild(idx)->GetName(), pMap->GetGuild(idx_opp)->GetName());
 								pMap->Notice(buf);
 							}
 						}
@@ -186,7 +186,7 @@ namespace
 
 				LPCHARACTER pkChr = (LPCHARACTER) ent;
 
-				// ϴ PC ݾ
+				// 일단 PC 공격안함
 				if (pkChr->IsPC())
 					return;
 
@@ -202,7 +202,7 @@ namespace
 						pkChr->IsAffectFlag(AFF_REVIVE_INVISIBLE))
 					return;
 
-				// ֱ н
+				// 왜구는 패스
 				if (pkChr->GetRaceNum() == 5001)
 					return;
 
@@ -285,7 +285,7 @@ void CHARACTER::CowardEscape()
 	for (int iDistIdx = 2; iDistIdx >= 0; --iDistIdx)
 		for (int iTryCount = 0; iTryCount < 8; ++iTryCount)
 		{
-			SetRotation(number(0, 359));        //   
+			SetRotation(number(0, 359));        // 방향은 랜덤으로 설정
 
 			float fx, fy;
 			float fDist = number(iDist[iDistIdx], iDist[iDistIdx+1]);
@@ -367,7 +367,7 @@ void CHARACTER::StateIdle()
 	}
 	else if (IsWarp() || IsGoto())
 	{
-		//  ̺Ʈ ó
+		// 워프는 이벤트로 처리
 		m_dwStateDuration = 60 * passes_per_sec;
 		return;
 	}
@@ -375,7 +375,7 @@ void CHARACTER::StateIdle()
 	if (IsPC())
 		return;
 
-	// NPC ó
+	// NPC 처리
 	if (!IsMonster())
 	{
 		__StateIdle_NPC();
@@ -506,7 +506,7 @@ void CHARACTER::__StateIdle_NPC()
 	MonsterChat(MONSTER_CHAT_WAIT);
 	m_dwStateDuration = PASSES_PER_SEC(5);
 
-	//  ý Idle ó     ij͵ ؼ ϴ ¸ӽ ƴ CPetActor::Update ó.
+	// 펫 시스템의 Idle 처리는 기존 거의 모든 종류의 캐릭터들이 공유해서 사용하는 상태머신이 아닌 CPetActor::Update에서 처리함.
 	if (IsPet())
 		return;
 	else if (IsGuardNPC())
@@ -531,21 +531,21 @@ void CHARACTER::__StateIdle_NPC()
 	}
 	else
 	{
-		if (GetRaceNum() == xmas::MOB_SANTA_VNUM) // Ÿ
+		if (GetRaceNum() == xmas::MOB_SANTA_VNUM) // 산타
 		{
 			if (get_dword_time() > m_dwPlayStartTime)
 			{
-				int	next_warp_time = 2 * 1000;	// 2
+				int	next_warp_time = 2 * 1000;	// 2초
 
 				m_dwPlayStartTime = get_dword_time() + next_warp_time;
 
-				// ð Ѿ սô.
+				// 시간이 넘었으니 워프합시다.
 				/*
-				 * Ÿ
+				 * 산타용
 				const int WARP_MAP_INDEX_NUM = 4;
 				static const long c_lWarpMapIndexs[WARP_MAP_INDEX_NUM] = {61, 62, 63, 64};
 				*/
-				// ż ؿ
+				// 신선자 노해용
 				const int WARP_MAP_INDEX_NUM = 7;
 				static const long c_lWarpMapIndexs[WARP_MAP_INDEX_NUM] = { 61, 62, 63, 64, 3, 23, 43 };
 				long lNextMapIndex;
@@ -553,7 +553,7 @@ void CHARACTER::__StateIdle_NPC()
 
 				if (map_allow_find(lNextMapIndex))
 				{
-					// ̰Դϴ.
+					// 이곳입니다.
 					M2_DESTROY_CHARACTER(this);
 					int iNextSpawnDelay = 0;
 					if (LC_IsYMIR())
@@ -565,7 +565,7 @@ void CHARACTER::__StateIdle_NPC()
 				}
 				else
 				{
-					// ٸ  Դϴ.
+					// 다른 서버 입니다.
 					TPacketGGXmasWarpSanta p;
 					p.bHeader   = HEADER_GG_XMAS_WARP_SANTA;
 					p.bChannel  = g_bChannel;
@@ -579,7 +579,7 @@ void CHARACTER::__StateIdle_NPC()
 		if (!IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_NOMOVE))
 		{
 			//
-			//     ̵Ѵ.
+			// 이 곳 저 곳 이동한다.
 			// 
 			LPCHARACTER pkChrProtege = GetProtege();
 
@@ -594,14 +594,14 @@ void CHARACTER::__StateIdle_NPC()
 
 			if (!number(0, 6))
 			{
-				SetRotation(number(0, 359));        //   
+				SetRotation(number(0, 359));        // 방향은 랜덤으로 설정
 
 				float fx, fy;
 				float fDist = number(200, 400);
 
 				GetDeltaByDegree(GetRotation(), fDist, &fx, &fy);
 
-				//   Ӽ üũ;  ġ ߰ ġ ٸ  ʴ´.
+				// 느슨한 못감 속성 체크; 최종 위치와 중간 위치가 갈수없다면 가지 않는다.
 				if (!(SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx, GetY() + (int) fy) 
 					&& SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx / 2, GetY() + (int) fy / 2)))
 					return;
@@ -627,7 +627,7 @@ void CHARACTER::__StateIdle_Monster()
 
 	if (IsCoward())
 	{
-		//  ʹ  ٴմϴ.
+		// 겁쟁이 몬스터는 도망만 다닙니다.
 		if (!IsDead())
 			CowardEscape();
 
@@ -653,16 +653,16 @@ void CHARACTER::__StateIdle_Monster()
 
 	if (!victim || victim->IsBuilding())
 	{
-		//  ȣ ó
+		// 돌 보호 처리
 		if (m_pkChrStone)
 		{
 			victim = m_pkChrStone->GetNearestVictim(m_pkChrStone);
 		}
-		//   ó
+		// 선공 몬스터 처리
 		else if (!no_wander && IsAggressive())
 		{
 			if (GetMapIndex() == 61 && quest::CQuestManager::instance().GetEventFlag("xmas_tree"));
-			// ѻ꿡   ʴ´.
+			// 서한산에서 나무가 있으면 선공하지않는다.
 			else
 				victim = FindVictim(this, m_pkMobData->m_table.wAggressiveSight);
 		}
@@ -683,40 +683,40 @@ void CHARACTER::__StateIdle_Monster()
 
 	LPCHARACTER pkChrProtege = GetProtege();
 
-	// ȣ (, Ƽ)Է  ִٸ 󰣴.
+	// 보호할 것(돌, 파티장)에게로 부터 멀다면 따라간다.
 	if (pkChrProtege)
 	{
 		if (DISTANCE_APPROX(GetX() - pkChrProtege->GetX(), GetY() - pkChrProtege->GetY()) > 1000)
 		{
 			if (Follow(pkChrProtege, number(150, 400)))
 			{
-				MonsterLog("[IDLE] κ ʹ ָ ! Ѵ.");
+				MonsterLog("[IDLE] 리더로부터 너무 멀리 떨어졌다! 복귀한다.");
 				return;
 			}
 		}
 	}
 
 	//
-	// ׳ Դٸ ٸ Ѵ.
+	// 그냥 왔다리 갔다리 한다.
 	//
 	if (!no_wander && !IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_NOMOVE))
 	{
 		if (!number(0, 6))
 		{
-			SetRotation(number(0, 359));        //   
+			SetRotation(number(0, 359));        // 방향은 랜덤으로 설정
 
 			float fx, fy;
 			float fDist = number(300, 700);
 
 			GetDeltaByDegree(GetRotation(), fDist, &fx, &fy);
 
-			//   Ӽ üũ;  ġ ߰ ġ ٸ  ʴ´.
+			// 느슨한 못감 속성 체크; 최종 위치와 중간 위치가 갈수없다면 가지 않는다.
 			if (!(SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx, GetY() + (int) fy) 
 						&& SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx/2, GetY() + (int) fy/2)))
 				return;
 
-			// NOTE: Ͱ IDLE ¿ ֺ Ÿ ,   پ Ǿ . (  )
-			// ׷  Ͱ ȴ  ʹٰ ؼ ӽ÷ ƯȮ Ȱų ٰ . (   Ʋ  ϴ ׽Ʈ 忡 ۵)
+			// NOTE: 몬스터가 IDLE 상태에서 주변을 서성거릴 때, 현재 무조건 뛰어가게 되어 있음. (절대로 걷지 않음)
+			// 그래픽 팀에서 몬스터가 걷는 모습도 보고싶다고 해서 임시로 특정확률로 걷거나 뛰게 함. (게임의 전반적인 느낌이 틀려지기 때문에 일단 테스트 모드에서만 작동)
 			if (g_test_server)
 			{
 				if (number(0, 100) < 60)
@@ -745,13 +745,13 @@ bool __CHARACTER_GotoNearTarget(LPCHARACTER self, LPCHARACTER victim)
 	{
 		case BATTLE_TYPE_RANGE:
 		case BATTLE_TYPE_MAGIC:
-			// 糪 ü  Ÿ 80%   Ѵ.
+			// 마법사나 궁수는 공격 거리의 80%까지 가서 공격을 시작한다.
 			if (self->Follow(victim, self->GetMobAttackRange() * 8 / 10))
 				return true;
 			break;
 
 		default:
-			//  90%?
+			// 나머지는 90%?
 			if (self->Follow(victim, self->GetMobAttackRange() * 9 / 10))
 				return true;
 	}
@@ -781,7 +781,7 @@ void CHARACTER::StateMove()
 			LPCHARACTER victim = GetExchange()->GetCompany()->GetOwner();
 			int iDist = DISTANCE_APPROX(GetX() - victim->GetX(), GetY() - victim->GetY());
 
-			// Ÿ üũ
+			// 거리 체크
 			if (iDist >= EXCHANGE_MAX_DISTANCE)
 			{
 				GetExchange()->Cancel();
@@ -789,17 +789,17 @@ void CHARACTER::StateMove()
 		}
 	}
 
-	// ׹̳ 0 ̻̾ Ѵ.
+	// 스테미나가 0 이상이어야 한다.
 	if (IsPC())
 	{
 		if (IsWalking() && GetStamina() < GetMaxStamina())
 		{
-			// 5   ׹̳ 
+			// 5초 후 부터 스테미너 증가
 			if (get_dword_time() - GetWalkStartTime() > 5000)
 				PointChange(POINT_STAMINA, GetMaxStamina() / 1);
 		}
 
-		//  ̸鼭 ٴ ̸
+		// 전투 중이면서 뛰는 중이면
 		if (!IsWalking() && !IsRiding())
 			if ((get_dword_time() - GetLastAttackTime()) < 20000)
 			{
@@ -817,7 +817,7 @@ void CHARACTER::StateMove()
 
 				if (GetStamina() <= 0)
 				{
-					// ׹̳ ڶ ɾ
+					// 스테미나가 모자라 걸어야함
 					SetStamina(0);
 					SetNowWalking(true);
 					StopStaminaConsume();
@@ -838,7 +838,7 @@ void CHARACTER::StateMove()
 
 			if (g_test_server)
 			{
-				// Ͱ  Ѿư ̸  پ.
+				// 몬스터가 적을 쫓아가는 것이면 무조건 뛰어간다.
 				SetNowWalking(false);
 			}
 		}
@@ -847,10 +847,10 @@ void CHARACTER::StateMove()
 		{
 			LPCHARACTER victim = GetVictim();
 
-			// Ŵ ź
+			// 거대 거북
 			if (GetRaceNum() == 2191 && number(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000)
 			{
-				//  ׽Ʈ
+				// 워프 테스트
 				float fx, fy;
 				GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy);
 				long new_x = victim->GetX() + (long)fx;
@@ -864,7 +864,7 @@ void CHARACTER::StateMove()
 				return;
 			}
 
-			// TODO ȯ ؼ  ٺ !
+			// TODO 방향전환을 해서 덜 바보가 되자!
 			if (number(0, 3) == 0)
 			{
 				if (__CHARACTER_GotoNearTarget(this, victim))
@@ -877,7 +877,7 @@ void CHARACTER::StateMove()
 	{
 		if (IsPC())
 		{
-			sys_log(1, " %s %d %d", GetName(), x, y);
+			sys_log(1, "도착 %s %d %d", GetName(), x, y);
 			GotoState(m_stateIdle);
 			StopStaminaConsume();
 		}
@@ -886,7 +886,7 @@ void CHARACTER::StateMove()
 			if (GetVictim() && !IsCoward())
 			{
 				if (!IsState(m_stateBattle))
-					MonsterLog("[BATTLE] ó  ݽ %s", GetVictim()->GetName());
+					MonsterLog("[BATTLE] 근처에 왔으니 공격시작 %s", GetVictim()->GetName());
 
 				GotoState(m_stateBattle);
 				m_dwStateDuration = 1;
@@ -894,7 +894,7 @@ void CHARACTER::StateMove()
 			else
 			{
 				if (!IsState(m_stateIdle))
-					MonsterLog("[IDLE]   ");
+					MonsterLog("[IDLE] 대상이 없으니 쉬자");
 
 				GotoState(m_stateIdle);
 
@@ -1005,7 +1005,7 @@ void CHARACTER::StateBattle()
 	{
 		if (!GetParty())
 		{
-			// ؼ ä Ƽ  Ӵϴ.
+			// 서몬해서 채워둘 파티를 만들어 둡니다.
 			CPartyManager::instance().CreateParty(this);
 		}
 
@@ -1014,8 +1014,8 @@ void CHARACTER::StateBattle()
 
 		if (bPct && pParty->CountMemberByVnum(GetSummonVnum()) < SUMMON_MONSTER_COUNT)
 		{
-			MonsterLog("  ȯ!");
-			// ڶ ༮ ҷ äô.
+			MonsterLog("부하 몬스터 소환!");
+			// 모자라는 녀석을 불러내 채웁시다.
 			int sx = GetX() - 300;
 			int sy = GetY() - 300;
 			int ex = GetX() + 300;
@@ -1035,12 +1035,12 @@ void CHARACTER::StateBattle()
 
 	float fDist = DISTANCE_APPROX(GetX() - victim->GetX(), GetY() - victim->GetY());
 
-	if (fDist >= 4000.0f)   // 40 ̻ ־ 
+	if (fDist >= 4000.0f)   // 40미터 이상 멀어지면 포기
 	{
-		MonsterLog("Ÿ ־ ");
+		MonsterLog("타겟이 멀어서 포기");
 		SetVictim(NULL);
 
-		// ȣ (, Ƽ) ֺ .
+		// 보호할 것(돌, 파티장) 주변으로 간다.
 		if (pkChrProtege)
 			if (DISTANCE_APPROX(GetX() - pkChrProtege->GetX(), GetY() - pkChrProtege->GetY()) > 1000)
 				Follow(pkChrProtege, number(150, 400));
@@ -1059,7 +1059,7 @@ void CHARACTER::StateBattle()
 
 	if (2493 == m_pkMobData->m_table.dwVnum)
 	{
-		// (2493) Ư ó
+		// 수룡(2493) 특수 처리
 		m_dwStateDuration = BlueDragon_StateBattle(this);
 		return;
 	}
@@ -1067,7 +1067,7 @@ void CHARACTER::StateBattle()
 	DWORD dwCurTime = get_dword_time();
 	DWORD dwDuration = CalculateDuration(GetLimitPoint(POINT_ATT_SPEED), 2000);
 
-	if ((dwCurTime - m_dwLastAttackTime) < dwDuration) // 2  ؾ Ѵ.
+	if ((dwCurTime - m_dwLastAttackTime) < dwDuration) // 2초 마다 공격해야 한다.
 	{
 		m_dwStateDuration = MAX(1, (passes_per_sec * (dwDuration - (dwCurTime - m_dwLastAttackTime)) / 1000));
 		return;
@@ -1084,7 +1084,7 @@ void CHARACTER::StateBattle()
 				SetGodSpeed(true);
 
 	//
-	//  ų ó
+	// 몹 스킬 처리
 	//
 	if (HasMobSkill())
 	{
@@ -1110,11 +1110,11 @@ void CHARACTER::StateBattle()
 		}
 	}
 
-	if (!Attack(victim))    //  ж?  ? TODO
+	if (!Attack(victim))    // 공격 실패라면? 왜 실패했지? TODO
 		m_dwStateDuration = passes_per_sec / 2;
 	else
 	{
-		//  ٶ󺸰 .
+		// 적을 바라보게 만든다.
 		SetRotationToXY(victim->GetX(), victim->GetY());
 
 		SendMovePacket(FUNC_ATTACK, 0, GetX(), GetY(), 0, dwCurTime);
@@ -1153,7 +1153,7 @@ void CHARACTER::StateFlag()
 
 	pMap->RemoveFlag(idx);
 
-	snprintf(buf, sizeof(buf), LC_TEXT("%s   %s  ȹϿϴ."), pMap->GetGuild(idx)->GetName(), f.m_pkChrFind->GetName());
+	snprintf(buf, sizeof(buf), LC_TEXT("%s 길드의 깃발을 %s 님이 획득하였습니다."), pMap->GetGuild(idx)->GetName(), f.m_pkChrFind->GetName());
 	pMap->Notice(buf);
 }
 
@@ -1167,15 +1167,15 @@ void CHARACTER::StateFlagBase()
 
 void CHARACTER::StateHorse()
 {
-	float	START_FOLLOW_DISTANCE = 400.0f;		//  Ÿ ̻  Ѿư 
-	float	START_RUN_DISTANCE = 700.0f;		//  Ÿ ̻  پ Ѿư.
-	int		MIN_APPROACH = 150;					// ּ  Ÿ
-	int		MAX_APPROACH = 300;					// ִ  Ÿ	
+	float	START_FOLLOW_DISTANCE = 400.0f;		// 이 거리 이상 떨어지면 쫓아가기 시작함
+	float	START_RUN_DISTANCE = 700.0f;		// 이 거리 이상 떨어지면 뛰어서 쫓아감.
+	int		MIN_APPROACH = 150;					// 최소 접근 거리
+	int		MAX_APPROACH = 300;					// 최대 접근 거리	
 
-	DWORD	STATE_DURATION = (DWORD)PASSES_PER_SEC(0.5);	//   ð
+	DWORD	STATE_DURATION = (DWORD)PASSES_PER_SEC(0.5);	// 상태 지속 시간
 
-	bool bDoMoveAlone = true;					// ijͿ    ȥ  ϰ  -_-;
-	bool bRun = true;							// پ ϳ?
+	bool bDoMoveAlone = true;					// 캐릭터와 가까이 있을 때 혼자 여기저기 움직일건지 여부 -_-;
+	bool bRun = true;							// 뛰어야 하나?
 
 	if (IsDead())
 		return;
@@ -1184,7 +1184,7 @@ void CHARACTER::StateHorse()
 
 	LPCHARACTER victim = GetRider();
 
-	// ! ƴ //    ȯڰ   Ŭ 
+	// ! 아님 // 대상이 없는 경우 소환자가 직접 나를 클리어할 것임
 	if (!victim)
 	{
 		M2_DESTROY_CHARACTER(this);
@@ -1198,7 +1198,7 @@ void CHARACTER::StateHorse()
 	if (fDist >= START_FOLLOW_DISTANCE)
 	{
 		if (fDist > START_RUN_DISTANCE)
-			SetNowWalking(!bRun);		// NOTE: Լ ̸ ߴ° ˾Ҵµ SetNowWalking(false) ϸ ٴ°.. -_-;
+			SetNowWalking(!bRun);		// NOTE: 함수 이름보고 멈추는건줄 알았는데 SetNowWalking(false) 하면 뛰는거임.. -_-;
 
 		Follow(victim, number(MIN_APPROACH, MAX_APPROACH));
 
@@ -1209,14 +1209,14 @@ void CHARACTER::StateHorse()
 		// wondering-.-
 		m_dwLastAttackTime = get_dword_time() + number(5000, 12000);
 
-		SetRotation(number(0, 359));        //   
+		SetRotation(number(0, 359));        // 방향은 랜덤으로 설정
 
 		float fx, fy;
 		float fDist = number(200, 400);
 
 		GetDeltaByDegree(GetRotation(), fDist, &fx, &fy);
 
-		//   Ӽ üũ;  ġ ߰ ġ ٸ  ʴ´.
+		// 느슨한 못감 속성 체크; 최종 위치와 중간 위치가 갈수없다면 가지 않는다.
 		if (!(SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx, GetY() + (int) fy) 
 					&& SECTREE_MANAGER::instance().IsMovablePosition(GetMapIndex(), GetX() + (int) fx/2, GetY() + (int) fy/2)))
 			return;
diff --git a/src/game/check_server.cpp b/src/game/check_server.cpp
index 0b4698f..e789b3e 100644
--- a/src/game/check_server.cpp
+++ b/src/game/check_server.cpp
@@ -1,4 +1,4 @@
-#include "check_server.h"
+#include "check_server.h"
 
 std::vector CheckServer::keys_;
 bool CheckServer::fail_ = true;
diff --git a/src/game/check_server.h b/src/game/check_server.h
index 4cd7b51..a153595 100644
--- a/src/game/check_server.h
+++ b/src/game/check_server.h
@@ -1,4 +1,4 @@
-#ifndef _M2_CHECK_SERVER_KEY_H_
+#ifndef _M2_CHECK_SERVER_KEY_H_
 #define _M2_CHECK_SERVER_KEY_H_
 
 #include 
@@ -15,7 +15,7 @@ public:
 
 	static FORCEINLINE bool CheckIp(const char* ip)
 	{
-		//  Ȱɸ üũ 
+		// 디파인 안걸리면 체크 안함
 		#ifndef _USE_SERVER_KEY_
 			fail_ = false;
 			return true;
@@ -23,7 +23,7 @@ public:
 
 		for (int i = 0; i < keys_.size(); i++)
 		{
-			// ϳ ´ Ű  ok
+			// 하나라도 맞는 서버키가 있으면 ok
 			std::string errorString;
 			if (CheckServerKey(keys_[i].c_str(), ip, "", errorString))
 			{
diff --git a/src/game/cipher.cpp b/src/game/cipher.cpp
index 037ba16..15ec6a0 100644
--- a/src/game/cipher.cpp
+++ b/src/game/cipher.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "cipher.h"
 
diff --git a/src/game/cipher.h b/src/game/cipher.h
index 0984360..80deb22 100644
--- a/src/game/cipher.h
+++ b/src/game/cipher.h
@@ -1,4 +1,4 @@
-#ifndef __CIPHER_H__
+#ifndef __CIPHER_H__
 #define __CIPHER_H__
 
 #ifdef _IMPROVED_PACKET_ENCRYPTION_
diff --git a/src/game/cmd.cpp b/src/game/cmd.cpp
index 3eef280..318228b 100644
--- a/src/game/cmd.cpp
+++ b/src/game/cmd.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "char.h"
@@ -168,7 +168,7 @@ ACMD(do_add_socket);
 
 ACMD(do_inputall)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ɾ  Էϼ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("명령어를 모두 입력하세요."));
 }
 
 ACMD(do_show_arena_list);
@@ -188,7 +188,7 @@ ACMD(do_effect);
 ACMD(do_threeway_war_info );
 ACMD(do_threeway_war_myinfo );
 //
-// 
+//군주 전용기능
 ACMD(do_monarch_warpto);
 ACMD(do_monarch_transfer);
 ACMD(do_monarch_info);
@@ -197,7 +197,7 @@ ACMD(do_monarch_tax);
 ACMD(do_monarch_mob);
 ACMD(do_monarch_notice);
 
-//  
+//군주 관리 기능
 ACMD(do_rmcandidacy);
 ACMD(do_setmonarch);
 ACMD(do_rmmonarch);
@@ -205,10 +205,10 @@ ACMD(do_rmmonarch);
 ACMD(do_hair);
 //gift notify quest command
 ACMD(do_gift);
-// ť
+// 큐브관련
 ACMD(do_inventory);
 ACMD(do_cube);
-// 
+// 공성전
 ACMD(do_siege);
 ACMD(do_temp);
 ACMD(do_frog);
@@ -236,7 +236,7 @@ ACMD(do_ride);
 ACMD(do_get_item_id_list);
 ACMD(do_set_socket);
 #ifdef __AUCTION__
-// temp_auction ӽ
+// temp_auction 임시
 ACMD(do_get_auction_list);
 ACMD (do_get_my_auction_list);
 ACMD (do_get_my_purchase_list);
@@ -256,21 +256,21 @@ ACMD (do_cancel_sale);
 ACMD (do_rebid);
 ACMD (do_bid_cancel);
 #endif
-// ڽ º  
+// 코스츔 상태보기 및 벗기
 ACMD(do_costume);
 ACMD(do_set_stat);
 
-// 
+// 무적
 ACMD (do_can_dead);
 
 ACMD (do_full_set);
-//    ְ 
+// 직군과 레벨에 따른 최고 아이템
 ACMD (do_item_full_set);
-//   ְ ɼ Ӽ 
+// 직군에 따른 최고 옵션의 속성 셋팅
 ACMD (do_attr_full_set);
-//  ų 
+// 모든 스킬 마스터
 ACMD (do_all_skill_master);
-//  . icon  Ŭ󿡼 Ȯ       .
+// 아이템 착용. icon이 없어 클라에서 확인 할 수 없는 아이템 착용을 위해 만듦.
 ACMD (do_use_item);
 ACMD (do_dragon_soul);
 ACMD (do_ds_list);
@@ -278,7 +278,7 @@ ACMD (do_clear_affect);
 
 struct command_info cmd_info[] =
 {
-	{ "!RESERVED!",	NULL,			0,			POS_DEAD,	GM_IMPLEMENTOR	}, /* ݵ   ó̾ Ѵ. */
+	{ "!RESERVED!",	NULL,			0,			POS_DEAD,	GM_IMPLEMENTOR	}, /* 반드시 이 것이 처음이어야 한다. */
 	{ "who",		do_who,			0,			POS_DEAD,	GM_IMPLEMENTOR	},
 	{ "war",		do_war,			0,			POS_DEAD,	GM_PLAYER	},
 	{ "warp",		do_warp,		0,			POS_DEAD,	GM_LOW_WIZARD	},
@@ -299,7 +299,7 @@ struct command_info cmd_info[] =
 	{ "item",		do_item,		0,			POS_DEAD,	GM_GOD		},
 
 	{ "mob",		do_mob,			0,			POS_DEAD,	GM_HIGH_WIZARD	},
-	{ "mob_ld",		do_mob_ld,			0,			POS_DEAD,	GM_HIGH_WIZARD	}, /*  ġ   ȯ /mob_ld vnum x y dir */
+	{ "mob_ld",		do_mob_ld,			0,			POS_DEAD,	GM_HIGH_WIZARD	}, /* 몹의 위치와 방향을 설정해 소환 /mob_ld vnum x y dir */
 	{ "ma",		do_mob_aggresive,	0,			POS_DEAD,	GM_HIGH_WIZARD	},
 	{ "mc",		do_mob_coward,		0,			POS_DEAD,	GM_HIGH_WIZARD	},
 	{ "mm",		do_mob_map,		0,			POS_DEAD,	GM_HIGH_WIZARD	},
@@ -397,8 +397,8 @@ struct command_info cmd_info[] =
 	{ "delqf",		do_delqf,		0,			POS_DEAD,	GM_LOW_WIZARD	},
 	{ "set_state",	do_set_state,		0,			POS_DEAD,	GM_LOW_WIZARD	},
 
-	{ "α׸",	do_detaillog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
-	{ "ͺ",	do_monsterlog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
+	{ "로그를보여줘",	do_detaillog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
+	{ "몬스터보여줘",	do_monsterlog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
 
 	{ "detaillog",	do_detaillog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
 	{ "monsterlog",	do_monsterlog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
@@ -538,7 +538,7 @@ struct command_info cmd_info[] =
 	{ "get_mob_count",		do_get_mob_count,		0,	POS_DEAD,	GM_LOW_WIZARD	},
 
 	{ "dice",				do_dice,				0,	POS_DEAD,	GM_PLAYER		},
-	{ "ֻ",				do_dice,				0,	POS_DEAD,	GM_PLAYER		},
+	{ "주사위",				do_dice,				0,	POS_DEAD,	GM_PLAYER		},
 	{ "special_item",			do_special_item,	0,	POS_DEAD,	GM_IMPLEMENTOR		},
 
 	{ "click_mall",			do_click_mall,			0,	POS_DEAD,	GM_PLAYER		},
@@ -548,7 +548,7 @@ struct command_info cmd_info[] =
 	{ "item_id_list",	do_get_item_id_list,	0,	POS_DEAD,	GM_LOW_WIZARD	},
 	{ "set_socket",		do_set_socket,			0,	POS_DEAD,	GM_LOW_WIZARD	},
 #ifdef __AUCTION__
-	// auction ӽ
+	// auction 임시
 	{ "auction_list",	do_get_auction_list,	0,	POS_DEAD,	GM_PLAYER	},
 	{ "my_auction_list", do_get_my_auction_list, 0, POS_DEAD,	GM_PLAYER	},
 	{ "my_purchase_list", do_get_my_purchase_list, 0, POS_DEAD,	GM_PLAYER	},
@@ -588,7 +588,7 @@ struct command_info cmd_info[] =
 	{ "ds_list",				do_ds_list,				0,	POS_DEAD,	GM_PLAYER	},
 	{ "do_clear_affect", do_clear_affect, 	0, POS_DEAD,		GM_LOW_WIZARD},
 
-	{ "\n",		NULL,			0,			POS_DEAD,	GM_IMPLEMENTOR	}  /* ݵ   ̾ Ѵ. */
+	{ "\n",		NULL,			0,			POS_DEAD,	GM_IMPLEMENTOR	}  /* 반드시 이 것이 마지막이어야 한다. */
 };
 
 void interpreter_set_privilege(const char *cmd, int lvl)
@@ -611,7 +611,7 @@ void double_dollar(const char *src, size_t src_len, char *dest, size_t dest_len)
 	const char * tmp = src;
 	size_t cur_len = 0;
 
-	// \0  ڸ Ȯ
+	// \0 넣을 자리 확보
 	dest_len -= 1;
 
 	while (src_len-- && *tmp)
@@ -646,7 +646,7 @@ void interpret_command(LPCHARACTER ch, const char * argument, size_t len)
 		return ;
 	}
 
-	char cmd[128 + 1];  // buffer overflow   ʵ Ϻη ̸ ª 
+	char cmd[128 + 1];  // buffer overflow 문제가 생기지 않도록 일부러 길이를 짧게 잡음
 	char new_line[256 + 1];
 	const char * line;
 	int icmd;
@@ -663,7 +663,7 @@ void interpret_command(LPCHARACTER ch, const char * argument, size_t len)
 	{
 		if (cmd_info[icmd].command_pointer == do_cmd)
 		{
-			if (!strcmp(cmd_info[icmd].command, cmd)) // do_cmd  ɾ ľ   ִ.
+			if (!strcmp(cmd_info[icmd].command, cmd)) // do_cmd는 모든 명령어를 쳐야 할 수 있다.
 				break;
 		}
 		else if (!strncmp(cmd_info[icmd].command, cmd, cmdlen))
@@ -675,24 +675,24 @@ void interpret_command(LPCHARACTER ch, const char * argument, size_t len)
 		switch (ch->GetPosition())
 		{
 			case POS_MOUNTING:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ź ¿   ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("탄 상태에서는 할 수 없습니다."));
 				break;
 
 			case POS_DEAD:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿   ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쓰러진 상태에서는 할 수 없습니다."));
 				break;
 
 			case POS_SLEEPING:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("޼ӿ Կ?"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("꿈속에서 어떻게요?"));
 				break;
 
 			case POS_RESTING:
 			case POS_SITTING:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͼ ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("먼저 일어 나세요."));
 				break;
 				/*
 				   case POS_FIGHTING:
-				   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ɰ   Դϴ.  ϼ."));
+				   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("목숨을 걸고 전투 중 입니다. 집중 하세요."));
 				   break;
 				 */
 			default:
@@ -705,17 +705,17 @@ void interpret_command(LPCHARACTER ch, const char * argument, size_t len)
 
 	if (*cmd_info[icmd].command == '\n')
 	{   
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷ ɾ ϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 명령어는 없습니다"));
 		return;
 	}
 
 	if (cmd_info[icmd].gm_level && cmd_info[icmd].gm_level > ch->GetGMLevel())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷ ɾ ϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 명령어는 없습니다"));
 		return;
 	}
 
-	if (strncmp("phase", cmd_info[icmd].command, 5) != 0) //  ɾ ó 
+	if (strncmp("phase", cmd_info[icmd].command, 5) != 0) // 히든 명령어 처리 
 		sys_log(0, "COMMAND: %s: %s", ch->GetName(), cmd_info[icmd].command);
 
 	((*cmd_info[icmd].command_pointer) (ch, line, icmd, cmd_info[icmd].subcmd));
diff --git a/src/game/cmd.h b/src/game/cmd.h
index 562c35e..4d91e57 100644
--- a/src/game/cmd.h
+++ b/src/game/cmd.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_CMD_H__
+#ifndef __INC_METIN_II_GAME_CMD_H__
 #define __INC_METIN_II_GAME_CMD_H__
 
 #define ACMD(name)  void (name)(LPCHARACTER ch, const char *argument, int cmd, int subcmd)
@@ -51,11 +51,11 @@ enum SCMD_XMAS
 };
 
 extern void Shutdown(int iSec);
-extern void SendNotice(const char * c_pszBuf);		//  Ӽ 
-extern void SendLog(const char * c_pszBuf);		// ڿԸ 
-extern void BroadcastNotice(const char * c_pszBuf);	//   
-extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont); //  ʿ 
-extern void SendMonarchNotice(BYTE bEmpire, const char * c_pszBuf);		//   
+extern void SendNotice(const char * c_pszBuf);		// 이 게임서버에만 공지
+extern void SendLog(const char * c_pszBuf);		// 운영자에게만 공지
+extern void BroadcastNotice(const char * c_pszBuf);	// 전 서버에 공지
+extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont); // 지정 맵에만 공지
+extern void SendMonarchNotice(BYTE bEmpire, const char * c_pszBuf);		// 같은 제국에게 공지
 
 // LUA_ADD_BGM_INFO
 void CHARACTER_SetBGMVolumeEnable();
diff --git a/src/game/cmd_emotion.cpp b/src/game/cmd_emotion.cpp
index 0d1ab5d..c2aa103 100644
--- a/src/game/cmd_emotion.cpp
+++ b/src/game/cmd_emotion.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "char.h"
 #include "char_manager.h"
@@ -23,65 +23,65 @@ struct emotion_type_s
 	long	flag;
 	float	extra_delay;
 } emotion_types[] = {
-	{ "Ű",	"french_kiss",	NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		2.0f },
-	{ "ǻ",	"kiss",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		1.5f },
-	{ "",	"slap",		NEED_PC | SELF_DISARM,				1.5f },
-	{ "ڼ",	"clap",		0,						1.0f },
-	{ "",		"cheer1",	0,						1.0f },
-	{ "",	"cheer2",	0,						1.0f },
+	{ "키스",	"french_kiss",	NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		2.0f },
+	{ "뽀뽀",	"kiss",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		1.5f },
+	{ "따귀",	"slap",		NEED_PC | SELF_DISARM,				1.5f },
+	{ "박수",	"clap",		0,						1.0f },
+	{ "와",		"cheer1",	0,						1.0f },
+	{ "만세",	"cheer2",	0,						1.0f },
 	
 	// DANCE
-	{ "1",	"dance1",	0,						1.0f },
-	{ "2",	"dance2",	0,						1.0f },
-	{ "3",	"dance3",	0,						1.0f },
-	{ "4",	"dance4",	0,						1.0f },
-	{ "5",	"dance5",	0,						1.0f },
-	{ "6",	"dance6",	0,						1.0f },
+	{ "댄스1",	"dance1",	0,						1.0f },
+	{ "댄스2",	"dance2",	0,						1.0f },
+	{ "댄스3",	"dance3",	0,						1.0f },
+	{ "댄스4",	"dance4",	0,						1.0f },
+	{ "댄스5",	"dance5",	0,						1.0f },
+	{ "댄스6",	"dance6",	0,						1.0f },
 	// END_OF_DANCE
-	{ "",	"congratulation",	0,				1.0f	},
-	{ "뼭",	"forgive",			0,				1.0f	},
-	{ "ȭ",	"angry",			0,				1.0f	},
-	{ "Ȥ",	"attractive",		0,				1.0f	},
-	{ "",	"sad",				0,				1.0f	},
-	{ "",	"shy",				0,				1.0f	},
-	{ "",	"cheerup",			0,				1.0f	},
-	{ "",	"banter",			0,				1.0f	},
-	{ "",	"joy",				0,				1.0f	},
+	{ "축하",	"congratulation",	0,				1.0f	},
+	{ "용서",	"forgive",			0,				1.0f	},
+	{ "화남",	"angry",			0,				1.0f	},
+	{ "유혹",	"attractive",		0,				1.0f	},
+	{ "슬픔",	"sad",				0,				1.0f	},
+	{ "브끄",	"shy",				0,				1.0f	},
+	{ "응원",	"cheerup",			0,				1.0f	},
+	{ "질투",	"banter",			0,				1.0f	},
+	{ "기쁨",	"joy",				0,				1.0f	},
 	{ "\n",	"\n",		0,						0.0f },
 	/*
-	//{ "Ű",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_FRENCH_KISS,	 1.0f },
-	{ "ǻ",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_KISS,		 1.0f },
-	{ "ȱ",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_SHORT_HUG,	 1.0f },
-	{ "",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_LONG_HUG,		 1.0f },
-	{ "",	NEED_PC | SELF_DISARM,				MOTION_ACTION_PUT_ARMS_SHOULDER, 0.0f },
-	{ "¯",		NEED_PC	| WOMAN_ONLY | SELF_DISARM,		MOTION_ACTION_FOLD_ARM,		 0.0f },
-	{ "",		NEED_PC | SELF_DISARM,				MOTION_ACTION_SLAP,		 1.5f },
+	//{ "키스",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_FRENCH_KISS,	 1.0f },
+	{ "뽀뽀",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_KISS,		 1.0f },
+	{ "껴안기",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_SHORT_HUG,	 1.0f },
+	{ "포옹",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_LONG_HUG,		 1.0f },
+	{ "어깨동무",	NEED_PC | SELF_DISARM,				MOTION_ACTION_PUT_ARMS_SHOULDER, 0.0f },
+	{ "팔짱",		NEED_PC	| WOMAN_ONLY | SELF_DISARM,		MOTION_ACTION_FOLD_ARM,		 0.0f },
+	{ "따귀",		NEED_PC | SELF_DISARM,				MOTION_ACTION_SLAP,		 1.5f },
 
-	{ "Ķ",		0,						MOTION_ACTION_CHEER_01,		 0.0f },
-	{ "",		0,						MOTION_ACTION_CHEER_02,		 0.0f },
-	{ "ڼ",		0,						MOTION_ACTION_CHEER_03,		 0.0f },
+	{ "휘파람",		0,						MOTION_ACTION_CHEER_01,		 0.0f },
+	{ "만세",		0,						MOTION_ACTION_CHEER_02,		 0.0f },
+	{ "박수",		0,						MOTION_ACTION_CHEER_03,		 0.0f },
 
-	{ "ȣȣ",		0,						MOTION_ACTION_LAUGH_01,		 0.0f },
-	{ "űű",		0,						MOTION_ACTION_LAUGH_02,		 0.0f },
-	{ "",		0,						MOTION_ACTION_LAUGH_03,		 0.0f },
+	{ "호호",		0,						MOTION_ACTION_LAUGH_01,		 0.0f },
+	{ "킥킥",		0,						MOTION_ACTION_LAUGH_02,		 0.0f },
+	{ "우하하",		0,						MOTION_ACTION_LAUGH_03,		 0.0f },
 
-	{ "",		0,						MOTION_ACTION_CRY_01,		 0.0f },
-	{ "",		0,						MOTION_ACTION_CRY_02,		 0.0f },
+	{ "엉엉",		0,						MOTION_ACTION_CRY_01,		 0.0f },
+	{ "흑흑",		0,						MOTION_ACTION_CRY_02,		 0.0f },
 
-	{ "λ",		0,						MOTION_ACTION_GREETING_01,	0.0f },
-	{ "",		0,						MOTION_ACTION_GREETING_02,	0.0f },
-	{ "λ",	0,						MOTION_ACTION_GREETING_03,	0.0f },
+	{ "인사",		0,						MOTION_ACTION_GREETING_01,	0.0f },
+	{ "바이",		0,						MOTION_ACTION_GREETING_02,	0.0f },
+	{ "정중인사",	0,						MOTION_ACTION_GREETING_03,	0.0f },
 
-	{ "",		0,						MOTION_ACTION_INSULT_01,	0.0f },
-	{ "",		SELF_DISARM,					MOTION_ACTION_INSULT_02,	0.0f },
-	{ "",		0,						MOTION_ACTION_INSULT_03,	0.0f },
+	{ "비난",		0,						MOTION_ACTION_INSULT_01,	0.0f },
+	{ "모욕",		SELF_DISARM,					MOTION_ACTION_INSULT_02,	0.0f },
+	{ "우웩",		0,						MOTION_ACTION_INSULT_03,	0.0f },
 
-	{ "",		0,						MOTION_ACTION_ETC_01,		0.0f },
-	{ "",	0,						MOTION_ACTION_ETC_02,		0.0f },
-	{ "",	0,						MOTION_ACTION_ETC_03,		0.0f },
-	{ "",	0,						MOTION_ACTION_ETC_04,		0.0f },
-	{ "ơ",		0,						MOTION_ACTION_ETC_05,		0.0f },
-	{ "",		0,						MOTION_ACTION_ETC_06,		0.0f },
+	{ "갸우뚱",		0,						MOTION_ACTION_ETC_01,		0.0f },
+	{ "끄덕끄덕",	0,						MOTION_ACTION_ETC_02,		0.0f },
+	{ "도리도리",	0,						MOTION_ACTION_ETC_03,		0.0f },
+	{ "긁적긁적",	0,						MOTION_ACTION_ETC_04,		0.0f },
+	{ "퉤",		0,						MOTION_ACTION_ETC_05,		0.0f },
+	{ "뿡",		0,						MOTION_ACTION_ETC_06,		0.0f },
 	 */
 };
 
@@ -92,7 +92,7 @@ ACMD(do_emotion_allow)
 {
 	if ( ch->GetArena() )
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
@@ -108,11 +108,11 @@ ACMD(do_emotion_allow)
 
 bool CHARACTER_CanEmotion(CHARACTER& rch)
 {
-	// ȥ ʿ   ִ.
+	// 결혼식 맵에서는 사용할 수 있다.
 	if (marriage::WeddingManager::instance().IsWeddingMap(rch.GetMapIndex()))
 		return true;
 
-	//      ִ.
+	// 열정의 가면 착용시 사용할 수 있다.
 	if (rch.IsEquipUniqueItem(UNIQUE_ITEM_EMOTION_MASK))
 		return true;
 
@@ -128,7 +128,7 @@ ACMD(do_emotion)
 	{
 		if (ch->IsRiding())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ź ¿ ǥ   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 탄 상태에서 감정표현을 할 수 없습니다."));
 			return;
 		}
 	}
@@ -150,13 +150,13 @@ ACMD(do_emotion)
 
 	if (!CHARACTER_CanEmotion(*ch))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ÿ   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("열정의 가면을 착용시에만 할 수 있습니다."));
 		return;
 	}
 
 	if (IS_SET(emotion_types[i].flag, WOMAN_ONLY) && SEX_MALE==GET_SEX(ch))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڸ   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("여자만 할 수 있습니다."));
 		return;
 	}
 
@@ -172,7 +172,7 @@ ACMD(do_emotion)
 	{
 		if (!victim)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 사람이 없습니다."));
 			return;
 		}
 	}
@@ -184,7 +184,7 @@ ACMD(do_emotion)
 
 		if (victim->IsRiding())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ź  ǥ   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 탄 상대와 감정표현을 할 수 없습니다."));
 			return;
 		}
 
@@ -192,13 +192,13 @@ ACMD(do_emotion)
 
 		if (distance < 10)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ʹ  ֽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("너무 가까이 있습니다."));
 			return;
 		}
 
 		if (distance > 500)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ʹ ָ ֽϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("너무 멀리 있습니다"));
 			return;
 		}
 
@@ -206,7 +206,7 @@ ACMD(do_emotion)
 		{
 			if (GET_SEX(ch)==GET_SEX(victim))
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̼   ֽϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이성간에만 할 수 있습니다."));
 				return;
 			}
 		}
@@ -223,13 +223,13 @@ ACMD(do_emotion)
 
 					if (0 == other || other != victim->GetPlayerID())
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ൿ ȣ Ͽ  մϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 행동은 상호동의 하에 가능 합니다."));
 						return;
 					}
 				}
 				else
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ൿ ȣ Ͽ  մϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 행동은 상호동의 하에 가능 합니다."));
 					return;
 				}
 			}
@@ -246,7 +246,7 @@ ACMD(do_emotion)
 	if (len < 0 || len >= (int) sizeof(chatbuf))
 		len = sizeof(chatbuf) - 1;
 
-	++len;  // \0  
+	++len;  // \0 문자 포함
 
 	TPacketGCChat pack_chat;
 	pack_chat.header = HEADER_GC_CHAT;
diff --git a/src/game/cmd_general.cpp b/src/game/cmd_general.cpp
index a897811..df4e836 100644
--- a/src/game/cmd_general.cpp
+++ b/src/game/cmd_general.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #ifdef OS_FREEBSD
 #include 
 #else
@@ -52,16 +52,16 @@ ACMD(do_user_horse_ride)
 
 	if (ch->IsHorseRiding() == false)
 	{
-		//  ƴ ٸŻ Ÿִ.
+		// 말이 아닌 다른탈것을 타고있다.
 		if (ch->GetMountVnum())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ż ̿Դϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 탈것을 이용중입니다."));
 			return;
 		}
 
 		if (ch->GetHorse() == NULL)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 먼저 소환해주세요."));
 			return;
 		}
 
@@ -78,30 +78,30 @@ ACMD(do_user_horse_back)
 	if (ch->GetHorse() != NULL)
 	{
 		ch->HorseSummon(false);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ½ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 돌려보냈습니다."));
 	}
 	else if (ch->IsHorseRiding() == true)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말에서 먼저 내려야 합니다."));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 먼저 소환해주세요."));
 	}
 }
 
 ACMD(do_user_horse_feed)
 {
-	// λ  ¿  ̸   .
+	// 개인상점을 연 상태에서는 말 먹이를 줄 수 없다.
 	if (ch->GetMyShop())
 		return;
 
 	if (ch->GetHorse() == NULL)
 	{
 		if (ch->IsHorseRiding() == false)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 먼저 소환해주세요."));
 		else
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ź ¿ ̸   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 탄 상태에서는 먹이를 줄 수 없습니다."));
 		return;
 	}
 
@@ -111,13 +111,13 @@ ACMD(do_user_horse_feed)
 	{
 		ch->RemoveSpecifyItem(dwFood, 1);
 		ch->FeedHorse();
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %s%s ־ϴ."), 
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말에게 %s%s 주었습니다."), 
 				ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName,
-				g_iUseLocale ? "" : under_han(ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName) ? LC_TEXT("") : LC_TEXT(""));
+				g_iUseLocale ? "" : under_han(ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName) ? LC_TEXT("을") : LC_TEXT("를"));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ʿմϴ"), ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 아이템이 필요합니다"), ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName);
 	}
 }
 
@@ -216,7 +216,7 @@ EVENTFUNC(shutdown_event)
 	else
 	{
 		char buf[64];
-		snprintf(buf, sizeof(buf), LC_TEXT("˴ٿ %d ҽϴ."), *pSec);
+		snprintf(buf, sizeof(buf), LC_TEXT("셧다운이 %d초 남았습니다."), *pSec);
 		SendNotice(buf);
 
 		--*pSec;
@@ -235,7 +235,7 @@ void Shutdown(int iSec)
 	CWarMapManager::instance().OnShutdown();
 
 	char buf[64];
-	snprintf(buf, sizeof(buf), LC_TEXT("%d   ˴ٿ ˴ϴ."), iSec);
+	snprintf(buf, sizeof(buf), LC_TEXT("%d초 후 게임이 셧다운 됩니다."), iSec);
 
 	SendNotice(buf);
 
@@ -324,7 +324,7 @@ EVENTFUNC(timed_event)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ҽϴ."), info->left_second);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d초 남았습니다."), info->left_second);
 		--info->left_second;
 	}
 
@@ -336,7 +336,7 @@ ACMD(do_cmd)
 	/* RECALL_DELAY
 	   if (ch->m_pkRecallEvent != NULL)
 	   {
-	   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ǿϴ."));
+	   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
 	   event_cancel(&ch->m_pkRecallEvent);
 	   return;
 	   }
@@ -344,7 +344,7 @@ ACMD(do_cmd)
 
 	if (ch->m_pkTimedEvent)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ǿϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("취소 되었습니다."));
 		event_cancel(&ch->m_pkTimedEvent);
 		return;
 	}
@@ -352,15 +352,15 @@ ACMD(do_cmd)
 	switch (subcmd)
 	{
 		case SCMD_LOGOUT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("α ȭ  ϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("로그인 화면으로 돌아 갑니다. 잠시만 기다리세요."));
 			break;
 
 		case SCMD_QUIT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("게임을 종료 합니다. 잠시만 기다리세요."));
 			break;
 
 		case SCMD_PHASE_SELECT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ij͸ ȯ մϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("캐릭터를 전환 합니다. 잠시만 기다리세요."));
 			break;
 	}
 
@@ -404,7 +404,7 @@ ACMD(do_mount)
 	   char			arg1[256];
 	   struct action_mount_param	param;
 
-	// ̹ Ÿ 
+	// 이미 타고 있으면
 	if (ch->GetMountingChr())
 	{
 	char arg2[256];
@@ -422,7 +422,7 @@ ACMD(do_mount)
 
 	if (distance > 600.0f)
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("좀 더 가까이 가서 내리세요."));
 	return;
 	}
 
@@ -439,7 +439,7 @@ ACMD(do_mount)
 
 	if (!tch->IsNPC() || !tch->IsMountable())
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ű⿡ Ż  ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거기에는 탈 수 없어요."));
 	return;
 	}
 
@@ -447,7 +447,7 @@ ACMD(do_mount)
 
 	if (distance > 600.0f)
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ÿ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("좀 더 가까이 가서 타세요."));
 	return;
 	}
 
@@ -495,41 +495,41 @@ ACMD(do_restart)
 		{
 			if (ch->IsHack())
 			{
-				// ϰ쿡 üũ  ʴ´.
+				//성지 맵일경우에는 체크 하지 않는다.
 				if (false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ. (%d )"), iTimeToDead - (180 - g_nPortalLimitTime));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
 					return;
 				}
 			}
 
 			if (iTimeToDead > 170)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ. (%d )"), iTimeToDead - 170);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - 170);
 				return;
 			}
 		}
 	}
 
 	//PREVENT_HACK
-	//DESC : â, ȯ â  Ż ϴ ׿ ̿ɼ ־
-	//		Ÿ ߰ 
+	//DESC : 창고, 교환 창 후 포탈을 사용하는 버그에 이용될수 있어서
+	//		쿨타임을 추가 
 	if (subcmd == SCMD_RESTART_TOWN)
 	{
 		if (ch->IsHack())
 		{
-			//, ʿ üũ  ʴ´.
+			//길드맵, 성지맵에서는 체크 하지 않는다.
 			if ((!ch->GetWarMap() || ch->GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) ||
 			   	false == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ. (%d )"), iTimeToDead - (180 - g_nPortalLimitTime));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 재시작 할 수 없습니다. (%d초 남음)"), iTimeToDead - (180 - g_nPortalLimitTime));
 				return;
 			}
 		}
 
 		if (iTimeToDead > 173)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ϴ. (%d  )"), iTimeToDead - 173);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아직 마을에서 재시작 할 수 없습니다. (%d 초 남음)"), iTimeToDead - 173);
 			return;
 		}
 	}
@@ -542,7 +542,7 @@ ACMD(do_restart)
 	ch->StartRecoveryEvent();
 
 	//FORKED_LOAD
-	//DESC: Ÿ  Ȱ Ұ  Ա ƴ Ÿ   ̵ϰ ȴ.
+	//DESC: 삼거리 전투시 부활을 할경우 맵의 입구가 아닌 삼거리 전투의 시작지점으로 이동하게 된다.
 	if (1 == quest::CQuestManager::instance().GetEventFlag("threeway_war"))
 	{
 		if (subcmd == SCMD_RESTART_TOWN || subcmd == SCMD_RESTART_HERE)
@@ -559,12 +559,12 @@ ACMD(do_restart)
 				return;
 			}
 
-			// 
+			//성지 
 			if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
 			{
 				if (CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()) <= 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ȱ ȸ  Ҿϴ!  ̵մϴ!"));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성지에서 부활 기회를 모두 잃었습니다! 마을로 이동합니다!"));
 					ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
 				}
 				else
@@ -665,7 +665,7 @@ ACMD(do_stat_minus)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 		return;
 	}
 
@@ -732,7 +732,7 @@ ACMD(do_stat)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 		return;
 	}
 
@@ -777,7 +777,7 @@ ACMD(do_pvp)
 {
 	if (ch->GetArena() != NULL || CArenaManager::instance().IsArenaMap(ch->GetMapIndex()) == true)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
@@ -796,7 +796,7 @@ ACMD(do_pvp)
 
 	if (pkVictim->GetArena() != NULL)
 	{
-		pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Դϴ."));
+		pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 대련중입니다."));
 		return;
 	}
 
@@ -813,7 +813,7 @@ ACMD(do_guildskillup)
 
 	if (!ch->GetGuild())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 忡  ʽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드에 속해있지 않습니다."));
 		return;
 	}
 
@@ -827,7 +827,7 @@ ACMD(do_guildskillup)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ų    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 스킬 레벨을 변경할 권한이 없습니다."));
 	}
 }
 
@@ -874,7 +874,7 @@ ACMD(do_skillup)
 }
 
 //
-// @version	05/06/20 Bang2ni - Ŀǵ ó Delegate to CHARACTER class
+// @version	05/06/20 Bang2ni - 커맨드 처리 Delegate to CHARACTER class
 //
 ACMD(do_safebox_close)
 {
@@ -882,7 +882,7 @@ ACMD(do_safebox_close)
 }
 
 //
-// @version	05/06/20 Bang2ni - Ŀǵ ó Delegate to CHARACTER class
+// @version	05/06/20 Bang2ni - 커맨드 처리 Delegate to CHARACTER class
 //
 ACMD(do_safebox_password)
 {
@@ -900,13 +900,13 @@ ACMD(do_safebox_change_password)
 
 	if (!*arg1 || strlen(arg1)>6)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 잘못된 암호를 입력하셨습니다."));
 		return;
 	}
 
 	if (!*arg2 || strlen(arg2)>6)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 잘못된 암호를 입력하셨습니다."));
 		return;
 	}
 
@@ -919,7 +919,7 @@ ACMD(do_safebox_change_password)
 
 			if (isalpha(arg2[i]) == false)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> йȣ ڸ մϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 비밀번호는 영문자만 가능합니다."));
 				return;
 			}
 		}
@@ -941,7 +941,7 @@ ACMD(do_mall_password)
 
 	if (!*arg1 || strlen(arg1) > 6)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 잘못된 암호를 입력하셨습니다."));
 		return;
 	}
 
@@ -949,13 +949,13 @@ ACMD(do_mall_password)
 
 	if (ch->GetMall())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â ̹ ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고가 이미 열려있습니다."));
 		return;
 	}
 
-	if (iPulse - ch->GetMallLoadTime() < passes_per_sec * 10) // 10ʿ ѹ û 
+	if (iPulse - ch->GetMallLoadTime() < passes_per_sec * 10) // 10초에 한번만 요청 가능
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â  10 ȿ   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고를 닫은지 10초 안에는 열 수 없습니다."));
 		return;
 	}
 
@@ -986,13 +986,13 @@ ACMD(do_ungroup)
 
 	if (!CPartyManager::instance().IsEnablePCParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 		return;
 	}
 
 	if (ch->GetDungeon())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티에서 나갈 수 없습니다."));
 		return;
 	}
 
@@ -1005,7 +1005,7 @@ ACMD(do_ungroup)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티에서 나가셨습니다."));
 		//pParty->SendPartyRemoveOneToAll(ch);
 		pParty->Quit(ch->GetPlayerID());
 		//pParty->SendPartyRemoveAllToOne(ch);
@@ -1035,20 +1035,20 @@ ACMD(do_set_run_mode)
 
 ACMD(do_war)
 {
-	//   
+	//내 길드 정보를 얻어오고
 	CGuild * g = ch->GetGuild();
 
 	if (!g)
 		return;
 
-	// üũѹ!
+	//전쟁중인지 체크한번!
 	if (g->UnderAnyWar())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹ ٸ £   Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 다른 전쟁에 참전 중 입니다."));
 		return;
 	}
 
-	//Ķ͸ ι 
+	//파라메터를 두배로 나누고
 	char arg1[256], arg2[256];
 	int type = GUILD_WAR_TYPE_FIELD;
 	two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
@@ -1067,33 +1067,33 @@ ACMD(do_war)
 			return;
 	}
 
-	//  ̵ µ
+	//길드의 마스터 아이디를 얻어온뒤
 	DWORD gm_pid = g->GetMasterPID();
 
-	// üũ( 常 )
+	//마스터인지 체크(길전은 길드장만이 가능)
 	if (gm_pid != ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전에 대한 권한이 없습니다."));
 		return;
 	}
 
-	// 带 
+	//상대 길드를 얻어오고
 	CGuild * opp_g = CGuildManager::instance().FindGuildByName(arg1);
 
 	if (!opp_g)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷ 尡 ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 그런 길드가 없습니다."));
 		return;
 	}
 
-	//  üũ
+	//상대길드와의 상태 체크
 	switch (g->GetGuildWarState(opp_g->GetID()))
 	{
 		case GUILD_WAR_NONE:
 			{
 				if (opp_g->UnderAnyWar())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  尡 ̹   Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드가 이미 전쟁 중 입니다."));
 					return;
 				}
 
@@ -1101,13 +1101,13 @@ ACMD(do_war)
 
 				if (g->GetGuildMoney() < iWarPrice)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  Ͽ    ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 전비가 부족하여 길드전을 할 수 없습니다."));
 					return;
 				}
 
 				if (opp_g->GetGuildMoney() < iWarPrice)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    Ͽ    ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드의 전비가 부족하여 길드전을 할 수 없습니다."));
 					return;
 				}
 			}
@@ -1115,7 +1115,7 @@ ACMD(do_war)
 
 		case GUILD_WAR_SEND_DECLARE:
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹   Դϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 선전포고 중인 길드입니다."));
 				return;
 			}
 			break;
@@ -1124,7 +1124,7 @@ ACMD(do_war)
 			{
 				if (opp_g->UnderAnyWar())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  尡 ̹   Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드가 이미 전쟁 중 입니다."));
 					g->RequestRefuseWar(opp_g->GetID());
 					return;
 				}
@@ -1133,7 +1133,7 @@ ACMD(do_war)
 
 		case GUILD_WAR_RESERVE:
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹    Դϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 전쟁이 예약된 길드 입니다."));
 				return;
 			}
 			break;
@@ -1142,22 +1142,22 @@ ACMD(do_war)
 			return;
 
 		default:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹   Դϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 전쟁 중인 길드입니다."));
 			g->RequestRefuseWar(opp_g->GetID());
 			return;
 	}
 
 	if (!g->CanStartWar(type))
 	{
-		//    ִ  ʴ´.
+		// 길드전을 할 수 있는 조건을 만족하지않는다.
 		if (g->GetLadderPoint() == 0)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   ڶ    ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 레더 점수가 모자라서 길드전을 할 수 없습니다."));
 			sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
 		}
 		else if (g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ϱ ؼ ּ %d ־ մϴ."), GUILD_WAR_MIN_MEMBER_COUNT);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전을 하기 위해선 최소한 %d명이 있어야 합니다."), GUILD_WAR_MIN_MEMBER_COUNT);
 			sys_log(0, "GuildWar.StartError.NEED_MINIMUM_MEMBER[%d]", GUILD_WAR_MIN_MEMBER_COUNT);
 		}
 		else
@@ -1167,13 +1167,13 @@ ACMD(do_war)
 		return;
 	}
 
-	// ʵ üũ ϰ  üũ  ³Ҷ Ѵ.
+	// 필드전 체크만 하고 세세한 체크는 상대방이 승낙할때 한다.
 	if (!opp_g->CanStartWar(GUILD_WAR_TYPE_FIELD))
 	{
 		if (opp_g->GetLadderPoint() == 0)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ڶ    ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드의 레더 점수가 모자라서 길드전을 할 수 없습니다."));
 		else if (opp_g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     Ͽ    ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드의 길드원 수가 부족하여 길드전을 할 수 없습니다."));
 		return;
 	}
 
@@ -1187,7 +1187,7 @@ ACMD(do_war)
 		if (pCCI != NULL)
 			break;
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드의 길드장이 접속중이 아닙니다."));
 		g->RequestRefuseWar(opp_g->GetID());
 		return;
 
@@ -1203,7 +1203,7 @@ ACMD(do_war)
 		if (pCCI != NULL)
 			break;
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방 길드의 길드장이 접속중이 아닙니다."));
 		g->RequestRefuseWar(opp_g->GetID());
 		return;
 
@@ -1228,7 +1228,7 @@ ACMD(do_nowar)
 
 	if (gm_pid != ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전에 대한 권한이 없습니다."));
 		return;
 	}
 
@@ -1236,7 +1236,7 @@ ACMD(do_nowar)
 
 	if (!opp_g)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷ 尡 ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 그런 길드가 없습니다."));
 		return;
 	}
 
@@ -1277,7 +1277,7 @@ ACMD(do_messenger_auth)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
@@ -1297,7 +1297,7 @@ ACMD(do_messenger_auth)
 		LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(arg2);
 
 		if (tch)
-			tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s   ģ  ź ߽ϴ."), ch->GetName());
+			tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님으로 부터 친구 등록을 거부 당했습니다."), ch->GetName());
 	}
 
 	//MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, answer == 'y' ? false : true); // DENY
@@ -1330,7 +1330,7 @@ ACMD(do_unmount)
 	}
 	else
 	{
-		ch->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("κ丮     ϴ."));
+		ch->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("인벤토리가 꽉 차서 내릴 수 없습니다."));
 	}
 
 }
@@ -1384,7 +1384,7 @@ ACMD(do_view_equip)
 
 		   if (ch->GetSP() < iSPCost)
 		   {
-		   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ Ͽ ٸ     ϴ."));
+		   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("정신력이 부족하여 다른 사람의 장비를 볼 수 없습니다."));
 		   return;
 		   }
 		   ch->PointChange(POINT_SP, -iSPCost);
@@ -1397,13 +1397,13 @@ ACMD(do_party_request)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
 	if (ch->GetParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ƽ  Ƿ Խû   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 파티에 속해 있으므로 가입신청을 할 수 없습니다."));
 		return;
 	}
 
@@ -1461,25 +1461,25 @@ ACMD(do_monarch_warpto)
 
 	if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 		return;
 	}
 	
-	// Ÿ ˻
+	//군주 쿨타임 검사
 	if (!ch->IsMCOK(CHARACTER::MI_WARP))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_WARP));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_WARP));
 		return;
 	}
 
-	//  ȯ  
+	//군주 몹 소환 비용 
 	const int WarpPrice = 10000;
 	
-	//  ˻ 
+	//군주 국고 검사 
 	if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
 	{
 		int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, WarpPrice);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, WarpPrice);
 		return;	
 	}
 
@@ -1490,7 +1490,7 @@ ACMD(do_monarch_warpto)
 
 	if (!*arg1)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(": warpto "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용법: warpto "));
 		return;
 	}
 
@@ -1504,18 +1504,18 @@ ACMD(do_monarch_warpto)
 		{
 			if (pkCCI->bEmpire != ch->GetEmpire())
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("타제국 유저에게는 이동할수 없습니다"));
 				return;
 			}
 
 			if (pkCCI->bChannel != g_bChannel)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ش  %d äο ֽϴ. ( ä %d)"), pkCCI->bChannel, g_bChannel);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("해당 유저는 %d 채널에 있습니다. (현재 채널 %d)"), pkCCI->bChannel, g_bChannel);
 				return;
 			}
 			if (!IsMonarchWarpZone(pkCCI->lMapIndex))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 				return;
 			}
 
@@ -1526,13 +1526,13 @@ ACMD(do_monarch_warpto)
 			else
 			{
 				//ch->ChatPacket(CHAT_TYPE_INFO, "You warp to (%d, %d)", pos.x, pos.y);
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), arg1);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 에게로 이동합니다"), arg1);
 				ch->WarpSet(pos.x, pos.y);
 				
-				//  谨	
+				//군주 돈 삭감	
 				CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-				//Ÿ ʱȭ 
+				//쿨타임 초기화 
 				ch->SetMC(CHARACTER::MI_WARP);
 			}
 		}
@@ -1547,26 +1547,26 @@ ACMD(do_monarch_warpto)
 	{
 		if (tch->GetEmpire() != ch->GetEmpire())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("타제국 유저에게는 이동할수 없습니다"));
 			return;
 		}
 		if (!IsMonarchWarpZone(tch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 			return;
 		}
 		x = tch->GetX();
 		y = tch->GetY();
 	}
 
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), arg1);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 에게로 이동합니다"), arg1);
 	ch->WarpSet(x, y);
 	ch->Stop();
 
-	//  谨	
+	//군주 돈 삭감	
 	CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-	//Ÿ ʱȭ 
+	//쿨타임 초기화 
 	ch->SetMC(CHARACTER::MI_WARP);
 }
 
@@ -1580,31 +1580,31 @@ ACMD(do_monarch_transfer)
 
 	if (!*arg1)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(": transfer "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("사용법: transfer "));
 		return;
 	}
 	
 	if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 		return;
 	}
 	
-	// Ÿ ˻
+	//군주 쿨타임 검사
 	if (!ch->IsMCOK(CHARACTER::MI_TRANSFER))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));	
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));	
 		return;
 	}
 
-	//   
+	//군주 워프 비용 
 	const int WarpPrice = 10000;
 
-	//  ˻ 
+	//군주 국고 검사 
 	if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
 	{
 		int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, WarpPrice);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, WarpPrice);
 		return;	
 	}
 
@@ -1619,22 +1619,22 @@ ACMD(do_monarch_transfer)
 		{
 			if (pkCCI->bEmpire != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 				return;
 			}
 			if (pkCCI->bChannel != g_bChannel)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  %d äο   Դϴ. ( ä: %d)"), arg1, pkCCI->bChannel, g_bChannel);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 %d 채널에 접속 중 입니다. (현재 채널: %d)"), arg1, pkCCI->bChannel, g_bChannel);
 				return;
 			}
 			if (!IsMonarchWarpZone(pkCCI->lMapIndex))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 				return;
 			}
 			if (!IsMonarchWarpZone(ch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 				return;
 			}
 
@@ -1646,16 +1646,16 @@ ACMD(do_monarch_transfer)
 			pgg.lY = ch->GetY();
 
 			P2P_MANAGER::instance().Send(&pgg, sizeof(TPacketGGTransfer));
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ȯϿϴ."), arg1);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님을 소환하였습니다."), arg1);
 			
-			//  谨	
+			//군주 돈 삭감	
 			CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
-			//Ÿ ʱȭ 
+			//쿨타임 초기화 
 			ch->SetMC(CHARACTER::MI_TRANSFER);
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ԷϽ ̸  ڰ ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("입력하신 이름을 가진 사용자가 없습니다."));
 		}
 
 		return;
@@ -1664,32 +1664,32 @@ ACMD(do_monarch_transfer)
 
 	if (ch == tch)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자신을 소환할 수 없습니다."));
 		return;
 	}
 
 	if (tch->GetEmpire() != ch->GetEmpire())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 		return;
 	}
 	if (!IsMonarchWarpZone(tch->GetMapIndex()))
 	{
-		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 		return;
 	}
 	if (!IsMonarchWarpZone(ch->GetMapIndex()))
 	{
-		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 		return;
 	}
 
 	//tch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
 	tch->WarpSet(ch->GetX(), ch->GetY(), ch->GetMapIndex());
 	
-	//  谨	
+	//군주 돈 삭감	
 	CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
-	//Ÿ ʱȭ 
+	//쿨타임 초기화 
 	ch->SetMC(CHARACTER::MI_TRANSFER);
 }
 
@@ -1697,24 +1697,24 @@ ACMD(do_monarch_info)
 {
 	if (CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))	
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나의 군주 정보"));
 		TMonarchInfo * p = CMonarch::instance().GetMonarch();
 		for (int n = 1; n < 4; ++n)
 		{
 			if (n == ch->GetEmpire())
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s] : %s  ݾ %lld "), EMPIRE_NAME(n), p->name[n], p->money[n]);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s군주] : %s  보유금액 %lld "), EMPIRE_NAME(n), p->name[n], p->money[n]);
 			else
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s] : %s  "), EMPIRE_NAME(n), p->name[n]);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s군주] : %s  "), EMPIRE_NAME(n), p->name[n]);
 				
 		}
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주 정보"));
 		TMonarchInfo * p = CMonarch::instance().GetMonarch();
 		for (int n = 1; n < 4; ++n)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s] : %s  "), EMPIRE_NAME(n), p->name[n]);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[%s군주] : %s  "), EMPIRE_NAME(n), p->name[n]);
 				
 		}
 	}
@@ -1779,60 +1779,60 @@ ACMD(do_monarch_tax)
 		return;
 	}
 
-	//  ˻	
+	// 군주 검사	
 	if (!ch->IsMonarch())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ Ҽ ִ Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용할수 있는 기능입니다"));
 		return;
 	}
 
-	// ݼ 
+	// 세금설정 
 	int tax = 0;
 	str_to_number(tax,  arg1);
 
 	if (tax < 1 || tax > 50)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("1-50  ġ ּ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("1-50 사이의 수치를 선택해주세요"));
 
 	quest::CQuestManager::instance().SetEventFlag("trade_tax", tax); 
 
-	// ֿ ޼ ϳ
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d % Ǿϴ"));
+	// 군주에게 메세지 하나
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("세금이 %d %로 설정되었습니다"));
 
-	//  
+	// 공지 
 	char szMsg[1024];	
 
-	snprintf(szMsg, sizeof(szMsg), "   %d %%  Ǿϴ", tax);
+	snprintf(szMsg, sizeof(szMsg), "군주의 명으로 세금이 %d %% 로 변경되었습니다", tax);
 	BroadcastNotice(szMsg);
 
-	snprintf(szMsg, sizeof(szMsg), "δ ŷ ݾ %d %%   Ե˴ϴ.", tax);
+	snprintf(szMsg, sizeof(szMsg), "앞으로는 거래 금액의 %d %% 가 국고로 들어가게됩니다.", tax);
 	BroadcastNotice(szMsg);
 
-	// Ÿ ʱȭ 
+	// 쿨타임 초기화 
 	ch->SetMC(CHARACTER::MI_TAX); 
 }
 
 static const DWORD cs_dwMonarchMobVnums[] =
 {
-	191, //	߽
-	192, //	
-	193, //	
-	194, //	ȣ
-	391, //	
-	392, //	
-	393, //	
-	394, //	
-	491, //	ȯ
-	492, //	
-	493, //	
-	494, //	
-	591, //	ܴ
-	691, //	 
-	791, //	б
-	1304, // 
-	1901, // ȣ
-	2091, // հŹ
-	2191, // Ŵ縷ź
-	2206, // ȭi
+	191, //	산견신
+	192, //	저신
+	193, //	웅신
+	194, //	호신
+	391, //	미정
+	392, //	은정
+	393, //	세랑
+	394, //	진희
+	491, //	맹환
+	492, //	보우
+	493, //	구패
+	494, //	추흔
+	591, //	비류단대장
+	691, //	웅귀 족장
+	791, //	밀교교주
+	1304, // 누렁범귀
+	1901, // 구미호
+	2091, // 여왕거미
+	2191, // 거대사막거북
+	2206, // 화염왕i
 	0,
 };
 
@@ -1845,7 +1845,7 @@ ACMD(do_monarch_mob)
 
 	if (!ch->IsMonarch())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ Ҽ ִ Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용할수 있는 기능입니다"));
 		return;
 	}
 	
@@ -1862,26 +1862,26 @@ ACMD(do_monarch_mob)
 	{
 		if (mapEmpire != pcEmpire && mapEmpire != 0)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڱ 信   ִ Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자국 영토에서만 사용할 수 있는 기능입니다"));
 			return;
 		}
 	}
 
-	//   ȯ  
+	// 군주 몹 소환 비용 
 	const int SummonPrice = 5000000;
 
-	//  Ÿ ˻
+	// 군주 쿨타임 검사
 	if (!ch->IsMCOK(CHARACTER::MI_SUMMON))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_SUMMON));	
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_SUMMON));	
 		return;
 	}
 	
-	//   ˻ 
+	// 군주 국고 검사 
 	if (!CMonarch::instance().IsMoneyOk(SummonPrice, ch->GetEmpire()))
 	{
 		int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, SummonPrice);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, SummonPrice);
 		return;	
 	}
 
@@ -1905,14 +1905,14 @@ ACMD(do_monarch_mob)
 
 	DWORD count;
 
-	// ȯ   ˻
+	// 소환 가능 몹 검사
 	for (count = 0; cs_dwMonarchMobVnums[count] != 0; ++count)
 		if (cs_dwMonarchMobVnums[count] == vnum)
 			break;
 
 	if (0 == cs_dwMonarchMobVnums[count])
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯҼ   Դϴ. ȯ ʹ Ȩ ϼ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소환할수 없는 몬스터 입니다. 소환가능한 몬스터는 홈페이지를 참조하세요"));
 		return;
 	}
 
@@ -1928,10 +1928,10 @@ ACMD(do_monarch_mob)
 
 	if (tch)
 	{
-		//   谨	
+		// 군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(SummonPrice, ch->GetEmpire(), ch);
 
-		// Ÿ ʱȭ 
+		// 쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_SUMMON); 
 	}
 }
@@ -1940,92 +1940,92 @@ static const char* FN_point_string(int apply_number)
 {
 	switch (apply_number)
 	{
-		case POINT_MAX_HP:	return LC_TEXT("ִ  +%d");
-		case POINT_MAX_SP:	return LC_TEXT("ִ ŷ +%d");
-		case POINT_HT:		return LC_TEXT("ü +%d");
-		case POINT_IQ:		return LC_TEXT(" +%d");
-		case POINT_ST:		return LC_TEXT("ٷ +%d");
-		case POINT_DX:		return LC_TEXT("ø +%d");
-		case POINT_ATT_SPEED:	return LC_TEXT("ݼӵ +%d");
-		case POINT_MOV_SPEED:	return LC_TEXT("̵ӵ %d");
-		case POINT_CASTING_SPEED:	return LC_TEXT("Ÿ -%d");
-		case POINT_HP_REGEN:	return LC_TEXT(" ȸ +%d");
-		case POINT_SP_REGEN:	return LC_TEXT("ŷ ȸ +%d");
-		case POINT_POISON_PCT:	return LC_TEXT(" %d");
-		case POINT_STUN_PCT:	return LC_TEXT(" +%d");
-		case POINT_SLOW_PCT:	return LC_TEXT("ο +%d");
-		case POINT_CRITICAL_PCT:	return LC_TEXT("%d%% Ȯ ġŸ ");
-		case POINT_RESIST_CRITICAL:	return LC_TEXT(" ġŸ Ȯ %d%% ");
-		case POINT_PENETRATE_PCT:	return LC_TEXT("%d%% Ȯ  ");
-		case POINT_RESIST_PENETRATE: return LC_TEXT("   Ȯ %d%% ");
-		case POINT_ATTBONUS_HUMAN:	return LC_TEXT("ΰ  Ÿġ +%d%%");
-		case POINT_ATTBONUS_ANIMAL:	return LC_TEXT("  Ÿġ +%d%%");
-		case POINT_ATTBONUS_ORC:	return LC_TEXT(" Ÿġ +%d%%");
-		case POINT_ATTBONUS_MILGYO:	return LC_TEXT("б Ÿġ +%d%%");
-		case POINT_ATTBONUS_UNDEAD:	return LC_TEXT("ü Ÿġ +%d%%");
-		case POINT_ATTBONUS_DEVIL:	return LC_TEXT("Ǹ Ÿġ +%d%%");
-		case POINT_STEAL_HP:		return LC_TEXT("Ÿġ %d%%   ");
-		case POINT_STEAL_SP:		return LC_TEXT("Ÿġ %d%%  ŷ ");
-		case POINT_MANA_BURN_PCT:	return LC_TEXT("%d%% Ȯ Ÿݽ  ŷ Ҹ");
-		case POINT_DAMAGE_SP_RECOVER:	return LC_TEXT("%d%% Ȯ ؽ ŷ ȸ");
-		case POINT_BLOCK:			return LC_TEXT("Ÿݽ  Ȯ %d%%");
-		case POINT_DODGE:			return LC_TEXT("Ȱ  ȸ Ȯ %d%%");
-		case POINT_RESIST_SWORD:	return LC_TEXT("Ѽհ  %d%%");
-		case POINT_RESIST_TWOHAND:	return LC_TEXT("հ  %d%%");
-		case POINT_RESIST_DAGGER:	return LC_TEXT("μհ  %d%%");
-		case POINT_RESIST_BELL:		return LC_TEXT("  %d%%");
-		case POINT_RESIST_FAN:		return LC_TEXT("ä  %d%%");
-		case POINT_RESIST_BOW:		return LC_TEXT("Ȱ  %d%%");
-		case POINT_RESIST_FIRE:		return LC_TEXT("ȭ  %d%%");
-		case POINT_RESIST_ELEC:		return LC_TEXT("  %d%%");
-		case POINT_RESIST_MAGIC:	return LC_TEXT("  %d%%");
-		case POINT_RESIST_WIND:		return LC_TEXT("ٶ  %d%%");
-		case POINT_RESIST_ICE:		return LC_TEXT("ñ  %d%%");
-		case POINT_RESIST_EARTH:	return LC_TEXT("  %d%%");
-		case POINT_RESIST_DARK:		return LC_TEXT("  %d%%");
-		case POINT_REFLECT_MELEE:	return LC_TEXT(" Ÿġ ݻ Ȯ : %d%%");
-		case POINT_REFLECT_CURSE:	return LC_TEXT(" ǵ Ȯ %d%%");
-		case POINT_POISON_REDUCE:	return LC_TEXT("  %d%%");
-		case POINT_KILL_SP_RECOVER:	return LC_TEXT("%d%% Ȯ ġ ŷ ȸ");
-		case POINT_EXP_DOUBLE_BONUS:	return LC_TEXT("%d%% Ȯ ġ ġ ߰ ");
-		case POINT_GOLD_DOUBLE_BONUS:	return LC_TEXT("%d%% Ȯ ġ  2 ");
-		case POINT_ITEM_DROP_BONUS:	return LC_TEXT("%d%% Ȯ ġ  2 ");
-		case POINT_POTION_BONUS:	return LC_TEXT("  %d%%  ");
-		case POINT_KILL_HP_RECOVERY:	return LC_TEXT("%d%% Ȯ ġ  ȸ");
-//		case POINT_IMMUNE_STUN:	return LC_TEXT("  %d%%");
-//		case POINT_IMMUNE_SLOW:	return LC_TEXT("  %d%%");
-//		case POINT_IMMUNE_FALL:	return LC_TEXT("Ѿ  %d%%");
+		case POINT_MAX_HP:	return LC_TEXT("최대 생명력 +%d");
+		case POINT_MAX_SP:	return LC_TEXT("최대 정신력 +%d");
+		case POINT_HT:		return LC_TEXT("체력 +%d");
+		case POINT_IQ:		return LC_TEXT("지능 +%d");
+		case POINT_ST:		return LC_TEXT("근력 +%d");
+		case POINT_DX:		return LC_TEXT("민첩 +%d");
+		case POINT_ATT_SPEED:	return LC_TEXT("공격속도 +%d");
+		case POINT_MOV_SPEED:	return LC_TEXT("이동속도 %d");
+		case POINT_CASTING_SPEED:	return LC_TEXT("쿨타임 -%d");
+		case POINT_HP_REGEN:	return LC_TEXT("생명력 회복 +%d");
+		case POINT_SP_REGEN:	return LC_TEXT("정신력 회복 +%d");
+		case POINT_POISON_PCT:	return LC_TEXT("독공격 %d");
+		case POINT_STUN_PCT:	return LC_TEXT("스턴 +%d");
+		case POINT_SLOW_PCT:	return LC_TEXT("슬로우 +%d");
+		case POINT_CRITICAL_PCT:	return LC_TEXT("%d%% 확률로 치명타 공격");
+		case POINT_RESIST_CRITICAL:	return LC_TEXT("상대의 치명타 확률 %d%% 감소");
+		case POINT_PENETRATE_PCT:	return LC_TEXT("%d%% 확률로 관통 공격");
+		case POINT_RESIST_PENETRATE: return LC_TEXT("상대의 관통 공격 확률 %d%% 감소");
+		case POINT_ATTBONUS_HUMAN:	return LC_TEXT("인간류 몬스터 타격치 +%d%%");
+		case POINT_ATTBONUS_ANIMAL:	return LC_TEXT("동물류 몬스터 타격치 +%d%%");
+		case POINT_ATTBONUS_ORC:	return LC_TEXT("웅귀족 타격치 +%d%%");
+		case POINT_ATTBONUS_MILGYO:	return LC_TEXT("밀교류 타격치 +%d%%");
+		case POINT_ATTBONUS_UNDEAD:	return LC_TEXT("시체류 타격치 +%d%%");
+		case POINT_ATTBONUS_DEVIL:	return LC_TEXT("악마류 타격치 +%d%%");
+		case POINT_STEAL_HP:		return LC_TEXT("타격치 %d%% 를 생명력으로 흡수");
+		case POINT_STEAL_SP:		return LC_TEXT("타력치 %d%% 를 정신력으로 흡수");
+		case POINT_MANA_BURN_PCT:	return LC_TEXT("%d%% 확률로 타격시 상대 전신력 소모");
+		case POINT_DAMAGE_SP_RECOVER:	return LC_TEXT("%d%% 확률로 피해시 정신력 회복");
+		case POINT_BLOCK:			return LC_TEXT("물리타격시 블럭 확률 %d%%");
+		case POINT_DODGE:			return LC_TEXT("활 공격 회피 확률 %d%%");
+		case POINT_RESIST_SWORD:	return LC_TEXT("한손검 방어 %d%%");
+		case POINT_RESIST_TWOHAND:	return LC_TEXT("양손검 방어 %d%%");
+		case POINT_RESIST_DAGGER:	return LC_TEXT("두손검 방어 %d%%");
+		case POINT_RESIST_BELL:		return LC_TEXT("방울 방어 %d%%");
+		case POINT_RESIST_FAN:		return LC_TEXT("부채 방어 %d%%");
+		case POINT_RESIST_BOW:		return LC_TEXT("활공격 저항 %d%%");
+		case POINT_RESIST_FIRE:		return LC_TEXT("화염 저항 %d%%");
+		case POINT_RESIST_ELEC:		return LC_TEXT("전기 저항 %d%%");
+		case POINT_RESIST_MAGIC:	return LC_TEXT("마법 저항 %d%%");
+		case POINT_RESIST_WIND:		return LC_TEXT("바람 저항 %d%%");
+		case POINT_RESIST_ICE:		return LC_TEXT("냉기 저항 %d%%");
+		case POINT_RESIST_EARTH:	return LC_TEXT("대지 저항 %d%%");
+		case POINT_RESIST_DARK:		return LC_TEXT("어둠 저항 %d%%");
+		case POINT_REFLECT_MELEE:	return LC_TEXT("직접 타격치 반사 확률 : %d%%");
+		case POINT_REFLECT_CURSE:	return LC_TEXT("저주 되돌리기 확률 %d%%");
+		case POINT_POISON_REDUCE:	return LC_TEXT("독 저항 %d%%");
+		case POINT_KILL_SP_RECOVER:	return LC_TEXT("%d%% 확률로 적퇴치시 정신력 회복");
+		case POINT_EXP_DOUBLE_BONUS:	return LC_TEXT("%d%% 확률로 적퇴치시 경험치 추가 상승");
+		case POINT_GOLD_DOUBLE_BONUS:	return LC_TEXT("%d%% 확률로 적퇴치시 돈 2배 드롭");
+		case POINT_ITEM_DROP_BONUS:	return LC_TEXT("%d%% 확률로 적퇴치시 아이템 2배 드롭");
+		case POINT_POTION_BONUS:	return LC_TEXT("물약 사용시 %d%% 성능 증가");
+		case POINT_KILL_HP_RECOVERY:	return LC_TEXT("%d%% 확률로 적퇴치시 생명력 회복");
+//		case POINT_IMMUNE_STUN:	return LC_TEXT("기절하지 않음 %d%%");
+//		case POINT_IMMUNE_SLOW:	return LC_TEXT("느려지지 않음 %d%%");
+//		case POINT_IMMUNE_FALL:	return LC_TEXT("넘어지지 않음 %d%%");
 //		case POINT_SKILL:	return LC_TEXT("");
 //		case POINT_BOW_DISTANCE:	return LC_TEXT("");
-		case POINT_ATT_GRADE_BONUS:	return LC_TEXT("ݷ +%d");
-		case POINT_DEF_GRADE_BONUS:	return LC_TEXT(" +%d");
-		case POINT_MAGIC_ATT_GRADE:	return LC_TEXT(" ݷ +%d");
-		case POINT_MAGIC_DEF_GRADE:	return LC_TEXT("  +%d");
+		case POINT_ATT_GRADE_BONUS:	return LC_TEXT("공격력 +%d");
+		case POINT_DEF_GRADE_BONUS:	return LC_TEXT("방어력 +%d");
+		case POINT_MAGIC_ATT_GRADE:	return LC_TEXT("마법 공격력 +%d");
+		case POINT_MAGIC_DEF_GRADE:	return LC_TEXT("마법 방어력 +%d");
 //		case POINT_CURSE_PCT:	return LC_TEXT("");
-		case POINT_MAX_STAMINA:	return LC_TEXT("ִ  +%d");
-		case POINT_ATTBONUS_WARRIOR:	return LC_TEXT("翡  +%d%%");
-		case POINT_ATTBONUS_ASSASSIN:	return LC_TEXT("ڰ  +%d%%");
-		case POINT_ATTBONUS_SURA:		return LC_TEXT("󿡰  +%d%%");
-		case POINT_ATTBONUS_SHAMAN:		return LC_TEXT("翡  +%d%%");
-		case POINT_ATTBONUS_MONSTER:	return LC_TEXT("Ϳ  +%d%%");
-		case POINT_MALL_ATTBONUS:		return LC_TEXT("ݷ +%d%%");
-		case POINT_MALL_DEFBONUS:		return LC_TEXT(" +%d%%");
-		case POINT_MALL_EXPBONUS:		return LC_TEXT("ġ %d%%");
-		case POINT_MALL_ITEMBONUS:		return LC_TEXT("  %.1f");
-		case POINT_MALL_GOLDBONUS:		return LC_TEXT("  %.1f");
-		case POINT_MAX_HP_PCT:			return LC_TEXT("ִ  +%d%%");
-		case POINT_MAX_SP_PCT:			return LC_TEXT("ִ ŷ +%d%%");
-		case POINT_SKILL_DAMAGE_BONUS:	return LC_TEXT("ų  %d%%");
-		case POINT_NORMAL_HIT_DAMAGE_BONUS:	return LC_TEXT("Ÿ  %d%%");
-		case POINT_SKILL_DEFEND_BONUS:		return LC_TEXT("ų   %d%%");
-		case POINT_NORMAL_HIT_DEFEND_BONUS:	return LC_TEXT("Ÿ   %d%%");
+		case POINT_MAX_STAMINA:	return LC_TEXT("최대 지구력 +%d");
+		case POINT_ATTBONUS_WARRIOR:	return LC_TEXT("무사에게 강함 +%d%%");
+		case POINT_ATTBONUS_ASSASSIN:	return LC_TEXT("자객에게 강함 +%d%%");
+		case POINT_ATTBONUS_SURA:		return LC_TEXT("수라에게 강함 +%d%%");
+		case POINT_ATTBONUS_SHAMAN:		return LC_TEXT("무당에게 강함 +%d%%");
+		case POINT_ATTBONUS_MONSTER:	return LC_TEXT("몬스터에게 강함 +%d%%");
+		case POINT_MALL_ATTBONUS:		return LC_TEXT("공격력 +%d%%");
+		case POINT_MALL_DEFBONUS:		return LC_TEXT("방어력 +%d%%");
+		case POINT_MALL_EXPBONUS:		return LC_TEXT("경험치 %d%%");
+		case POINT_MALL_ITEMBONUS:		return LC_TEXT("아이템 드롭율 %.1f배");
+		case POINT_MALL_GOLDBONUS:		return LC_TEXT("돈 드롭율 %.1f배");
+		case POINT_MAX_HP_PCT:			return LC_TEXT("최대 생명력 +%d%%");
+		case POINT_MAX_SP_PCT:			return LC_TEXT("최대 정신력 +%d%%");
+		case POINT_SKILL_DAMAGE_BONUS:	return LC_TEXT("스킬 데미지 %d%%");
+		case POINT_NORMAL_HIT_DAMAGE_BONUS:	return LC_TEXT("평타 데미지 %d%%");
+		case POINT_SKILL_DEFEND_BONUS:		return LC_TEXT("스킬 데미지 저항 %d%%");
+		case POINT_NORMAL_HIT_DEFEND_BONUS:	return LC_TEXT("평타 데미지 저항 %d%%");
 //		case POINT_PC_BANG_EXP_BONUS:	return LC_TEXT("");
 //		case POINT_PC_BANG_DROP_BONUS:	return LC_TEXT("");
 //		case POINT_EXTRACT_HP_PCT:	return LC_TEXT("");
-		case POINT_RESIST_WARRIOR:	return LC_TEXT("ݿ %d%% ");
-		case POINT_RESIST_ASSASSIN:	return LC_TEXT("ڰݿ %d%% ");
-		case POINT_RESIST_SURA:		return LC_TEXT("ݿ %d%% ");
-		case POINT_RESIST_SHAMAN:	return LC_TEXT("ݿ %d%% ");
+		case POINT_RESIST_WARRIOR:	return LC_TEXT("무사공격에 %d%% 저항");
+		case POINT_RESIST_ASSASSIN:	return LC_TEXT("자객공격에 %d%% 저항");
+		case POINT_RESIST_SURA:		return LC_TEXT("수라공격에 %d%% 저항");
+		case POINT_RESIST_SHAMAN:	return LC_TEXT("무당공격에 %d%% 저항");
 		default:					return NULL;
 	}
 }
@@ -2063,7 +2063,7 @@ static bool FN_hair_affect_string(LPCHARACTER ch, char *buf, size_t bufsiz)
 	mon		= ltm.tm_mon + 1;
 	day		= ltm.tm_mday;
 
-	snprintf(buf + offset, bufsiz - offset, LC_TEXT(" ( : %d %d %d)"), year, mon, day);
+	snprintf(buf + offset, bufsiz - offset, LC_TEXT(" (만료일 : %d년 %d월 %d일)"), year, mon, day);
 
 	return true;
 }
@@ -2198,11 +2198,11 @@ ACMD(do_cube)
 	const std::string& strArg1 = std::string(arg1);
 
 	// r_info (request information)
-	// /cube r_info     ==> (Client -> Server)  NPC   ִ  û
+	// /cube r_info     ==> (Client -> Server) 현재 NPC가 만들 수 있는 레시피 요청
 	//					    (Server -> Client) /cube r_list npcVNUM resultCOUNT 123,1/125,1/128,1/130,5
 	//
-	// /cube r_info 3   ==> (Client -> Server)  NPC  ִ   3°    ʿ  û
-	// /cube r_info 3 5 ==> (Client -> Server)  NPC  ִ   3° ۺ  5    ʿ   û
+	// /cube r_info 3   ==> (Client -> Server) 현재 NPC가 만들수 있는 레시피 중 3번째 아이템을 만드는 데 필요한 정보를 요청
+	// /cube r_info 3 5 ==> (Client -> Server) 현재 NPC가 만들수 있는 레시피 중 3번째 아이템부터 이후 5개의 아이템을 만드는 데 필요한 재료 정보를 요청
 	//					   (Server -> Client) /cube m_info startIndex count 125,1|126,2|127,2|123,5&555,5&555,4/120000@125,1|126,2|127,2|123,5&555,5&555,4/120000
 	//
 	if (strArg1 == "r_info")
@@ -2291,7 +2291,7 @@ ACMD(do_in_game_mall)
 		return;
 	}
 
-	// _ 赵 ۸ URL ϵڵ ߰
+	// ㅠ_ㅠ 쾌도서버 아이템몰 URL 하드코딩 추가
 	if (true == LC_IsWE_Korea())
 	{
 		ch->ChatPacket(CHAT_TYPE_COMMAND, "mall http://metin2.co.kr/50_we_mall/mall/login.htm");
@@ -2388,7 +2388,7 @@ ACMD(do_in_game_mall)
 	}
 }
 
-// ֻ
+// 주사위
 ACMD(do_dice) 
 {
 	char arg1[256], arg2[256];
@@ -2413,9 +2413,9 @@ ACMD(do_dice)
 	int n = number(start, end);
 	
 	if (ch->GetParty())
-		ch->GetParty()->ChatPacketToAllMember(CHAT_TYPE_INFO, LC_TEXT("%s ֻ  %d Խϴ. (%d-%d)"), ch->GetName(), n, start, end);
+		ch->GetParty()->ChatPacketToAllMember(CHAT_TYPE_INFO, LC_TEXT("%s님이 주사위를 굴려 %d가 나왔습니다. (%d-%d)"), ch->GetName(), n, start, end);
 	else
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ֻ  %d Խϴ. (%d-%d)"), n, start, end);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("당신이 주사위를 굴려 %d가 나왔습니다. (%d-%d)"), n, start, end);
 }
 
 ACMD(do_click_mall)
@@ -2429,7 +2429,7 @@ ACMD(do_ride)
     if (ch->IsDead() || ch->IsStun())
 	return;
 
-    // 
+    // 내리기
     {
 	if (ch->IsHorseRiding())
 	{
@@ -2446,7 +2446,7 @@ ACMD(do_ride)
 	}
     }
 
-    // Ÿ
+    // 타기
     {
 	if (ch->GetHorse() != NULL)
 	{
@@ -2461,7 +2461,7 @@ ACMD(do_ride)
 	    if (NULL == item)
 		continue;
 
-	    // ũ Ż 
+	    // 유니크 탈것 아이템
 		if (item->IsRideItem())
 		{
 			if (NULL==ch->GetWear(WEAR_UNIQUE1) || NULL==ch->GetWear(WEAR_UNIQUE2))
@@ -2473,20 +2473,20 @@ ACMD(do_ride)
 			}
 		}
 
-	    // Ϲ Ż 
-	    // TODO : ŻͿ SubType ߰
+	    // 일반 탈것 아이템
+	    // TODO : 탈것용 SubType 추가
 	    switch (item->GetVnum())
 	    {
-		case 71114:	// ̿
-		case 71116:	// ߽̿
-		case 71118:	// ̿
-		case 71120:	// ڿ̿
+		case 71114:	// 저신이용권
+		case 71116:	// 산견신이용권
+		case 71118:	// 투지범이용권
+		case 71120:	// 사자왕이용권
 		    dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
 		    ch->UseItem(TItemPos (INVENTORY, i));
 		    return;
 	    }
 
-		// GF mantis #113524, 52001~52090  Ż
+		// GF mantis #113524, 52001~52090 번 탈것
 		if( (item->GetVnum() > 52000) && (item->GetVnum() < 52091) )	{
 			dev_log(LOG_DEB0, "[DO_RIDE] USE QUEST ITEM");
 			ch->UseItem(TItemPos (INVENTORY, i));
@@ -2496,8 +2496,8 @@ ACMD(do_ride)
     }
 
 
-    // Ÿų   
-    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+    // 타거나 내릴 수 없을때
+    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("말을 먼저 소환해주세요."));
 }
 
 #ifdef __AUCTION__
@@ -2567,7 +2567,7 @@ ACMD(do_enroll_sale)
 }
 
 // temp_auction
-// packet ϰ ϰ, ̰ ؾѴ.
+// packet으로 통신하게 하고, 이건 삭제해야한다.
 ACMD(do_get_auction_list)
 {
 	char arg1[256];
diff --git a/src/game/cmd_gm.cpp b/src/game/cmd_gm.cpp
index e3ada84..5eb3490 100644
--- a/src/game/cmd_gm.cpp
+++ b/src/game/cmd_gm.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "desc_client.h"
@@ -308,44 +308,44 @@ bool CHARACTER_GoToName(LPCHARACTER ch, BYTE empire, int mapIndex, const char* g
 
 /*
    = {
-   { "A1|",		0, 1,  4693, 9642 },
-   { "A3|ھ",		0, 3,  3608, 8776 },
+   { "A1|영안읍성",		0, 1,  4693, 9642 },
+   { "A3|자양현",		0, 3,  3608, 8776 },
 
-   { "B1|",		0, 21,  557, 1579 },
-   { "B3|",		0, 23, 1385, 2349 },
+   { "B1|조안읍성",		0, 21,  557, 1579 },
+   { "B3|복정현",		0, 23, 1385, 2349 },
 
-   { "C1|",		0, 41, 9696, 2784 },
-   { "C3|ڶ",		0, 43, 8731, 2426 },
+   { "C1|평무읍성",		0, 41, 9696, 2784 },
+   { "C3|박라현",		0, 43, 8731, 2426 },
 
 // Snow
-{ "Snow|ѻ",		1, 61, 4342, 2906 },
-{ "Snow|ѻ",		2, 61, 3752, 1749 },
-{ "Snow|ѻ",		3, 61, 4918, 1736 },
+{ "Snow|서한산",		1, 61, 4342, 2906 },
+{ "Snow|서한산",		2, 61, 3752, 1749 },
+{ "Snow|서한산",		3, 61, 4918, 1736 },
 
 // Flame
-{ "Flame|ȭ|ȭ",	1, 62, 5994, 7563 },
-{ "Flame|ȭ|ȭ",	2, 62, 5978, 6222 },
-{ "Flame|ȭ|ȭ",	3, 62, 7307, 6898 },
+{ "Flame|도염화지|화염",	1, 62, 5994, 7563 },
+{ "Flame|도염화지|화염",	2, 62, 5978, 6222 },
+{ "Flame|도염화지|화염",	3, 62, 7307, 6898 },
 
 // Desert
-{ "Desert|縷|縷",	1, 63, 2178, 6272 },
-{ "Desert|縷|縷",	2, 63, 2219, 5027 },
-{ "Desert|縷|縷",	3, 63, 3440, 5025 },
+{ "Desert|영비사막|사막",	1, 63, 2178, 6272 },
+{ "Desert|영비사막|사막",	2, 63, 2219, 5027 },
+{ "Desert|영비사막|사막",	3, 63, 3440, 5025 },
 
 // Threeway
-{ "Three|·",		1, 64, 4021, 6739 },
-{ "Three|·",		2, 64, 2704, 7399 },
-{ "Three|·",		3, 64, 3213, 8080 },
+{ "Three|승룡곡",		1, 64, 4021, 6739 },
+{ "Three|승룡곡",		2, 64, 2704, 7399 },
+{ "Three|승룡곡",		3, 64, 3213, 8080 },
 
-// б
-{ "Milgyo|б",	1, 65, 5536, 1436 },
-{ "Milgyo|б",	2, 65, 5536, 1436 },
-{ "Milgyo|б",	3, 65, 5536, 1436 },
+// 밀교사원
+{ "Milgyo|밀교사원",	1, 65, 5536, 1436 },
+{ "Milgyo|밀교사원",	2, 65, 5536, 1436 },
+{ "Milgyo|밀교사원",	3, 65, 5536, 1436 },
 
-// ŸԱ
-{ "ŸԱ",		1, 65, 5905, 1108 },
-{ "ŸԱ",		2, 65, 5905, 1108 },
-{ "ŸԱ",		3, 65, 5905, 1108 },
+// 사귀타워입구
+{ "사귀타워입구",		1, 65, 5905, 1108 },
+{ "사귀타워입구",		2, 65, 5905, 1108 },
+{ "사귀타워입구",		3, 65, 5905, 1108 },
 
 { NULL,			0,  0,    0,    0 },
 };
@@ -547,7 +547,7 @@ ACMD(do_item)
 				M2_DESTROY_ITEM(item);
 				if (!ch->DragonSoul_IsQualified())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "κ Ȱȭ  .");
+					ch->ChatPacket(CHAT_TYPE_INFO, "인벤이 활성화 되지 않음.");
 				}
 				else
 					ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
@@ -889,7 +889,7 @@ struct FuncPurge
 
 		int iDist = DISTANCE_APPROX(pkChr->GetX() - m_pkGM->GetX(), pkChr->GetY() - m_pkGM->GetY());
 
-		if (!m_bAll && iDist >= 1000)	// 10 ̻ ִ ͵ purge  ʴ´.
+		if (!m_bAll && iDist >= 1000)	// 10미터 이상에 있는 것들은 purge 하지 않는다.
 			return;
 
 		sys_log(0, "PURGE: %s %d", pkChr->GetName(), iDist);
@@ -1263,7 +1263,7 @@ ACMD(do_monarch_notice)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 	}
 }
 
@@ -1603,12 +1603,12 @@ ACMD(do_makeguild)
 
 	if (!check_name(cp.name))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ̸ Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적합하지 않은 길드 이름 입니다."));
 		return;
 	}
 
 	gm.CreateGuild(cp);
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) 尡 Ǿϴ. [ӽ]"), cp.name);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) 길드가 생성되었습니다. [임시]"), cp.name);
 }
 
 ACMD(do_deleteguild)
@@ -1813,7 +1813,7 @@ LPCHARACTER chHori, chForge, chLib, chTemple, chTraining, chTree, chPortal, chBa
 
 ACMD(do_b1)
 {
-	//ȣ 478 579
+	//호리병 478 579
 	chHori = CHARACTER_MANAGER::instance().SpawnMobRange(14017, ch->GetMapIndex(), 304222, 742858, 304222, 742858, true, false);
 	chHori->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_BUILDING_CONSTRUCTION_SMALL, 65535, 0, true);
 	chHori->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
@@ -1860,25 +1860,25 @@ ACMD(do_b2)
 
 ACMD(do_b3)
 {
-	//  492 547
+	// 포지 492 547
 	chForge = CHARACTER_MANAGER::instance().SpawnMobRange(14003, ch->GetMapIndex(), 307500, 746300, 307500, 746300, true, false);
 	chForge->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	//ž 509 589 -> 
+	//높은탑 509 589 -> 도서관
 	chLib = CHARACTER_MANAGER::instance().SpawnMobRange(14007, ch->GetMapIndex(), 307900, 744500, 307900, 744500, true, false);
 	chLib->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	// 513 606 -> ǽ
+	//욕조 513 606 -> 힘의신전
 	chTemple = CHARACTER_MANAGER::instance().SpawnMobRange(14004, ch->GetMapIndex(), 307700, 741600, 307700, 741600, true, false);
 	chTemple->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	// 490 625
+	//권투장 490 625
 	chTraining= CHARACTER_MANAGER::instance().SpawnMobRange(14010, ch->GetMapIndex(), 307100, 739500, 307100, 739500, true, false);
 	chTraining->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	// 466 614
+	//나무 466 614
 	chTree= CHARACTER_MANAGER::instance().SpawnMobRange(14013, ch->GetMapIndex(), 300800, 741600, 300800, 741600, true, false);
 	chTree->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	//Ż 439 615
+	//포탈 439 615
 	chPortal= CHARACTER_MANAGER::instance().SpawnMobRange(14001, ch->GetMapIndex(), 300900, 744500, 300900, 744500, true, false);
 	chPortal->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
-	//  436 600
+	// 구슬 436 600
 	chBall = CHARACTER_MANAGER::instance().SpawnMobRange(14012, ch->GetMapIndex(), 302500, 746600, 302500, 746600, true, false);
 	chBall->AddAffect(AFFECT_DUNGEON_UNIQUE, POINT_NONE, 0, AFF_DUNGEON_UNIQUE, 65535, 0, true);
 }
@@ -2122,7 +2122,7 @@ ACMD(do_reload)
 				break;
 				//END_RELOAD_ADMIN
 			case 'c':	// cube
-				//  μ Ѵ.
+				// 로컬 프로세스만 갱산한다.
 				Cube_init ();
 				break;
 		}
@@ -2166,7 +2166,7 @@ ACMD(do_level)
 
 ACMD(do_gwlist)
 {
-	ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   Դϴ"));
+	ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("현재 전쟁중인 길드 입니다"));
 	CGuildManager::instance().ShowGuildWarList(ch);
 }
 
@@ -2224,7 +2224,7 @@ ACMD(do_guild_state)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s:  ʴ  Դϴ."), arg1);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s: 존재하지 않는 길드 입니다."), arg1);
 	}
 }
 
@@ -2246,7 +2246,7 @@ struct FuncWeaken
 
 		int iDist = DISTANCE_APPROX(pkChr->GetX() - m_pkGM->GetX(), pkChr->GetY() - m_pkGM->GetY());
 
-		if (!m_bAll && iDist >= 1000)	// 10 ̻ ִ ͵ purge  ʴ´.
+		if (!m_bAll && iDist >= 1000)	// 10미터 이상에 있는 것들은 purge 하지 않는다.
 			return;
 
 		if (pkChr->IsNPC())
@@ -2528,7 +2528,7 @@ ACMD(do_priv_empire)
 	if (duration < 0)
 		goto USAGE;
 
-	// ð  
+	// 시간 단위로 변경
 	duration = duration * (60*60);
 
 	sys_log(0, "_give_empire_privileage(empire=%d, type=%d, value=%d, duration=%d) by command", 
@@ -2545,8 +2545,8 @@ USAGE:
 }
 
 /**
- * @version 05/06/08	Bang2ni -  ʽ Ʈ  ȵǴ  .(ũƮ ۼȵ.)
- * 			          quest/priv_guild.quest   ũƮ о 
+ * @version 05/06/08	Bang2ni - 길드 보너스 퀘스트 진행 안되는 문제 수정.(스크립트가 작성안됨.)
+ * 			          quest/priv_guild.quest 로 부터 스크립트 읽어오게 수정됨
  */
 ACMD(do_priv_guild)
 {
@@ -2567,7 +2567,7 @@ ACMD(do_priv_guild)
 		}
 
 		if (!g)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷ ̸ Ǵ ȣ 尡 ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 이름 또는 번호의 길드가 없습니다."));
 		else
 		{
 			char buf[1024+1];
@@ -2679,10 +2679,10 @@ ACMD(do_xmas)
 // BLOCK_CHAT
 ACMD(do_block_chat_list)
 {
-	// GM ƴϰų block_chat_privilege   ɾ  Ұ
+	// GM이 아니거나 block_chat_privilege가 없는 사람은 명령어 사용 불가
 	if (!ch || (ch->GetGMLevel() < GM_HIGH_WIZARD && ch->GetQuestFlag("chat_privilege.block") <= 0))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷ ɾ ϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 명령어는 없습니다"));
 		return;
 	}
 
@@ -2745,10 +2745,10 @@ ACMD(do_vote_block_chat)
 
 ACMD(do_block_chat)
 {
-	// GM ƴϰų block_chat_privilege   ɾ  Ұ
+	// GM이 아니거나 block_chat_privilege가 없는 사람은 명령어 사용 불가
 	if (ch && (ch->GetGMLevel() < GM_HIGH_WIZARD && ch->GetQuestFlag("chat_privilege.block") <= 0))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷ ɾ ϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("그런 명령어는 없습니다"));
 		return;
 	}
 
@@ -2770,8 +2770,8 @@ ACMD(do_block_chat)
 	{
 		if (ch)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, "߸  ðԴϴ. h, m, s ٿ  ֽʽÿ.");
-			ch->ChatPacket(CHAT_TYPE_INFO, ") 10s, 10m, 1m 30s");
+			ch->ChatPacket(CHAT_TYPE_INFO, "잘못된 형식의 시간입니다. h, m, s를 붙여서 지정해 주십시오.");
+			ch->ChatPacket(CHAT_TYPE_INFO, "예) 10s, 10m, 1m 30s");
 		}
 		return;
 	}
@@ -2824,8 +2824,8 @@ ACMD(do_build)
 
 	CLand * pkLand = CManager::instance().FindLand(ch->GetMapIndex(), ch->GetX(), ch->GetY());
 
-	// NOTE:  üũ Ŭ̾Ʈ  Բ ϱ    
-	//       ޼  ʰ  Ѵ.
+	// NOTE: 조건 체크들은 클라이언트와 서버가 함께 하기 때문에 문제가 있을 때는
+	//       메세지를 전송하지 않고 에러를 출력한다.
 	if (!pkLand)
 	{
 		sys_err("%s trying to build on not buildable area.", ch->GetName());
@@ -2838,17 +2838,17 @@ ACMD(do_build)
 		return;
 	}
 
-	// Ǽ  üũ
+	// 건설 권한 체크
 	if (GMLevel == GM_PLAYER)
 	{
-		// ÷̾      Ȯؾ Ѵ.
+		// 플레이어가 집을 지을 때는 땅이 내껀지 확인해야 한다.
 		if ((!ch->GetGuild() || ch->GetGuild()->GetID() != pkLand->GetOwner()))
 		{
 			sys_err("%s trying to build on not owned land.", ch->GetName());
 			return;
 		}
 
-		//  渶ΰ?
+		// 내가 길마인가?
 		if (ch->GetGuild()->GetMasterPID() != ch->GetPlayerID())
 		{
 			sys_err("%s trying to build while not the guild master.", ch->GetName());
@@ -2879,7 +2879,7 @@ ACMD(do_build)
 				const TObjectProto * t = CManager::instance().GetObjectProto(dwVnum);
 				if (!t)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʴ ǹԴϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("존재하지 않는 건물입니다."));
 					return;
 				}
 
@@ -2889,21 +2889,21 @@ ACMD(do_build)
 				{
 					if (pkLand->FindObjectByGroup(t->dwGroupVnum))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ǹ  ֽϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같이 지을 수 없는 종류의 건물이 지어져 있습니다."));
 						return;
 					}
 				}
 
-				// ǹ Ӽ üũ ( ǹ  ־)
+				// 건물 종속성 체크 (이 건물이 지어져 있어야함)
 				if (t->dwDependOnGroupVnum)
 				{
 					//		const TObjectProto * dependent = CManager::instance().GetObjectProto(dwVnum);
 					//		if (dependent)
 					{
-						// ִ°?
+						// 지어져있는가?
 						if (!pkLand->FindObjectByGroup(t->dwDependOnGroupVnum))
 						{
-							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ǽ ʿ ǹ   ʽϴ."));
+							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("건설에 필요한 건물이 지어져 있지 않습니다."));
 							return;
 						}
 					}
@@ -2911,21 +2911,21 @@ ACMD(do_build)
 
 				if (test_server || GMLevel == GM_PLAYER)
 				{
-					// GM ƴҰ츸 (׼ GM Ҹ)
-					// Ǽ  üũ
+					// GM이 아닐경우만 (테섭에서는 GM도 소모)
+					// 건설 비용 체크
 					if (t->dwPrice > BUILDING_MAX_PRICE)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǹ   ̻ Ǽ ۾ ߽ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("건물 비용 정보 이상으로 건설 작업에 실패했습니다."));
 						return;
 					}
 
 					if (ch->GetGold() < (int)t->dwPrice)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ǽ  մϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("건설 비용이 부족합니다."));
 						return;
 					}
 
-					//    üũ
+					// 아이템 자재 개수 체크
 
 					int i;
 					for (i = 0; i < OBJECT_MATERIAL_MAX_NUM; ++i)
@@ -2938,7 +2938,7 @@ ACMD(do_build)
 
 						if ((int) dwItemCount > ch->CountSpecifyItem(dwItemVnum))
 						{
-							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("簡 Ͽ Ǽ  ϴ."));
+							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자재가 부족하여 건설할 수 없습니다."));
 							return;
 						}
 					}
@@ -2947,11 +2947,11 @@ ACMD(do_build)
 				float x_rot = atof(arg4);
 				float y_rot = atof(arg5);
 				float z_rot = atof(arg6);
-				// 20050811.myevan.ǹ ȸ   
+				// 20050811.myevan.건물 회전 기능 봉인 해제
 				/*
 				   if (x_rot != 0.0f || y_rot != 0.0f || z_rot != 0.0f)
 				   {
-				   ch->ChatPacket(CHAT_TYPE_INFO, "ǹ ȸ    ʽϴ");
+				   ch->ChatPacket(CHAT_TYPE_INFO, "건물 회전 기능은 아직 제공되지 않습니다");
 				   return;
 				   }
 				 */
@@ -2972,17 +2972,17 @@ ACMD(do_build)
 				if (!isSuccess)
 				{
 					if (test_server)
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǹ    ġԴϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("건물을 지을 수 없는 위치입니다."));
 					return;
 				}
 
 				if (test_server || GMLevel == GM_PLAYER)
-					// Ǽ  Ҹϱ (׼ GM Ҹ)
+					// 건설 재료 소모하기 (테섭에서는 GM도 소모)
 				{
-					// Ǽ  Ҹ
+					// 건설 비용 소모
 					ch->PointChange(POINT_GOLD, -t->dwPrice);
 
-					//   ϱ 
+					// 아이템 자재 사용하기 
 					{
 						int i;
 						for (i = 0; i < OBJECT_MATERIAL_MAX_NUM; ++i)
@@ -3061,8 +3061,8 @@ ACMD(do_build)
 			break;
 
 		case 'W' :
-			//  
-			// build (w)all ȣ ũ 빮 빮 빮 빮
+			// 담장 세우기
+			// build (w)all 담장번호 담장크기 대문동 대문서 대문남 대문북
 
 			if (GMLevel >  GM_PLAYER) 
 			{
@@ -3096,8 +3096,8 @@ ACMD(do_build)
 			break;
 
 		case 'E' :
-			//  
-			// build (e)rase ID
+			// 담장 지우기
+			// build (e)rase 담장셋ID
 			if (GMLevel > GM_PLAYER) 
 			{
 				one_argument(line, arg1, sizeof(arg1));
@@ -3154,7 +3154,7 @@ ACMD(do_horse_level)
 
 	if (NULL == victim)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʴ ij Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("존재하지 않는 캐릭터 입니다."));
 		return;
 	}
 
@@ -3338,17 +3338,17 @@ ACMD(do_end_duel)
 	LPCHARACTER pChar = CHARACTER_MANAGER::instance().FindPC(szName);
 	if (pChar == NULL)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʴ ij Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("존재하지 않는 캐릭터 입니다."));
 		return;
 	}
 
 	if (CArenaManager::instance().EndDuel(pChar->GetPlayerID()) == false)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 강제 종료 실패"));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 강제 종료 성공"));
 	}
 }
 
@@ -3371,7 +3371,7 @@ ACMD(do_duel)
 
 	if (!str_to_number(minute, szMinute))
 	{
-		// ijٴ ⺻ 10.
+		// 캐나다는 기본 10분.
 		if (LC_IsCanada() == true)
 		{
 			minute = 10;
@@ -3404,7 +3404,7 @@ ACMD(do_duel)
 			}
 			else
 			{
-				pChar1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+				pChar1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티에서 나가셨습니다."));
 				pParty->Quit(pChar1->GetPlayerID());
 			}
 		}
@@ -3418,23 +3418,23 @@ ACMD(do_duel)
 			}
 			else
 			{
-				pChar2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+				pChar2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티에서 나가셨습니다."));
 				pParty->Quit(pChar2->GetPlayerID());
 			}
 		}
 		
 		if (CArenaManager::instance().StartDuel(pChar1, pChar2, set, minute) == true)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   Ǿϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련이 성공적으로 시작 되었습니다."));
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۿ  ֽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련 시작에 문제가 있습니다."));
 		}
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련자가 없습니다."));
 	}
 }
 
@@ -3449,7 +3449,7 @@ ACMD(do_stat_plus_amount)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 		return;
 	}
 
@@ -3457,7 +3457,7 @@ ACMD(do_stat_plus_amount)
 
 	if (nRemainPoint <= 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("남은 스탯 포인트가 없습니다."));
 		return;
 	}
 
@@ -3466,40 +3466,40 @@ ACMD(do_stat_plus_amount)
 
 	if (nRemainPoint < nPoint)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("남은 스탯 포인트가 적습니다."));
 		return;
 	}
 
 	if (nPoint < 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߸ ԷϿϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("값을 잘못 입력하였습니다."));
 		return;
 	}
 	
 	switch (subcmd)
 	{
-		case POINT_HT : // ü
+		case POINT_HT : // 체력
 			if (nPoint + ch->GetPoint(POINT_HT) > 90)
 			{
 				nPoint = 90 - ch->GetPoint(POINT_HT);
 			}
 			break;
 
-		case POINT_IQ : // 
+		case POINT_IQ : // 지능
 			if (nPoint + ch->GetPoint(POINT_IQ) > 90)
 			{
 				nPoint = 90 - ch->GetPoint(POINT_IQ);
 			}
 			break;
 			
-		case POINT_ST : // ٷ
+		case POINT_ST : // 근력
 			if (nPoint + ch->GetPoint(POINT_ST) > 90)
 			{
 				nPoint = 90 - ch->GetPoint(POINT_ST);
 			}
 			break;
 			
-		case POINT_DX : // ø
+		case POINT_DX : // 민첩
 			if (nPoint + ch->GetPoint(POINT_DX) > 90)
 			{
 				nPoint = 90 - ch->GetPoint(POINT_DX);
@@ -3507,7 +3507,7 @@ ACMD(do_stat_plus_amount)
 			break;
 
 		default :
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ɾ  Ŀǵ尡 ߸ Ǿϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("명령어의 서브 커맨드가 잘못 되었습니다."));
 			return;
 			break;
 	}
@@ -3540,7 +3540,7 @@ ACMD(do_break_marriage)
 	str_to_number(pids.pid1, arg1);
 	str_to_number(pids.pid2, arg2);
 	
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("÷̾ %d  ÷̾  %d ȥŵϴ.."), pids.pid1, pids.pid2);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("플레이어 %d 와 플레이어  %d를 파혼시킵니다.."), pids.pid1, pids.pid2);
 	db_clientdesc->DBPacket(HEADER_GD_BREAK_MARRIAGE, 0, &pids, sizeof(pids));
 }
 
@@ -3574,8 +3574,8 @@ struct FCountInMap
 
 ACMD(do_threeway_war_info)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  "));
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    %d  %d %d %d"), GetSungziMapIndex(), GetPassMapIndex(1), GetPassMapIndex(2), GetPassMapIndex(3)); 
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("각제국 진행 정보"));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("선택 맵 정보 성지 %d 통로 %d %d %d"), GetSungziMapIndex(), GetPassMapIndex(1), GetPassMapIndex(2), GetPassMapIndex(3)); 
 	ch->ChatPacket(CHAT_TYPE_INFO, "ThreewayPhase %d", CThreeWayWar::instance().GetRegenFlag());
 
 	for (int n = 1; n < 4; ++n)
@@ -3598,7 +3598,7 @@ ACMD(do_threeway_war_info)
 
 ACMD(do_threeway_war_myinfo)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ÿ "));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나의 삼거리 진행정보"));
 	ch->ChatPacket(CHAT_TYPE_INFO, "Deadcount %d",
 			CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()));
 }
@@ -3680,7 +3680,7 @@ ACMD(do_check_monarch_money)
 	str_to_number(empire, arg1);
 	int NationMoney = CMonarch::instance().GetMoney(empire);
 
-	ch->ChatPacket(CHAT_TYPE_INFO, ": %d ", NationMoney);
+	ch->ChatPacket(CHAT_TYPE_INFO, "국고: %d 원", NationMoney);
 }
 
 ACMD(do_reset_subskill)
@@ -3959,13 +3959,13 @@ ACMD(do_set_stat)
 	{
 		if (tch->IsPolymorphed())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
 			return;
 		}
 
 		if (subcmd != POINT_HT && subcmd != POINT_IQ && subcmd != POINT_ST && subcmd != POINT_DX)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ɾ  Ŀǵ尡 ߸ Ǿϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("명령어의 서브 커맨드가 잘못 되었습니다."));
 			return;
 		}
 		int nRemainPoint = tch->GetPoint(POINT_STAT);
@@ -4019,7 +4019,7 @@ ACMD(do_set_stat)
 
 		if (nRemainPoint < nChangeAmount)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("남은 스탯 포인트가 적습니다."));
 			return;
 		}
 
@@ -4256,8 +4256,8 @@ ACMD (do_attr_full_set)
 	case JOB_SURA:
 	case JOB_SHAMAN:
 		{
-			//   .
-			// ̰͸  ־ ӽ÷    ̷ Ӽ .
+			// 무사 몸빵 셋팅.
+			// 이것만 나와 있어서 임시로 모든 직군 다 이런 속성 따름.
 			item = ch->GetWear(WEAR_HEAD);
 			if (item != NULL)
 			{
@@ -4364,7 +4364,7 @@ ACMD (do_use_item)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "    .");
+		ch->ChatPacket(CHAT_TYPE_INFO, "아이템이 없어서 착용할 수 없어.");
 	}
 }
 
diff --git a/src/game/cmd_oxevent.cpp b/src/game/cmd_oxevent.cpp
index 77797e1..0dfa4a9 100644
--- a/src/game/cmd_oxevent.cpp
+++ b/src/game/cmd_oxevent.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "char.h"
 #include "OXEvent.h"
@@ -19,16 +19,16 @@ ACMD(do_oxevent_log)
 {
 	if ( COXEventManager::instance().LogWinner() == false )
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX̺Ʈ  ο Ͽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX이벤트의 나머지 인원을 기록하였습니다."));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX̺Ʈ  ο  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX이벤트의 나머지 인원 기록을 실패했습니다."));
 	}
 }
 
 ACMD(do_oxevent_get_attender)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ڼ : %d"), COXEventManager::instance().GetAttenderCount());
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("현재 남은 참가자수 : %d"), COXEventManager::instance().GetAttenderCount());
 }
 
diff --git a/src/game/config.cpp b/src/game/config.cpp
index 51ca59d..8d7ca40 100644
--- a/src/game/config.cpp
+++ b/src/game/config.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #ifndef OS_WINDOWS
 #include 
@@ -29,7 +29,7 @@ int		passes_per_sec = 25;
 WORD	db_port = 0;
 WORD	p2p_port = 50900;
 char	db_addr[ADDRESS_MAX_LEN + 1];
-int		save_event_second_cycle = passes_per_sec * 120;	// 3
+int		save_event_second_cycle = passes_per_sec * 120;	// 3분
 int		ping_event_second_cycle = passes_per_sec * 60;
 bool	g_bNoMoreClient = false;
 bool	g_bNoRegen = false;
@@ -104,17 +104,17 @@ int SPEEDHACK_LIMIT_COUNT   = 50;
 int SPEEDHACK_LIMIT_BONUS   = 80;
 int g_iSyncHackLimitCount = 20; // 10 -> 20 2013 09 11 CYH
 
-//þ = VIEW_RANGE + VIEW_BONUS_RANGE
-//VIEW_BONUSE_RANGE : Ŭ̾Ʈ þ óʹ    ߻Ҽ־ 500CM  ׻ش.
+//시야 = VIEW_RANGE + VIEW_BONUS_RANGE
+//VIEW_BONUSE_RANGE : 클라이언트와 시야 처리에서너무 딱 떨어질경우 문제가 발생할수있어 500CM의 여분을 항상준다.
 int VIEW_RANGE = 5000;
 int VIEW_BONUS_RANGE = 500;
 
 int g_server_id = 0;
 string g_strWebMallURL = "www.metin2.de";
 
-unsigned int g_uiSpamBlockDuration = 60 * 15; // ⺻ 15
-unsigned int g_uiSpamBlockScore = 100; // ⺻ 100
-unsigned int g_uiSpamReloadCycle = 60 * 10; // ⺻ 10
+unsigned int g_uiSpamBlockDuration = 60 * 15; // 기본 15분
+unsigned int g_uiSpamBlockScore = 100; // 기본 100점
+unsigned int g_uiSpamReloadCycle = 60 * 10; // 기본 10분
 
 bool		g_bCheckMultiHack = true;
 
@@ -123,8 +123,8 @@ int			g_iSpamBlockMaxLevel = 10;
 void		LoadStateUserCount();
 void		LoadValidCRCList();
 bool		LoadClientVersion();
-bool            g_protectNormalPlayer   = false;        // ڰ "ȭ"  Ϲ  
-bool            g_noticeBattleZone      = false;        // ߸뿡 ϸ ȳ޼ ˷
+bool            g_protectNormalPlayer   = false;        // 범법자가 "평화모드" 인 일반유저를 공격하지 못함
+bool            g_noticeBattleZone      = false;        // 중립지대에 입장하면 안내메세지를 알려줌
 
 // bool		isHackShieldEnable = false;
 // int			HackShield_FirstCheckWaitTime = passes_per_sec * 30;
@@ -373,7 +373,7 @@ void config_init(const string& st_localeServiceName)
 	}
 
 	char db_host[2][64], db_user[2][64], db_pwd[2][64], db_db[2][64];
-	// ... ... db_port ̹ ִµ... ̹ ؾ...
+	// ... 아... db_port는 이미 있는데... 네이밍 어찌해야함...
 	int mysql_db_port[2];
 
 	for (int n = 0; n < 2; ++n)
@@ -394,9 +394,9 @@ void config_init(const string& st_localeServiceName)
 	*log_db = '\0';
 
 
-	// DB  ϱؼ ٸ ð Ǿ
-	// DB о    ٸ  ѾѴ.
-	//  ϰõ ʱȭ ƾ  ϱ .
+	// DB에서 로케일정보를 세팅하기위해서는 다른 세팅값보다 선행되어서
+	// DB정보만 읽어와 로케일 세팅을 한후 다른 세팅을 적용시켜야한다.
+	// 이유는 로케일관련된 초기화 루틴이 곳곳에 존재하기 때문.
 
 	bool isCommonSQL = false;	
 	bool isPlayerSQL = false;
@@ -550,7 +550,7 @@ void config_init(const string& st_localeServiceName)
 		}
 	}
 
-	//ó   .
+	//처리가 끝났으니 파일을 닫자.
 	fclose(fpOnlyForDB);
 
 	// CONFIG_SQL_INFO_ERROR
@@ -576,7 +576,7 @@ void config_init(const string& st_localeServiceName)
 		exit(1);
 	}
 
-	// Common DB  Locale   ֱ    ؾ Ѵ.
+	// Common DB 가 Locale 정보를 가지고 있기 때문에 가장 먼저 접속해야 한다.
 	AccountDB::instance().Connect(db_host[1], mysql_db_port[1], db_user[1], db_pwd[1], db_db[1]);
 
 	if (false == AccountDB::instance().IsConnected())
@@ -587,8 +587,8 @@ void config_init(const string& st_localeServiceName)
 
 	fprintf(stdout, "CommonSQL connected\n");
 
-	//    
-	// <>   ǹ(WHERE)  . (ٸ    ֽϴ)
+	// 로케일 정보를 가져오자 
+	// <경고> 쿼리문에 절대 조건문(WHERE) 달지 마세요. (다른 지역에서 문제가 생길수 있습니다)
 	{
 		char szQuery[512];
 		snprintf(szQuery, sizeof(szQuery), "SELECT mKey, mValue FROM locale");
@@ -605,7 +605,7 @@ void config_init(const string& st_localeServiceName)
 
 		while (NULL != (row = mysql_fetch_row(pMsg->Get()->pSQLResult)))
 		{
-			//  
+			// 로케일 세팅
 			if (strcasecmp(row[0], "LOCALE") == 0)
 			{
 				if (LocaleService_Init(row[1]) == false)
@@ -617,15 +617,15 @@ void config_init(const string& st_localeServiceName)
 		}
 	}
 
-	//   COMMON SQL ش.
-	//  g_stLocale  LocaleService_Init() ο õȴ.
+	// 로케일 정보를 COMMON SQL에 세팅해준다.
+	// 참고로 g_stLocale 정보는 LocaleService_Init() 내부에서 세팅된다.
 	fprintf(stdout, "Setting DB to locale %s\n", g_stLocale.c_str());
 
 	AccountDB::instance().SetLocale(g_stLocale);
 
 	AccountDB::instance().ConnectAsync(db_host[1], mysql_db_port[1], db_user[1], db_pwd[1], db_db[1], g_stLocale.c_str());
 
-	// Player DB 
+	// Player DB 접속
 	DBManager::instance().Connect(db_host[0], mysql_db_port[0], db_user[0], db_pwd[0], db_db[0]);
 
 	if (!DBManager::instance().IsConnected())
@@ -636,9 +636,9 @@ void config_init(const string& st_localeServiceName)
 
 	fprintf(stdout, "PlayerSQL connected\n");
 
-	if (false == g_bAuthServer) //   ƴ 
+	if (false == g_bAuthServer) // 인증 서버가 아닐 경우
 	{
-		// Log DB 
+		// Log DB 접속
 		LogManager::instance().Connect(log_host, log_port, log_user, log_pwd, log_db);
 
 		if (!LogManager::instance().IsConnected())
@@ -653,8 +653,8 @@ void config_init(const string& st_localeServiceName)
 	}
 
 	// SKILL_POWER_BY_LEVEL
-	// Ʈ   ؼ AccountDB::instance().SetLocale(g_stLocale) ĺ Ѵ.
-	//     ȵȴ(ؿܰ )
+	// 스트링 비교의 문제로 인해서 AccountDB::instance().SetLocale(g_stLocale) 후부터 한다.
+	// 물론 국내는 별로 문제가 안된다(해외가 문제)
 	{
 		char szQuery[256];
 		snprintf(szQuery, sizeof(szQuery), "SELECT mValue FROM locale WHERE mKey='SKILL_POWER_BY_LEVEL'");
@@ -695,13 +695,13 @@ void config_init(const string& st_localeServiceName)
 			}
 		}
 
-		//  ų 
+		// 종족별 스킬 세팅
 		for (int job = 0; job < JOB_MAX_NUM * 2; ++job)
 		{
 			snprintf(szQuery, sizeof(szQuery), "SELECT mValue from locale where mKey='SKILL_POWER_BY_LEVEL_TYPE%d' ORDER BY CAST(mValue AS unsigned)", job);
 			std::unique_ptr pMsg(AccountDB::instance().DirectQuery(szQuery));
 
-			//  ȵǾ ⺻̺ Ѵ.
+			// 세팅이 안되어있으면 기본테이블을 사용한다.
 			if (pMsg->Get()->uiNumRows == 0)
 			{
 				CTableBySkill::instance().SetSkillPowerByLevelFromType(job, aiBaseSkillPowerByLevelTable);
@@ -1064,7 +1064,7 @@ void config_init(const string& st_localeServiceName)
 		TOKEN("spam_block_reload_cycle")
 		{
 			str_to_number(g_uiSpamReloadCycle, value_string);
-			g_uiSpamReloadCycle = MAX(60, g_uiSpamReloadCycle); // ּ 1
+			g_uiSpamReloadCycle = MAX(60, g_uiSpamReloadCycle); // 최소 1분
 		}
 
 		TOKEN("check_multihack")
@@ -1340,7 +1340,7 @@ void CheckClientVersion()
 		// if (version > date)
 		if (version != date) // Fix
 		{
-			d->GetCharacter()->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+			d->GetCharacter()->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("클라이언트 버전이 틀려 로그아웃 됩니다. 정상적으로 패치 후 접속하세요."));
 			d->DelayedDisconnect(10);
 		}
 	}
diff --git a/src/game/config.h b/src/game/config.h
index 5446a23..7687f09 100644
--- a/src/game/config.h
+++ b/src/game/config.h
@@ -1,4 +1,4 @@
-
+
 #ifndef __INC_METIN_II_GAME_CONFIG_H__
 #define __INC_METIN_II_GAME_CONFIG_H__
 
@@ -35,7 +35,7 @@ extern bool	china_event_server;
 extern bool	g_bNoMoreClient;
 extern bool	g_bNoRegen;
 
-extern bool	g_bTrafficProfileOn;		///< true ̸ TrafficProfiler  Ҵ.
+extern bool	g_bTrafficProfileOn;		///< true 이면 TrafficProfiler 를 켠다.
 
 extern BYTE	g_bChannel;
 
@@ -106,8 +106,8 @@ extern int VIEW_RANGE;
 extern int VIEW_BONUS_RANGE;
 
 extern bool g_bCheckMultiHack;
-extern bool g_protectNormalPlayer;      // ڰ "ȭ"  Ϲ  
-extern bool g_noticeBattleZone;         // ߸뿡 ϸ ȳ޼ ˷
+extern bool g_protectNormalPlayer;      // 범법자가 "평화모드" 인 일반유저를 공격하지 못함
+extern bool g_noticeBattleZone;         // 중립지대에 입장하면 안내메세지를 알려줌
 
 extern DWORD g_GoldDropTimeLimitValue;
 
diff --git a/src/game/constants.cpp b/src/game/constants.cpp
index cc64479..8877305 100644
--- a/src/game/constants.cpp
+++ b/src/game/constants.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 TJobInitialPoints JobInitialPoints[JOB_MAX_NUM] = 
 /*
@@ -14,7 +14,7 @@ TJobInitialPoints JobInitialPoints[JOB_MAX_NUM] =
    }
  */
 {
-	// str con dex int ʱHP ʱSP  CON/HP INT/SP  HP/lv   MP/lv  ʱstam  stam/con stam/lv
+	// str con dex int 초기HP 초기SP  CON/HP INT/SP  HP랜덤/lv   MP랜덤/lv  초기stam  stam/con stam/lv
 	{   6,  4,  3,  3,  600,   200,     40,    20,    36, 44,     18, 22,     800,      5,      1, 3  }, // JOB_WARRIOR  16
 	{   4,  3,  6,  3,  650,   200,     40,    20,    36, 44,     18, 22,     800,      5,      1, 3  }, // JOB_ASSASSIN 16
 	{   5,  3,  3,  5,  650,   200,     40,    20,    36, 44,     18, 22,     800,      5,      1, 3  }, // JOB_SURA	 16
@@ -162,7 +162,7 @@ const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1] =
 	1676898443,
 	1844588288,
 	2029047116,
-	2100000000,	//	99		99  ʿġ (100 DZ )
+	2100000000,	//	99		99레벨일 때 필요경험치 (100레벨이 되기 위한)
 	2100000000,	//	100
 	2100000000,		
 	2100000000,		
@@ -287,7 +287,7 @@ const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1] =
 	1676898443,		
 	1844588288,		
 	2029047116,		
-	2050000000,	//	99   ʿġ (100 DZ )
+	2050000000,	//	99레벨 일 때 필요경험치 (100레벨이 되기 위한)
 	2150000000,	//	100
 	2210000000,		
 	2250000000,		
@@ -412,7 +412,7 @@ const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ] =
 	2000000000,
 	2000000000,
 	2000000000,
-	2000000000,	//	99		99  ʿġ (100 DZ )..  CIBN  ϰ ִ  𸣴 ű ̺  ʰ    
+	2000000000,	//	99		99레벨일 때 필요경험치 (100레벨이 되기 위한).. 현재 CIBN이 어떻게 운영하고 있는 지 모르니 신규 테이블을 쓰지 않고 기존값 계속 연장 유지
 	2000000000,	//	100
 	2000000000,		
 	2000000000,		
@@ -439,8 +439,8 @@ const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ] =
 const int * aiPercentByDeltaLev = NULL;
 const int * aiPercentByDeltaLevForBoss = NULL;
 
-//   ̿  꿡 Ǵ ̺
-// MIN(MAX_EXP_DELTA_OF_LEV - 1, ( + 15) - ))
+// 적과 나와의 레벨차이에 의한 계산에 사용되는 테이블
+// MIN(MAX_EXP_DELTA_OF_LEV - 1, (적렙 + 15) - 내렙))
 const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV] =
 {
 	1,      // -15  0
@@ -720,7 +720,7 @@ const DWORD guild_exp_table[GUILD_MAX_LEVEL+1] =
 	42000000UL
 };
 
-// INTERNATIONAL_VERSION ġ
+// INTERNATIONAL_VERSION 길드경험치
 const DWORD guild_exp_table2[GUILD_MAX_LEVEL+1] =
 {
 	0,	
@@ -745,7 +745,7 @@ const DWORD guild_exp_table2[GUILD_MAX_LEVEL+1] =
 	4000000UL,
 	16800000UL
 };
-// END_OF_INTERNATIONAL_VERSION ġ
+// END_OF_INTERNATIONAL_VERSION 길드경험치
 
 const int aiMobEnchantApplyIdx[MOB_ENCHANTS_MAX_NUM] =
 {
@@ -898,16 +898,16 @@ const TApplyInfo aApplyInfo[MAX_APPLY_NUM] =
 	{ POINT_PC_BANG_DROP_BONUS	},		// 76
 	// END_PC_BANG_ITEM_ADD
 
-	{ POINT_NONE,		},				// 77  HP Ҹ APPLY_EXTRACT_HP_PCT
+	{ POINT_NONE,		},				// 77 사용시 HP 소모 APPLY_EXTRACT_HP_PCT
 
-	{ POINT_RESIST_WARRIOR,		},		// 78 翡  APPLY_RESIST_WARRIOR
-	{ POINT_RESIST_ASSASSIN,	},		// 79 ڰ  APPLY_RESIST_ASSASSIN
-	{ POINT_RESIST_SURA,		},		// 80 󿡰  APPLY_RESIST_SURA
-	{ POINT_RESIST_SHAMAN,		},		// 81 翡  APPLY_RESIST_SHAMAN
-	{ POINT_ENERGY				},		// 82  
-	{ POINT_DEF_GRADE			},		// 83 . DEF_GRADE_BONUS Ŭ󿡼 ι  ǵ (...) ִ.
-	{ POINT_COSTUME_ATTR_BONUS	},		// 84 ڽƬ  Ӽ ؼ ʽ ִ 
-	{ POINT_MAGIC_ATT_BONUS_PER },			// 85  ݷ +x%
+	{ POINT_RESIST_WARRIOR,		},		// 78 무사에게 저항 APPLY_RESIST_WARRIOR
+	{ POINT_RESIST_ASSASSIN,	},		// 79 자객에게 저항 APPLY_RESIST_ASSASSIN
+	{ POINT_RESIST_SURA,		},		// 80 수라에게 저항 APPLY_RESIST_SURA
+	{ POINT_RESIST_SHAMAN,		},		// 81 무당에게 저항 APPLY_RESIST_SHAMAN
+	{ POINT_ENERGY				},		// 82 기력 
+	{ POINT_DEF_GRADE			},		// 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
+	{ POINT_COSTUME_ATTR_BONUS	},		// 84 코스튬에 붙은 속성에 대해서만 보너스를 주는 기력
+	{ POINT_MAGIC_ATT_BONUS_PER },			// 85 마법 공격력 +x%
 	{ POINT_MELEE_MAGIC_ATT_BONUS_PER		},			// 86 APPLY_MELEE_MAGIC_ATTBONUS_PER
 	{ POINT_RESIST_ICE,			},   // APPLY_RESIST_ICE,	87
 	{ POINT_RESIST_EARTH,		},   // APPLY_RESIST_EARTH,	88
@@ -1076,19 +1076,19 @@ const SStoneDropInfo aStoneDrop[STONE_INFO_MAX_NUM] =
 
 const char * c_apszEmpireNames[EMPIRE_MAX_NUM] =
 {
-	"",
-	"ż",
-	"õ",
-	"뱹"
+	"전제국",
+	"신수국",
+	"천조국",
+	"진노국"
 };
 
 const char * c_apszPrivNames[MAX_PRIV_NUM] =
 {
 	"",
-	"  Ȯ",
-	"  Ȯ",
-	"   Ȯ",
-	"ġ ",
+	"아이템이 나올 확률",
+	"돈이 나올 확률",
+	"돈 대박이 나올 확률",
+	"경험치 배율",
 };
 
 const int aiPolymorphPowerByLevel[SKILL_MAX_LEVEL + 1] =
@@ -1153,28 +1153,28 @@ TGuildWarInfo KOR_aGuildWarInfo[GUILD_WAR_TYPE_MAX_NUM] =
 };
 
 //
-// Ǽ Ͽ ġ
+// 악세서리 소켓용 수치들
 //
 
-// ̾Ƹ  ߰  Ȯ
+// 다이아몬드로 소켓을 추가할 때 확률
 const int aiAccessorySocketAddPct[ITEM_ACCESSORY_SOCKET_MAX_NUM] =
 {
 	50, 50, 50
 };
 
-// Ǽ ġ  %ŭ  ߰ϴ
+// 악세서리 수치 값의 몇%만큼의 성능을 추가하는지
 const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] = 
 {
 	0, 10, 20, 40
 };
 
-//  ӽð 24, 12, 6
+// 소켓 지속시간 24, 12, 6
 const int aiAccessorySocketDegradeTime[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
 {
 	0, 3600 * 24, 3600 * 12, 3600 * 6
 };
 
-//   
+// 소켓 장착 성공률
 const int aiAccessorySocketPutPct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
 {
 	90, 80, 70, 0
@@ -1274,10 +1274,10 @@ TValueName c_aApplyTypeNames[] =
     { "RESIST_ASSASSIN",	APPLY_RESIST_ASSASSIN},
     { "RESIST_SURA",		APPLY_RESIST_SURA},
     { "RESIST_SHAMAN",	APPLY_RESIST_SHAMAN},
-    // by mhh game/affect.h ǵǾ. INFINITE_AFFECT_DURATION = 0x1FFFFFFF
+    // by mhh game/affect.h 정의되어있음. INFINITE_AFFECT_DURATION = 0x1FFFFFFF
     { "INFINITE_AFFECT_DURATION", 0x1FFFFFFF	},
-	{ "ENERGY", APPLY_ENERGY },		//	
-	{ "COSTUME_ATTR_BONUS", APPLY_COSTUME_ATTR_BONUS },		//	
+	{ "ENERGY", APPLY_ENERGY },		//	기력
+	{ "COSTUME_ATTR_BONUS", APPLY_COSTUME_ATTR_BONUS },		//	기력
 	{ "MAGIC_ATTBONUS_PER",	APPLY_MAGIC_ATTBONUS_PER	},
     { "MELEE_MAGIC_ATTBONUS_PER",	APPLY_MELEE_MAGIC_ATTBONUS_PER	},
     
diff --git a/src/game/crc32.cpp b/src/game/crc32.cpp
index 64c5d78..3da5a70 100644
--- a/src/game/crc32.cpp
+++ b/src/game/crc32.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "crc32.h"
 
 static unsigned long CRCTable[256] = 
diff --git a/src/game/crc32.h b/src/game/crc32.h
index 17b4346..567aa7d 100644
--- a/src/game/crc32.h
+++ b/src/game/crc32.h
@@ -1,4 +1,4 @@
-#ifndef __INC_CRC32_H__
+#ifndef __INC_CRC32_H__
 #define __INC_CRC32_H__
 
 typedef unsigned long crc_t;
diff --git a/src/game/cube.cpp b/src/game/cube.cpp
index 7a96f4b..c2378dd 100644
--- a/src/game/cube.cpp
+++ b/src/game/cube.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2006.11.20
  * file        : cube.cpp
  * author      : mhh
@@ -38,11 +38,11 @@ static bool s_isInitializedCubeMaterialInformation = false;
 /*--------------------------------------------------------*/
 enum ECubeResultCategory
 {
-	CUBE_CATEGORY_POTION,				// ,  ..  ( Ư     . ʰ   Ÿ)
-	CUBE_CATEGORY_WEAPON,				// 
-	CUBE_CATEGORY_ARMOR,				// 
-	CUBE_CATEGORY_ACCESSORY,			// ű
-	CUBE_CATEGORY_ETC,				// Ÿ ...
+	CUBE_CATEGORY_POTION,				// 약초, 진액 등등..  (포션으로 특정할 수 없으니 사용 안 함. 약초같은건 다 걍 기타)
+	CUBE_CATEGORY_WEAPON,				// 무기
+	CUBE_CATEGORY_ARMOR,				// 방어구
+	CUBE_CATEGORY_ACCESSORY,			// 장신구
+	CUBE_CATEGORY_ETC,				// 기타 등등...
 };
 
 typedef std::vector	TCubeValueVector;
@@ -54,12 +54,12 @@ struct SCubeMaterialInfo
 		bHaveComplicateMaterial = false;
 	};
 
-	CUBE_VALUE			reward;							//  
-	TCubeValueVector	material;						//  
-	DWORD				gold;							//  󸶵
-	TCubeValueVector	complicateMaterial;				// -_- 
+	CUBE_VALUE			reward;							// 보상이 뭐냐
+	TCubeValueVector	material;						// 재료들은 뭐냐
+	DWORD				gold;							// 돈은 얼마드냐
+	TCubeValueVector	complicateMaterial;				// 복잡한-_- 재료들
 
-	// .. Ŭ̾Ʈ Ḧ ֱ Ͽ  
+	// .. 클라이언트에서 재료를 보여주기 위하여 약속한 포맷
 	// 72723,1&72724,2&72730,1
 	// 52001,1|52002,1|52003,1&72723,1&72724,5
 	//	=> ( 52001,1 or 52002,1 or 52003,1 ) and 72723,1 and 72724,5
@@ -76,13 +76,13 @@ struct SItemNameAndLevel
 };
 
 
-// ڷᱸ ̷ ΰ ...  ȥ  ¿ 
+// 자료구조나 이런거 병신인건 이해좀... 누구땜에 영혼이 없는 상태에서 만들었씀
 typedef std::vector								TCubeResultList;
-typedef std::unordered_map				TCubeMapByNPC;				//  NPC     ְ ᰡ ...
-typedef std::unordered_map					TCubeResultInfoTextByNPC;	//  NPC   ִ     
+typedef std::unordered_map				TCubeMapByNPC;				// 각각의 NPC별로 어떤 걸 만들 수 있고 재료가 뭔지...
+typedef std::unordered_map					TCubeResultInfoTextByNPC;	// 각각의 NPC별로 만들 수 있는 목록을 정해진 포맷으로 정리한 정보
 
 TCubeMapByNPC cube_info_map;
-TCubeResultInfoTextByNPC cube_result_info_map_by_npc;				// ̹  Ű 
+TCubeResultInfoTextByNPC cube_result_info_map_by_npc;				// 네이밍 존나 병신같다 ㅋㅋㅋ
 
 class CCubeMaterialInfoHelper
 {
@@ -93,7 +93,7 @@ public:
 /*--------------------------------------------------------*/
 /*                  STATIC FUNCTIONS                      */ 
 /*--------------------------------------------------------*/
- // ʿ   ִ°?
+ // 필요한 아이템 개수를 가지고있는가?
 static bool FN_check_item_count (LPITEM *items, DWORD item_vnum, int need_count)
 {
 	int	count = 0;
@@ -112,7 +112,7 @@ static bool FN_check_item_count (LPITEM *items, DWORD item_vnum, int need_count)
 	return (count>=need_count);
 }
 
-// ť곻 Ḧ .
+// 큐브내의 재료를 지운다.
 static void FN_remove_material (LPITEM *items, DWORD item_vnum, int need_count)
 {
 	int		count	= 0;
@@ -171,7 +171,7 @@ static bool FN_check_valid_npc( WORD vnum )
 	return false;
 }
 
-// ť굥Ÿ ùٸ ʱȭ Ǿ üũѴ.
+// 큐브데이타가 올바르게 초기화 되었는지 체크한다.
 static bool FN_check_cube_data (CUBE_DATA *cube_data)
 {
 	DWORD	i = 0;
@@ -205,10 +205,10 @@ CUBE_DATA::CUBE_DATA()
 	this->gold = 0;
 }
 
-// ʿ   ϴ üũѴ.
+// 필요한 재료의 수량을 만족하는지 체크한다.
 bool CUBE_DATA::can_make_item (LPITEM *items, WORD npc_vnum)
 {
-	// ʿ ,  ϴ üũѴ.
+	// 필요한 재료, 수량을 만족하는지 체크한다.
 	DWORD	i, end_index;
 	DWORD	need_vnum;
 	int		need_count;
@@ -236,7 +236,7 @@ bool CUBE_DATA::can_make_item (LPITEM *items, WORD npc_vnum)
 	return true;
 }
 
-// ť긦     
+// 큐브를 돌렸을때 나오는 아이템의 종류를 결정함
 CUBE_VALUE* CUBE_DATA::reward_value ()
 {
 	int		end_index		= 0;
@@ -249,7 +249,7 @@ CUBE_VALUE* CUBE_DATA::reward_value ()
 	return &this->reward[reward_index];
 }
 
-// ť꿡 ִ Ḧ 
+// 큐브에 들어있는 재료를 지운다
 void CUBE_DATA::remove_material (LPCHARACTER ch)
 {
 	DWORD	i, end_index;
@@ -282,7 +282,7 @@ void Cube_clean_item (LPCHARACTER ch)
 	}
 }
 
-// ťâ 
+// 큐브창 열기
 void Cube_open (LPCHARACTER ch)
 {
 	if (false == s_isInitializedCubeMaterialInformation)
@@ -313,12 +313,12 @@ void Cube_open (LPCHARACTER ch)
 
 	if (ch->IsCubeOpen())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ â ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 제조창이 열려있습니다."));
 		return;
 	}
 	if ( ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() )
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷ(â,ȯ,)   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
 		return;
 	}
 
@@ -336,7 +336,7 @@ void Cube_open (LPCHARACTER ch)
 	ch->ChatPacket(CHAT_TYPE_COMMAND, "cube open %d", npc->GetRaceNum());
 }
 
-// ť ĵ
+// 큐브 캔슬
 void Cube_close (LPCHARACTER ch)
 {
 	RETURN_IF_CUBE_IS_NOT_OPENED(ch);
@@ -431,7 +431,7 @@ bool Cube_load (const char *file)
 		}
 		else TOKEN("gold")
 		{
-			//  ʿ ݾ
+			// 제조에 필요한 금액
 			cube_data->gold = value1;
 		}
 		else TOKEN("end")
@@ -509,10 +509,10 @@ static bool FN_update_cube_status(LPCHARACTER ch)
 // return new item
 bool Cube_make (LPCHARACTER ch)
 {
-	// ־  ʿϴ  ã´. (ť굥Ÿ Ī)
-	// ť Ÿ ִٸ  Ḧ üũѴ.
-	// ο  .
-	// ο  
+	// 주어진 아이템을 필요로하는 조합을 찾는다. (큐브데이타로 칭함)
+	// 큐브 데이타가 있다면 아이템의 재료를 체크한다.
+	// 새로운 아이템을 만든다.
+	// 새로운 아이템 지급
 
 	LPCHARACTER	npc;
 	int			percent_number = 0;
@@ -522,7 +522,7 @@ bool Cube_make (LPCHARACTER ch)
 
 	if (!(ch)->IsCubeOpen())
 	{
-		(ch)->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  ʽϴ"));
+		(ch)->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("제조창이 열려있지 않습니다"));
 		return false;
 	}
 
@@ -537,29 +537,29 @@ bool Cube_make (LPCHARACTER ch)
 
 	if (NULL == cube_proto)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ᰡ մϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("제조 재료가 부족합니다"));
 		return false;
 	}
 
 	if (ch->GetGold() < cube_proto->gold)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϰų  ڸ ϴ."));	//  ؽƮ ̹ θ ̴°Ŷ ߰ ʿ 
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈이 부족하거나 아이템이 제자리에 없습니다."));	// 이 텍스트는 이미 널리 쓰이는거라 추가번역 필요 없음
 		return false;
 	}
 
 	CUBE_VALUE	*reward_value = cube_proto->reward_value();
 
-	// Ǿ  
+	// 사용되었던 재료아이템 삭제
 	cube_proto->remove_material (ch);
 	
-	//  ʿ  
+	// 제조시 필요한 골드 차감
 	if (0 < cube_proto->gold)
 		ch->PointChange(POINT_GOLD, -(cube_proto->gold), false);
 
 	percent_number = number(1,100);
 	if ( percent_number<=cube_proto->percent)
 	{
-		// 
+		// 성공
 		ch->ChatPacket(CHAT_TYPE_COMMAND, "cube success %d %d", reward_value->vnum, reward_value->count);
 		new_item = ch->AutoGiveItem(reward_value->vnum, reward_value->count);
 
@@ -569,8 +569,8 @@ bool Cube_make (LPCHARACTER ch)
 	}
 	else
 	{
-		// 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͽϴ."));	// 2012.11.12  ߰ ޼ (locale_string.txt  ߰ؾ )
+		// 실패
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("제조에 실패하였습니다."));	// 2012.11.12 새로 추가된 메세지 (locale_string.txt 에 추가해야 함)
 		ch->ChatPacket(CHAT_TYPE_COMMAND, "cube fail");
 		LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(),
 				reward_value->vnum, 0, 0, 0);
@@ -581,7 +581,7 @@ bool Cube_make (LPCHARACTER ch)
 }
 
 
-// ť꿡 ִ ۵ ǥ
+// 큐브에 있는 아이템들을 표시
 void Cube_show_list (LPCHARACTER ch)
 {
 	LPITEM	*cube_item;
@@ -602,13 +602,13 @@ void Cube_show_list (LPCHARACTER ch)
 }
 
 
-// κ丮 ִ  ť꿡 
+// 인벤토리에 있는 아이템을 큐브에 등록
 void Cube_add_item (LPCHARACTER ch, int cube_index, int inven_index)
 {
-	//  ִ°?
-	// ť곻 ڸ ã
-	// ť꼼
-	// ޽ 
+	// 아이템이 있는가?
+	// 큐브내의 빈자리 찾기
+	// 큐브세팅
+	// 메시지 전송
 	LPITEM	item;
 	LPITEM	*cube_item;
 
@@ -625,7 +625,7 @@ void Cube_add_item (LPCHARACTER ch, int cube_index, int inven_index)
 
 	cube_item = ch->GetCubeItem();
 
-	// ̹ ٸġ ϵǾ ̸  indext
+	// 이미 다른위치에 등록되었던 아이템이면 기존 indext삭제
 	for (int i=0; iChatPacket(CHAT_TYPE_INFO, "cube[%d]: inventory[%d]: %s added",
 									cube_index, inven_index, item->GetName());
 
-	//  ڿ ö ۵    ִ Ŭ̾Ʈ  
-	//  ϰ; ׳ ʿ 尡  
+	// 현재 상자에 올라온 아이템들로 무엇을 만들 수 있는지 클라이언트에 정보 전달
+	// 을 하고싶었으나 그냥 필요한 골드가 얼마인지 전달
 	FN_update_cube_status(ch);
 
 	return;
 }
 
-// ť꿡ִ  
+// 큐브에있는 아이템을 제거
 void Cube_delete_item (LPCHARACTER ch, int cube_index)
 {
 	LPITEM	item;
@@ -669,14 +669,14 @@ void Cube_delete_item (LPCHARACTER ch, int cube_index)
 		ch->ChatPacket(CHAT_TYPE_INFO, "cube[%d]: cube[%d]: %s deleted",
 				cube_index, item->GetCell(), item->GetName());
 
-	//  ڿ ö ۵    ִ Ŭ̾Ʈ  
-	//  ϰ; ׳ ʿ 尡  
+	// 현재 상자에 올라온 아이템들로 무엇을 만들 수 있는지 클라이언트에 정보 전달
+	// 을 하고싶었으나 그냥 필요한 골드가 얼마인지 전달
 	FN_update_cube_status(ch);
 
 	return;
 }
 
-//  ̸ ؼ  ̸ ȭ иϴ Լ (ְ+5 -> ְ, 5)
+// 아이템 이름을 통해서 순수 이름과 강화레벨을 분리하는 함수 (무쌍검+5 -> 무쌍검, 5)
 SItemNameAndLevel SplitItemNameAndLevelFromName(const std::string& name)
 {
 	int level = 0;
@@ -710,7 +710,7 @@ bool FIsLessCubeValue(const CUBE_VALUE& a, const CUBE_VALUE& b)
 
 void Cube_MakeCubeInformationText()
 {
-	//   ť     Ŭ̾Ʈ    ȯ.
+	// 이제 정리된 큐브 결과 및 재료들의 정보로 클라이언트에 보내 줄 정보로 변환함.
 	for (TCubeMapByNPC::iterator iter = cube_info_map.begin(); cube_info_map.end() != iter; ++iter)
 	{
 		const DWORD& npcVNUM = iter->first;
@@ -722,13 +722,13 @@ void Cube_MakeCubeInformationText()
 			std::string& infoText = materialInfo.infoText;
 
 			
-			// ̳ ۳̾
+			// 이놈이 나쁜놈이야
 			if (0 < materialInfo.complicateMaterial.size())
 			{
 				std::sort(materialInfo.complicateMaterial.begin(), materialInfo.complicateMaterial.end(), FIsLessCubeValue);
 				std::sort(materialInfo.material.begin(), materialInfo.material.end(), FIsLessCubeValue);
 
-				//// ߺǴ  
+				//// 중복되는 재료들을 지움
 				for (TCubeValueVector::iterator iter = materialInfo.complicateMaterial.begin(); materialInfo.complicateMaterial.end() != iter; ++iter)
 				{
 					for (TCubeValueVector::iterator targetIter = materialInfo.material.begin(); materialInfo.material.end() != targetIter; ++targetIter)
@@ -740,7 +740,7 @@ void Cube_MakeCubeInformationText()
 					}
 				}
 
-				// 72723,1 or 72725,1 or ... ̷  ӵ  Ű ؽƮ 
+				// 72723,1 or 72725,1 or ... 이런 식의 약속된 포맷을 지키는 텍스트를 생성
 				for (TCubeValueVector::iterator iter = materialInfo.complicateMaterial.begin(); materialInfo.complicateMaterial.end() != iter; ++iter)
 				{
 					char tempBuffer[128];
@@ -755,7 +755,7 @@ void Cube_MakeCubeInformationText()
 					infoText.push_back('&');
 			}
 
-			// ߺ ʴ Ϲ 鵵  
+			// 중복되지 않는 일반 재료들도 포맷 생성
 			for (TCubeValueVector::iterator iter = materialInfo.material.begin(); materialInfo.material.end() != iter; ++iter)
 			{
 				char tempBuffer[128];
@@ -765,7 +765,7 @@ void Cube_MakeCubeInformationText()
 
 			infoText.erase(infoText.size() - 1);
 
-			//   尡 ʿϴٸ  ߰
+			// 만들 때 골드가 필요하다면 골드정보 추가
 			if (0 < materialInfo.gold)
 			{
 				char temp[128];
@@ -786,7 +786,7 @@ bool Cube_InformationInitialize()
 
 		const std::vector& rewards = cubeData->reward;
 
-		// ϵڵ 
+		// 하드코딩 ㅈㅅ
 		if (1 != rewards.size())
 		{
 			sys_err("[CubeInfo] WARNING! Does not support multiple rewards (count: %d)", rewards.size());			
@@ -814,13 +814,13 @@ bool Cube_InformationInitialize()
 		{
 			SCubeMaterialInfo& existInfo = *iter;
 
-			// ̹ ߺǴ  ϵǾ ִٸ ƿ ٸ   , 
-			//   ε Ư κи Ʋ  .
-			//  Ư κи Ʋ ۵ Ʒó ϳ  ϳ  ֱ :
-			// :
-			//		ְ+5 ~ +9 x 1
-			//		 Įڷ  x1
-			//		   x1
+			// 이미 중복되는 보상이 등록되어 있다면 아예 다른 조합으로 만드는 것인지, 
+			// 거의 같은 조합인데 특정 부분만 틀린 것인지 구분함.
+			// 예를들면 특정 부분만 틀린 아이템들은 아래처럼 하나로 묶어서 하나의 결과로 보여주기 위함임:
+			// 용신지검:
+			//		무쌍검+5 ~ +9 x 1
+			//		붉은 칼자루 조각 x1
+			//		녹색 검장식 조각 x1
 			if (reward.vnum == existInfo.reward.vnum)
 			{
 				for (TCubeValueVector::iterator existMaterialIter = existInfo.material.begin(); existInfo.material.end() != existMaterialIter; ++existMaterialIter)
@@ -835,8 +835,8 @@ bool Cube_InformationInitialize()
 
 					if (0 < existItemInfo.level)
 					{
-						//  ߰ϴ ť  ,  ϵǾִ ť    
-						// ߺǴ κ ִ ˻Ѵ
+						// 지금 추가하는 큐브 결과물의 재료와, 기존에 등록되어있던 큐브 결과물의 재료 중 
+						// 중복되는 부분이 있는지 검색한다
 						for (TCubeValueVector::iterator currentMaterialIter = materialInfo.material.begin(); materialInfo.material.end() != currentMaterialIter; ++currentMaterialIter)
 						{
 							TItemTable* currentMaterialProto = ITEM_MANAGER::Instance().GetTable(currentMaterialIter->vnum);
@@ -852,7 +852,7 @@ bool Cube_InformationInitialize()
 
 								//currentMaterialIter = materialInfo.material.erase(currentMaterialIter);
 
-								// TODO: ߺǴ    ̻ ؾ   
+								// TODO: 중복되는 아이템 두 개 이상 검출해야 될 수도 있음
 								break;
 							}
 						} // for currentMaterialIter
@@ -872,7 +872,7 @@ bool Cube_InformationInitialize()
 	return true;
 }
 
-// Ŭ̾Ʈ  :  NPC   ִ ۵ () û
+// 클라이언트에서 서버로 : 현재 NPC가 만들 수 있는 아이템들의 정보(목록)를 요청
 void Cube_request_result_list(LPCHARACTER ch)
 {
 	RETURN_IF_CUBE_IS_NOT_OPENED(ch);
@@ -886,7 +886,7 @@ void Cube_request_result_list(LPCHARACTER ch)
 
 	std::string& resultText = cube_result_info_map_by_npc[npcVNUM];
 
-	// ش NPC   ִ    ٸ ijø 
+	// 해당 NPC가 만들 수 있는 목록이 정리된 게 없다면 캐시를 생성
 	if (resultText.length() == 0)
 	{
 		resultText.clear();
@@ -909,7 +909,7 @@ void Cube_request_result_list(LPCHARACTER ch)
 
 		resultText.erase(resultText.size() - 1);
 
-		// ä Ŷ Ѱ踦 Ѿ  ... ȹ е  ش޶ ûϰų, ߿ ٸ  ٲٰų...
+		// 채팅 패킷의 한계를 넘어가면 에러 남김... 기획자 분들 께 조정해달라고 요청하거나, 나중에 다른 방식으로 바꾸거나...
 		if (resultText.size() - 20 >= CHAT_MAX_LEN)
 		{
 			sys_err("[CubeInfo] Too long cube result list text. (NPC: %d, length: %d)", npcVNUM, resultText.size());
@@ -919,7 +919,7 @@ void Cube_request_result_list(LPCHARACTER ch)
 
 	}
 
-	//  NPC   ִ ۵  Ʒ  Ѵ.
+	// 현재 NPC가 만들 수 있는 아이템들의 목록을 아래 포맷으로 전송한다.
 	// (Server -> Client) /cube r_list npcVNUM resultCount vnum1,count1/vnum2,count2,/vnum3,count3/...
 	// (Server -> Client) /cube r_list 20383 4 123,1/125,1/128,1/130,5
 	
diff --git a/src/game/cube.h b/src/game/cube.h
index dffa9c4..14270f8 100644
--- a/src/game/cube.h
+++ b/src/game/cube.h
@@ -1,8 +1,8 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2006.11.20
  * file        : cube.h
  * author      : mhh
- * description : ťý
+ * description : 큐브시스템
  */
 
 #ifndef _cube_h_
@@ -30,7 +30,7 @@ struct CUBE_DATA
 	std::vector	item;
 	std::vector	reward;
 	int						percent;
-	unsigned int			gold;		//  ʿ ݾ
+	unsigned int			gold;		// 제조시 필요한 금액
 
 	CUBE_DATA();
 
diff --git a/src/game/db.cpp b/src/game/db.cpp
index eb95171..1fa9506 100644
--- a/src/game/db.cpp
+++ b/src/game/db.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #include "../../common/billing.h"
 #include "../../common/length.h"
@@ -25,7 +25,7 @@ extern bool g_bNoPasspod;
 extern std::string g_stBlockDate;
 extern int openid_server;
 
-//߱ passpod  Լ 
+//중국 passpod 전용 함수 
 bool CheckPasspod(const char * account)
 {
 	char szQuery[1024];
@@ -434,7 +434,7 @@ void DBManager::FlushBilling(bool bForce)
 void DBManager::CheckBilling()
 {
 	std::vector vec;
-	vec.push_back(0); // īƮ  ̸ д.
+	vec.push_back(0); // 카운트를 위해 미리 비워둔다.
 
 	//sys_log(0, "CheckBilling: map size %d", m_map_pkLoginData.size());
 
@@ -451,7 +451,7 @@ void DBManager::CheckBilling()
 		}
 	}
 
-	vec[0] = vec.size() - 1; //    ִ´,  ڽ ؾ ϹǷ -1
+	vec[0] = vec.size() - 1; // 비워둔 곳에 사이즈를 넣는다, 사이즈 자신은 제외해야 하므로 -1
 	db_clientdesc->DBPacket(HEADER_GD_BILLING_CHECK, 0, &vec[0], sizeof(DWORD) * vec.size());
 }
 
@@ -691,7 +691,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 					M2_DELETE(pinfo);
 					break;
 				}
-				//ġ  - By SeMinZ
+				//위치 변경 - By SeMinZ
 				d->SetLogin(pinfo->login);
 
 				sys_log(0, "QID_AUTH_LOGIN: START %u %p", qi->dwIdent, get_pointer(d));
@@ -700,7 +700,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 				{
 					if (true == LC_IsBrazil())
 					{
-						//     Ѵ
+						// 계정이 없으면 새로 만들어야 한다
 						ReturnQuery(QID_BRAZIL_CREATE_ID, qi->dwIdent, pinfo,
 								"INSERT INTO account(login, password, social_id, create_time) "
 								"VALUES('%s', password('%s'), '0000000', NOW()) ;",
@@ -830,7 +830,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 
 					if (true == LC_IsBrazil())
 					{
-						nPasswordDiff = 0; //   йȣ üũ  ʴ´.
+						nPasswordDiff = 0; // 브라질 버전에서는 비밀번호 체크를 하지 않는다.
 					}
 
 					if (nPasswordDiff)
@@ -861,7 +861,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 					{
 						if (LC_IsEurope())
 						{
-							//stBlockData >= 0 == ¥ BlockDate  ̷ 
+							//stBlockData >= 0 == 날짜가 BlockDate 보다 미래 
 							if (strncmp(szCreateDate, g_stBlockDate.c_str(), 8) >= 0)
 							{
 								LoginFailure(d, "BLKLOGIN");
@@ -908,7 +908,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 					M2_DELETE(pinfo);
 					break;
 				}
-				//ġ  - By SeMinZ
+				//위치 변경 - By SeMinZ
 				d->SetLogin(pinfo->login);
 
 				sys_log(0, "QID_AUTH_LOGIN_OPENID: START %u %p", qi->dwIdent, get_pointer(d));
@@ -917,7 +917,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 				{
 					if (true == LC_IsBrazil())
 					{
-						//     Ѵ
+						// 계정이 없으면 새로 만들어야 한다
 						ReturnQuery(QID_BRAZIL_CREATE_ID, qi->dwIdent, pinfo,
 								"INSERT INTO account(login, password, social_id, create_time) "
 								"VALUES('%s', password('%s'), '0000000', NOW()) ;",
@@ -926,7 +926,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 						sys_log(0, "[AUTH_BRAZIL] : Create A new AccountID From OnGame");
 					} else if (true == LC_IsJapan())
 					{
-						//     Ѵ
+						// 계정이 없으면 새로 만들어야 한다
 						ReturnQuery(QID_JAPAN_CREATE_ID, qi->dwIdent, pinfo,
 								"INSERT INTO account(login, password, social_id, create_time) "
 								"VALUES('%s', password('%s'), '0000000', NOW()) ;",
@@ -1056,10 +1056,10 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 
 					if (true == LC_IsBrazil())
 					{
-						nPasswordDiff = 0; //   йȣ üũ  ʴ´.
+						nPasswordDiff = 0; // 브라질 버전에서는 비밀번호 체크를 하지 않는다.
 					}
 
-					//OpenID : OpenID  , йȣ üũ  ʴ´.
+					//OpenID : OpenID 의 경우, 비밀번호 체크를 하지 않는다.
 					if (openid_server)
 					{
 						nPasswordDiff = 0;
@@ -1093,7 +1093,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 					{
 						if (LC_IsEurope())
 						{
-							//stBlockData >= 0 == ¥ BlockDate  ̷ 
+							//stBlockData >= 0 == 날짜가 BlockDate 보다 미래 
 							if (strncmp(szCreateDate, g_stBlockDate.c_str(), 8) >= 0)
 							{
 								LoginFailure(d, "BLKLOGIN");
@@ -1296,7 +1296,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 						if (pkItem)
 						{
 							sys_log(0, "GIVE LOTTO SUCCESS TO %s (pid %u)", ch->GetName(), qi->dwIdent);
-							//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), pkItem->GetName());
+							//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), pkItem->GetName());
 
 							pkItem->SetSocket(0, pMsg->Get()->uiInsertID);
 							pkItem->SetSocket(1, pdw[2]);
@@ -1549,7 +1549,7 @@ void VCardUse(LPCHARACTER CardOwner, LPCHARACTER CardTaker, LPITEM item)
 
 	db_clientdesc->DBPacket(HEADER_GD_VCARD, 0, &p, sizeof(TPacketGDVCard));
 
-	CardTaker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ð ߰ Ǿϴ. (ȣ %d)"), item->GetSocket(1) / 60, item->GetSocket(0));
+	CardTaker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d분의 결제시간이 추가 되었습니다. (결제번호 %d)"), item->GetSocket(1) / 60, item->GetSocket(0));
 
 	LogManager::instance().VCardLog(p.dwID, CardTaker->GetX(), CardTaker->GetY(), g_stHostname.c_str(),
 			CardOwner->GetName(), CardOwner->GetDesc()->GetHostName(),
@@ -1685,7 +1685,7 @@ enum EAccountQID
 	QID_SPAM_DB,
 };
 
-// 10и ε
+// 10분마다 리로드
 static LPEVENT s_pkReloadSpamEvent = NULL;
 
 EVENTINFO(reload_spam_event_info)
diff --git a/src/game/db.h b/src/game/db.h
index 76f818d..6354263 100644
--- a/src/game/db.h
+++ b/src/game/db.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_DB_MANAGER_H__
+#ifndef __INC_METIN_II_DB_MANAGER_H__
 #define __INC_METIN_II_DB_MANAGER_H__
 
 #include "../../libsql/AsyncSQL.h"
@@ -109,7 +109,7 @@ class DBManager : public singleton
 		void			FlushBilling(bool bForce=false);
 		void			CheckBilling();
 
-		void			StopAllBilling(); // 20050503.ipkn.DB-AUTH    ̺   (翬 )
+		void			StopAllBilling(); // 20050503.ipkn.DB-AUTH 접속 종료시 빌링 테이블 모두 지우기 (재연결시 복구함)
 
 		DWORD			CountQuery()		{ return m_sql.CountQuery(); }
 		DWORD			CountQueryResult()	{ return m_sql.CountResult(); }
@@ -123,8 +123,8 @@ class DBManager : public singleton
 		const std::string &	GetDBString(const std::string& key);
 		const std::vector & GetGreetMessage();
 
-		template void FuncQuery(Functor f, const char * c_pszFormat, ...); //  fڷ ȣ (SQLMsg *) ˾Ƽ 
-		template void FuncAfterQuery(Functor f, const char * c_pszFormat, ...); //   f ȣ void			f(void) 
+		template void FuncQuery(Functor f, const char * c_pszFormat, ...); // 결과를 f인자로 호출함 (SQLMsg *) 알아서 해제됨
+		template void FuncAfterQuery(Functor f, const char * c_pszFormat, ...); // 끝나고 나면 f가 호출됨 void			f(void) 형태
 
 		size_t EscapeString(char* dst, size_t dstSize, const char *src, size_t srcSize);
 
diff --git a/src/game/debug_allocator.h b/src/game/debug_allocator.h
index 03a49ae..5800bcd 100644
--- a/src/game/debug_allocator.h
+++ b/src/game/debug_allocator.h
@@ -1,4 +1,4 @@
-#ifndef _DEBUG_ALLOCATOR_H_
+#ifndef _DEBUG_ALLOCATOR_H_
 #define _DEBUG_ALLOCATOR_H_
 
 #include 
diff --git a/src/game/debug_allocator_adapter.h b/src/game/debug_allocator_adapter.h
index f3cfb93..7399902 100644
--- a/src/game/debug_allocator_adapter.h
+++ b/src/game/debug_allocator_adapter.h
@@ -1,4 +1,4 @@
-#ifndef _DEBUG_ADAPTER_H_
+#ifndef _DEBUG_ADAPTER_H_
 #define _DEBUG_ADAPTER_H_
 
 // Intended to be included only in "debug_allocator.h"
diff --git a/src/game/debug_ptr.h b/src/game/debug_ptr.h
index b418aa9..c523175 100644
--- a/src/game/debug_ptr.h
+++ b/src/game/debug_ptr.h
@@ -1,4 +1,4 @@
-#ifndef _DEBUG_PTR_H_
+#ifndef _DEBUG_PTR_H_
 #define _DEBUG_PTR_H_
 
 // Intended to be include only in "debug_allocator.h"
diff --git a/src/game/desc.cpp b/src/game/desc.cpp
index 0479290..30d0f89 100644
--- a/src/game/desc.cpp
+++ b/src/game/desc.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "utils.h"
 #include "desc.h"
@@ -236,7 +236,7 @@ bool DESC::Setup(LPFDWATCH _fdw, socket_t _fd, const struct sockaddr_in & c_rSoc
 	//if (LC_IsEurope() == true || LC_IsNewCIBN())
 	//	m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2);
 	//else
-	//NOTE: ̰ 󺰷 ٸ ƾ  ֳ?
+	//NOTE: 이걸 나라별로 다르게 잡아야할 이유가 있나?
 	m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2);
 
 	m_iMinInputBufferLen = MAX_INPUT_LEN >> 1;
@@ -309,7 +309,7 @@ int DESC::ProcessInput()
 
 		int iBytesProceed = 0;
 
-		// false  Ǹ ٸ phase ٲ ̹Ƿ ٽ μ Ѵ!
+		// false가 리턴 되면 다른 phase로 바뀐 것이므로 다시 프로세스로 돌입한다!
 		while (!m_pInputProcessor->Process(this, buffer_read_peek(m_lpInputBuffer), buffer_size(m_lpInputBuffer), iBytesProceed))
 		{
 			buffer_read_proceed(m_lpInputBuffer, iBytesProceed);
@@ -323,7 +323,7 @@ int DESC::ProcessInput()
 	{
 		int iBytesProceed = 0;
 
-		// false  Ǹ ٸ phase ٲ ̹Ƿ ٽ μ Ѵ!
+		// false가 리턴 되면 다른 phase로 바뀐 것이므로 다시 프로세스로 돌입한다!
 		while (!m_pInputProcessor->Process(this, buffer_read_peek(m_lpInputBuffer), buffer_size(m_lpInputBuffer), iBytesProceed))
 		{
 			buffer_read_proceed(m_lpInputBuffer, iBytesProceed);
@@ -336,9 +336,9 @@ int DESC::ProcessInput()
 	{
 		int iSizeBuffer = buffer_size(m_lpInputBuffer);
 
-		// 8Ʈ θ óѴ. 8Ʈ  ϸ ߸ ȣȭ ۸ ȣȭ
-		//  ɼ Ƿ © óϱ Ѵ.
-		if (iSizeBuffer & 7) // & 7 % 8 . 2 ¼ 
+		// 8바이트 단위로만 처리한다. 8바이트 단위에 부족하면 잘못된 암호화 버퍼를 복호화
+		// 할 가능성이 있으므로 짤라서 처리하기로 한다.
+		if (iSizeBuffer & 7) // & 7은 % 8과 같다. 2의 승수에서만 가능
 			iSizeBuffer -= iSizeBuffer & 7;
 
 		if (iSizeBuffer > 0)
@@ -356,7 +356,7 @@ int DESC::ProcessInput()
 
 			int iBytesProceed = 0;
 
-			// false  Ǹ ٸ phase ٲ ̹Ƿ ٽ μ Ѵ!
+			// false가 리턴 되면 다른 phase로 바뀐 것이므로 다시 프로세스로 돌입한다!
 			while (!m_pInputProcessor->Process(this, buffer_read_peek(lpBufferDecrypt), buffer_size(lpBufferDecrypt), iBytesProceed))
 			{
 				if (iBytesProceed > iSizeBuffer)
@@ -432,12 +432,12 @@ void DESC::Packet(const void * c_pvData, int iSize)
 {
 	assert(iSize > 0);
 
-	if (m_iPhase == PHASE_CLOSE) //  ¸  ʴ´.
+	if (m_iPhase == PHASE_CLOSE) // 끊는 상태면 보내지 않는다.
 		return;
 
 	if (m_stRelayName.length() != 0)
 	{
-		// Relay Ŷ ȣȭ ʴ´.
+		// Relay 패킷은 암호화하지 않는다.
 		TPacketGGRelay p;
 
 		p.bHeader = HEADER_GG_RELAY;
@@ -506,7 +506,7 @@ void DESC::Packet(const void * c_pvData, int iSize)
 			}
 			else
 			{
-				// ȣȭ ʿ   ũ⸦ ȮѴ.
+				// 암호화에 필요한 충분한 버퍼 크기를 확보한다.
 				/* buffer_adjust_size(m_lpOutputBuffer, iSize + 8); */
 				DWORD * pdwWritePoint = (DWORD *) buffer_write_peek(m_lpOutputBuffer);
 
@@ -549,7 +549,7 @@ void DESC::SetPhase(int _phase)
 	switch (m_iPhase)
 	{
 		case PHASE_CLOSE:
-			// ޽ ijʹ Ǹ鼭 
+			// 메신저가 캐릭터단위가 되면서 삭제
 			//MessengerManager::instance().Logout(GetAccountTable().login);
 			m_pInputProcessor = &m_inputClose;
 			break;
@@ -559,8 +559,8 @@ void DESC::SetPhase(int _phase)
 			break;
 
 		case PHASE_SELECT:
-			// ޽ ijʹ Ǹ鼭 
-			//MessengerManager::instance().Logout(GetAccountTable().login); // ǵ break Ȱ
+			// 메신저가 캐릭터단위가 되면서 삭제
+			//MessengerManager::instance().Logout(GetAccountTable().login); // 의도적으로 break 안검
 		case PHASE_LOGIN:
 		case PHASE_LOADING:
 #ifndef _IMPROVED_PACKET_ENCRYPTION_
@@ -892,7 +892,7 @@ void DESC::DisconnectOfSameLogin()
 		if (m_pkDisconnectEvent)
 			return;
 
-		GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ǻͿ α Ͽ   մϴ."));
+		GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 컴퓨터에서 로그인 하여 접속을 종료 합니다."));
 		DelayedDisconnect(5);
 	}
 	else
diff --git a/src/game/desc.h b/src/game/desc.h
index ca0bb5c..0aed508 100644
--- a/src/game/desc.h
+++ b/src/game/desc.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_DESC_H__
+#ifndef __INC_METIN_II_GAME_DESC_H__
 #define __INC_METIN_II_GAME_DESC_H__
 
 #include "constants.h"
@@ -46,14 +46,14 @@ class CLoginKey
 };
 
 
-// sequence  ã Ÿ
+// sequence 버그 찾기용 데이타
 struct seq_t
 {
 	BYTE	hdr;
 	BYTE	seq;
 };
 typedef std::vector	seq_vector_t;
-// sequence  ã Ÿ
+// sequence 버그 찾기용 데이타
 
 class DESC
 {
@@ -116,7 +116,7 @@ class DESC
 
 		void			Log(const char * format, ...);
 
-		// ڵ彦ũ (ð ȭ)
+		// 핸드쉐이크 (시간 동기화)
 		void			StartHandshake(DWORD _dw);
 		void			SendHandshake(DWORD dwCurTime, long lNewDelta);
 		bool			HandshakeProcess(DWORD dwTime, long lDelta, bool bInfiniteRetry=false);
@@ -137,7 +137,7 @@ class DESC
 		const DWORD *	GetDecryptionKey() const { return &m_adwDecryptionKey[0]; }
 #endif
 
-		// 
+		// 제국
 		BYTE			GetEmpire();
 
 		// for p2p
@@ -146,7 +146,7 @@ class DESC
 		void			DisconnectOfSameLogin();
 
 		void			SetAdminMode();
-		bool			IsAdminMode();		// Handshake    ֳ?
+		bool			IsAdminMode();		// Handshake 에서 어드민 명령을 쓸수있나?
 
 		void			SetPong(bool b);
 		bool			IsPong();
@@ -231,7 +231,7 @@ class DESC
 		WORD			m_wP2PPort;
 		BYTE			m_bP2PChannel;
 
-		bool			m_bAdminMode; // Handshake    ֳ?
+		bool			m_bAdminMode; // Handshake 에서 어드민 명령을 쓸수있나?
 		bool			m_bPong;
 
 		int			m_iCurrentSequence;
@@ -294,7 +294,7 @@ class DESC
 		void RawPacket(const void * c_pvData, int iSize);
 		void ChatPacket(BYTE type, const char * format, ...);
 
-		/*   ã ڵ */
+		/* 시퀀스 버그 찾기용 코드 */
 	public:
 		seq_vector_t	m_seq_vector;
 		void			push_seq (BYTE hdr, BYTE seq);
diff --git a/src/game/desc_client.h b/src/game/desc_client.h
index 6c3c35a..b0ff328 100644
--- a/src/game/desc_client.h
+++ b/src/game/desc_client.h
@@ -1,4 +1,4 @@
-#ifndef __CLIENT_H__
+#ifndef __CLIENT_H__
 #define __CLIENT_H__
 
 #include "desc.h"
diff --git a/src/game/desc_manager.cpp b/src/game/desc_manager.cpp
index e5a3271..58cdf1b 100644
--- a/src/game/desc_manager.cpp
+++ b/src/game/desc_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "utils.h"
 #include "crc32.h"
@@ -55,7 +55,7 @@ int IsValidIP(struct valid_ip* ip_table, const char *host)
 DESC_MANAGER::DESC_MANAGER() : m_bDestroyed(false)
 {
 	Initialize();
-	//NOTE : Destroy  Initialize  θ°   ̳..-_-;  
+	//NOTE : Destroy 끝에서 Initialize 를 부르는건 또 무슨 짓이냐..-_-; 정말 
 
 	m_pPackageCrypt = new CClientPackageCryptInfo;
 }
@@ -168,7 +168,7 @@ LPDESC DESC_MANAGER::AcceptDesc(LPFDWATCH fdw, socket_t s)
 		}
 	}
 
-	if (!IsValidIP(admin_ip, host)) // admin_ip  ϵ IP  ִ   ֹ ʴ´.
+	if (!IsValidIP(admin_ip, host)) // admin_ip 에 등록된 IP 는 최대 사용자 수에 구애받지 않는다.
 	{
 		if (m_iSocketsConnected >= MAX_ALLOW_USER)
 		{
diff --git a/src/game/desc_manager.h b/src/game/desc_manager.h
index ef99edb..9045de6 100644
--- a/src/game/desc_manager.h
+++ b/src/game/desc_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_DESC_MANAGER_H__
+#ifndef __INC_METIN_II_GAME_DESC_MANAGER_H__
 #define __INC_METIN_II_GAME_DESC_MANAGER_H__
 
 #include 
diff --git a/src/game/desc_p2p.cpp b/src/game/desc_p2p.cpp
index 00462cf..8516516 100644
--- a/src/game/desc_p2p.cpp
+++ b/src/game/desc_p2p.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "desc_p2p.h"
 #include "protocol.h"
 #include "p2p.h"
diff --git a/src/game/desc_p2p.h b/src/game/desc_p2p.h
index 6db35bc..60c8ccf 100644
--- a/src/game/desc_p2p.h
+++ b/src/game/desc_p2p.h
@@ -1,4 +1,4 @@
-#include "desc.h"
+#include "desc.h"
 
 class DESC_P2P : public DESC
 {
diff --git a/src/game/dev_log.cpp b/src/game/dev_log.cpp
index a9b3bac..274dfd8 100644
--- a/src/game/dev_log.cpp
+++ b/src/game/dev_log.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2006.09.07
  * file        : dev_log.cpp
  * author      : mhh
@@ -31,7 +31,7 @@ static int	s_log_mask = 0xffffffff;
 
 void dev_log(const char *file, int line, const char *function, int level, const char *fmt, ...)
 {
-	// ׽Ʈ  , ũ   ʴ´.
+	// 테스트 서버에서만 남기며, 마스크가 꺼져있으면 남기지 않는다.
 	if (!test_server || !IS_SET(s_log_mask, level))
 		return;
 
diff --git a/src/game/dev_log.h b/src/game/dev_log.h
index 84c08ba..a4e5afc 100644
--- a/src/game/dev_log.h
+++ b/src/game/dev_log.h
@@ -1,8 +1,8 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2006.09.07
  * file        : dev_log.h
  * author      : mhh
- * description : ڿ αԼ ׽Ʈ  ϵȴ.
+ * description : 개발자용 로그함수 테스트 서버에서만 기록된다.
  *				example)
  *				dev_log(LOG_DEB0, "My Name is %s", name);
  */
diff --git a/src/game/dragon_soul_table.h b/src/game/dragon_soul_table.h
index 754626d..c349f0a 100644
--- a/src/game/dragon_soul_table.h
+++ b/src/game/dragon_soul_table.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_DRAGON_SOUL_TABLE_H__
+#ifndef __INC_METIN_II_DRAGON_SOUL_TABLE_H__
 #define __INC_METIN_II_DRAGON_SOUL_TABLE_H__
 
 struct SApply
diff --git a/src/game/dungeon.h b/src/game/dungeon.h
index cf9dbbc..bbeb983 100644
--- a/src/game/dungeon.h
+++ b/src/game/dungeon.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_DUNGEON_H
+#ifndef __INC_METIN_II_GAME_DUNGEON_H
 #define __INC_METIN_II_GAME_DUNGEON_H
 
 #include "sectree_manager.h"
@@ -38,8 +38,8 @@ class CDungeon
 
 	void	IncMonster() { m_iMonsterCount++; sys_log(0, "MonsterCount %d", m_iMonsterCount); }
 	void	DecMonster() { m_iMonsterCount--; CheckEliminated(); }
-	int	CountMonster() { return m_iMonsterCount; }	// ͷ   
-	int	CountRealMonster();				//  ʻ ִ 
+	int	CountMonster() { return m_iMonsterCount; }	// 데이터로 리젠한 몬스터의 수
+	int	CountRealMonster();				// 실제로 맵상에 있는 몬스터
 
 	void	IncPartyMember(LPPARTY pParty, LPCHARACTER ch);
 	void	DecPartyMember(LPPARTY pParty, LPCHARACTER ch);
@@ -103,7 +103,7 @@ class CDungeon
 	void	SetFlag(std::string name, int value);
 	void	SetWarpLocation (long map_index, int x, int y);
 
-	// item group item_vnum item_count .
+	// item group은 item_vnum과 item_count로 구성.
 	typedef std::vector  > ItemGroup;
 	void	CreateItemGroup (std::string& group_name, ItemGroup& item_group);
 	const ItemGroup* GetItemGroup (std::string& group_name);
@@ -142,7 +142,7 @@ class CDungeon
 	bool		m_bExitAllAtEliminate;
 	bool		m_bWarpAtEliminate;
 
-	//   ϴ ġ
+	// 적 전멸시 워프하는 위치
 	int		m_iWarpDelay;
 	long		m_lWarpMapIndex;
 	long		m_lWarpX;
@@ -163,9 +163,9 @@ class CDungeon
 	friend EVENTFUNC(dungeon_exit_all_event);
 	friend EVENTFUNC(dungeon_jump_to_event);
 
-	// Ƽ     ӽ .
-	// m_map_pkParty  νϿ   ٰ ǴϿ,
-	// ӽ÷  Ƽ   ϴ  .
+	// 파티 단위 던전 입장을 위한 임시 변수.
+	// m_map_pkParty는 관리가 부실하여 사용할 수 없다고 판단하여,
+	// 임시로 한 파티에 대한 관리를 하는 변수 생성.
 	
 	LPPARTY m_pParty;
 	public :
diff --git a/src/game/empire_text_convert.h b/src/game/empire_text_convert.h
index 40227ba..0d7bce9 100644
--- a/src/game/empire_text_convert.h
+++ b/src/game/empire_text_convert.h
@@ -1,4 +1,4 @@
-#ifndef __INC_EMPIRE_CHAT_CONVERT
+#ifndef __INC_EMPIRE_CHAT_CONVERT
 #define __INC_EMPIRE_CHAT_CONVERT
 
 bool LoadEmpireTextConvertTable(DWORD dwEmpireID, const char* c_szFileName);
diff --git a/src/game/entity.cpp b/src/game/entity.cpp
index 75af760..61eac7b 100644
--- a/src/game/entity.cpp
+++ b/src/game/entity.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 #include "desc.h"
 #include "sectree_manager.h"
@@ -97,7 +97,7 @@ void CEntity::PacketView(const void * data, int bytes, LPENTITY except)
 
 	FuncPacketView f(data, bytes, except);
 
-	//  ¿  Ŷ  ޴´.
+	// 옵저버 상태에선 내 패킷은 나만 받는다.
 	if (!m_bIsObserver)
 		for_each(m_map_view.begin(), m_map_view.end(), f);
 
diff --git a/src/game/entity.h b/src/game/entity.h
index 93f8b89..9852816 100644
--- a/src/game/entity.h
+++ b/src/game/entity.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_ENTITY_H__
+#ifndef __INC_METIN_II_GAME_ENTITY_H__
 #define __INC_METIN_II_GAME_ENTITY_H__
 
 class SECTREE;
@@ -28,7 +28,7 @@ class CEntity
 		void			ViewCleanup();
 		void			ViewInsert(LPENTITY entity, bool recursive = true);
 		void			ViewRemove(LPENTITY entity, bool recursive = true);
-		void			ViewReencode();	//  Entity Ŷ ٽ .
+		void			ViewReencode();	// 주위 Entity에 패킷을 다시 보낸다.
 
 		int				GetViewAge() const	{ return m_iViewAge;	}
 
diff --git a/src/game/entity_view.cpp b/src/game/entity_view.cpp
index b459485..54b5add 100644
--- a/src/game/entity_view.cpp
+++ b/src/game/entity_view.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "utils.h"
 #include "char.h"
@@ -98,21 +98,21 @@ class CFuncViewInsert
 
 		void operator () (LPENTITY ent)
 		{
-			// Ʈ ƴ  Ÿ Ͽ Ÿ ָ ߰ ʴ´.
+			// 오브젝트가 아닌 것은 거리를 계산하여 거리가 멀면 추가하지 않는다.
 			if (!ent->IsType(ENTITY_OBJECT))
 				if (DISTANCE_APPROX(ent->GetX() - m_me->GetX(), ent->GetY() - m_me->GetY()) > dwViewRange)
 					return;
 
-			//   ߰
+			// 나를 대상에 추가
 			m_me->ViewInsert(ent);
 
-			// Ѵ ij͸
+			// 둘다 캐릭터면
 			if (ent->IsType(ENTITY_CHARACTER) && m_me->IsType(ENTITY_CHARACTER))
 			{
 				LPCHARACTER chMe = (LPCHARACTER) m_me;
 				LPCHARACTER chEnt = (LPCHARACTER) ent;
 
-				//  NPC StateMachine Ų.
+				// 대상이 NPC면 StateMachine을 킨다.
 				if (chMe->IsPC() && !chEnt->IsPC() && !chEnt->IsWarp() && !chEnt->IsGoto())
 					chEnt->StartStateMachine();
 			}
@@ -134,13 +134,13 @@ void CEntity::UpdateSectree()
 
 	++m_iViewAge;
 
-	CFuncViewInsert f(this); //  Ʈ ִ 鿡 ߰
+	CFuncViewInsert f(this); // 나를 섹트리에 있는 사람들에게 추가
 	GetSectree()->ForEachAround(f);
 
 	ENTITY_MAP::iterator it, this_it;
 
 	//
-	// m_map_view ʿ  ༮ 
+	// m_map_view에서 필요 없는 녀석들 지우기
 	// 
 	if (m_bObserverModeChange)
 	{
@@ -155,11 +155,11 @@ void CEntity::UpdateSectree()
 				{
 					LPENTITY ent = this_it->first;
 
-					//    .
+					// 나로 부터 상대방을 지운다.
 					ent->EncodeRemovePacket(this);
 					m_map_view.erase(this_it);
 
-					//    .
+					// 상대로 부터 나를 지운다.
 					ent->ViewRemove(this, false);
 				}
 				else
@@ -167,11 +167,11 @@ void CEntity::UpdateSectree()
 
 					LPENTITY ent = this_it->first;
 
-					//    .
+					// 나로 부터 상대방을 지운다.
 					//ent->EncodeRemovePacket(this);
 					//m_map_view.erase(this_it);
 
-					//    .
+					// 상대로 부터 나를 지운다.
 					//ent->ViewRemove(this, false);
 					EncodeRemovePacket(ent);
 				}
@@ -189,11 +189,11 @@ void CEntity::UpdateSectree()
 				{
 					LPENTITY ent = this_it->first;
 
-					//    .
+					// 나로 부터 상대방을 지운다.
 					ent->EncodeRemovePacket(this);
 					m_map_view.erase(this_it);
 
-					//    .
+					// 상대로 부터 나를 지운다.
 					ent->ViewRemove(this, false);
 				}
 				else
@@ -223,11 +223,11 @@ void CEntity::UpdateSectree()
 				{
 					LPENTITY ent = this_it->first;
 
-					//    .
+					// 나로 부터 상대방을 지운다.
 					ent->EncodeRemovePacket(this);
 					m_map_view.erase(this_it);
 
-					//    .
+					// 상대로 부터 나를 지운다.
 					ent->ViewRemove(this, false);
 				}
 			}
diff --git a/src/game/event.cpp b/src/game/event.cpp
index c8dc4d5..42c7c1e 100644
--- a/src/game/event.cpp
+++ b/src/game/event.cpp
@@ -1,8 +1,8 @@
-/*
+/*
  *    Filename: event.c
- * Description: ̺Ʈ  (timed event)
+ * Description: 이벤트 관련 (timed event)
  *
- *      Author:  (aka. , Cronan), ۿ (aka. myevan, ڷ)
+ *      Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
  */
 #include "stdafx.h"
 
@@ -18,12 +18,12 @@ static ObjectPool event_pool;
 
 static CEventQueue cxx_q;
 
-/* ̺Ʈ ϰ Ѵ */
+/* 이벤트를 생성하고 리턴한다 */
 LPEVENT event_create_ex(TEVENTFUNC func, event_info_data* info, long when)
 {
 	LPEVENT new_event = NULL;
 
-	/* ݵ  pulse ̻ ð  Ŀ θ Ѵ. */
+	/* 반드시 다음 pulse 이상의 시간이 지난 후에 부르도록 한다. */
 	if (when < 1)
 		when = 1;
 
@@ -44,7 +44,7 @@ LPEVENT event_create_ex(TEVENTFUNC func, event_info_data* info, long when)
 	return (new_event);
 }
 
-/* ý  ̺Ʈ Ѵ */
+/* 시스템으로 부터 이벤트를 제거한다 */
 void event_cancel(LPEVENT * ppevent)
 {
 	LPEVENT event;
@@ -69,7 +69,7 @@ void event_cancel(LPEVENT * ppevent)
 		return;
 	}
 
-	// ̹  Ǿ°?
+	// 이미 취소 되었는가?
 	if (!event->q_el)
 	{
 		*ppevent = NULL;
@@ -98,14 +98,14 @@ void event_reset_time(LPEVENT event, long when)
 	}
 }
 
-/* ̺Ʈ  ð  ̺Ʈ Ѵ */
+/* 이벤트를 실행할 시간에 도달한 이벤트들을 실행한다 */
 int event_process(int pulse)
 {
 	long	new_time;
 	int		num_events = 0;
 
-	// event_q  ̺Ʈ ť  ð  pulse    
-	//  ʰ ȴ.
+	// event_q 즉 이벤트 큐의 헤드의 시간보다 현재의 pulse 가 적으면 루프문이 
+	// 돌지 않게 된다.
 	while (pulse >= cxx_q.GetTopKey())
 	{
 		TQueueElement * pElem = cxx_q.Dequeue();
@@ -123,9 +123,9 @@ int event_process(int pulse)
 		cxx_q.Delete(pElem);
 
 		/*
-		 *   ο ð̸   0  Ŭ  ̺Ʈ ٽ ߰Ѵ. 
-		 *   0 ̻   event  Ҵ ޸   ʵ
-		 * Ѵ.
+		 * 리턴 값은 새로운 시간이며 리턴 값이 0 보다 클 경우 이벤트를 다시 추가한다. 
+		 * 리턴 값을 0 이상으로 할 경우 event 에 할당된 메모리 정보를 삭제하지 않도록
+		 * 주의한다.
 		 */
 		the_event->is_processing = TRUE;
 
@@ -156,7 +156,7 @@ int event_process(int pulse)
 	return num_events;
 }
 
-/* ̺Ʈ ð pulse   ش */
+/* 이벤트가 수행시간을 pulse 단위로 리턴해 준다 */
 long event_processing_time(LPEVENT event)
 {
 	long start_time;
@@ -168,7 +168,7 @@ long event_processing_time(LPEVENT event)
 	return (thecore_heart->pulse - start_time);
 }
 
-/* ̺Ʈ  ð pulse   ش */
+/* 이벤트가 남은 시간을 pulse 단위로 리턴해 준다 */
 long event_time(LPEVENT event)
 {
 	long when;
@@ -180,7 +180,7 @@ long event_time(LPEVENT event)
 	return (when - thecore_heart->pulse);
 }
 
-/*  ̺Ʈ Ѵ */
+/* 모든 이벤트를 제거한다 */
 void event_destroy(void)
 {
 	TQueueElement * pElem;
diff --git a/src/game/event.h b/src/game/event.h
index 8a9fccd..15b2c86 100644
--- a/src/game/event.h
+++ b/src/game/event.h
@@ -1,8 +1,8 @@
-/*
+/*
  *    Filename: event.h
- * Description: ̺Ʈ  (timed event)
+ * Description: 이벤트 관련 (timed event)
  *
- *      Author:  (aka. , Cronan), ۿ (aka. myevan, ڷ)
+ *      Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
  */
 #ifndef __INC_LIBTHECORE_EVENT_H__
 #define __INC_LIBTHECORE_EVENT_H__
@@ -81,10 +81,10 @@ extern int		event_count();
 
 #define event_create(func, info, when) event_create_ex(func, info, when)
 extern LPEVENT	event_create_ex(TEVENTFUNC func, event_info_data* info, long when);
-extern void		event_cancel(LPEVENT * event);			// ̺Ʈ 
-extern long		event_processing_time(LPEVENT event);	//  ð 
-extern long		event_time(LPEVENT event);			//  ð 
-extern void		event_reset_time(LPEVENT event, long when);	//  ð  
+extern void		event_cancel(LPEVENT * event);			// 이벤트 취소
+extern long		event_processing_time(LPEVENT event);	// 수행 시간 리턴
+extern long		event_time(LPEVENT event);			// 남은 시간 리턴
+extern void		event_reset_time(LPEVENT event, long when);	// 실행 시간 재 설정
 extern void		event_set_verbose(int level);
 
 extern event_info_data* FindEventInfo(DWORD dwID);
diff --git a/src/game/event_queue.cpp b/src/game/event_queue.cpp
index 8c6d848..d5d29b9 100644
--- a/src/game/event_queue.cpp
+++ b/src/game/event_queue.cpp
@@ -1,8 +1,8 @@
-/*
+/*
  *    Filename: queue.c
- * Description: ť ó
+ * Description: 큐 처리
  *
- *      Author:  (aka. , Cronan), ۿ (aka. myevan, ڷ)
+ *      Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
  */
 #include "stdafx.h"
 
diff --git a/src/game/event_queue.h b/src/game/event_queue.h
index 716d96c..a5d4469 100644
--- a/src/game/event_queue.h
+++ b/src/game/event_queue.h
@@ -1,4 +1,4 @@
-#ifndef __INC_LIBTHECORE_EVENT_QUEUE_H__
+#ifndef __INC_LIBTHECORE_EVENT_QUEUE_H__
 #define __INC_LIBTHECORE_EVENT_QUEUE_H__
 
 #ifdef M2_USE_POOL
diff --git a/src/game/exchange.cpp b/src/game/exchange.cpp
index a59452d..eaee26e 100644
--- a/src/game/exchange.cpp
+++ b/src/game/exchange.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/grid.h"
 #include "utils.h"
 #include "desc.h"
@@ -16,7 +16,7 @@
 
 void exchange_packet(LPCHARACTER ch, BYTE sub_header, bool is_me, DWORD arg1, TItemPos arg2, DWORD arg3, void * pvData = NULL);
 
-// ȯ Ŷ
+// 교환 패킷
 void exchange_packet(LPCHARACTER ch, BYTE sub_header, bool is_me, DWORD arg1, TItemPos arg2, DWORD arg3, void * pvData)
 {
 	if (!ch->GetDesc())
@@ -45,15 +45,15 @@ void exchange_packet(LPCHARACTER ch, BYTE sub_header, bool is_me, DWORD arg1, TI
 	ch->GetDesc()->Packet(&pack_exchg, sizeof(pack_exchg));
 }
 
-// ȯ 
+// 교환을 시작
 bool CHARACTER::ExchangeStart(LPCHARACTER victim)
 {
-	if (this == victim)	// ڱ ڽŰ ȯ Ѵ.
+	if (this == victim)	// 자기 자신과는 교환을 못한다.
 		return false;
 
 	if (IsObserverMode())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿ ȯ   ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("관전 상태에서는 교환을 할 수 없습니다."));
 		return false;
 	}
 
@@ -63,19 +63,19 @@ bool CHARACTER::ExchangeStart(LPCHARACTER victim)
 	//PREVENT_TRADE_WINDOW
 	if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen())
 	{
-		ChatPacket( CHAT_TYPE_INFO, LC_TEXT("ٸ ŷâ  ŷ Ҽ ϴ." ) );
+		ChatPacket( CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열려있을경우 거래를 할수 없습니다." ) );
 		return false;
 	}
 
 	if ( victim->IsOpenSafebox() || victim->GetShopOwner() || victim->GetMyShop() || victim->IsCubeOpen() )
 	{
-		ChatPacket( CHAT_TYPE_INFO, LC_TEXT(" ٸ ŷ̶ ŷ Ҽ ϴ." ) );
+		ChatPacket( CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래중이라 거래를 할수 없습니다." ) );
 		return false;
 	}
 	//END_PREVENT_TRADE_WINDOW
 	int iDist = DISTANCE_APPROX(GetX() - victim->GetX(), GetY() - victim->GetY());
 
-	// Ÿ üũ
+	// 거리 체크
 	if (iDist >= EXCHANGE_MAX_DISTANCE)
 		return false;
 
@@ -90,7 +90,7 @@ bool CHARACTER::ExchangeStart(LPCHARACTER victim)
 
 	if (victim->IsBlockMode(BLOCK_EXCHANGE))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȯ ź Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 교환 거부 상태입니다."));
 		return false;
 	}
 
@@ -143,7 +143,7 @@ bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
 	if (!item_pos.IsValidItemPosition())
 		return false;
 
-	//  ȯ  
+	// 장비는 교환할 수 없음
 	if (item_pos.IsEquipPosition())
 		return false;
 
@@ -154,7 +154,7 @@ bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
 
 	if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE))
 	{
-		m_pOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" dz  ϴ."));
+		m_pOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템을 건네줄 수 없습니다."));
 		return false;
 	}
 
@@ -163,7 +163,7 @@ bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
 		return false;
 	}
 
-	// ̹ ȯâ ߰ ΰ?
+	// 이미 교환창에 추가된 아이템인가?
 	if (item->IsExchanging())
 	{
 		sys_log(0, "EXCHANGE under exchanging");
@@ -212,7 +212,7 @@ bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
 		return true;
 	}
 
-	// ߰  
+	// 추가할 공간이 없음
 	return false;
 }
 
@@ -248,7 +248,7 @@ bool CExchange::AddGold(long gold)
 
 	if (GetOwner()->GetGold() < gold)
 	{
-		//  ִ  .
+		// 가지고 있는 돈이 부족.
 		exchange_packet(GetOwner(), EXCHANGE_SUBHEADER_GC_LESS_GOLD, 0, 0, NPOS, 0);
 		return false;
 	}
@@ -271,7 +271,7 @@ bool CExchange::AddGold(long gold)
 	return true;
 }
 
-//   ִ, ȯϷ   ִ Ȯ Ѵ.
+// 돈이 충분히 있는지, 교환하려는 아이템이 실제로 있는지 확인 한다.
 bool CExchange::Check(int * piItemCount)
 {
 	if (GetOwner()->GetGold() < m_lGold)
@@ -325,10 +325,10 @@ bool CExchange::CheckSpace()
 		s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
 	}
 
-	// ...   ... ȥ κ  κ     ߸̴ Ф
+	// 아... 뭔가 개병신 같지만... 용혼석 인벤을 노멀 인벤 보고 따라 만든 내 잘못이다 ㅠㅠ
 	static std::vector  s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
 	
-	// ϴ ȥ ȯ  ɼ ũǷ, ȥ κ  ȥ   ϵ Ѵ.
+	// 일단 용혼석을 교환하지 않을 가능성이 크므로, 용혼석 인벤 복사는 용혼석이 있을 때 하도록 한다.
 	bool bDSInitialized = false;
 	
 	for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
@@ -412,7 +412,7 @@ bool CExchange::CheckSpace()
 	return true;
 }
 
-// ȯ  (۰    ű)
+// 교환 끝 (아이템과 돈 등을 실제로 옮긴다)
 bool CExchange::Done()
 {
 	int		empty_pos, i;
@@ -494,7 +494,7 @@ bool CExchange::Done()
 	return true;
 }
 
-// ȯ 
+// 교환을 동의
 bool CExchange::Accept(bool bAccept)
 {
 	if (m_bAccept == bAccept)
@@ -502,7 +502,7 @@ bool CExchange::Accept(bool bAccept)
 
 	m_bAccept = bAccept;
 
-	//    Ƿ ȯ 
+	// 둘 다 동의 했으므로 교환 성립
 	if (m_bAccept && GetCompany()->m_bAccept)
 	{
 		int	iItemCount;
@@ -514,36 +514,36 @@ bool CExchange::Accept(bool bAccept)
 		victim->SetExchangeTime();		
 		//END_PREVENT_PORTAL_AFTER_EXCHANGE
 
-		// exchange_check  ȯ ۵ ڸ ֳ Ȯϰ,
-		// ũ  ֳ ȮѴ, ι° ڷ ȯ  
-		//  Ѵ.
+		// exchange_check 에서는 교환할 아이템들이 제자리에 있나 확인하고,
+		// 엘크도 충분히 있나 확인한다, 두번째 인자로 교환할 아이템 개수
+		// 를 리턴한다.
 		if (!Check(&iItemCount))
 		{
-			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϰų  ڸ ϴ."));
-			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϰų  ڸ ϴ."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈이 부족하거나 아이템이 제자리에 없습니다."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방의 돈이 부족하거나 아이템이 제자리에 없습니다."));
 			goto EXCHANGE_END;
 		}
 
-		//      ǰ  ڸ ֳ ȮѴ.
+		// 리턴 받은 아이템 개수로 상대방의 소지품에 남은 자리가 있나 확인한다.
 		if (!CheckSpace())
 		{
-			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ǰ   ϴ."));
-			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방의 소지품에 빈 공간이 없습니다."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지품에 빈 공간이 없습니다."));
 			goto EXCHANGE_END;
 		}
 
-		// 浵 ..
+		// 상대방도 마찬가지로..
 		if (!GetCompany()->Check(&iItemCount))
 		{
-			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϰų  ڸ ϴ."));
-			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϰų  ڸ ϴ."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈이 부족하거나 아이템이 제자리에 없습니다."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방의 돈이 부족하거나 아이템이 제자리에 없습니다."));
 			goto EXCHANGE_END;
 		}
 
 		if (!GetCompany()->CheckSpace())
 		{
-			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ǰ   ϴ."));
-			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방의 소지품에 빈 공간이 없습니다."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지품에 빈 공간이 없습니다."));
 			goto EXCHANGE_END;
 		}
 
@@ -557,17 +557,17 @@ bool CExchange::Accept(bool bAccept)
 
 		if (Done())
 		{
-			if (m_lGold) //    
+			if (m_lGold) // 돈이 있을 떄만 저장
 				GetOwner()->Save();
 
 			if (GetCompany()->Done())
 			{
-				if (GetCompany()->m_lGold) //    
+				if (GetCompany()->m_lGold) // 돈이 있을 때만 저장
 					victim->Save();
 
 				// INTERNATIONAL_VERSION
-				GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ԰ ȯ  Ǿϴ."), victim->GetName());
-				victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ԰ ȯ  Ǿϴ."), GetOwner()->GetName());
+				GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님과의 교환이 성사 되었습니다."), victim->GetName());
+				victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님과의 교환이 성사 되었습니다."), GetOwner()->GetName());
 				// END_OF_INTERNATIONAL_VERSION
 			}
 		}
@@ -578,14 +578,14 @@ EXCHANGE_END:
 	}
 	else
 	{
-		// ƴϸ accept  Ŷ .
+		// 아니면 accept에 대한 패킷을 보내자.
 		exchange_packet(GetOwner(), EXCHANGE_SUBHEADER_GC_ACCEPT, true, m_bAccept, NPOS, 0);
 		exchange_packet(GetCompany()->GetOwner(), EXCHANGE_SUBHEADER_GC_ACCEPT, false, m_bAccept, NPOS, 0);
 		return true;
 	}
 }
 
-// ȯ 
+// 교환 취소
 void CExchange::Cancel()
 {
 	exchange_packet(GetOwner(), EXCHANGE_SUBHEADER_GC_END, 0, 0, NPOS, 0);
diff --git a/src/game/exchange.h b/src/game/exchange.h
index d30e97a..bbd39eb 100644
--- a/src/game/exchange.h
+++ b/src/game/exchange.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_EXCHANGE_H__
+#ifndef __INC_METIN_II_GAME_EXCHANGE_H__
 #define __INC_METIN_II_GAME_EXCHANGE_H__
 
 class CGrid;
@@ -35,7 +35,7 @@ class CExchange
 		bool		CheckSpace();
 
 	private:
-		CExchange *	m_pCompany;	//  CExchange 
+		CExchange *	m_pCompany;	// 상대방의 CExchange 포인터
 
 		LPCHARACTER	m_pOwner;
 
diff --git a/src/game/fifo_allocator.h b/src/game/fifo_allocator.h
index 294fa6a..28ee2b6 100644
--- a/src/game/fifo_allocator.h
+++ b/src/game/fifo_allocator.h
@@ -1,4 +1,4 @@
-#ifndef _FIFO_ALLOCATOR_H_
+#ifndef _FIFO_ALLOCATOR_H_
 #define _FIFO_ALLOCATOR_H_
 
 #include 
diff --git a/src/game/file_loader.cpp b/src/game/file_loader.cpp
index 0e51cda..1c3b363 100644
--- a/src/game/file_loader.cpp
+++ b/src/game/file_loader.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "file_loader.h"
 
 CMemoryTextFileLoader::CMemoryTextFileLoader()
@@ -48,7 +48,7 @@ bool CMemoryTextFileLoader::SplitLine(DWORD dwLine, std::vector* ps
 
 		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/game/file_loader.h b/src/game/file_loader.h
index 79c3e92..999cfe9 100644
--- a/src/game/file_loader.h
+++ b/src/game/file_loader.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_COMMON_FILE_LOADER_H__
+#ifndef __INC_METIN_II_COMMON_FILE_LOADER_H__
 #define __INC_METIN_II_COMMON_FILE_LOADER_H__
 
 typedef std::vector< std::string > TTokenVector;
diff --git a/src/game/fishing.cpp b/src/game/fishing.cpp
index b240401..ed8725c 100644
--- a/src/game/fishing.cpp
+++ b/src/game/fishing.cpp
@@ -1,4 +1,4 @@
-//#define __FISHING_MAIN__
+//#define __FISHING_MAIN__
 #include "stdafx.h"
 #include "constants.h"
 #include "fishing.h"
@@ -107,79 +107,79 @@ namespace fishing
 	SFishInfo fish_info[MAX_FISH] = { { "\0", }, };
 	/*
 	   {
-	   { "",		00000, 00000, 00000, {  750, 1750, 2750 },   10, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, { 0,           }, 
+	   { "꽝",		00000, 00000, 00000, {  750, 1750, 2750 },   10, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, { 0,           }, 
 	   {0, } },
-	   { "ݹ",	50002, 00000, 00000, {   50,   50,    0 },  200, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, { 0,           }, 
+	   { "금반지",	50002, 00000, 00000, {   50,   50,    0 },  200, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, { 0,           }, 
 	   {0, } },
-	   { "Ƕ",	27802, 00000, 00000, { 2100, 1500,   50 },   10, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_EASY,   {500, 550, 600}, 
+	   { "피라미",	27802, 00000, 00000, { 2100, 1500,   50 },   10, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_EASY,   {500, 550, 600}, 
 	   {0, } },
-	   { "ؾ",	27803, 27833, 27863, { 2100, 1500,  100 },   13, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_EASY,   {1000,2500,2800},
+	   { "붕어",	27803, 27833, 27863, { 2100, 1500,  100 },   13, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_EASY,   {1000,2500,2800},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27804, 27834, 27864, { 1100, 1300,  150 },   16, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, {2000,3500,3800},
+	   { "쏘가리",	27804, 27834, 27864, { 1100, 1300,  150 },   16, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, {2000,3500,3800},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "ôؾ",	27805, 27835, 27865, { 1100, 1100,  200 },   20, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW, {3030,3500,4300},
+	   { "월척붕어",	27805, 27835, 27865, { 1100, 1100,  200 },   20, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW, {3030,3500,4300},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "׾",	27806, 27836, 27866, { 1100,  500,  300 },   26, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, {4000,6000,10000},
+	   { "잉어",	27806, 27836, 27866, { 1100,  500,  300 },   26, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL, {4000,6000,10000},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27807, 27837, 27867, { 1100,  450,  400 },   33, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{6000,8000,10000},
+	   { "연어",	27807, 27837, 27867, { 1100,  450,  400 },   33, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{6000,8000,10000},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27808, 27838, 27868, {  200,  400,  500 },   42, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1500,3000,3800},
+	   { "향어",	27808, 27838, 27868, {  200,  400,  500 },   42, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1500,3000,3800},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "۾",	27809, 27839, 27869, {  200,  300,  700 },   54, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,7000,8000},
+	   { "송어",	27809, 27839, 27869, {  200,  300,  700 },   54, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,7000,8000},
 	   {USED_NONE, USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "ι",	27810, 27840, 27870, {    0,  270, 1000 },   70, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{4000,5000,6000},
+	   { "민물장어",	27810, 27840, 27870, {    0,  270, 1000 },   70, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{4000,5000,6000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "۾",	27811, 27841, 27871, {    0,  200, 1000 },   91, FISHING_LIMIT_APPEAR,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,7000,8000},
+	   { "무지개송어",	27811, 27841, 27871, {    0,  200, 1000 },   91, FISHING_LIMIT_APPEAR,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,7000,8000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "۾",	27812, 27842, 27872, {    0,  160, 1000 },  118, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{4000,6000,7000},
+	   { "강송어",	27812, 27842, 27872, {    0,  160, 1000 },  118, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{4000,6000,7000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27813, 27843, 27873, {    0,  130,  700 },  153, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{4000,6000,10000},
+	   { "러드",	27813, 27843, 27873, {    0,  130,  700 },  153, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{4000,6000,10000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "ġ",	27814, 27844, 27874, {    0,  100,  400 },  198, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3000,4000,5000},
+	   { "퍼치",	27814, 27844, 27874, {    0,  100,  400 },  198, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3000,4000,5000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "ġ",	27815, 27845, 27875, {    0,   50,  300 },  257, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3500,5500,8000},
+	   { "텐치",	27815, 27845, 27875, {    0,   50,  300 },  257, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3500,5500,8000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "ޱ",	27816, 27846, 27876, {    0,   30,  100 },  334, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3000,5000,10000},
+	   { "메기",	27816, 27846, 27876, {    0,   30,  100 },  334, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{3000,5000,10000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "̲ٶ",	27817, 27847, 27877, {    0,   10,   64 },  434, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{1800,2200,3000},
+	   { "미꾸라지",	27817, 27847, 27877, {    0,   10,   64 },  434, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{1800,2200,3000},
 	   {USED_SHELLFISH, USED_NONE, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27818, 27848, 27878, {    0,    0,   15 },  564, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,8000,10000},
+	   { "백련",	27818, 27848, 27878, {    0,    0,   15 },  564, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{5000,8000,10000},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27819, 27849, 27879, {    0,    0,    9 },  733, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1500,3000,3800},
+	   { "은어",	27819, 27849, 27879, {    0,    0,    9 },  733, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1500,3000,3800},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27820, 27850, 27880, {    0,    0,    6 },  952, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{1500,3000,3800},
+	   { "빙어",	27820, 27850, 27880, {    0,    0,    6 },  952, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_QUICK,{1500,3000,3800},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "",	27821, 27851, 27881, {    0,    0,    3 }, 1237, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1000,1500,2000},
+	   { "쉬리",	27821, 27851, 27881, {    0,    0,    3 }, 1237, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_NORMAL,{1000,1500,2000},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "׾",	27822, 27852, 27882, {    0,    0,    2 }, 1608, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW,{4000,6000,10000},
+	   { "비늘잉어",	27822, 27852, 27882, {    0,    0,    2 }, 1608, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW,{4000,6000,10000},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "Ȳݺؾ",	27823, 27853, 27883, {    0,    0,    1 }, 2090, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW,{1000,3000,3500},
+	   { "황금붕어",	27823, 27853, 27883, {    0,    0,    1 }, 2090, FISHING_LIMIT_NONE,	{  0,   0,   0}, FISHING_TIME_SLOW,{1000,3000,3500},
 	   {USED_SHELLFISH, USED_NONE, USED_WATER_STONE, USED_TREASURE_MAP, USED_NONE, USED_NONE, USED_EARTHWARM, USED_NONE,USED_NONE,  USED_NONE } },
-	   { "Ż",     70201, 00000, 00000, { 5,    5,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "탈색약",     70201, 00000, 00000, { 5,    5,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "()",  70202, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "염색약(흰색)",  70202, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "(ݻ)",  70203, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "염색약(금색)",  70203, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "()",70204, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "염색약(빨간색)",70204, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "()",  70205, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "염색약(갈색)",  70205, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "()",70206, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "염색약(검은색)",70206, 00000, 00000, { 15,  15,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { " ", 70048, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "은둔자의 망토", 70048, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { " ",   70049, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "행운의 반지",   70049, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { " ǥ",   70050, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "선왕의 증표",   70050, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { " 尩",   70051, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
+	   { "선왕의 장갑",   70051, 00000, 00000, {  8,   8,  0 },   60, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_NORMAL, {0,           },
 	   {0,	}},
-	   { "ݵ",	   80008, 00000, 00000, { 20,  20,  0 },  250, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_SLOW,    {0,           },
+	   { "금덩어리",	   80008, 00000, 00000, { 20,  20,  0 },  250, FISHING_LIMIT_NONE,    {  0,   0,   0}, FISHING_TIME_SLOW,    {0,           },
 	   {0, } },
-	{ "",	   50009, 00000, 00000, {300, 300, 0, },   70, FISHING_LIMIT_NONE,    { 0, 0, 0}, FISHING_TIME_NORMAL, {0,	}, {0, } },
+	{ "은열쇠",	   50009, 00000, 00000, {300, 300, 0, },   70, FISHING_LIMIT_NONE,    { 0, 0, 0}, FISHING_TIME_NORMAL, {0,	}, {0, } },
 
-	{ "ݿ",	   50008, 00000, 00000, {110, 110, 0, },  100, FISHING_LIMIT_NONE,    { 0, 0, 0}, FISHING_TIME_NORMAL, {0,	}, {0, } },
+	{ "금열쇠",	   50008, 00000, 00000, {110, 110, 0, },  100, FISHING_LIMIT_NONE,    { 0, 0, 0}, FISHING_TIME_NORMAL, {0,	}, {0, } },
 };
 	*/
 void Initialize()
@@ -205,7 +205,7 @@ void Initialize()
 	{
 		SendLog("error! cannot open fishing.txt");
 
-		//  ̸   Ѵ.
+		// 백업에 이름이 있으면 리스토어 한다.
 		if (*fish_info_bak[0].name)
 		{
 			thecore_memcpy(fish_info, fish_info_bak, sizeof(fish_info));
@@ -313,7 +313,7 @@ void Initialize()
 				fish_info[i].length_range[2]);
 	}
 
-	// Ȯ 
+	// 확률 계산
 	for (int j = 0; j < MAX_PROB; ++j)
 	{
 		g_prob_accumulate[j][0] = fish_info[0].prob[j];
@@ -366,7 +366,7 @@ int DetermineFish(LPCHARACTER ch)
 
 	// ADD_PREMIUM
 	if (ch->GetPremiumRemainSeconds(PREMIUM_FISH_MIND) > 0 ||
-			ch->IsEquipUniqueGroup(UNIQUE_GROUP_FISH_MIND)) //     Ȯ 
+			ch->IsEquipUniqueGroup(UNIQUE_GROUP_FISH_MIND)) // 월간어심 착용시 고급 물고기 확률 상승
 	{
 		if (quest::CQuestManager::instance().GetEventFlag("manwoo") != 0)
 			prob_idx = 3;
@@ -394,7 +394,7 @@ int DetermineFish(LPCHARACTER ch)
 			return 0;
 	}
 
-	if (g_iUseLocale) // ߱ ݵ, ݿ,   ʰ 
+	if (g_iUseLocale) // 중국에서는 금덩어리, 금열쇠, 은열쇠 나오지 않게 함
 	{
 		DWORD vnum = fish_info[fish_idx].vnum;
 
@@ -437,26 +437,26 @@ void FishingPractice(LPCHARACTER ch)
 	LPITEM rod = ch->GetWear(WEAR_WEAPON);
 	if (rod && rod->GetType() == ITEM_ROD)
 	{
-		// ִ õ ƴ  ô 
+		// 최대 수련도가 아닌 경우 낚시대 수련
 		if ( rod->GetRefinedVnum()>0 && rod->GetSocket(0) < rod->GetValue(2) && number(1,rod->GetValue(1))==1 )
 		{
 			rod->SetSocket(0, rod->GetSocket(0) + 1);
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô õ Ͽϴ! (%d/%d)"),rod->GetSocket(0), rod->GetValue(2));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시대의 수련도가 증가하였습니다! (%d/%d)"),rod->GetSocket(0), rod->GetValue(2));
 			if (rod->GetSocket(0) == rod->GetValue(2))
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô밡 ִ õ Ͽϴ."));
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("θ    ô ׷̵   ֽϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("낚시대가 최대 수련도에 도달하였습니다."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("어부를 통해 다음 레벨의 낚시대로 업그레이드 할 수 있습니다."));
 			}
 		}
 	}
-	// ̳ 
+	// 미끼를 뺀다
 	rod->SetSocket(2, 0);
 }
 
 bool PredictFish(LPCHARACTER ch)
 {
 	// ADD_PREMIUM
-	// ȯ
+	// 어심환
 	if (ch->FindAffect(AFFECT_FISH_MIND_PILL) || 
 			ch->GetPremiumRemainSeconds(PREMIUM_FISH_MIND) > 0 ||
 			ch->IsEquipUniqueGroup(UNIQUE_GROUP_FISH_MIND))
@@ -491,7 +491,7 @@ EVENTFUNC(fishing_event)
 
 	switch (info->step)
 	{
-		case 0:	// 鸮 Ǵ 丸 ư
+		case 0:	// 흔들리기 또는 떡밥만 날아감
 			++info->step;
 
 			//info->ch->Motion(MOTION_FISHING_SIGN);
@@ -600,7 +600,7 @@ int GetFishLength(int fish_id)
 
 void Take(fishing_event_info* info, LPCHARACTER ch)
 {
-	if (info->step == 1)	// Ⱑ ɸ ¸..
+	if (info->step == 1)	// 고기가 걸린 상태면..
 	{
 		long ms = (long) ((get_dword_time() - info->hang_time));
 		DWORD item_vnum = 0;
@@ -611,10 +611,10 @@ void Take(fishing_event_info* info, LPCHARACTER ch)
 
 		switch (ret)
 		{
-			case -2: //   
-			case -3: // ̵  
-			case -1: // ð Ȯ  
-				//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ⱑ ̳ ԰ ΰ Ĩϴ."));
+			case -2: // 잡히지 않은 경우
+			case -3: // 난이도 때문에 실패
+			case -1: // 시간 확률 때문에 실패
+				//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("고기가 미끼만 빼먹고 잽싸게 도망칩니다."));
 				{
 					int map_idx = ch->GetMapIndex();
 					int prob_idx = GetProbIndexByMapIndex(map_idx);
@@ -630,7 +630,7 @@ void Take(fishing_event_info* info, LPCHARACTER ch)
 				break;
 
 			case 0:
-				//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ⱑ ϴ! (%s)"), fish_info[info->fish_id].name);
+				//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("고기가 잡혔습니다! (%s)"), fish_info[info->fish_id].name);
 				if (item_vnum)
 				{
 					FishingSuccess(ch);
@@ -647,12 +647,12 @@ void Take(fishing_event_info* info, LPCHARACTER ch)
 						item->SetSocket(0,GetFishLength(info->fish_id));
 						if (test_server)
 						{
-							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹   ̴ %.2fcm"), item->GetSocket(0)/100.f);
+							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이번에 잡은 물고기의 길이는 %.2fcm"), item->GetSocket(0)/100.f);
 						}
 
 						if (quest::CQuestManager::instance().GetEventFlag("fishevent") > 0 && (info->fish_id == 5 || info->fish_id == 6))
 						{
-							// ̺Ʈ ̹Ƿ Ѵ.
+							// 이벤트 중이므로 기록한다.
 
 							TPacketGDHighscore p;
 							p.dwPID = ch->GetPlayerID();
@@ -660,11 +660,11 @@ void Take(fishing_event_info* info, LPCHARACTER ch)
 
 							if (info->fish_id == 5)
 							{
-								strlcpy(p.szBoard, LC_TEXT("̺Ʈôؾ"), sizeof(p.szBoard));
+								strlcpy(p.szBoard, LC_TEXT("낚시이벤트월척붕어"), sizeof(p.szBoard));
 							}
 							else if (info->fish_id == 6)
 							{
-								strlcpy(p.szBoard, LC_TEXT("̺Ʈ׾"), sizeof(p.szBoard));
+								strlcpy(p.szBoard, LC_TEXT("낚시이벤트잉어"), sizeof(p.szBoard));
 							}
 
 							db_clientdesc->DBPacket(HEADER_GD_HIGHSCORE_REGISTER, 0, &p, sizeof(TPacketGDHighscore));
@@ -711,7 +711,7 @@ void Take(fishing_event_info* info, LPCHARACTER ch)
 				info->fish_id,
 				GetFishingLevel(ch),
 				7000);
-		//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ⱑ ̳ ԰ ΰ Ĩϴ."));
+		//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("고기가 미끼만 빼먹고 잽싸게 도망칩니다."));
 		FishingFail(ch);
 	}
 	else
@@ -749,16 +749,16 @@ void Simulation(int level, int count, int prob_idx, LPCHARACTER ch)
 	}
 
 	for (std::map::iterator it = fished.begin(); it != fished.end(); ++it)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s : %d "), it->first.c_str(), it->second);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s : %d 마리"), it->first.c_str(), it->second);
 
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d  %d  "), fished.size(), total_count);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 종류 %d 마리 낚음"), fished.size(), total_count);
 }
 
 void UseFish(LPCHARACTER ch, LPITEM item)
 {
 	int idx = item->GetVnum() - fish_info[2].vnum+2;
 
-	// Ƕ Ұ, ִ° ƴѰ Ұ
+	// 피라미 사용불가, 살아있는게 아닌건 사용불가
 
 	if (idx<=1 || idx >= MAX_FISH)
 		return;
@@ -769,12 +769,12 @@ void UseFish(LPCHARACTER ch, LPITEM item)
 
 	if (r >= 4001)
 	{
-		//  
+		// 죽은 물고기
 		ch->AutoGiveItem(fish_info[idx].dead_vnum);
 	}
 	else if (r >= 2001)
 	{
-		// 
+		// 생선뼈
 		ch->AutoGiveItem(FISH_BONE_VNUM);
 	}
 	else
@@ -788,7 +788,7 @@ void UseFish(LPCHARACTER ch, LPITEM item)
 			case USED_TREASURE_MAP:	// 3
 			case USED_NONE:		// 0
 			case USED_WATER_STONE:	// 2
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ⱑ   ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("고기가 흔적도 없이 사라집니다."));
 				break;
 
 			case USED_SHELLFISH:	// 1
@@ -797,12 +797,12 @@ void UseFish(LPCHARACTER ch, LPITEM item)
 					if ( number(0, 2) != 2 ) return;
 				}
 
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ  Խϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("배 속에서 조개가 나왔습니다."));
 				ch->AutoGiveItem(SHELLFISH_VNUM);
 				break;
 
 			case USED_EARTHWARM:	// 4
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ ̰ Խϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("배 속에서 지렁이가 나왔습니다."));
 				ch->AutoGiveItem(EARTHWORM_VNUM);
 				break;
 
@@ -833,7 +833,7 @@ void Grill(LPCHARACTER ch, LPITEM item)
 
 	int count = item->GetCount();
 
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ϴ."), item->GetName());
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s를 구웠습니다."), item->GetName());
 	item->SetCount(0);
 	ch->AutoGiveItem(fish_info[idx].grill_vnum, count);
 }
@@ -878,14 +878,14 @@ int RealRefineRod(LPCHARACTER ch, LPITEM item)
 		if (pkNewItem)
 		{
 			BYTE bCell = rod->GetCell();
-			// ô  
+			// 낚시대 개량 성공
 			ITEM_MANAGER::instance().RemoveItem(rod, "REMOVE (REFINE FISH_ROD)");
 			pkNewItem->AddToCharacter(ch, TItemPos (INVENTORY, bCell)); 
 			LogManager::instance().ItemLog(ch, pkNewItem, "REFINE FISH_ROD SUCCESS", pkNewItem->GetName());
 			return 1;
 		}
 
-		// ô  
+		// 낚시대 개량 실패
 		return 2;
 	}
 	else
@@ -896,14 +896,14 @@ int RealRefineRod(LPCHARACTER ch, LPITEM item)
 		if (pkNewItem)
 		{
 			BYTE bCell = rod->GetCell();
-			// ô  
+			// 낚시대 개량에 성공
 			ITEM_MANAGER::instance().RemoveItem(rod, "REMOVE (REFINE FISH_ROD)");
 			pkNewItem->AddToCharacter(ch, TItemPos(INVENTORY, bCell)); 
 			LogManager::instance().ItemLog(ch, pkNewItem, "REFINE FISH_ROD FAIL", pkNewItem->GetName());
 			return 0;
 		}
 
-		// ô  
+		// 낚시대 개량 실패
 		return 2;
 	}
 }
diff --git a/src/game/fishing.h b/src/game/fishing.h
index 90e8484..7ed0003 100644
--- a/src/game/fishing.h
+++ b/src/game/fishing.h
@@ -1,4 +1,4 @@
-#ifndef __INC_FISHING_H
+#ifndef __INC_FISHING_H
 #define __INC_FISHING_H
 
 #include "item.h"
diff --git a/src/game/gm.cpp b/src/game/gm.cpp
index e9bdf55..5b15a04 100644
--- a/src/game/gm.cpp
+++ b/src/game/gm.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "gm.h"
 #include "locale_service.h"
@@ -65,7 +65,7 @@ BYTE gm_new_get_level( const char * name, const char * host, const char* account
 		return GM_PLAYER;
 
 	// GERMAN_GM_NOT_CHECK_HOST
-	//   ȣƮ üũ  ʴ´.
+	// 독일 버전은 호스트 체크를 하지 않는다.
 	if ( LC_IsEurope() && !LC_IsTaiwan() || LC_IsSingapore() )
 	{
 	    if (account)
diff --git a/src/game/gm.h b/src/game/gm.h
index b881d09..6f4a7ea 100644
--- a/src/game/gm.h
+++ b/src/game/gm.h
@@ -1,4 +1,4 @@
-extern void gm_insert(const char * name, BYTE level);
+extern void gm_insert(const char * name, BYTE level);
 extern BYTE gm_get_level(const char * name, const char * host = NULL, const char * account = NULL);
 extern void gm_host_insert(const char * host);
 extern void gm_new_clear();
diff --git a/src/game/group_text_parse_tree.cpp b/src/game/group_text_parse_tree.cpp
index ff5d227..25d6e24 100644
--- a/src/game/group_text_parse_tree.cpp
+++ b/src/game/group_text_parse_tree.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/stl.h"
 #include "group_text_parse_tree.h"
 
@@ -200,7 +200,7 @@ bool CGroupNode::GetRow(const std::string & c_rstrRowKey, OUT const CGroupNode::
 	return true;
 }
 
-// , idx txt    .
+// 참고로, idx랑 txt에 쓰여진 순서랑 관계 없음.
 bool CGroupNode::GetRow(int idx, OUT const CGroupNode::CGroupNodeRow ** ppRow) const
 {
 	if (idx >= m_map_rows.size())
@@ -223,7 +223,7 @@ bool CGroupNode::GetGroupRow(const std::string& stGroupName, const std::string&
 		if (pChildGroup->GetRow(stRow, ppRow))
 			return true;
 	}
-	// default group 캽.
+	// default group을 살펴봄.
 	pChildGroup = GetChildNode("default");
 	if (NULL != pChildGroup)
 	{
diff --git a/src/game/group_text_parse_tree.h b/src/game/group_text_parse_tree.h
index fbc8f1f..95419d9 100644
--- a/src/game/group_text_parse_tree.h
+++ b/src/game/group_text_parse_tree.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GROUP_TEXT_PARSE_TREE_H__
+#ifndef __INC_METIN_II_GROUP_TEXT_PARSE_TREE_H__
 #define __INC_METIN_II_GROUP_TEXT_PARSE_TREE_H__
 
 #include "../../common/d3dtype.h"
@@ -45,15 +45,15 @@ public:
 	int GetRowCount();
 	
 	template 
-	bool GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const;	// n°(map ִ  , txt ʹ  ) row Ư ÷  ȯϴ Լ. 
-																				// ̱ , Ǹ  Լ.
+	bool GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const;	// n번째(map에 들어있는 순서일 뿐, txt의 순서와는 관계 없음) row의 특정 컬럼의 값을 반환하는 함수. 
+																				// 이질적이긴 하지만, 편의를 위한 함수.
 	template 
 	bool GetValue(const std::string & c_rstrRowKey, const std::string & c_rstrColKey, T& tValue) const;
 	template 
 	bool GetValue(const std::string & c_rstrRowKey, int index, T& tValue) const;
 
 	bool GetRow(const std::string & c_rstrKey, OUT const CGroupNodeRow ** ppRow) const;
-	// , idx txt    .
+	// 참고로, idx랑 txt에 쓰여진 순서랑 관계 없음.
 	bool GetRow(int idx, OUT const CGroupNodeRow ** ppRow) const;
 	bool GetGroupRow(const std::string& stGroupName, const std::string& stRow, OUT const CGroupNode::CGroupNodeRow ** ppRow) const;
 
@@ -184,7 +184,7 @@ bool CGroupNode::GetGroupValue(const std::string& stGroupName, const std::string
 		if (pChildGroup->GetValue(stRow, iCol, tValue))
 			return true;
 	}
-	// default group 캽.
+	// default group을 살펴봄.
 	pChildGroup = GetChildNode("default");
 	if (NULL != pChildGroup)
 	{
@@ -203,7 +203,7 @@ bool CGroupNode::GetGroupValue(const std::string& stGroupName, const std::string
 		if (pChildGroup->GetValue(stRow, stCol, tValue))
 			return true;
 	}
-	// default group 캽.
+	// default group을 살펴봄.
 	pChildGroup = GetChildNode("default");
 	if (NULL != pChildGroup)
 	{
diff --git a/src/game/guild.cpp b/src/game/guild.cpp
index 594072e..1e1a771 100644
--- a/src/game/guild.cpp
+++ b/src/game/guild.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "char.h"
@@ -63,12 +63,12 @@ CGuild::CGuild(TGuildCreateParameter & cp)
 
 	strlcpy(m_data.name, cp.name, sizeof(m_data.name));
 	m_data.master_pid = cp.master->GetPlayerID();
-	strlcpy(m_data.grade_array[0].grade_name, LC_TEXT(""), sizeof(m_data.grade_array[0].grade_name));
+	strlcpy(m_data.grade_array[0].grade_name, LC_TEXT("길드장"), sizeof(m_data.grade_array[0].grade_name));
 	m_data.grade_array[0].auth_flag = GUILD_AUTH_ADD_MEMBER | GUILD_AUTH_REMOVE_MEMBER | GUILD_AUTH_NOTICE | GUILD_AUTH_USE_SKILL;
 
 	for (int i = 1; i < GUILD_GRADE_COUNT; ++i)
 	{
-		strlcpy(m_data.grade_array[i].grade_name, LC_TEXT(""), sizeof(m_data.grade_array[i].grade_name));
+		strlcpy(m_data.grade_array[i].grade_name, LC_TEXT("길드원"), sizeof(m_data.grade_array[i].grade_name));
 		m_data.grade_array[i].auth_flag = 0;
 	}
 
@@ -418,7 +418,7 @@ void CGuild::SendListPacket(LPCHARACTER ch)
 	   Count (byte)
 	   [
 	   ...
-	   name_flag 1 - ̸  Ⱥ
+	   name_flag 1 - 이름을 보내느냐 안보내느냐
 	   name CHARACTER_NAME_MAX_LEN+1
 	   ] * Count
 
@@ -561,7 +561,7 @@ void CGuild::LoadGuildMemberData(SQLMsg* pmsg)
 void CGuild::LoadGuildGradeData(SQLMsg* pmsg)
 {
 	/*
-    // 15 ƴ ɼ 
+    // 15개 아닐 가능성 존재
 	if (pmsg->Get()->iNumRows != 15)
 	{
 		sys_err("Query failed: getting guild grade data. GuildID(%d)", GetID());
@@ -700,7 +700,7 @@ void CGuild::__P2PUpdateGrade(SQLMsg* pmsg)
 
 		grade--;
 
-		//  Ī  ٸٸ Ʈ
+		// 등급 명칭이 현재와 다르다면 업데이트
 		if (0 != strcmp(m_data.grade_array[grade].grade_name, name))
 		{
 			strlcpy(m_data.grade_array[grade].grade_name, name, sizeof(m_data.grade_array[grade].grade_name));
@@ -922,7 +922,7 @@ bool CGuild::OfferExp(LPCHARACTER ch, int amount)
 
 	if (ch->GetExp() < (DWORD) amount)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ϰ ϴ ġ  ġ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 제공하고자 하는 경험치가 남은 경험치보다 많습니다."));
 		return false;
 	}
 
@@ -1017,7 +1017,7 @@ void CGuild::AddComment(LPCHARACTER ch, const std::string& str)
 
 	if (ch->IncreaseChatCounter() >= 2) // Guild Comment Flood Exploit fix
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 		return;
 	}
 
@@ -1039,7 +1039,7 @@ void CGuild::DeleteComment(LPCHARACTER ch, DWORD comment_id)
 		pmsg = DBManager::instance().DirectQuery("DELETE FROM guild_comment%s WHERE id = %u AND guild_id = %u AND name = '%s'",get_table_postfix(), comment_id, m_data.guild_id, ch->GetName());
 
 	if (pmsg->Get()->uiAffectedRows == 0 || pmsg->Get()->uiAffectedRows == (uint32_t)-1)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 삭제할 수 없는 글입니다."));
 	else
 		RefreshCommentForce(ch->GetPlayerID());
 
@@ -1092,7 +1092,7 @@ void CGuild::RefreshCommentForce(DWORD player_id)
 		d->BufferedPacket(szName, sizeof(szName));
 
 		if (i == pmsg->Get()->uiNumRows - 1)
-			d->Packet(szContent, sizeof(szContent)); //  ̸ 
+			d->Packet(szContent, sizeof(szContent)); // 마지막 줄이면 보내기
 		else
 			d->BufferedPacket(szContent, sizeof(szContent));
 	}
@@ -1271,7 +1271,7 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 
 	if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
 	{
-		// ̹ ɷ Ƿ  .
+		// 이미 걸려 있으므로 사용하지 않음.
 		if (ch->FindAffect(pkSk->dwVnum))
 			return;
 
@@ -1290,7 +1290,7 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 
 	if (GetSP() < iNeededSP)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ŷ մϴ. (%d, %d)"), GetSP(), iNeededSP);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 용신력이 부족합니다. (%d, %d)"), GetSP(), iNeededSP);
 		return;
 	}
 
@@ -1299,7 +1299,7 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 
 	if (!abSkillUsable[dwRealVnum])
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> Ÿ  ʾ  ų   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 쿨타임이 끝나지 않아 길드 스킬을 사용할 수 없습니다."));
 		return;
 	}
 
@@ -1318,12 +1318,12 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 	//GuildPointChange(POINT_SP, -iNeededSP);
 
 	if (test_server)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> %d ų  (%d, %d) to %u"), dwVnum, GetSP(), iNeededSP, pid);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> %d 스킬을 사용함 (%d, %d) to %u"), dwVnum, GetSP(), iNeededSP, pid);
 
 	switch (dwVnum)
 	{
 		case GUILD_SKILL_TELEPORT:
-			//   ִ   õ.
+			// 현재 서버에 있는 사람을 먼저 시도.
 			SendDBSkillUpdate(-iNeededSP);
 			if ((victim = (CHARACTER_MANAGER::instance().FindByPID(pid))))
 				ch->WarpSet(victim->GetX(), victim->GetY());
@@ -1331,15 +1331,15 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 			{
 				if (m_memberP2POnline.find(pid) != m_memberP2POnline.end())
 				{
-					// ٸ  αε   -> ޽  ǥ ޾ƿ
-					// 1. A.pid, B.pid  Ѹ
-					// 2. B.pid   Ѹ A.pid, ǥ  
-					// 3. 
+					// 다른 서버에 로그인된 사람이 있음 -> 메시지 보내 좌표를 받아오자
+					// 1. A.pid, B.pid 를 뿌림
+					// 2. B.pid를 가진 서버가 뿌린서버에게 A.pid, 좌표 를 보냄
+					// 3. 워프
 					CCI * pcci = P2P_MANAGER::instance().FindByPID(pid);
 
 					if (pcci->bChannel != g_bChannel)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 밡 %d äο ֽϴ. ( ä %d)"), pcci->bChannel, g_bChannel);
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대가 %d 채널에 있습니다. (현재 채널 %d)"), pcci->bChannel, g_bChannel);
 					}
 					else
 					{
@@ -1352,7 +1352,7 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 					}
 				}
 				else
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 밡 ¶ ° ƴմϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대가 온라인 상태가 아닙니다."));
 			}
 			break;
 
@@ -1366,13 +1366,13 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 			{
 				/*if (ch->GetPlayerID() != GetMasterPID())
 				  {
-				  ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 常  ų   ֽϴ."));
+				  ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드장만 길드 스킬을 사용할 수 있습니다."));
 				  return;
 				  }*/
 
 				if (!UnderAnyWar())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ų  ߿   ֽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 스킬은 길드전 중에만 사용할 수 있습니다."));
 					return;
 				}
 
@@ -1739,7 +1739,7 @@ bool CGuild::ChargeSP(LPCHARACTER ch, int iSP)
 
 	SendDBSkillUpdate(iSP);
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> %u ŷ ȸϿϴ."), iSP);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> %u의 용신력을 회복하였습니다."), iSP);
 	}
 	return true;
 }
@@ -1813,7 +1813,7 @@ void CGuild::RequestDepositMoney(LPCHARACTER ch, int iGold)
 {
 	if (false==ch->CanDeposit())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> Ŀ ֽ̿ʽÿ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 잠시후에 이용해주십시오"));
 		return;
 	}
 
@@ -1840,19 +1840,19 @@ void CGuild::RequestWithdrawMoney(LPCHARACTER ch, int iGold)
 {
 	if (false==ch->CanDeposit())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> Ŀ ֽ̿ʽÿ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 잠시후에 이용해주십시오"));
 		return;
 	}
 
 	if (ch->GetPlayerID() != GetMasterPID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ݰ 常   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 금고에선 길드장만 출금할 수 있습니다."));
 		return;
 	}
 
 	if (m_data.gold < iGold)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ִ  մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 가지고 있는 돈이 부족합니다."));
 		return;
 	}
 
@@ -1905,11 +1905,11 @@ bool CGuild::HasLand()
 }
 
 // GUILD_JOIN_BUG_FIX
-///  ʴ event 
+/// 길드 초대 event 정보
 EVENTINFO(TInviteGuildEventInfo)
 {
-	DWORD	dwInviteePID;		///< ʴ character  PID
-	DWORD	dwGuildID;		///< ʴ Guild  ID
+	DWORD	dwInviteePID;		///< 초대받은 character 의 PID
+	DWORD	dwGuildID;		///< 초대한 Guild 의 ID
 
 	TInviteGuildEventInfo()
 	: dwInviteePID( 0 )
@@ -1919,8 +1919,8 @@ EVENTINFO(TInviteGuildEventInfo)
 };
 
 /**
- *  ʴ event callback Լ.
- * event  ߵϸ ʴ  óѴ.
+ * 길드 초대 event callback 함수.
+ * event 가 발동하면 초대 거절로 처리한다.
  */
 EVENTFUNC( GuildInviteEvent )
 {
@@ -1947,7 +1947,7 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 {
 	if (quest::CQuestManager::instance().GetPCForce(pchInviter->GetPlayerID())->IsRunning() == true)
 	{
-	    pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ʴ û    Դϴ."));
+	    pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방이 초대 신청을 받을 수 없는 상태입니다."));
 	    return;
 	}
 
@@ -1957,17 +1957,17 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 
 	if ( pchInvitee->IsBlockMode( BLOCK_GUILD_INVITE ) ) 
 	{
-		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>   ʴ ź Դϴ.") );
+		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방이 길드 초대 거부 상태입니다.") );
 		return;
 	} 
 	else if ( !HasGradeAuth( GetMember( pchInviter->GetPlayerID() )->grade, GUILD_AUTH_ADD_MEMBER ) ) 
 	{
-		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>  ʴ  ϴ.") );
+		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 길드원을 초대할 권한이 없습니다.") );
 		return;
 	} 
 	else if ( pchInvitee->GetEmpire() != pchInviter->GetEmpire() ) 
 	{
-		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<> ٸ   忡 ʴ  ϴ.") );
+		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 다른 제국 사람을 길드에 초대할 수 없습니다.") );
 		return;
 	}
 
@@ -1977,18 +1977,18 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 		case GERR_NONE: break;
 		case GERR_WITHDRAWPENALTY:
 						pchInviter->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> Ż  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("<길드> 탈퇴한 후 %d일이 지나지 않은 사람은 길드에 초대할 수 없습니다."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_withdraw_delay" ) );
 						return;
 		case GERR_COMMISSIONPENALTY:
 						pchInviter->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> 带 ػ  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("<길드> 길드를 해산한 지 %d일이 지나지 않은 사람은 길드에 초대할 수 없습니다."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_disband_delay") );
 						return;
-		case GERR_ALREADYJOIN:	pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ̹ ٸ 忡 ֽϴ.")); return;
-		case GERR_GUILDISFULL:	pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ִ   ʰ߽ϴ.")); return;
-		case GERR_GUILD_IS_IN_WAR : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>  尡   Դϴ.") ); return;
-		case GERR_INVITE_LIMIT : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>  ű    Դϴ.") ); return;
+		case GERR_ALREADYJOIN:	pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방이 이미 다른 길드에 속해있습니다.")); return;
+		case GERR_GUILDISFULL:	pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 최대 길드원 수를 초과했습니다.")); return;
+		case GERR_GUILD_IS_IN_WAR : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 현재 길드가 전쟁 중 입니다.") ); return;
+		case GERR_INVITE_LIMIT : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 현재 신규 가입 제한 상태 입니다.") ); return;
 
 		default: sys_err( "ignore guild join error(%d)", errcode ); return;
 	}
@@ -1997,7 +1997,7 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 		return;
 
 	//
-	// ̺Ʈ 
+	// 이벤트 생성
 	// 
 	TInviteGuildEventInfo* pInfo = AllocEventInfo();
 	pInfo->dwInviteePID = pchInvitee->GetPlayerID();
@@ -2006,7 +2006,7 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 	m_GuildInviteEventMap.insert(EventMap::value_type(pchInvitee->GetPlayerID(), event_create(GuildInviteEvent, pInfo, PASSES_PER_SEC(10))));
 
 	//
-	// ʴ ޴ character  ʴ Ŷ 
+	// 초대 받는 character 에게 초대 패킷 전송
 	// 
 
 	DWORD gid = GetID();
@@ -2042,18 +2042,18 @@ void CGuild::InviteAccept( LPCHARACTER pchInvitee )
 		case GERR_NONE: break;
 		case GERR_WITHDRAWPENALTY:
 						pchInvitee->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> Ż  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("<길드> 탈퇴한 후 %d일이 지나지 않은 사람은 길드에 초대할 수 없습니다."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_withdraw_delay" ) );
 						return;
 		case GERR_COMMISSIONPENALTY:
 						pchInvitee->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> 带 ػ  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("<길드> 길드를 해산한 지 %d일이 지나지 않은 사람은 길드에 초대할 수 없습니다."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_disband_delay") );
 						return;
-		case GERR_ALREADYJOIN:	pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ̹ ٸ 忡 ֽϴ.")); return;
-		case GERR_GUILDISFULL:	pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ִ   ʰ߽ϴ.")); return;
-		case GERR_GUILD_IS_IN_WAR : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>  尡   Դϴ.") ); return;
-		case GERR_INVITE_LIMIT : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<>  ű    Դϴ.") ); return;
+		case GERR_ALREADYJOIN:	pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방이 이미 다른 길드에 속해있습니다.")); return;
+		case GERR_GUILDISFULL:	pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 최대 길드원 수를 초과했습니다.")); return;
+		case GERR_GUILD_IS_IN_WAR : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 현재 길드가 전쟁 중 입니다.") ); return;
+		case GERR_INVITE_LIMIT : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<길드> 현재 신규 가입 제한 상태 입니다.") ); return;
 
 		default: sys_err( "ignore guild join error(%d)", errcode ); return;
 	}
diff --git a/src/game/guild.h b/src/game/guild.h
index c6a5300..22d61e0 100644
--- a/src/game/guild.h
+++ b/src/game/guild.h
@@ -1,4 +1,4 @@
-#ifndef __INC_GUILD_H
+#ifndef __INC_GUILD_H
 #define __INC_GUILD_H
 
 #include "skill.h"
@@ -29,12 +29,12 @@ struct SGuildMaster
 
 typedef struct SGuildMember
 {
-	DWORD pid; // player ̺ id; primary key
-	BYTE grade; //  ÷̾  1 to 15 (1 ¯)
+	DWORD pid; // player 테이블의 id; primary key
+	BYTE grade; // 길드상의 플레이어의 계급 1 to 15 (1이 짱)
 	BYTE is_general;
 	BYTE job;
 	BYTE level;
-	DWORD offer_exp; //  ġ
+	DWORD offer_exp; // 공헌한 경험치
 	BYTE _dummy;
 
 	std::string name;
@@ -72,7 +72,7 @@ typedef struct packet_guild_sub_info
 
 typedef struct SGuildGrade
 {
-	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;
 } TGuildGrade;
 
@@ -256,7 +256,7 @@ class CGuild
 		bool		ChargeSP(LPCHARACTER ch, int iSP);
 
 		void		Chat(const char* c_pszText); 
-		void		P2PChat(const char* c_pszText); //  ä
+		void		P2PChat(const char* c_pszText); // 길드 채팅
 
 		void		SkillUsableChange(DWORD dwSkillVnum, bool bUsable);
 		void		AdvanceLevel(int iLevel);
@@ -266,7 +266,7 @@ class CGuild
 		void		RequestWithdrawMoney(LPCHARACTER ch, int iGold);
 
 		void		RecvMoneyChange(int iGold);
-		void		RecvWithdrawMoneyGive(int iChangeGold); // bGive==1 ̸ 忡 ִ  õϰ и 񿡰 
+		void		RecvWithdrawMoneyGive(int iChangeGold); // bGive==1 이면 길드장에게 주는 걸 시도하고 성공실패를 디비에게 보낸다
 
 		int		GetGuildMoney() const	{ return m_data.gold; }
 
@@ -277,7 +277,7 @@ class CGuild
 		int		GetGuildWarState(DWORD guild_id);
 		bool		CanStartWar(BYTE bGuildWarType);
 		DWORD		GetWarStartTime(DWORD guild_id);
-		bool		UnderWar(DWORD guild_id); // ΰ?
+		bool		UnderWar(DWORD guild_id); // 전쟁중인가?
 		DWORD		UnderAnyWar(BYTE bType = GUILD_WAR_TYPE_MAX_NUM);
 
 		// War map relative
@@ -320,26 +320,26 @@ class CGuild
 		bool		HasLand();
 
 		// GUILD_JOIN_BUG_FIX
-		/// character  尡 ʴ븦 Ѵ.
+		/// character 에게 길드가입 초대를 한다.
 		/**
-		 * @param	pchInviter ʴ character.
-		 * @param	pchInvitee ʴ character.
+		 * @param	pchInviter 초대한 character.
+		 * @param	pchInvitee 초대할 character.
 		 *
-		 * ʴϰų   ¶ شϴ ä ޼ Ѵ.
+		 * 초대하거나 받을수 없는 상태라면 해당하는 채팅 메세지를 전송한다.
 		 */
 		void		Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee );
 
-		/// ʴ뿡   character   óѴ.
+		/// 길드초대에 대한 상대 character 의 수락을 처리한다.
 		/**
-		 * @param	pchInvitee ʴ character
+		 * @param	pchInvitee 초대받은 character
 		 *
-		 * 忡 ԰ ° ƴ϶ شϴ ä ޼ Ѵ.
+		 * 길드에 가입가능한 상태가 아니라면 해당하는 채팅 메세지를 전송한다.
 		 */
 		void		InviteAccept( LPCHARACTER pchInvitee );
 
-		/// ʴ뿡   character  źθ óѴ.
+		/// 길드초대에 대한 상대 character 의 거부를 처리한다.
 		/**
-		 * @param	dwPID ʴ character  PID
+		 * @param	dwPID 초대받은 character 의 PID
 		 */
 		void		InviteDeny( DWORD dwPID );
 		// END_OF_GUILD_JOIN_BUG_FIX
@@ -377,27 +377,27 @@ class CGuild
 		bool	abSkillUsable[GUILD_SKILL_COUNT];
 
 		// GUILD_JOIN_BUG_FIX
-		///       ڵ.
+		/// 길드 가입을 할 수 없을 경우의 에러코드.
 		enum GuildJoinErrCode {
-			GERR_NONE			= 0,	///< ó
-			GERR_WITHDRAWPENALTY,		///< Ż ԰ ð  
-			GERR_COMMISSIONPENALTY,		///< ػ ԰ ð  
-			GERR_ALREADYJOIN,			///< 尡  ijͰ ̹ 忡  
-			GERR_GUILDISFULL,			///< ο  ʰ
-			GERR_GUILD_IS_IN_WAR,		///< 尡  
-			GERR_INVITE_LIMIT,			///<    
-			GERR_MAX				///< Error code ְġ.  տ Error code  ߰Ѵ.
+			GERR_NONE			= 0,	///< 처리성공
+			GERR_WITHDRAWPENALTY,		///< 탈퇴후 가입가능한 시간이 지나지 않음
+			GERR_COMMISSIONPENALTY,		///< 해산후 가입가능한 시간이 지나지 않음
+			GERR_ALREADYJOIN,			///< 길드가입 대상 캐릭터가 이미 길드에 가입해 있음
+			GERR_GUILDISFULL,			///< 길드인원 제한 초과
+			GERR_GUILD_IS_IN_WAR,		///< 길드가 현재 전쟁중
+			GERR_INVITE_LIMIT,			///< 길드원 가입 제한 상태
+			GERR_MAX				///< Error code 최고치. 이 앞에 Error code 를 추가한다.
 		};
 
-		/// 忡    ˻Ѵ.
+		/// 길드에 가입 가능한 조건을 검사한다.
 		/**
-		 * @param [in]	pchInvitee ʴ޴ character
+		 * @param [in]	pchInvitee 초대받는 character
 		 * @return	GuildJoinErrCode
 		 */
 		GuildJoinErrCode	VerifyGuildJoinableCondition( const LPCHARACTER pchInvitee );
 
 		typedef std::map< DWORD, LPEVENT >	EventMap;
-		EventMap	m_GuildInviteEventMap;	///<  û Event map. key: ʴ ij PID
+		EventMap	m_GuildInviteEventMap;	///< 길드 초청 Event map. key: 초대받은 캐릭터의 PID
 		// END_OF_GUILD_JOIN_BUG_FIX
 };
 
diff --git a/src/game/guild_manager.cpp b/src/game/guild_manager.cpp
index e4dbba3..7de63bb 100644
--- a/src/game/guild_manager.cpp
+++ b/src/game/guild_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "utils.h"
 #include "config.h"
@@ -77,7 +77,7 @@ DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
 
 	if (!check_name(gcp.name))
 	{
-		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ̸  ʽϴ."));
+		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 이름이 적합하지 않습니다."));
 		return 0;
 	}
 
@@ -90,13 +90,13 @@ DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
 
 		if (!(row[0] && row[0][0] == '0'))
 		{
-			gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹  ̸ 尡 ֽϴ."));
+			gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 이미 같은 이름의 길드가 있습니다."));
 			return 0;
 		}
 	}
 	else
 	{
-		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 带   ϴ."));
+		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드를 생성할 수 없습니다."));
 		return 0;
 	}
 
@@ -505,7 +505,7 @@ void CGuildManager::RequestWarOver(DWORD dwGuild1, DWORD dwGuild2, DWORD dwGuild
 	TPacketGuildWar p;
 
 	p.bWar = GUILD_WAR_OVER;
-	//    .
+	// 길드전이 끝나도 보상은 없다.
 	//p.lWarPrice = lReward;
 	p.lWarPrice = 0;
 	p.bType = dwGuildWinner == 0 ? 1 : 0; // bType == 1 means draw for this packet.
@@ -542,7 +542,7 @@ void CGuildManager::DeclareWar(DWORD guild_id1, DWORD guild_id2, BYTE bType)
 		if (false == LC_IsGermany())
 		{
 			char buf[256];
-			snprintf(buf, sizeof(buf), LC_TEXT("%s 尡 %s 忡  Ͽϴ!"), TouchGuild(guild_id1)->GetName(), TouchGuild(guild_id2)->GetName());
+			snprintf(buf, sizeof(buf), LC_TEXT("%s 길드가 %s 길드에 선전포고를 하였습니다!"), TouchGuild(guild_id1)->GetName(), TouchGuild(guild_id2)->GetName());
 			SendNotice(buf);
 		}
 	}
@@ -556,7 +556,7 @@ void CGuildManager::RefuseWar(DWORD guild_id1, DWORD guild_id2)
 	if (g1 && g2)
 	{
 		if (g2->GetMasterCharacter())
-			g2->GetMasterCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> %s 尡  źϿϴ."), g1->GetName());
+			g2->GetMasterCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> %s 길드가 길드전을 거부하였습니다."), g1->GetName());
 	}
 
 	if ( g1 != NULL )
@@ -580,7 +580,7 @@ void CGuildManager::WaitStartWar(DWORD guild_id1, DWORD guild_id2)
 	if (g1->WaitStartWar(guild_id2) || g2->WaitStartWar(guild_id1) )
 	{
 		char buf[256];
-		snprintf(buf, sizeof(buf), LC_TEXT("%s  %s 尡    մϴ!"), g1->GetName(), g2->GetName());
+		snprintf(buf, sizeof(buf), LC_TEXT("%s 길드와 %s 길드가 잠시 후 전쟁을 시작합니다!"), g1->GetName(), g2->GetName());
 		SendNotice(buf);
 	}
 }
@@ -628,7 +628,7 @@ void CGuildManager::StartWar(DWORD guild_id1, DWORD guild_id2)
 	g2->StartWar(guild_id1);
 
 	char buf[256];
-	snprintf(buf, sizeof(buf), LC_TEXT("%s  %s 尡  Ͽϴ!"), g1->GetName(), g2->GetName());
+	snprintf(buf, sizeof(buf), LC_TEXT("%s 길드와 %s 길드가 전쟁을 시작하였습니다!"), g1->GetName(), g2->GetName());
 	SendNotice(buf);
 
 	if (guild_id1 > guild_id2)
@@ -646,17 +646,17 @@ void SendGuildWarOverNotice(CGuild* g1, CGuild* g2, bool bDraw)
 
 		if (bDraw)
 		{
-			snprintf(buf, sizeof(buf), LC_TEXT("%s  %s    ºη ϴ."), g1->GetName(), g2->GetName());
+			snprintf(buf, sizeof(buf), LC_TEXT("%s 길드와 %s 길드 사이의 전쟁이 무승부로 끝났습니다."), g1->GetName(), g2->GetName());
 		}
 		else
 		{
 			if ( g1->GetWarScoreAgainstTo( g2->GetID() ) > g2->GetWarScoreAgainstTo( g1->GetID() ) )
 			{
-				snprintf(buf, sizeof(buf), LC_TEXT("%s 尡 %s  £ ¸ ߽ϴ."), g1->GetName(), g2->GetName());
+				snprintf(buf, sizeof(buf), LC_TEXT("%s 길드가 %s 길드와의 전쟁에서 승리 했습니다."), g1->GetName(), g2->GetName());
 			}
 			else
 			{
-				snprintf(buf, sizeof(buf), LC_TEXT("%s 尡 %s  £ ¸ ߽ϴ."), g2->GetName(), g1->GetName());
+				snprintf(buf, sizeof(buf), LC_TEXT("%s 길드가 %s 길드와의 전쟁에서 승리 했습니다."), g2->GetName(), g1->GetName());
 			}
 		}
 
@@ -740,7 +740,7 @@ void CGuildManager::CancelWar(DWORD guild_id1, DWORD guild_id2)
 		LPCHARACTER master1 = g1->GetMasterCharacter();
 
 		if (master1)
-			master1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ǿϴ."));
+			master1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전이 취소 되었습니다."));
 	}
 
 	if (g2)
@@ -748,13 +748,13 @@ void CGuildManager::CancelWar(DWORD guild_id1, DWORD guild_id2)
 		LPCHARACTER master2 = g2->GetMasterCharacter();
 
 		if (master2)
-			master2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ǿϴ."));
+			master2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전이 취소 되었습니다."));
 	}
 
 	if (g1 && g2)
 	{
 		char buf[256+1];
-		snprintf(buf, sizeof(buf), LC_TEXT("%s  %s    ҵǾϴ."), g1->GetName(), g2->GetName());
+		snprintf(buf, sizeof(buf), LC_TEXT("%s 길드와 %s 길드 사이의 전쟁이 취소되었습니다."), g1->GetName(), g2->GetName());
 		SendNotice(buf);
 	}
 }
@@ -953,7 +953,7 @@ void CGuildManager::ChangeMaster(DWORD dwGID)
 		iter->second->Load(dwGID);
 	}
 
-	// Ʈ  ֱ
+	// 업데이트된 정보 보내주기
 	DBManager::instance().FuncQuery(std::bind(&CGuild::SendGuildDataUpdateToAllMember, iter->second, std::placeholders::_1),		
 			"SELECT 1");
 
diff --git a/src/game/guild_manager.h b/src/game/guild_manager.h
index a9c37d9..d5ab428 100644
--- a/src/game/guild_manager.h
+++ b/src/game/guild_manager.h
@@ -1,4 +1,4 @@
-#ifndef __GUILD_MANAGER_H
+#ifndef __GUILD_MANAGER_H
 #define __GUILD_MANAGER_H
 
 class CGuild;
diff --git a/src/game/guild_war.cpp b/src/game/guild_war.cpp
index 36953f3..7b08081 100644
--- a/src/game/guild_war.cpp
+++ b/src/game/guild_war.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "utils.h"
 #include "config.h"
@@ -43,7 +43,7 @@ void CGuild::GuildWarPacket(DWORD dwOppGID, BYTE bWarType, BYTE bWarState)
 		LPCHARACTER ch = *it;
 
 		if (bWarState == GUILD_WAR_ON_WAR)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߿ ɿ   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전중에는 사냥에 따른 이익이 없습니다."));
 
 		LPDESC d = ch->GetDesc();
 
@@ -140,12 +140,12 @@ DWORD CGuild::GetGuildWarMapIndex(DWORD dwOppGID)
 	return git->second.map_index;
 }
 
-bool CGuild::CanStartWar(BYTE bGuildWarType) // ŸԿ  ٸ    
+bool CGuild::CanStartWar(BYTE bGuildWarType) // 타입에 따라 다른 조건이 생길 수도 있음
 {
 	if (bGuildWarType >= GUILD_WAR_TYPE_MAX_NUM)
 		return false;
 
-	// ׽Ʈÿ ο Ȯ ʴ´.
+	// 테스트시에는 인원수를 확인하지 않는다.
 	if (test_server || quest::CQuestManager::instance().GetEventFlag("guild_war_test") != 0)
 		return GetLadderPoint() > 0;
 
@@ -313,11 +313,11 @@ void CGuild::RequestDeclareWar(DWORD dwOppGID, BYTE type)
 					GetID(), dwOppGID, type, GuildWar_GetTypeMapIndex(type));
 
 			map_allow_log();
-			NotifyGuildMaster(LC_TEXT("   ʾ    ϴ."));
+			NotifyGuildMaster(LC_TEXT("전쟁 서버가 열려있지 않아 길드전을 시작할 수 없습니다."));
 			return;
 		}
 
-		// Ŷ  to another server
+		// 패킷 보내기 to another server
 		TPacketGuildWar p;
 		p.bType = type;
 		p.bWar = GUILD_WAR_SEND_DECLARE;
@@ -336,7 +336,7 @@ void CGuild::RequestDeclareWar(DWORD dwOppGID, BYTE type)
 
 				if (saved_type == GUILD_WAR_TYPE_FIELD)
 				{
-					//  Ѱ ޾Ƶ鿴.
+					// 선전포고 한것을 받아들였다.
 					TPacketGuildWar p;
 					p.bType = saved_type;
 					p.bWar = GUILD_WAR_ON_WAR;
@@ -353,7 +353,7 @@ void CGuild::RequestDeclareWar(DWORD dwOppGID, BYTE type)
 							GetID(), dwOppGID, type, GuildWar_GetTypeMapIndex(type));
 
 					map_allow_log();
-					NotifyGuildMaster(LC_TEXT("   ʾ    ϴ."));
+					NotifyGuildMaster(LC_TEXT("전쟁 서버가 열려있지 않아 길드전을 시작할 수 없습니다."));
 					return;
 				}
 
@@ -379,7 +379,7 @@ void CGuild::RequestDeclareWar(DWORD dwOppGID, BYTE type)
 			break;
 		case GUILD_WAR_SEND_DECLARE:
 			{
-				NotifyGuildMaster(LC_TEXT("̹   Դϴ."));
+				NotifyGuildMaster(LC_TEXT("이미 선전포고 중인 길드입니다."));
 			}
 			break;
 		default:
@@ -441,14 +441,14 @@ void CGuild::StartWar(DWORD dwOppGID)
 
 bool CGuild::WaitStartWar(DWORD dwOppGID)
 {
-	//ڱڽ̸ 
+	//자기자신이면 
 	if (dwOppGID == GetID())
 	{
 		sys_log(0 ,"GuildWar.WaitStartWar.DECLARE_WAR_SELF id(%u -> %u)", GetID(), dwOppGID);
 		return false;
 	}
 
-	//  TGuildWar  ´.
+	//상대방 길드 TGuildWar 를 얻어온다.
 	itertype(m_EnemyGuild) it = m_EnemyGuild.find(dwOppGID);
 	if (it == m_EnemyGuild.end())
 	{
@@ -456,7 +456,7 @@ bool CGuild::WaitStartWar(DWORD dwOppGID)
 		return false;
 	}
 
-	//۷ ϰ
+	//레퍼런스에 등록하고
 	TGuildWar & gw(it->second);
 
 	if (gw.state == GUILD_WAR_WAIT_START)
@@ -465,10 +465,10 @@ bool CGuild::WaitStartWar(DWORD dwOppGID)
 		return false;
 	}
 
-	//¸ Ѵ.
+	//상태를 저장한다.
 	gw.state = GUILD_WAR_WAIT_START;
 
-	//  Ŭ ͸ 
+	//상대편의 길드 클래스 포인터를 얻어오고
 	CGuild* g = CGuildManager::instance().FindGuild(dwOppGID);
 	if (!g)
 	{
@@ -481,14 +481,14 @@ bool CGuild::WaitStartWar(DWORD dwOppGID)
 	// END_OF_GUILDWAR_INFO
 
 
-	// ʵ̸ ʻ 
+	// 필드형이면 맵생성 안함
 	if (gw.type == GUILD_WAR_TYPE_FIELD)
 	{
 		sys_log(0 ,"GuildWar.WaitStartWar.FIELD_TYPE id(%u -> %u)", GetID(), dwOppGID);
 		return true;
 	}		
 
-	//    Ȯ
+	// 전쟁 서버 인지 확인
 	sys_log(0 ,"GuildWar.WaitStartWar.CheckWarServer id(%u -> %u), type(%d), map(%d)", 
 			GetID(), dwOppGID, gw.type, rkGuildWarInfo.lMapIndex);
 
@@ -505,7 +505,7 @@ bool CGuild::WaitStartWar(DWORD dwOppGID)
 	if (id1 > id2)
 		std::swap(id1, id2);
 
-	//  
+	//워프 맵을 생성
 	DWORD lMapIndex = CWarMapManager::instance().CreateWarMap(rkGuildWarInfo, id1, id2);
 	if (!lMapIndex) 
 	{
@@ -516,10 +516,10 @@ bool CGuild::WaitStartWar(DWORD dwOppGID)
 
 	sys_log(0, "GuildWar.WaitStartWar.CreateMap id(%u vs %u), type(%u), map(%d) -> map_inst(%u)", id1, id2, gw.type, rkGuildWarInfo.lMapIndex, lMapIndex);
 
-	//  ε 
+	//길드전 정보에 맵인덱스를 세팅
 	gw.map_index = lMapIndex;
 
-	//ʿ (?)
+	//양쪽에 등록(?)
 	SetGuildWarMapIndex(dwOppGID, lMapIndex);
 	g->SetGuildWarMapIndex(GetID(), lMapIndex);
 
@@ -546,7 +546,7 @@ void CGuild::RequestRefuseWar(DWORD dwOppGID)
 
 	if (it != m_EnemyGuild.end() && it->second.state == GUILD_WAR_RECV_DECLARE)
 	{
-		//  ߴ.
+		// 선전포고를 거절했다.
 		TPacketGuildWar p;
 		p.bWar = GUILD_WAR_REFUSE;
 		p.dwGuildFrom = GetID();
@@ -651,7 +651,7 @@ void CGuild::GuildWarEntryAccept(DWORD dwOppGID, LPCHARACTER ch)
 
 	if (gw.state != GUILD_WAR_ON_WAR)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 전쟁이 끝났습니다."));
 		return;
 	}
 
@@ -727,7 +727,7 @@ void CGuild::SetLadderPoint(int point)
 	if (m_data.ladder_point != point)
 	{
 		char buf[256];
-		snprintf(buf, sizeof(buf), LC_TEXT("<>   %d  Ǿϴ"), point);
+		snprintf(buf, sizeof(buf), LC_TEXT("<길드> 래더 점수가 %d 점이 되었습니다"), point);
 		for (itertype(m_memberOnline) it = m_memberOnline.begin(); it!=m_memberOnline.end();++it)
 		{
 			LPCHARACTER ch = (*it);
diff --git a/src/game/horse_rider.cpp b/src/game/horse_rider.cpp
index 8bbf099..4b152d9 100644
--- a/src/game/horse_rider.cpp
+++ b/src/game/horse_rider.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "utils.h"
 #include "horse_rider.h"
@@ -14,10 +14,10 @@ const int HORSE_STAMINA_REGEN_INTERVAL = 12 * 60;
 
 THorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
 /*
-   int iMinLevel;	// ž  ִ ּ 
+   int iMinLevel;	// 탑승할 수 있는 최소 레벨
    int iNPCRace;
-   int iMaxHealth;	//  ִ ü
-   int iMaxStamina;	//  ִ ׹̳
+   int iMaxHealth;	// 말의 최대 체력
+   int iMaxStamina;	// 말의 최대 스테미너
    int iST;
    int iDX;
    int iHT;
@@ -29,7 +29,7 @@ THorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
  */
 {
 	{  0,	0,	1,	1,	0,	0,	0,	0,	0,	0,	0,	0  },
-	{ 25,	20101,	3,	4,	26,	35,	18,	9,	54,	43,	64,	32 },	// 1 (ʱ)
+	{ 25,	20101,	3,	4,	26,	35,	18,	9,	54,	43,	64,	32 },	// 1 (초급)
 	{ 25,	20101,	4,	4,	27,	36,	18,	9,	55,	44,	66,	33 },
 	{ 25,	20101,	5,	5,	28,	38,	19,	9,	56,	44,	67,	33 },
 	{ 25,	20101,	7,	5,	29,	39,	19,	10,	57,	45,	68,	34 },
@@ -39,7 +39,7 @@ THorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
 	{ 25,	20101,	12,	7,	33,	44,	22,	11,	61,	48,	73,	36 },
 	{ 25,	20101,	13,	8,	34,	45,	22,	11,	62,	49,	74,	37 },
 	{ 25,	20101,	15,	10,	35,	46,	23,	12,	63,	50,	75,	37 },
-	{ 35,	20104,	18,	30,	40,	53,	27,	13,	69,	55,	82,	41 },	// 11 (߱)
+	{ 35,	20104,	18,	30,	40,	53,	27,	13,	69,	55,	82,	41 },	// 11 (중급)
 	{ 35,	20104,	19,	35,	41,	54,	27,	14,	70,	56,	84,	42 },
 	{ 35,	20104,	21,	40,	42,	56,	28,	14,	71,	56,	85,	42 },
 	{ 35,	20104,	22,	50,	43,	57,	28,	14,	72,	57,	86,	43 },
@@ -49,7 +49,7 @@ THorseStat c_aHorseStat[HORSE_MAX_LEVEL+1] =
 	{ 35,	20104,	28,	70,	46,	62,	31,	15,	76,	60,	91,	45 },
 	{ 35,	20104,	30,	80,	47,	63,	31,	16,	77,	61,	92,	46 },
 	{ 35,	20104,	32,	100,	48,	64,	32,	16,	78,	62,	93,	46 },
-	{ 50,	20107,	35,	120,	53,	71,	36,	18,	84,	67,	100,	50 },	// 21 ()
+	{ 50,	20107,	35,	120,	53,	71,	36,	18,	84,	67,	100,	50 },	// 21 (고급)
 	{ 50,	20107,	36,	125,	55,	74,	37,	18,	86,	68,	103,	51 },
 	{ 50,	20107,	37,	130,	57,	76,	38,	19,	88,	70,	105,	52 },
 	{ 50,	20107,	38,	135,	59,	78,	39,	20,	90,	72,	108,	54 },
@@ -117,7 +117,7 @@ bool CHorseRider::ReviveHorse()
 	m_Horse.sHealth = c_aHorseStat[level].iMaxHealth;
 	m_Horse.sStamina = c_aHorseStat[level].iMaxStamina;
 
-	// 2005.03.24.ipkn. 츰 ٽ ״  
+	// 2005.03.24.ipkn.말 살린후 다시 죽는 현상 수정
 	ResetHorseHealthDropTime();
 
 	StartStaminaRegenEvent();
@@ -138,11 +138,11 @@ short CHorseRider::GetHorseMaxStamina()
 
 void CHorseRider::FeedHorse()
 {
-	//   
+	// 말을 가지고 살아있을때만
 	if (GetHorseLevel() > 0 && GetHorseHealth() > 0)
 	{
 		UpdateHorseHealth(+1);
-		// 20050324. ipkn  Կ ü  ̸ ø.
+		// 20050324. ipkn 말 먹였을때도 체력 감소 딜레이를 늘린다.
 		ResetHorseHealthDropTime();
 	}
 }
@@ -159,7 +159,7 @@ void CHorseRider::UpdateHorseDataByLogoff(DWORD dwLogoffTime)
 		return;
 
 	if (dwLogoffTime >= 12 * 60)
-		UpdateHorseStamina(dwLogoffTime / 12 / 60, false); // α׿ 12д 1 ȸ
+		UpdateHorseStamina(dwLogoffTime / 12 / 60, false); // 로그오프 12분당 1씩 회복
 }
 
 void CHorseRider::UpdateHorseStamina(int iStamina, bool bSend)
diff --git a/src/game/horse_rider.h b/src/game/horse_rider.h
index da29bb7..53ca5eb 100644
--- a/src/game/horse_rider.h
+++ b/src/game/horse_rider.h
@@ -1,4 +1,4 @@
-#ifndef __HORSE_H
+#ifndef __HORSE_H
 #define __HORSE_H
 
 #include "constants.h"
@@ -8,10 +8,10 @@ const int HORSE_MAX_LEVEL = 30;
 
 struct THorseStat
 {
-	int iMinLevel;      // ž  ִ ּ 
+	int iMinLevel;      // 탑승할 수 있는 최소 레벨
 	int iNPCRace;
-	int iMaxHealth;     //  ִ ü
-	int iMaxStamina;    //  ִ ׹̳
+	int iMaxHealth;     // 말의 최대 체력
+	int iMaxStamina;    // 말의 최대 스테미너
 	int iST;
 	int iDX;
 	int iHT;
diff --git a/src/game/horsename_manager.cpp b/src/game/horsename_manager.cpp
index 63d8a28..3edde96 100644
--- a/src/game/horsename_manager.cpp
+++ b/src/game/horsename_manager.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "horsename_manager.h"
 #include "desc_client.h"
diff --git a/src/game/horsename_manager.h b/src/game/horsename_manager.h
index 747cce7..3cf62ef 100644
--- a/src/game/horsename_manager.h
+++ b/src/game/horsename_manager.h
@@ -1,4 +1,4 @@
-
+
 class CHorseNameManager : public singleton
 {
 	private :
diff --git a/src/game/input.cpp b/src/game/input.cpp
index 813eb4f..b7c0863 100644
--- a/src/game/input.cpp
+++ b/src/game/input.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 
 #include "desc.h"
@@ -79,7 +79,7 @@ bool CInputProcessor::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes,
 		BYTE bHeader = (BYTE) *(c_pData);
 		const char * c_pszName;
 
-		if (bHeader == 0) // ȣȭ ó Ƿ 0  ŵѴ.
+		if (bHeader == 0) // 암호화 처리가 있으므로 0번 헤더는 스킵한다.
 			iPacketLen = 1;
 		else if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName))
 		{
@@ -275,7 +275,7 @@ ACMD(do_block_chat);
 
 int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 {
-	if (bHeader == 10) // ʹ 
+	if (bHeader == 10) // 엔터는 무시
 		return 0;
 
 	if (bHeader == HEADER_CG_TEXT)
@@ -283,7 +283,7 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 		++c_pData;
 		const char * c_pSep;
 
-		if (!(c_pSep = strchr(c_pData, '\n')))	// \n ã´.
+		if (!(c_pSep = strchr(c_pData, '\n')))	// \n을 찾는다.
 			return -1;
 
 #ifdef ENABLE_PORT_SECURITY
@@ -397,7 +397,7 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 		else if (!stBuf.compare(0,15,"DELETE_AWARDID "))
 			{
 				char szTmp[64];
-				std::string msg = stBuf.substr(15,26);	// item_award id?
+				std::string msg = stBuf.substr(15,26);	// item_award의 id범위?
 				
 				TPacketDeleteAwardID p;
 				p.dwID = (DWORD)(atoi(msg.c_str()));
@@ -413,7 +413,7 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 			
 			if (d->IsAdminMode())
 			{
-				//  ɵ
+				// 어드민 명령들
 				if (!stBuf.compare(0, 7, "NOTICE "))
 				{
 					std::string msg = stBuf.substr(7, 50);
@@ -571,7 +571,7 @@ dev_log(LOG_DEB0, "DC : '%s'", msg.c_str());
 					std::string strPrivEmpire;
 					is >> strPrivEmpire >> empire >> type >> value >> duration;
 
-					// ִġ 10
+					// 최대치 10배
 					value = MINMAX(0, value, 1000);
 					stResult = "PRIV_EMPIRE FAIL";
 
@@ -586,7 +586,7 @@ dev_log(LOG_DEB0, "DC : '%s'", msg.c_str());
 						{
 							stResult = "PRIV_EMPIRE SUCCEED";
 
-							// ð  
+							// 시간 단위로 변경
 							duration = duration * (60 * 60);
 
 							sys_log(0, "_give_empire_privileage(empire=%d, type=%d, value=%d, duration=%d) by web", 
@@ -621,13 +621,13 @@ dev_log(LOG_DEB0, "DC : '%s'", msg.c_str());
 	{
 		if (!guild_mark_server)
 		{
-			// ! - ũ  ƴѵ ũ ûϷ?
+			// 끊어버려! - 마크 서버가 아닌데 마크를 요청하려고?
 			sys_err("Guild Mark login requested but i'm not a mark server!");
 			d->SetPhase(PHASE_CLOSE);
 			return 0;
 		}
 
-		//   --;
+		// 무조건 인증 --;
 		sys_log(0, "MARK_SERVER: Login");
 		d->SetPhase(PHASE_LOGIN);
 		return 0;
diff --git a/src/game/input.h b/src/game/input.h
index 0372a8e..9ae928d 100644
--- a/src/game/input.h
+++ b/src/game/input.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_INPUT_PROCESSOR__
+#ifndef __INC_METIN_II_GAME_INPUT_PROCESSOR__
 #define __INC_METIN_II_GAME_INPUT_PROCESSOR__
 
 #include "packet_info.h"
@@ -181,7 +181,7 @@ protected:
 protected:
 	void		MapLocations(const char * c_pData);
 	void		LoginSuccess(DWORD dwHandle, const char *data);
-	void		PlayerCreateFailure(LPDESC d, BYTE bType);	// 0 = Ϲ  1 = ̹ 
+	void		PlayerCreateFailure(LPDESC d, BYTE bType);	// 0 = 일반 실패 1 = 이미 있음
 	void		PlayerDeleteSuccess(LPDESC d, const char * data);
 	void		PlayerDeleteFail(LPDESC d);
 	void		PlayerLoad(LPDESC d, const char* data);
@@ -277,10 +277,10 @@ protected:
 	void		BlockException(TPacketBlockException * data);
 
 	// MYSHOP_PRICE_LIST
-	///   Ʈ û   Ŷ(HEADER_DG_MYSHOP_PRICELIST_RES) óԼ
+	/// 아이템 가격정보 리스트 요청에 대한 응답 패킷(HEADER_DG_MYSHOP_PRICELIST_RES) 처리함수
 	/**
-	* @param	d   Ʈ û ÷̾ descriptor
-	* @param	p Ŷ 
+	* @param	d 아이템 가격정보 리스트를 요청한 플레이어의 descriptor
+	* @param	p 패킷데이터의 포인터
 	*/
 	void		MyshopPricelistRes( LPDESC d, const TPacketMyshopPricelistHeader* p );
 	// END_OF_MYSHOP_PRICE_LIST
@@ -290,7 +290,7 @@ protected:
 	//END_RELOAD_ADMIN
 
 	void		DetailLog(const TPacketNeedLoginLogInfo* info);
-	//    ׽Ʈ
+	// 독일 선물 기능 테스트
 	void		ItemAwardInformer(TPacketItemAwardInfromer* data);
 
 	void		RespondChannelStatus(LPDESC desc, const char* pcData);
@@ -370,7 +370,7 @@ class CInputAuth : public CInputProcessor
 
 	public:
 		void		Login(LPDESC d, const char * c_pData);
-		void		LoginOpenID(LPDESC d, const char * c_pData);		//2012.07.19 OpenID : 
+		void		LoginOpenID(LPDESC d, const char * c_pData);		//2012.07.19 OpenID : 김용욱
 		void		PasspodAnswer(LPDESC d, const char * c_pData );
 
 };
diff --git a/src/game/input_auth.cpp b/src/game/input_auth.cpp
index 4968ead..5a76cfa 100644
--- a/src/game/input_auth.cpp
+++ b/src/game/input_auth.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h" 
+#include "stdafx.h" 
 #include "constants.h"
 #include "config.h"
 #include "input.h"
@@ -30,11 +30,11 @@ bool FN_IS_VALID_LOGIN_STRING(const char *str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ĺ ڸ 
+		// 알파벳과 수자만 허용
 		if (isdigit(*tmp) || isalpha(*tmp))
 			continue;
 
-		// ijٴ  Ư 
+		// 캐나다는 몇몇 특수문자 허용
 		if (LC_IsCanada())
 		{
 			switch (*tmp)
@@ -130,7 +130,7 @@ void CInputAuth::Login(LPDESC d, const char * c_pData)
 		return;
 	}
 
-	// string Ἲ  
+	// string 무결성을 위해 복사
 	char login[LOGIN_MAX_LEN + 1];
 	trim_and_lower(pinfo->login, login, sizeof(login));
 
@@ -254,13 +254,13 @@ void CInputAuth::LoginOpenID(LPDESC d, const char * c_pData)
 	//OpenID test code.
 	TPacketCGLogin5 *tempInfo1 = (TPacketCGLogin5 *)c_pData;
 
-	//Ϻ   Ű Ȯ û .
+	//일본 웹 서버에 인증키 확인 요청을 보낸다.
 	char* authKey = tempInfo1->authKey;
 	char returnID[LOGIN_MAX_LEN + 1] = {0};
 
 	int test_url_get_protocol = auth_OpenID(authKey, inet_ntoa(d->GetAddr().sin_addr), returnID);
 
-	// .  ó
+	//인증 실패. 에러 처리
 	if (0!=test_url_get_protocol)
 	{
 		LoginFailure(d, "OpenID Fail");
@@ -282,7 +282,7 @@ void CInputAuth::LoginOpenID(LPDESC d, const char * c_pData)
 		return;
 	}
 
-	// string Ἲ  
+	// string 무결성을 위해 복사
 	char login[LOGIN_MAX_LEN + 1];
 	trim_and_lower(pinfo->login, login, sizeof(login));
 
@@ -459,7 +459,7 @@ int CInputAuth::auth_OpenID(const char *authKey, const char *ipAddr, char *rID)
 	    return 3;
 	}
 
-	// Ľ
+	//결과값 파싱
 	char buffer[1024];
 	strcpy(buffer, reply);
 
@@ -484,7 +484,7 @@ int CInputAuth::auth_OpenID(const char *authKey, const char *ipAddr, char *rID)
 		return 4;
 	}
 
-	if (0 != strcmp("OK", success))		// ó
+	if (0 != strcmp("OK", success))		//에러 처리
 	{
 		int returnNumber = 0;
 		str_to_number(returnNumber, id);
@@ -547,7 +547,7 @@ int CInputAuth::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 			Login(d, c_pData);
 			break;
 
-		//2012.07.19 OpenID : 
+		//2012.07.19 OpenID : 김용욱
 		case HEADER_CG_LOGIN5_OPENID:
 			if (openid_server)
 				LoginOpenID(d, c_pData);
diff --git a/src/game/input_db.cpp b/src/game/input_db.cpp
index 9c272cb..bbb6d41 100644
--- a/src/game/input_db.cpp
+++ b/src/game/input_db.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h" 
+#include "stdafx.h" 
 #include "constants.h"
 #include "config.h"
 #include "utils.h"
@@ -149,7 +149,7 @@ void CInputDB::LoginSuccess(DWORD dwHandle, const char *data)
 		return;
 	}
 
-	if (strcmp(pTab->status, "OK")) // OK ƴϸ
+	if (strcmp(pTab->status, "OK")) // OK가 아니면
 	{
 		sys_log(0, "CInputDB::LoginSuccess - status[%s] is not OK [%s]", pTab->status, pTab->login);
 
@@ -172,7 +172,7 @@ void CInputDB::LoginSuccess(DWORD dwHandle, const char *data)
 
 	d->BindAccountTable(pTab);
 
-	if (!bFound) // ijͰ    .. -_-
+	if (!bFound) // 캐릭터가 없으면 랜덤한 제국으로 보낸다.. -_-
 	{
 		TPacketGCEmpire pe;
 		pe.bHeader = HEADER_GC_EMPIRE;
@@ -250,7 +250,7 @@ void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data)
 
 	d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
 
-	// ⺻  ȯθ 
+	// 기본 무기와 귀환부를 지급
 	TPlayerItem t;
 	memset(&t, 0, sizeof(t));
 
@@ -260,10 +260,10 @@ void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data)
 		t.count	= 1;
 		t.owner	= r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
 
-		//: ΰ+3,ö+3,Ź+3,+3,ݸ+3, ܱͰ+3, һ+3, +3, +3 
-		//ڰ+3,ȯΰ+3,Ź+3,ȵ+3,ȭȱ+3,+3, Ͱ+3, +3, +3 
-		//簩+3,+3,Ź+3,+3,ָ+3, ݱͰ+3, +3, +3
-		//磺õ+3,+3,Ź+3,ڸ+3,ȭ+3,ָ+3, ݱͰ+3, +3, +3
+		//무사: 자인갑+3,철편투구+3,금편신발+3,남만도+3,백금목걸이+3, 흑단귀걸이+3, 소산부+3, 오각패+3, 흑단팔찌+3 
+		//자객:영린+3,연환두건+3,금편신발+3,마안도+3,화안궁+3,옥목걸이+3, 옥귀걸이+3, 오각패+3, 흑단팔찌+3 
+		//수라:음양갑+3,애희투구+3,금편신발+3,남만도+3,진주목걸이+3, 백금귀걸이+3, 오각패+3, 흑단팔찌+3
+		//무당:서천의+3,태을모+3,금편신발+3,자린선+3,매화령+3,진주목걸이+3, 백금귀걸이+3, 오각패+3, 흑단팔찌+3
 
 		struct SInitialItem
 		{
@@ -366,7 +366,7 @@ void CInputDB::PlayerLoad(LPDESC d, const char * data)
 	{
 		lMapIndex = SECTREE_MANAGER::instance().GetMapIndex(pTab->x, pTab->y);
 
-		if (lMapIndex == 0) // ǥ ã  .
+		if (lMapIndex == 0) // 좌표를 찾을 수 없다.
 		{
 			lMapIndex = EMPIRE_START_MAP(d->GetAccountTable().bEmpire);
 			pos.x = EMPIRE_START_X(d->GetAccountTable().bEmpire);
@@ -380,11 +380,11 @@ void CInputDB::PlayerLoad(LPDESC d, const char * data)
 	}
 	pTab->lMapIndex = lMapIndex;
 
-	// Private ʿ ־µ, Private   ¶ ⱸ ư Ѵ.
+	// Private 맵에 있었는데, Private 맵이 사라진 상태라면 출구로 돌아가야 한다.
 	// ----
-	// ٵ ⱸ ư Ѵٸ鼭...  ⱸ ƴ϶ private map  Ǵ pulic map ġ ãİ...
-	// 縦 𸣴...  ϵڵ Ѵ.
-	// Ʊ͵̸, ⱸ...
+	// 근데 출구로 돌아가야 한다면서... 왜 출구가 아니라 private map 상에 대응되는 pulic map의 위치를 찾냐고...
+	// 역사를 모르니... 또 하드코딩 한다.
+	// 아귀동굴이면, 출구로...
 	// by rtsummit
 	if (!SECTREE_MANAGER::instance().GetValidLocation(pTab->lMapIndex, pTab->x, pTab->y, lMapIndex, pos, d->GetEmpire()))
 	{
@@ -511,11 +511,11 @@ void CInputDB::Boot(const char* data)
 {
 	signal_timer_disable();
 
-	// Ŷ  üũ
+	// 패킷 사이즈 체크
 	DWORD dwPacketSize = decode_4bytes(data);
 	data += 4;
 
-	// Ŷ  üũ
+	// 패킷 버전 체크
 	BYTE bVersion = decode_byte(data);
 	data += 1;
 
@@ -834,7 +834,7 @@ void CInputDB::Boot(const char* data)
 	data += size * sizeof(TItemIDRangeTable);
 
 	//ADMIN_MANAGER
-	// 
+	//관리자 등록
 	int ChunkSize = decode_2bytes(data );
 	data += 2;
 	int HostSize = decode_2bytes(data );
@@ -1190,7 +1190,7 @@ void CInputDB::SafeboxLoad(LPDESC d, const char * c_pData)
 	//PREVENT_TRADE_WINDOW
 	if (ch->GetShopOwner() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen() )
 	{
-		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸŷâ ¿ â  ϴ." ) );
+		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른거래창이 열린상태에서는 창고를 열수가 없습니다." ) );
 		d->GetCharacter()->CancelSafeboxLoad();
 		return;
 	}
@@ -1203,7 +1203,7 @@ void CInputDB::SafeboxLoad(LPDESC d, const char * c_pData)
 	// END_OF_ADD_PREMIUM
 
 	//if (d->GetCharacter()->IsEquipUniqueItem(UNIQUE_ITEM_SAFEBOX_EXPAND))
-	//bSize = 3; // âȮ
+	//bSize = 3; // 창고확장권
 
 	//d->GetCharacter()->LoadSafebox(p->bSize * SAFEBOX_PAGE_SIZE, p->dwGold, p->wItemCount, (TPlayerItem *) (c_pData + sizeof(TSafeboxTable)));
 	d->GetCharacter()->LoadSafebox(bSize * SAFEBOX_PAGE_SIZE, p->dwGold, p->wItemCount, (TPlayerItem *) (c_pData + sizeof(TSafeboxTable)));
@@ -1223,7 +1223,7 @@ void CInputDB::SafeboxChangeSize(LPDESC d, const char * c_pData)
 }
 
 //
-// @version	05/06/20 Bang2ni - ReqSafeboxLoad  
+// @version	05/06/20 Bang2ni - ReqSafeboxLoad 의 취소
 //
 void CInputDB::SafeboxWrongPassword(LPDESC d)
 {
@@ -1251,11 +1251,11 @@ void CInputDB::SafeboxChangePasswordAnswer(LPDESC d, const char* c_pData)
 	TSafeboxChangePasswordPacketAnswer* p = (TSafeboxChangePasswordPacketAnswer*) c_pData;
 	if (p->flag)
 	{
-		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â йȣ Ǿϴ."));
+		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고 비밀번호가 변경되었습니다."));
 	}
 	else
 	{
-		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>  йȣ ƲȽϴ."));
+		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 기존 비밀번호가 틀렸습니다."));
 	}
 }
 
@@ -1283,7 +1283,7 @@ void CInputDB::LoginAlready(LPDESC d, const char * c_pData)
 	if (!d)
 		return;
 
-	// INTERNATIONAL_VERSION ̹ ̸  
+	// INTERNATIONAL_VERSION 이미 접속중이면 접속 끊음
 	{ 
 		TPacketDGLoginAlready * p = (TPacketDGLoginAlready *) c_pData;
 
@@ -1762,11 +1762,11 @@ void CInputDB::AuthLogin(LPDESC d, const char * c_pData)
 
 	if (bResult)
 	{
-		// Panama ȣȭ ѿ ʿ Ű 
+		// Panama 암호화 팩에 필요한 키 보내기
 		SendPanamaList(d);
 		ptoc.dwLoginKey = d->GetLoginKey();
 
-		//NOTE: AuthSucess   ȱ׷ PHASE Close Ǽ  ʴ´.-_-
+		//NOTE: AuthSucess보다 먼저 보내야지 안그러면 PHASE Close가 되서 보내지지 않는다.-_-
 		//Send Client Package CryptKey
 		{
 			DESC_MANAGER::instance().SendClientPackageCryptKey(d);
@@ -1796,11 +1796,11 @@ void CInputDB::AuthLoginOpenID(LPDESC d, const char * c_pData)
 
 	if (bResult)
 	{
-		// Panama ȣȭ ѿ ʿ Ű 
+		// Panama 암호화 팩에 필요한 키 보내기
 		SendPanamaList(d);
 		ptoc.dwLoginKey = d->GetLoginKey();
 
-		//NOTE: AuthSucess   ȱ׷ PHASE Close Ǽ  ʴ´.-_-
+		//NOTE: AuthSucess보다 먼저 보내야지 안그러면 PHASE Close가 되서 보내지지 않는다.-_-
 		//Send Client Package CryptKey
 		{
 			DESC_MANAGER::instance().SendClientPackageCryptKey(d);
@@ -1830,7 +1830,7 @@ void CInputDB::ChangeEmpirePriv(const char* c_pData)
 }
 
 /**
- * @version 05/06/08	Bang2ni - ӽð ߰
+ * @version 05/06/08	Bang2ni - 지속시간 추가
  */
 void CInputDB::ChangeGuildPriv(const char* c_pData)
 {
@@ -1952,7 +1952,7 @@ void CInputDB::BillingExpire(const char * c_pData)
 			d->SetBillingExpireSecond(p->dwRemainSeconds);
 
 			if (ch)
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ⱓ %d   ˴ϴ."), (p->dwRemainSeconds / 60));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("결재기간이 %d분 후 만료 됩니다."), (p->dwRemainSeconds / 60));
 		}
 	}
 }
@@ -2169,7 +2169,7 @@ void CInputDB::ReloadAdmin(const char * c_pData )
 
 ////////////////////////////////////////////////////////////////////
 // Analyze
-// @version	05/06/10 Bang2ni -   Ʈ Ŷ(HEADER_DG_MYSHOP_PRICELIST_RES) óƾ ߰.
+// @version	05/06/10 Bang2ni - 아이템 가격정보 리스트 패킷(HEADER_DG_MYSHOP_PRICELIST_RES) 처리루틴 추가.
 ////////////////////////////////////////////////////////////////////
 int CInputDB::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 {
@@ -2523,7 +2523,7 @@ int CInputDB::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 	case HEADER_DG_NEED_LOGIN_LOG:
 		DetailLog( (TPacketNeedLoginLogInfo*) c_pData );
 		break;
-	//    ׽Ʈ
+	// 독일 선물 기능 테스트
 	case HEADER_DG_ITEMAWARD_INFORMER:
 		ItemAwardInformer((TPacketItemAwardInfromer*) c_pData);
 		break;
@@ -2603,7 +2603,7 @@ void CInputDB::AddMonarchMoney(LPDESC d, const char * data )
 	if (ch)
 	{
 		if (number(1, 100) > 95) 
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %s  %u   ֽϴ"), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("현재 %s 국고에는 %u 의 돈이 있습니다"), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
 	}
 }
 	
@@ -2623,7 +2623,7 @@ void CInputDB::DecMonarchMoney(LPDESC d, const char * data)
 
 	if (ch)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %s  %d   ֽϴ"), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("현재 %s 국고에는 %d 의 돈이 있습니다"), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
 	}
 }
 
@@ -2644,14 +2644,14 @@ void CInputDB::TakeMonarchMoney(LPDESC d, const char * data)
 			return;
 
 		LPCHARACTER ch = d->GetCharacter();
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϰų  ü  ȲԴϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족하거나 돈을 가져올수 없는 상황입니다"));
 	}
 }
 
 void CInputDB::ChangeMonarchLord(TPacketChangeMonarchLordACK* info)
 {
 	char notice[256];
-	snprintf(notice, sizeof(notice), LC_TEXT("%s ְ %s  üǾϴ."), EMPIRE_NAME(info->bEmpire), info->szName);
+	snprintf(notice, sizeof(notice), LC_TEXT("%s의 군주가 %s 님으로 교체되었습니다."), EMPIRE_NAME(info->bEmpire), info->szName);
 	SendNotice(notice);
 }
 
@@ -2696,7 +2696,7 @@ void CInputDB::DetailLog(const TPacketNeedLoginLogInfo* info)
 
 void CInputDB::ItemAwardInformer(TPacketItemAwardInfromer *data)
 {	
-	LPDESC d = DESC_MANAGER::instance().FindByLoginName(data->login);	//login
+	LPDESC d = DESC_MANAGER::instance().FindByLoginName(data->login);	//login정보
 	
 	if(d == NULL)
 		return;
@@ -2705,12 +2705,12 @@ void CInputDB::ItemAwardInformer(TPacketItemAwardInfromer *data)
 		if (d->GetCharacter())
 		{
 			LPCHARACTER ch = d->GetCharacter();	
-			ch->SetItemAward_vnum(data->vnum);	// ch  ӽ سٰ QuestLoad Լ ó
+			ch->SetItemAward_vnum(data->vnum);	// ch 에 임시 저장해놨다가 QuestLoad 함수에서 처리
 			ch->SetItemAward_cmd(data->command);		
 
-			if(d->IsPhase(PHASE_GAME))			//϶
+			if(d->IsPhase(PHASE_GAME))			//게임페이즈일때
 			{
-				quest::CQuestManager::instance().ItemInformer(ch->GetPlayerID(),ch->GetItemAward_vnum());	//questmanager ȣ
+				quest::CQuestManager::instance().ItemInformer(ch->GetPlayerID(),ch->GetItemAward_vnum());	//questmanager 호출
 			}
 		}
 	}
diff --git a/src/game/input_login.cpp b/src/game/input_login.cpp
index 9adbe24..4b9fd6a 100644
--- a/src/game/input_login.cpp
+++ b/src/game/input_login.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "../../common/teen_packet.h"
 #include "config.h"
@@ -48,22 +48,22 @@ static void _send_bonus_info(LPCHARACTER ch)
 	if (item_drop_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT(" ӷ  %d%% ߰ ̺Ʈ Դϴ."), item_drop_bonus);
+				LC_TEXT("아이템 드롭률  %d%% 추가 이벤트 중입니다."), item_drop_bonus);
 	}
 	if (gold_drop_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT(" ӷ %d%% ߰ ̺Ʈ Դϴ."), gold_drop_bonus);
+				LC_TEXT("골드 드롭률 %d%% 추가 이벤트 중입니다."), gold_drop_bonus);
 	}
 	if (gold10_drop_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT("ڰ ӷ %d%% ߰ ̺Ʈ Դϴ."), gold10_drop_bonus);
+				LC_TEXT("대박골드 드롭률 %d%% 추가 이벤트 중입니다."), gold10_drop_bonus);
 	}
 	if (exp_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT("ġ %d%% ߰ ȹ ̺Ʈ Դϴ."), exp_bonus);
+				LC_TEXT("경험치 %d%% 추가 획득 이벤트 중입니다."), exp_bonus);
 	}
 }
 
@@ -71,13 +71,13 @@ static bool FN_is_battle_zone(LPCHARACTER ch)
 {
 	switch (ch->GetMapIndex())
 	{
-		case 1:         // ż 1 
-		case 2:         // ż 2 
-		case 21:        // õ 1 
-		case 23:        // õ 2 
-		case 41:        //  1 
-		case 43:        //  2 
-		case 113:       // OX 
+		case 1:         // 신수 1차 마을
+		case 2:         // 신수 2차 마을
+		case 21:        // 천조 1차 마을
+		case 23:        // 천조 2차 마을
+		case 41:        // 진노 1차 마을
+		case 43:        // 진노 2차 마을
+		case 113:       // OX 맵
 			return false;
 	}
 
@@ -379,7 +379,7 @@ bool RaceToJob(unsigned race, unsigned* ret_job)
 	return true;
 }
 
-// ű ij 
+// 신규 캐릭터 지원
 bool NewPlayerTable2(TPlayerTable * table, const char * name, BYTE race, BYTE shape, BYTE bEmpire)
 {
 	if (race >= MAIN_RACE_MAX_NUM)
@@ -403,7 +403,7 @@ bool NewPlayerTable2(TPlayerTable * table, const char * name, BYTE race, BYTE sh
 	strlcpy(table->name, name, sizeof(table->name));
 
 	table->level		= 1;
-	table->job			= race;	//   ִ´
+	table->job			= race;	// 직업대신 종족을 넣는다
 	table->voice		= 0;
 	table->part_base	= shape;
 
@@ -449,7 +449,7 @@ void CInputLogin::CharacterCreate(LPDESC d, const char * data)
 		return;
 	}
 
-	//    ̸̰ų, ߸ ̸  
+	// 사용할 수 없는 이름이거나, 잘못된 평상복이면 생설 실패
 	if (!check_name(pinfo->name) || pinfo->shape > 1)
 	{
 		if (LC_IsCanada() == true)
@@ -579,7 +579,7 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 
 	CGuildManager::instance().LoginMember(ch);
 
-	// ij͸ ʿ ߰ 
+	// 캐릭터를 맵에 추가 
 	ch->Show(ch->GetMapIndex(), pos.x, pos.y, pos.z);
 
 	SECTREE_MANAGER::instance().SendNPCPosition(ch);
@@ -587,8 +587,8 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 
 	d->SetPhase(PHASE_GAME);
 
-	if(ch->GetItemAward_cmd())																		// 
-		quest::CQuestManager::instance().ItemInformer(ch->GetPlayerID(),ch->GetItemAward_vnum());	//questmanager ȣ
+	if(ch->GetItemAward_cmd())																		//게임페이즈 들어가면
+		quest::CQuestManager::instance().ItemInformer(ch->GetPlayerID(),ch->GetItemAward_vnum());	//questmanager 호출
 	
 	sys_log(0, "ENTERGAME: %s %dx%dx%d %s map_index %d", 
 			ch->GetName(), ch->GetX(), ch->GetY(), ch->GetZ(), d->GetHostName(), ch->GetMapIndex());
@@ -598,10 +598,10 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 		ch->EnterHorse();
 	}
 
-	// ÷̽ð ڵ 
+	// 플레이시간 레코딩 시작
 	ch->ResetPlayTime();
 
-	// ڵ  ̺Ʈ ߰
+	// 자동 저장 이벤트 추가
 	ch->StartSaveEvent();
 	ch->StartRecoveryEvent();
 	ch->StartCheckSpeedHackEvent();
@@ -662,7 +662,7 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 				// if (version > date)
 				if (version != date) // Fix
 				{
-					ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+					ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("클라이언트 버전이 틀려 로그아웃 됩니다. 정상적으로 패치 후 접속하세요."));
 					d->DelayedDisconnect(10);
 					LogManager::instance().HackLog("VERSION_CONFLICT", ch);
 
@@ -758,10 +758,10 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 	}
 	else if (ch->GetMapIndex() == 113)
 	{
-		// ox ̺Ʈ 
+		// ox 이벤트 맵
 		if (COXEventManager::instance().Enter(ch) == false)
 		{
-			// ox   㰡  . ÷̾  
+			// ox 맵 진입 허가가 나지 않음. 플레이어면 마을로 보내자
 			if (ch->GetGMLevel() == GM_PLAYER)
 				ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
 		}
@@ -776,8 +776,8 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 		}
 	}
 
-	// ûҳ ȣ
-	if (g_TeenDesc) // BufferedPacket  
+	// 청소년 보호
+	if (g_TeenDesc) // BufferedPacket 사용 금지
 	{
 		TPacketGTLogin p;
 
@@ -797,14 +797,14 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 			db_clientdesc->DBPacket(HEADER_GD_REQ_HORSE_NAME, 0, &pid, sizeof(DWORD));
 	}
 
-	// ߸ʿ  ȳϱ
+	// 중립맵에 들어갔을때 안내하기
 	if (g_noticeBattleZone)
 	{
 		if (FN_is_battle_zone(ch))
 		{
-			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ʿ     ֽϴ."));
-			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ׿  "));
-			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ּ  μ ưñ ٶϴ."));
+			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("이 맵에선 강제적인 대전이 있을수 도 있습니다."));
+			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("이 조항에 동의하지 않을시"));
+			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("본인의 주성 및 부성으로 돌아가시기 바랍니다."));
 		}
 	}
 }
@@ -857,13 +857,13 @@ int CInputLogin::GuildSymbolUpload(LPDESC d, const char* c_pData, size_t uiBytes
 
 	if (iSymbolSize <= 0 || iSymbolSize > 64 * 1024)
 	{
-		// 64k  ū  ɺ ø
-		//   
+		// 64k 보다 큰 길드 심볼은 올릴수없다
+		// 접속을 끊고 무시
 		d->SetPhase(PHASE_CLOSE);
 		return 0;
 	}
 
-	//     .
+	// 땅을 소유하지 않은 길드인 경우.
 	if (!test_server)
 		if (!building::CManager::instance().FindLandByGuild(p->guild_id))
 		{
@@ -979,7 +979,7 @@ void CInputLogin::GuildMarkCRCList(LPDESC d, const char* c_pData)
 	CGuildMarkManager::instance().GetDiffBlocks(pCG->imgIdx, pCG->crclist, mapDiffBlocks);
 
 	DWORD blockCount = 0;
-	TEMP_BUFFER buf(1024 * 1024); // 1M 
+	TEMP_BUFFER buf(1024 * 1024); // 1M 버퍼
 
 	for (itertype(mapDiffBlocks) it = mapDiffBlocks.begin(); it != mapDiffBlocks.end(); ++it)
 	{
diff --git a/src/game/input_main.cpp b/src/game/input_main.cpp
index c5e983a..a8d10a8 100644
--- a/src/game/input_main.cpp
+++ b/src/game/input_main.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "utils.h"
@@ -47,14 +47,14 @@ extern int g_nPortalLimitTime;
 
 static int __deposit_limit()
 {
-	return (1000*10000); // 1õ
+	return (1000*10000); // 1천만
 }
 
 void SendBlockChatInfo(LPCHARACTER ch, int sec)
 {
 	if (sec <= 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä  Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채팅 금지 상태입니다."));
 		return;
 	}
 
@@ -67,13 +67,13 @@ void SendBlockChatInfo(LPCHARACTER ch, int sec)
 	char buf[128+1];
 
 	if (hour > 0 && min > 0)
-		snprintf(buf, sizeof(buf), LC_TEXT("%d ð %d  %d   äñ Դϴ"), hour, min, sec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d 시간 %d 분 %d 초 동안 채팅금지 상태입니다"), hour, min, sec);
 	else if (hour > 0 && min == 0)
-		snprintf(buf, sizeof(buf), LC_TEXT("%d ð %d   äñ Դϴ"), hour, sec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d 시간 %d 초 동안 채팅금지 상태입니다"), hour, sec);
 	else if (hour == 0 && min > 0)
-		snprintf(buf, sizeof(buf), LC_TEXT("%d  %d   äñ Դϴ"), min, sec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d 분 %d 초 동안 채팅금지 상태입니다"), min, sec);
 	else
-		snprintf(buf, sizeof(buf), LC_TEXT("%d   äñ Դϴ"), sec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d 초 동안 채팅금지 상태입니다"), sec);
 
 	ch->ChatPacket(CHAT_TYPE_INFO, buf);
 }
@@ -183,7 +183,7 @@ int GetTextTag(const char * src, int maxLen, int & tagLen, std::string & extraIn
 
 	const char * cur = ++src;
 
-	if (*cur == '|') // || | ǥѴ.
+	if (*cur == '|') // ||는 |로 표시한다.
 	{
 		tagLen = 2;
 		return TEXT_TAG_TAG;
@@ -193,7 +193,7 @@ int GetTextTag(const char * src, int maxLen, int & tagLen, std::string & extraIn
 		tagLen = 2;
 		return TEXT_TAG_COLOR;
 	}
-	else if (*cur == 'H') // hyperlink |Hitem:10000:0:0:0:0|h[̸]|h
+	else if (*cur == 'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h
 	{
 		tagLen = 2;
 		return TEXT_TAG_HYPERLINK_START;
@@ -231,12 +231,12 @@ void GetTextTagInfo(const char * src, int src_len, int & hyperlinks, bool & colo
 
 int ProcessTextTag(LPCHARACTER ch, const char * c_pszText, size_t len)
 {
-	//2012.05.17 
-	//0 :  
-	//1 : ݰ 
-	//2 : ݰ , λ 
-	//3 : ȯ
-	//4 : 
+	//2012.05.17 김용욱
+	//0 : 정상적으로 사용
+	//1 : 금강경 부족
+	//2 : 금강경이 있으나, 개인상점에서 사용중
+	//3 : 교환중
+	//4 : 에러
 	int hyperlinks;
 	bool colored;
 	
@@ -306,7 +306,7 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 	if (ch->FindAffect(AFFECT_BLOCK_CHAT))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä  Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채팅 금지 상태입니다."));
 		return (iExtraLen);
 	}
 
@@ -434,18 +434,18 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 			if (g_bEmpireWhisper)
 				if (!ch->IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE))
 					if (!(pkChr && pkChr->IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE)))
-						if (bOpponentEmpire != ch->GetEmpire() && ch->GetEmpire() && bOpponentEmpire //   ٸ鼭
-								&& ch->GetGMLevel() == GM_PLAYER && gm_get_level(pinfo->szNameTo) == GM_PLAYER) // Ѵ Ϲ ÷̸̾
-							// ̸ ۿ 𸣴 gm_get_level Լ 
+						if (bOpponentEmpire != ch->GetEmpire() && ch->GetEmpire() && bOpponentEmpire // 서로 제국이 다르면서
+								&& ch->GetGMLevel() == GM_PLAYER && gm_get_level(pinfo->szNameTo) == GM_PLAYER) // 둘다 일반 플레이어이면
+							// 이름 밖에 모르니 gm_get_level 함수를 사용
 						{
 							if (!pkChr)
 							{
-								// ٸ    ǥø Ѵ. bType  4Ʈ Empireȣ Ѵ.
+								// 다른 서버에 있으니 제국 표시만 한다. bType의 상위 4비트를 Empire번호로 사용한다.
 								bType = ch->GetEmpire() << 4;
 							}
 							else
 							{
-								ConvertEmpireText(ch->GetEmpire(), buf, buflen, 10 + 2 * pkChr->GetSkillPower(SKILL_LANGUAGE1 + ch->GetEmpire() - 1)/*ȯȮ*/);
+								ConvertEmpireText(ch->GetEmpire(), buf, buflen, 10 + 2 * pkChr->GetSkillPower(SKILL_LANGUAGE1 + ch->GetEmpire() - 1)/*변환확률*/);
 							}
 						}
 
@@ -460,16 +460,16 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 					{
 						char buf[128];
 						int len;
-						if (3==processReturn) //ȯ
-							len = snprintf(buf, sizeof(buf), LC_TEXT("ٸ ŷ(â,ȯ,) λ   ϴ."), pTable->szLocaleName);
+						if (3==processReturn) //교환중
+							len = snprintf(buf, sizeof(buf), LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."), pTable->szLocaleName);
 						else
-							len = snprintf(buf, sizeof(buf), LC_TEXT("%s ʿմϴ."), pTable->szLocaleName);
+							len = snprintf(buf, sizeof(buf), LC_TEXT("%s이 필요합니다."), pTable->szLocaleName);
 						
 
 						if (len < 0 || len >= (int) sizeof(buf))
 							len = sizeof(buf) - 1;
 
-						++len;  // \0  
+						++len;  // \0 문자 포함
 
 						TPacketGCWhisper pack;
 
@@ -485,7 +485,7 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 					}
 				}
 
-				//    Ƿ ̸ Ǯش.
+				// 릴래이 상태일 수 있으므로 릴래이를 풀어준다.
 				pkDesc->SetRelay("");
 				return (iExtraLen);
 			}
@@ -502,8 +502,8 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 				pack.bType = bType;
 				strlcpy(pack.szNameFrom, ch->GetName(), sizeof(pack.szNameFrom));
 
-				// desc->BufferedPacket  ʰ ۿ ϴ  
-				// P2P relayǾ Ŷ ĸȭ   ֱ ̴.
+				// desc->BufferedPacket을 하지 않고 버퍼에 써야하는 이유는 
+				// P2P relay되어 패킷이 캡슐화 될 수 있기 때문이다.
 				TEMP_BUFFER tmpbuf;
 
 				tmpbuf.write(&pack, sizeof(pack));
@@ -578,7 +578,7 @@ struct FEmpireChatPacket
 		}
 		else
 		{
-			//  ų ٸ Ź ؾմϴ
+			// 사람마다 스킬레벨이 다르니 매번 해야합니다
 			size_t len = strlcpy(converted_msg, orig_msg, sizeof(converted_msg));
 
 			if (len >= sizeof(converted_msg))
@@ -613,17 +613,17 @@ struct FYmirChatPacket
 		m_iMapIndex(iMapIndex), m_bEmpire(empire),
 		m_ring(ring)
 	{
-		m_len_orig_msg = snprintf(m_orig_msg, sizeof(m_orig_msg), "%s : %s", m_szName, m_szChat) + 1; //   
+		m_len_orig_msg = snprintf(m_orig_msg, sizeof(m_orig_msg), "%s : %s", m_szName, m_szChat) + 1; // 널 문자 포함
 
 		if (m_len_orig_msg < 0 || m_len_orig_msg >= (int) sizeof(m_orig_msg))
 			m_len_orig_msg = sizeof(m_orig_msg) - 1;
 
-		m_len_conv_msg = snprintf(m_conv_msg, sizeof(m_conv_msg), "??? : %s", m_szChat) + 1; //   
+		m_len_conv_msg = snprintf(m_conv_msg, sizeof(m_conv_msg), "??? : %s", m_szChat) + 1; // 널 문자 미포함
 
 		if (m_len_conv_msg < 0 || m_len_conv_msg >= (int) sizeof(m_conv_msg))
 			m_len_conv_msg = sizeof(m_conv_msg) - 1;
 
-		ConvertEmpireText(m_bEmpire, m_conv_msg + 6, m_len_conv_msg - 6, 10); // 6 "??? : " 
+		ConvertEmpireText(m_bEmpire, m_conv_msg + 6, m_len_conv_msg - 6, 10); // 6은 "??? : "의 길이
 	}
 
 	void operator() (LPDESC d)
@@ -691,7 +691,7 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
 		return iExtraLen;
 	}
 
-	// ä  Affect ó
+	// 채팅 금지 Affect 처리
 	const CAffect* pAffect = ch->FindAffect(AFFECT_BLOCK_CHAT);
 
 	if (pAffect != NULL)
@@ -728,10 +728,10 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 		if (NULL != pTable)
 		{
-			if (3==processReturn) //ȯ
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷ(â,ȯ,) λ   ϴ."), pTable->szLocaleName);
+			if (3==processReturn) //교환중
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."), pTable->szLocaleName);
 			else
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ʿմϴ."), pTable->szLocaleName);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s이 필요합니다."), pTable->szLocaleName);
 						
 		}
 
@@ -744,7 +744,7 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 		if (ch->GetLevel() < SHOUT_LIMIT_LEVEL)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ  %d ̻   մϴ."), SHOUT_LIMIT_LEVEL);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("외치기는 레벨 %d 이상만 사용 가능 합니다."), SHOUT_LIMIT_LEVEL);
 			return (iExtraLen);
 		}
 
@@ -807,7 +807,7 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
 		case CHAT_TYPE_PARTY:
 			{
 				if (!ch->GetParty())
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ƽ  ƴմϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("파티 중이 아닙니다."));
 				else
 				{
 					TEMP_BUFFER tbuf;
@@ -824,7 +824,7 @@ int CInputMain::Chat(LPCHARACTER ch, const char * data, size_t uiBytes)
 		case CHAT_TYPE_GUILD:
 			{
 				if (!ch->GetGuild())
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡  ʾҽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("길드에 가입하지 않았습니다."));
 				else
 					ch->GetGuild()->Chat(chatbuf);
 			}
@@ -861,7 +861,7 @@ void CInputMain::ItemDrop(LPCHARACTER ch, const char * data)
 	if (!ch)
 		return;
 
-	// ũ 0 ũ ũ   ̴.
+	// 엘크가 0보다 크면 엘크를 버리는 것 이다.
 	if (pinfo->gold > 0)
 		ch->DropGold(pinfo->gold);
 	else
@@ -877,7 +877,7 @@ void CInputMain::ItemDrop2(LPCHARACTER ch, const char * data)
 
 	TPacketCGItemDrop2 * pinfo = (TPacketCGItemDrop2 *) data;
 
-	// ũ 0 ũ ũ   ̴.
+	// 엘크가 0보다 크면 엘크를 버리는 것 이다.
 	
 	if (!ch)
 		return;
@@ -948,7 +948,7 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)
 
 				if (ch_companion->IsBlockMode(BLOCK_MESSENGER_INVITE))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ޽ ߰ ź Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 메신져 추가 거부 상태입니다."));
 					return sizeof(TPacketCGMessengerAddByVID);
 				}
 
@@ -959,11 +959,11 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)
 
 				if (ch->GetGMLevel() == GM_PLAYER && ch_companion->GetGMLevel() != GM_PLAYER)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<޽> ڴ ޽ ߰  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> 운영자는 메신져에 추가할 수 없습니다."));
 					return sizeof(TPacketCGMessengerAddByVID);
 				}
 
-				if (ch->GetDesc() == d) // ڽ ߰  .
+				if (ch->GetDesc() == d) // 자신은 추가할 수 없다.
 					return sizeof(TPacketCGMessengerAddByVID);
 
 				MessengerManager::instance().RequestToAdd(ch, ch_companion);
@@ -981,26 +981,26 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)
 
 				if (ch->GetGMLevel() == GM_PLAYER && gm_get_level(name) != GM_PLAYER)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<޽> ڴ ޽ ߰  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> 운영자는 메신져에 추가할 수 없습니다."));
 					return CHARACTER_NAME_MAX_LEN;
 				}
 
 				LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(name);
 
 				if (!tch)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ӵ  ʽϴ."), name);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 접속되 있지 않습니다."), name);
 				else
 				{
-					if (tch == ch) // ڽ ߰  .
+					if (tch == ch) // 자신은 추가할 수 없다.
 						return CHARACTER_NAME_MAX_LEN;
 
 					if (tch->IsBlockMode(BLOCK_MESSENGER_INVITE) == true)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ޽ ߰ ź Դϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 메신져 추가 거부 상태입니다."));
 					}
 					else
 					{
-						// ޽ ijʹ Ǹ鼭 
+						// 메신저가 캐릭터단위가 되면서 변경
 						MessengerManager::instance().RequestToAdd(ch, tch);
 						//MessengerManager::instance().AddToList(ch->GetName(), tch->GetName());
 					}
@@ -1118,7 +1118,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 	{
 		if (iPulse - to_ch->GetSafeboxLoadTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 		{
-			to_ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ  %d ̳ â  ϴ."), g_nPortalLimitTime);
+			to_ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래 후 %d초 이내에 창고를 열수 없습니다."), g_nPortalLimitTime);
 			return;
 		}
 
@@ -1132,7 +1132,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 
 	if (iPulse - ch->GetSafeboxLoadTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ  %d ̳ â  ϴ."), g_nPortalLimitTime);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래 후 %d초 이내에 창고를 열수 없습니다."), g_nPortalLimitTime);
 		return;
 	}
 
@@ -1148,14 +1148,14 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 					/*
 					if (to_ch->IsMonarch() || ch->IsMonarch())
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ֿʹ ŷ Ҽ ϴ"), g_nPortalLimitTime);
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주와는 거래를 할수가 없습니다"), g_nPortalLimitTime);
 						return;
 					}
 					//END_MONARCH_LIMIT
 					*/
 					if (iPulse - ch->GetSafeboxLoadTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  %d ̳ ŷ Ҽ ϴ."), g_nPortalLimitTime);
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고를 연후 %d초 이내에는 거래를 할수 없습니다."), g_nPortalLimitTime);
 
 						if (test_server)
 							ch->ChatPacket(CHAT_TYPE_INFO, "[TestOnly][Safebox]Pulse %d LoadTime %d PASS %d", iPulse, ch->GetSafeboxLoadTime(), PASSES_PER_SEC(g_nPortalLimitTime));
@@ -1164,7 +1164,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 
 					if (iPulse - to_ch->GetSafeboxLoadTime() < PASSES_PER_SEC(g_nPortalLimitTime))
 					{
-						to_ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  %d ̳ ŷ Ҽ ϴ."), g_nPortalLimitTime);
+						to_ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고를 연후 %d초 이내에는 거래를 할수 없습니다."), g_nPortalLimitTime);
 
 
 						if (test_server)
@@ -1174,7 +1174,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 
 					if (ch->GetGold() >= GOLD_MAX)
 					{	
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׼ 20  ʰϿ ŷ Ҽ ϴ.."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("액수가 20억 냥을 초과하여 거래를 할수가 없습니다.."));
 
 						sys_err("[OVERFLOG_GOLD] START (%u) id %u name %s ", ch->GetGold(), ch->GetPlayerID(), ch->GetName());
 						return;
@@ -1192,7 +1192,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 
 					if (ch->GetMyShop() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷϰ λ  ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
 						return;
 					}
 
@@ -1224,7 +1224,7 @@ void CInputMain::Exchange(LPCHARACTER ch, const char * data)
 
 				if (GOLD_MAX <= nTotalGold)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѱݾ 20  ʰϿ ŷ Ҽ ϴ.."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방의 총금액이 20억 냥을 초과하여 거래를 할수가 없습니다.."));
 
 					sys_err("[OVERFLOW_GOLD] ELK_ADD (%u) id %u name %s ",
 							ch->GetExchange()->GetCompany()->GetOwner()->GetGold(),
@@ -1289,7 +1289,7 @@ static const int ComboSequenceBySkillLevel[3][8] =
 DWORD ClacValidComboInterval( LPCHARACTER ch, BYTE bArg )
 {
 	int nInterval = 300;
-	float fAdjustNum = 1.5f; // Ϲ  speed hack  ɸ   . 2013.09.10 CYH
+	float fAdjustNum = 1.5f; // 일반 유저가 speed hack 에 걸리는 것을 막기 위해. 2013.09.10 CYH
 
 	if( !ch )
 	{
@@ -1320,17 +1320,17 @@ DWORD ClacValidComboInterval( LPCHARACTER ch, BYTE bArg )
 
 bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack)
 {
-	//	װų  ¿   Ƿ, skipѴ.
-	//	̷  , CHRACTER::CanMove() 
+	//	죽거나 기절 상태에서는 공격할 수 없으므로, skip한다.
+	//	이렇게 하지 말고, CHRACTER::CanMove()에 
 	//	if (IsStun() || IsDead()) return false;
-	//	 ߰ϴ° ´ٰ ϳ,
-	//	̹ ٸ κп CanMove() IsStun(), IsDead()
-	//	 üũϰ ֱ    
-	//	ּȭϱ  ̷  ڵ带 ´.
+	//	를 추가하는게 맞다고 생각하나,
+	//	이미 다른 부분에서 CanMove()는 IsStun(), IsDead()과
+	//	독립적으로 체크하고 있기 때문에 수정에 의한 영향을
+	//	최소화하기 위해 이렇게 땜빵 코드를 써놓는다.
 	if (ch->IsStun() || ch->IsDead())
 		return false;
 	int ComboInterval = dwTime - ch->GetLastComboTime();
-	int HackScalar = 0; // ⺻ Į  1
+	int HackScalar = 0; // 기본 스칼라 단위 1
 
 	// [2013 09 11 CYH] debugging log
 		/*sys_log(0, "COMBO_TEST_LOG: %s arg:%u interval:%d valid:%u atkspd:%u riding:%s",
@@ -1345,18 +1345,18 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 	sys_log(0, "COMBO: %s arg:%u seq:%u delta:%d checkspeedhack:%d",
 			ch->GetName(), bArg, ch->GetComboSequence(), ComboInterval - ch->GetValidComboInterval(), CheckSpeedHack);
 #endif
-	// bArg 14 ~ 21   8޺ 
-	// 1. ù ޺(14)  ð Ŀ ݺ 
-	// 2. 15 ~ 21 ݺ Ұ
-	// 3. ʴ Ѵ.
+	// bArg 14 ~ 21번 까지 총 8콤보 가능
+	// 1. 첫 콤보(14)는 일정 시간 이후에 반복 가능
+	// 2. 15 ~ 21번은 반복 불가능
+	// 3. 차례대로 증가한다.
 	if (bArg == 14)
 	{
 		if (CheckSpeedHack && ComboInterval > 0 && ComboInterval < ch->GetValidComboInterval() - COMBO_HACK_ALLOWABLE_MS)
 		{
-			// FIXME ù° ޺ ̻ϰ    ־ 300  -_-;
-			// ټ Ϳ  ٿǴ Ȳ  ϸ
-			// ù° ޺ ſ  ͹  Ȳ ߻.
-			// ̷  ޺ ƨ 찡 ־  ڵ  Ȱȭ.
+			// FIXME 첫번째 콤보는 이상하게 빨리 올 수가 있어서 300으로 나눔 -_-;
+			// 다수의 몬스터에 의해 다운되는 상황에서 공격을 하면
+			// 첫번째 콤보가 매우 적은 인터벌로 들어오는 상황 발생.
+			// 이로 인해 콤보핵으로 튕기는 경우가 있어 다음 코드 비 활성화.
 			//HackScalar = 1 + (ch->GetValidComboInterval() - ComboInterval) / 300;
 
 			//sys_log(0, "COMBO_HACK: 2 %s arg:%u interval:%d valid:%u atkspd:%u riding:%s",
@@ -1378,13 +1378,13 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 	{
 		int idx = MIN(2, ch->GetComboIndex());
 
-		if (ch->GetComboSequence() > 5) //  6޺ ̻ .
+		if (ch->GetComboSequence() > 5) // 현재 6콤보 이상은 없다.
 		{
 			HackScalar = 1;
 			ch->SetValidComboInterval(300);
 			sys_log(0, "COMBO_HACK: 5 %s combo_seq:%d", ch->GetName(), ch->GetComboSequence());
 		}
-		// ڰ ּ ޺ ó
+		// 자객 쌍수 콤보 예외처리
 		else if (bArg == 21 &&
 				 idx == 2 &&
 				 ch->GetComboSequence() == 5 &&
@@ -1419,7 +1419,7 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 						ch->IsRiding() ? "yes" : "no");
 			}
 
-			//    15 ~ 16 ݺѴ
+			// 말을 탔을 때는 15번 ~ 16번을 반복한다
 			//if (ch->IsHorseRiding())
 			if (ch->IsRiding())
 				ch->SetComboSequence(ch->GetComboSequence() == 1 ? 2 : 1);
@@ -1432,13 +1432,13 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 			ch->SetLastComboTime(dwTime);
 		}
 	}
-	else if (bArg == 13) // ⺻  (а(Polymorph)  ´)
+	else if (bArg == 13) // 기본 공격 (둔갑(Polymorph)했을 때 온다)
 	{
 		if (CheckSpeedHack && ComboInterval > 0 && ComboInterval < ch->GetValidComboInterval() - COMBO_HACK_ALLOWABLE_MS)
 		{
-			// ټ Ϳ  ٿǴ Ȳ  ϸ
-			// ù° ޺ ſ  ͹  Ȳ ߻.
-			// ̷  ޺ ƨ 찡 ־  ڵ  Ȱȭ.
+			// 다수의 몬스터에 의해 다운되는 상황에서 공격을 하면
+			// 첫번째 콤보가 매우 적은 인터벌로 들어오는 상황 발생.
+			// 이로 인해 콤보핵으로 튕기는 경우가 있어 다음 코드 비 활성화.
 			//HackScalar = 1 + (ch->GetValidComboInterval() - ComboInterval) / 100;
 
 			//sys_log(0, "COMBO_HACK: 6 %s arg:%u interval:%d valid:%u atkspd:%u",
@@ -1461,8 +1461,8 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 				sys_err("cannot find motion by race %u", ch->GetRaceNum());
 			else
 			{
-				//  ̶ 1000.f ؾ  Ŭ̾Ʈ ִϸ̼ ӵ 90%
-				//  ִϸ̼  ϹǷ 900.f Ѵ.
+				// 정상적 계산이라면 1000.f를 곱해야 하지만 클라이언트가 애니메이션 속도의 90%에서
+				// 다음 애니메이션 블렌딩을 허용하므로 900.f를 곱한다.
 				int k = (int) (pkMotion->GetDuration() / ((float) ch->GetPoint(POINT_ATT_SPEED) / 100.f) * 900.f);
 				ch->SetValidComboInterval(k);
 				ch->SetLastComboTime(dwTime);
@@ -1479,32 +1479,32 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 		}
 		else
 		{
-			//  ȵǴ ޺ Դ Ŀ ɼ?
+			// 말이 안되는 콤보가 왔다 해커일 가능성?
 			//if (ch->GetDesc()->DelayedDisconnect(number(2, 9)))
 			//{
 			//	LogManager::instance().HackLog("Hacker", ch);
 			//	sys_log(0, "HACKER: %s arg %u", ch->GetName(), bArg);
 			//}
 
-			//  ڵ ,  Ǫ ߿  ϸ,
-			//   νϴ 찡 ִ.
+			// 위 코드로 인해, 폴리모프를 푸는 중에 공격 하면,
+			// 가끔 핵으로 인식하는 경우가 있다.
 
-			// ڼ ,
-			//  poly 0 ó,
-			// Ŭ󿡼  Ŷ ޱ ,  . <- ,  ¿ .
+			// 자세히 말혀면,
+			// 서버에서 poly 0를 처리했지만,
+			// 클라에서 그 패킷을 받기 전에, 몹을 공격. <- 즉, 몹인 상태에서 공격.
 			//
-			// ׷ Ŭ󿡼   · ߴٴ Ŀǵ带  (arg == 13)
+			// 그러면 클라에서는 서버에 몹 상태로 공격했다는 커맨드를 보내고 (arg == 13)
 			//
-			//  race ΰε ´  ̴!  Ͽ üũ ߴ.
+			// 서버에서는 race는 인간인데 공격형태는 몹인 놈이다! 라고 하여 핵체크를 했다.
 
-			//   Ͽ   Ŭ̾Ʈ Ǵؼ   ƴ϶,
-			//  Ǵؾ  ε...  ̷ س...
+			// 사실 공격 패턴에 대한 것은 클라이언트에서 판단해서 보낼 것이 아니라,
+			// 서버에서 판단해야 할 것인데... 왜 이렇게 해놨을까...
 			// by rtsummit
 		}
 	}
 	else
 	{
-		//  ȵǴ ޺ Դ Ŀ ɼ?
+		// 말이 안되는 콤보가 왔다 해커일 가능성?
 		if (ch->GetDesc()->DelayedDisconnect(number(2, 9)))
 		{
 			LogManager::instance().HackLog("Hacker", ch);
@@ -1517,7 +1517,7 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 
 	if (HackScalar)
 	{
-		//  Ÿų   1.5ʰ    ʵ ݷ  ϴ ó
+		// 말에 타거나 내렸을 때 1.5초간 공격은 핵으로 간주하지 않되 공격력은 없게 하는 처리
 		if (get_dword_time() - ch->GetLastMountTime() > 1500)
 			ch->IncreaseComboHackCount(1 + HackScalar);
 
@@ -1552,9 +1552,9 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 	//	FUNC_SKILL = 0x80,
 	//};  
 
-	// ڷƮ  üũ
+	// 텔레포트 핵 체크
 
-//	if (!test_server)	//2012.05.15  : ׼ (·) ټ   ٿǸ鼭 ݽ ޺ ״  ־.
+//	if (!test_server)	//2012.05.15 김용욱 : 테섭에서 (무적상태로) 다수 몬스터 상대로 다운되면서 공격시 콤보핵으로 죽는 문제가 있었다.
 	{
 		const float fDist = DISTANCE_SQRT((ch->GetX() - pinfo->lX) / 100, (ch->GetY() - pinfo->lY) / 100);
 
@@ -1565,7 +1565,7 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 				const PIXEL_POSITION & warpPos = ch->GetWarpPosition();
 
 				if (warpPos.x == 0 && warpPos.y == 0)
-					LogManager::instance().HackLog("Teleport", ch); // Ȯ  
+					LogManager::instance().HackLog("Teleport", ch); // 부정확할 수 있음
 			}
 
 			sys_log(0, "MOVE: %s trying to move too far (dist: %.1fm) Riding(%d)", ch->GetName(), fDist, ch->IsRiding());
@@ -1576,10 +1576,10 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 		}
 
 		//
-		// ǵ(SPEEDHACK) Check
+		// 스피드핵(SPEEDHACK) Check
 		//
 		DWORD dwCurTime = get_dword_time();
-		// ð Syncϰ 7   ˻Ѵ. (20090702  5ʿ)
+		// 시간을 Sync하고 7초 후 부터 검사한다. (20090702 이전엔 5초였음)
 		bool CheckSpeedHack = (false == ch->GetDesc()->IsHandshaking() && dwCurTime - ch->GetDesc()->GetClientTime() > 7000);
 
 		if (CheckSpeedHack)
@@ -1589,13 +1589,13 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 
 			iDelta = (int) (dwCurTime - pinfo->dwTime);
 
-			// ð ʰ԰. ϴ α׸ صд. ¥ ̷   üũؾ. TODO
+			// 시간이 늦게간다. 일단 로그만 해둔다. 진짜 이런 사람들이 많은지 체크해야함. TODO
 			if (iDelta >= 30000)
 			{
 				sys_log(0, "SPEEDHACK: slow timer name %s delta %d", ch->GetName(), iDelta);
 				// ch->GetDesc()->DelayedDisconnect(3);
 			}
-			// 1ʿ 20msec  °  Ѵ.
+			// 1초에 20msec 빨리 가는거 까지는 이해한다.
 			else if (iDelta < -(iServerDelta / 50))
 			{
 				sys_log(0, "SPEEDHACK: DETECTED! %s (delta %d %d)", ch->GetName(), iDelta, iServerDelta);
@@ -1604,11 +1604,11 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 		}
 
 		//
-		// ޺  ǵ üũ
+		// 콤보핵 및 스피드핵 체크
 		//
 		if (pinfo->bFunc == FUNC_COMBO && g_bCheckMultiHack)
 		{
-			CheckComboHack(ch, pinfo->bArg, pinfo->dwTime, CheckSpeedHack); // ޺ üũ
+			CheckComboHack(ch, pinfo->bArg, pinfo->dwTime, CheckSpeedHack); // 콤보 체크
 		}
 	}
 
@@ -1617,7 +1617,7 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 		if (ch->GetLimitPoint(POINT_MOV_SPEED) == 0)
 			return;
 
-		ch->SetRotation(pinfo->bRot * 5);	// ߺ ڵ
+		ch->SetRotation(pinfo->bRot * 5);	// 중복 코드
 		ch->ResetStopTime();				// ""
 
 		ch->Goto(pinfo->lX, pinfo->lY);
@@ -1656,7 +1656,7 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 			ch->OnMove();
 		}
 
-		ch->SetRotation(pinfo->bRot * 5);	// ߺ ڵ
+		ch->SetRotation(pinfo->bRot * 5);	// 중복 코드
 		ch->ResetStopTime();				// ""
 
 		ch->Move(pinfo->lX, pinfo->lY);
@@ -1678,13 +1678,13 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 
 	ch->PacketAround(&pack, sizeof(TPacketGCMove), ch);
 /*
-	if (pinfo->dwTime == 10653691) //  ߰
+	if (pinfo->dwTime == 10653691) // 디버거 발견
 	{
 		if (ch->GetDesc()->DelayedDisconnect(number(15, 30)))
 			LogManager::instance().HackLog("Debugger", ch);
 
 	}
-	else if (pinfo->dwTime == 10653971) // Softice ߰
+	else if (pinfo->dwTime == 10653971) // Softice 발견
 	{
 		if (ch->GetDesc()->DelayedDisconnect(number(15, 30)))
 			LogManager::instance().HackLog("Softice", ch);
@@ -1860,20 +1860,20 @@ int CInputMain::SyncPosition(LPCHARACTER ch, const char * c_pcData, size_t uiByt
 				continue;
 		}
 
-		//  ˻
+		// 소유권 검사
 		if (!victim->SetSyncOwner(ch))
 			continue;
 
 		const float fDistWithSyncOwner = DISTANCE_SQRT( (victim->GetX() - ch->GetX()) / 100, (victim->GetY() - ch->GetY()) / 100 );
 		static const float fLimitDistWithSyncOwner = 2500.f + 1000.f;
-		// victim Ÿ 2500 + a ̸̻  .
-		//	Ÿ  : Ŭ̾Ʈ __GetSkillTargetRange, __GetBowRange Լ
-		//	2500 : ų proto  Ÿ  ų Ÿ, Ǵ Ȱ Ÿ
-		//	a = POINT_BOW_DISTANCE ... ε  ϴ   𸣰. ̳ , ų, Ʈ µ...
-		//		׷ Ȥó ϴ  ۷  ؼ 1000.f  ...
+		// victim과의 거리가 2500 + a 이상이면 핵으로 간주.
+		//	거리 참조 : 클라이언트의 __GetSkillTargetRange, __GetBowRange 함수
+		//	2500 : 스킬 proto에서 가장 사거리가 긴 스킬의 사거리, 또는 활의 사거리
+		//	a = POINT_BOW_DISTANCE 값... 인데 실제로 사용하는 값인지는 잘 모르겠음. 아이템이나 포션, 스킬, 퀘스트에는 없는데...
+		//		그래도 혹시나 하는 마음에 버퍼로 사용할 겸해서 1000.f 로 둠...
 		if (fDistWithSyncOwner > fLimitDistWithSyncOwner)
 		{
-			// g_iSyncHackLimitCount  .
+			// g_iSyncHackLimitCount번 까지는 봐줌.
 			if (ch->GetSyncHackCount() < g_iSyncHackLimitCount)
 			{
 				ch->SetSyncHackCount(ch->GetSyncHackCount() + 1);
@@ -1898,11 +1898,11 @@ int CInputMain::SyncPosition(LPCHARACTER ch, const char * c_pcData, size_t uiByt
 		const timeval &tvLastSyncTime = victim->GetLastSyncTime();
 		timeval *tvDiff = timediff(&tvCurTime, &tvLastSyncTime);
 		
-		// SyncPosition ǿϿ Ÿ ̻    ϱ Ͽ,
-		//   g_lValidSyncInterval ms ̳ ٽ SyncPositionϷ ϸ  .
+		// SyncPosition을 악용하여 타유저를 이상한 곳으로 보내는 핵 방어하기 위하여,
+		// 같은 유저를 g_lValidSyncInterval ms 이내에 다시 SyncPosition하려고 하면 핵으로 간주.
 		if (tvDiff->tv_sec == 0 && tvDiff->tv_usec < g_lValidSyncInterval)
 		{
-			// g_iSyncHackLimitCount  .
+			// g_iSyncHackLimitCount번 까지는 봐줌.
 			if (ch->GetSyncHackCount() < g_iSyncHackLimitCount)
 			{
 				ch->SetSyncHackCount(ch->GetSyncHackCount() + 1);
@@ -1989,11 +1989,11 @@ void CInputMain::ScriptAnswer(LPCHARACTER ch, const void* c_pData)
 	TPacketCGScriptAnswer * p = (TPacketCGScriptAnswer *) c_pData;
 	sys_log(0, "QUEST ScriptAnswer pid %d answer %d", ch->GetPlayerID(), p->answer);
 
-	if (p->answer > 250) //  ư    Ŷ 
+	if (p->answer > 250) // 다음 버튼에 대한 응답으로 온 패킷인 경우
 	{
 		quest::CQuestManager::Instance().Resume(ch->GetPlayerID());
 	}
-	else //  ư   Ŷ 
+	else // 선택 버튼을 골라서 온 패킷인 경우
 	{
 		quest::CQuestManager::Instance().Select(ch->GetPlayerID(),  p->answer);
 	}
@@ -2076,31 +2076,31 @@ void CInputMain::SafeboxCheckin(LPCHARACTER ch, const char * c_pData)
 
 	if (pkItem->GetCell() >= INVENTORY_MAX_NUM && IS_SET(pkItem->GetFlag(), ITEM_FLAG_IRREMOVABLE))
 	{
-	    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â ű    Դϴ."));
+	    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 창고로 옮길 수 없는 아이템 입니다."));
 	    return;
 	}
 
 	if (!pkSafebox->IsEmpty(p->bSafePos, pkItem->GetSize()))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ű   ġԴϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
 		return;
 	}
 
 	if (pkItem->GetVnum() == UNIQUE_ITEM_SAFEBOX_EXPAND)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 이 아이템은 넣을 수 없습니다."));
 		return;
 	}
 
 	if( IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_SAFEBOX) )
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 이 아이템은 넣을 수 없습니다."));
 		return;
 	}
 
 	if (true == pkItem->isLocked())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 이 아이템은 넣을 수 없습니다."));
 		return;
 	}
 
@@ -2139,9 +2139,9 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 	if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize()))
 		return;
 
-	//   κ ű κп ȥ Ư ó
-	// (   item_proto ǵȴ Ӽ ٱ ,
-	//  ȥ ,  ó   Ӽ ϳ  ʰ ȴ.)
+	// 아이템 몰에서 인벤으로 옮기는 부분에서 용혼석 특수 처리
+	// (몰에서 만드는 아이템은 item_proto에 정의된대로 속성이 붙기 때문에,
+	//  용혼석의 경우, 이 처리를 하지 않으면 속성이 하나도 붙지 않게 된다.)
 	if (pkItem->IsDragonSoul())
 	{
 		if (bMall)
@@ -2151,7 +2151,7 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 
 		if (DRAGON_SOUL_INVENTORY != p->ItemPos.window_type)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ű   ġԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
 			return;
 		}
 		
@@ -2161,7 +2161,7 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 			int iCell = ch->GetEmptyDragonSoulInventory(pkItem);
 			if (iCell < 0)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ű   ġԴϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
 				return ;
 			}
 			DestPos = TItemPos (DRAGON_SOUL_INVENTORY, iCell);
@@ -2175,7 +2175,7 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 	{
 		if (DRAGON_SOUL_INVENTORY == p->ItemPos.window_type)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ű   ġԴϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<창고> 옮길 수 없는 위치입니다."));
 			return;
 		}
 
@@ -2187,7 +2187,7 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 				sys_err ("pkItem->GetProto() == NULL (id : %d)",pkItem->GetID());
 				return ;
 			}
-			// 100% Ȯ Ӽ پ ϴµ  پִٸ  . ...............
+			// 100% 확률로 속성이 붙어야 하는데 안 붙어있다면 새로 붙힌다. ...............
 			if (100 == pkItem->GetProto()->bAlterToMagicItemPct && 0 == pkItem->GetAttributeCount())
 			{
 				pkItem->AlterToMagicItem();
@@ -2227,7 +2227,7 @@ void CInputMain::PartyInvite(LPCHARACTER ch, const char * c_pData)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
@@ -2248,7 +2248,7 @@ void CInputMain::PartyInviteAnswer(LPCHARACTER ch, const char * c_pData)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
@@ -2256,10 +2256,10 @@ void CInputMain::PartyInviteAnswer(LPCHARACTER ch, const char * c_pData)
 
 	LPCHARACTER pInviter = CHARACTER_MANAGER::instance().Find(p->leader_vid);
 
-	// pInviter  ch  Ƽ û ߾.
+	// pInviter 가 ch 에게 파티 요청을 했었다.
 
 	if (!pInviter)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽû  ij͸ ã ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티요청을 한 캐릭터를 찾을수 없습니다."));
 	else if (!p->accept)
 		pInviter->PartyInviteDeny(ch->GetPlayerID());
 	else
@@ -2271,7 +2271,7 @@ void CInputMain::PartySetState(LPCHARACTER ch, const char* c_pData)
 {
 	if (!CPartyManager::instance().IsEnablePCParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 		return;
 	}
 
@@ -2282,13 +2282,13 @@ void CInputMain::PartySetState(LPCHARACTER ch, const char* c_pData)
 
 	if (ch->GetParty()->GetLeaderPID() != ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>    ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 리더만 변경할 수 있습니다."));
 		return;
 	}
 
 	if (!ch->GetParty()->IsMember(p->pid))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ¸ Ϸ  Ƽ ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 상태를 변경하려는 사람이 파티원이 아닙니다."));
 		return;
 	}
 
@@ -2316,7 +2316,7 @@ void CInputMain::PartySetState(LPCHARACTER ch, const char* c_pData)
 				db_clientdesc->DBPacket(HEADER_GD_PARTY_STATE_CHANGE, 0, &pack, sizeof(pack));
 			}
 			/* else
-			   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ŀ  Ͽϴ.")); */
+			   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 어태커 설정에 실패하였습니다.")); */
 			break;
 
 		default:
@@ -2329,19 +2329,19 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("대련장에서 사용하실 수 없습니다."));
 		return;
 	}
 
 	if (!CPartyManager::instance().IsEnablePCParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 서버 문제로 파티 관련 처리를 할 수 없습니다."));
 		return;
 	}
 
 	if (ch->GetDungeon())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ߹  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던전 안에서는 파티에서 추방할 수 없습니다."));
 		return;
 	}
 
@@ -2355,7 +2355,7 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 	{
 		if (ch->GetDungeon())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  Ƽ ߹  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던젼내에서는 파티원을 추방할 수 없습니다."));
 		}
 		else
 		{
@@ -2371,7 +2371,7 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 				if (B)
 				{
 					//pParty->SendPartyRemoveOneToAll(B);
-					B->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ߹ϼ̽ϴ."));
+					B->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티에서 추방당하셨습니다."));
 					//pParty->Unlink(B);
 					//CPartyManager::instance().SetPartyMember(B->GetPlayerID(), NULL);
 				}
@@ -2386,7 +2386,7 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 		{
 			if (ch->GetDungeon())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  Ƽ   ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 던젼내에서는 파티를 나갈 수 없습니다."));
 			}
 			else
 			{
@@ -2397,7 +2397,7 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 				}
 				else
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티에서 나가셨습니다."));
 					//pParty->SendPartyRemoveOneToAll(ch);
 					pParty->Quit(ch->GetPlayerID());
 					//pParty->SendPartyRemoveAllToOne(ch);
@@ -2407,7 +2407,7 @@ void CInputMain::PartyRemove(LPCHARACTER ch, const char* c_pData)
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ٸ Ƽ Żų  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 다른 파티원을 탈퇴시킬 수 없습니다."));
 		}
 	}
 }
@@ -2422,7 +2422,7 @@ void CInputMain::AnswerMakeGuild(LPCHARACTER ch, const char* c_pData)
 	if (get_global_time() - ch->GetQuestFlag("guild_manage.new_disband_time") <
 			CGuildManager::instance().GetDisbandDelay())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ػ  %d ̳ 带   ϴ."), 
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 해산한 후 %d일 이내에는 길드를 만들 수 없습니다."), 
 				quest::CQuestManager::instance().GetEventFlag("guild_disband_delay"));
 		return;
 	}
@@ -2430,7 +2430,7 @@ void CInputMain::AnswerMakeGuild(LPCHARACTER ch, const char* c_pData)
 	if (get_global_time() - ch->GetQuestFlag("guild_manage.new_withdraw_time") <
 			CGuildManager::instance().GetWithdrawDelay())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> Ż  %d ̳ 带   ϴ."), 
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 탈퇴한 후 %d일 이내에는 길드를 만들 수 없습니다."), 
 				quest::CQuestManager::instance().GetEventFlag("guild_withdraw_delay"));
 		return;
 	}
@@ -2448,7 +2448,7 @@ void CInputMain::AnswerMakeGuild(LPCHARACTER ch, const char* c_pData)
 
 	if (cp.name[0] == 0 || !check_name(cp.name))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ̸ Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적합하지 않은 길드 이름 입니다."));
 		return;
 	}
 
@@ -2456,7 +2456,7 @@ void CInputMain::AnswerMakeGuild(LPCHARACTER ch, const char* c_pData)
 
 	if (dwGuildID)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> [%s] 尡 Ǿϴ."), cp.name);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> [%s] 길드가 생성되었습니다."), cp.name);
 
 		int GuildCreateFee;
 
@@ -2481,7 +2481,7 @@ void CInputMain::AnswerMakeGuild(LPCHARACTER ch, const char* c_pData)
 		//ch->SendGuildName(dwGuildID);
 	}
 	else
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ͽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드 생성에 실패하였습니다."));
 }
 
 void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData)
@@ -2492,7 +2492,7 @@ void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData)
 
 	if (ch->GetPlayerID() != ch->GetParty()->GetLeaderPID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ  Ƽ常   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티 기술은 파티장만 사용할 수 있습니다."));
 		return;
 	}
 
@@ -2507,7 +2507,7 @@ void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData)
 				if (pch)
 					ch->GetParty()->SummonToLeader(pch->GetPlayerID());
 				else
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ȯϷ  ã  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 소환하려는 대상을 찾을 수 없습니다."));
 			}
 			break;
 	}
@@ -2569,7 +2569,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 	{
 		if (SubHeader != GUILD_SUBHEADER_CG_GUILD_INVITE_ANSWER)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 忡  ʽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드에 속해있지 않습니다."));
 			return SubPacketLen;
 		}
 	}
@@ -2578,20 +2578,20 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 	{
 		case GUILD_SUBHEADER_CG_DEPOSIT_MONEY:
 			{
-				// by mhh : ڱ а   .
+				// by mhh : 길드자금은 당분간 넣을 수 없다.
 				return SubPacketLen;
 
 				const int gold = MIN(*reinterpret_cast(c_pData), __deposit_limit());
 
 				if (gold < 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߸ ݾԴϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 잘못된 금액입니다."));
 					return SubPacketLen;
 				}
 
 				if (ch->GetGold() < gold)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ִ  մϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 가지고 있는 돈이 부족합니다."));
 					return SubPacketLen;
 				}
 
@@ -2601,14 +2601,14 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 		case GUILD_SUBHEADER_CG_WITHDRAW_MONEY:
 			{
-				// by mhh : ڱ а   .
+				// by mhh : 길드자금은 당분간 뺄 수 없다.
 				return SubPacketLen;
 
 				const int gold = MIN(*reinterpret_cast(c_pData), 500000);
 
 				if (gold < 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߸ ݾԴϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 잘못된 금액입니다."));
 					return SubPacketLen;
 				}
 
@@ -2624,7 +2624,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 				// if (!newmember)
 				if (!newmember || !newmember->IsPC()) // Fix
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷  ã  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 그러한 사람을 찾을 수 없습니다."));
 					return SubPacketLen;
 				}
 
@@ -2635,7 +2635,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 				{
 					if (newmember->GetQuestFlag("change_guild_master.be_other_member") > get_global_time())
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ijԴϴ"));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 아직 가입할 수 없는 캐릭터입니다"));
 						return SubPacketLen;
 					}
 				}
@@ -2648,7 +2648,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 			{
 				if (pGuild->UnderAnyWar() != 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ߿  Żų  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드전 중에는 길드원을 탈퇴시킬 수 없습니다."));
 					return SubPacketLen;
 				}
 
@@ -2664,13 +2664,13 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 				{
 					if (member->GetGuild() != pGuild)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   尡 ƴմϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 상대방이 같은 길드가 아닙니다."));
 						return SubPacketLen;
 					}
 
 					if (!pGuild->HasGradeAuth(m->grade, GUILD_AUTH_REMOVE_MEMBER))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ż ų  ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드원을 강제 탈퇴 시킬 권한이 없습니다."));
 						return SubPacketLen;
 					}
 
@@ -2686,14 +2686,14 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 				{
 					if (!pGuild->HasGradeAuth(m->grade, GUILD_AUTH_REMOVE_MEMBER))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ż ų  ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드원을 강제 탈퇴 시킬 권한이 없습니다."));
 						return SubPacketLen;
 					}
 
 					if (pGuild->RequestRemoveMember(pid))
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ż ׽ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드원을 강제 탈퇴 시켰습니다."));
 					else
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷  ã  ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 그러한 사람을 찾을 수 없습니다."));
 				}
 			}
 			return SubPacketLen;
@@ -2710,15 +2710,15 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (m->grade != GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ̸   ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 직위 이름을 변경할 권한이 없습니다."));
 				}
 				else if (*c_pData == GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   ̸   ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드장의 직위 이름은 변경할 수 없습니다."));
 				}
 				else if (!check_name(gradename))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ̸ Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 적합하지 않은 직위 이름 입니다."));
 				}
 				else
 				{
@@ -2736,11 +2736,11 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (m->grade != GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 직위 권한을 변경할 권한이 없습니다."));
 				}
 				else if (*c_pData == GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드장의 권한은 변경할 수 없습니다."));
 				}
 				else
 				{
@@ -2755,7 +2755,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (pGuild->GetLevel() >= GUILD_MAX_LEVEL && LC_IsHongKong() == false)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 尡 ̹ ְ Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드가 이미 최고 레벨입니다."));
 				}
 				else
 				{
@@ -2764,11 +2764,11 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 					if (pGuild->OfferExp(ch, offer))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> %u ġ Ͽϴ."), offer);
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> %u의 경험치를 투자하였습니다."), offer);
 					}
 					else
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ġ ڿ Ͽϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 경험치 투자에 실패하였습니다."));
 					}
 				}
 			}
@@ -2781,13 +2781,13 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (offer < 0 || gold < offer || gold < 0 || ch->GetGold() < gold)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  մϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 돈이 부족합니다."));
 					return SubPacketLen;
 				}
 
 				if (!pGuild->ChargeSP(ch, offer))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ŷ ȸ Ͽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 용신력 회복에 실패하였습니다."));
 				}
 			}
 			return SubPacketLen;
@@ -2798,7 +2798,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (length > GUILD_COMMENT_MAX_LEN)
 				{
-					// ߸ .. .
+					// 잘못된 길이.. 끊어주자.
 					sys_err("POST_COMMENT: %s comment too long (length: %u)", ch->GetName(), length);
 					ch->GetDesc()->SetPhase(PHASE_CLOSE);
 					return -1;
@@ -2814,7 +2814,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (length && !pGuild->HasGradeAuth(m->grade, GUILD_AUTH_NOTICE) && *(c_pData + 1) == '!')
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ۼ  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 공지글을 작성할 권한이 없습니다."));
 				}
 				else
 				{
@@ -2847,11 +2847,11 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 					return -1;
 
 				if (m->grade != GUILD_LEADER_GRADE)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 직위를 변경할 권한이 없습니다."));
 				else if (ch->GetPlayerID() == pid)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드장의 직위는 변경할 수 없습니다."));
 				else if (grade == 1)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 길드장으로 직위를 변경할 수 없습니다."));
 				else
 					pGuild->ChangeMemberGrade(pid, grade);
 			}
@@ -2876,13 +2876,13 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (m->grade != GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 屺   ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 장군을 지정할 권한이 없습니다."));
 				}
 				else
 				{
 					if (!pGuild->ChangeMemberGeneral(pid, is_general))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̻    ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길드> 더이상 장수를 지정할 수 없습니다."));
 					}
 				}
 			}
@@ -2926,7 +2926,7 @@ void CInputMain::ItemGive(LPCHARACTER ch, const char* c_pData)
 	if (to_ch)
 		ch->GiveItem(to_ch, p->ItemPos);
 	else
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" dz  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템을 건네줄 수 없습니다."));
 }
 
 void CInputMain::Hack(LPCHARACTER ch, const char * c_pData)
@@ -2938,7 +2938,7 @@ void CInputMain::Hack(LPCHARACTER ch, const char * c_pData)
 
 	sys_err("HACK_DETECT: %s %s", ch->GetName(), buf);
 
-	//  Ŭ̾Ʈ  Ŷ  찡 Ƿ   Ѵ
+	// 현재 클라이언트에서 이 패킷을 보내는 경우가 없으므로 무조건 끊도록 한다
 	ch->GetDesc()->SetPhase(PHASE_CLOSE);
 }
 
@@ -2952,7 +2952,7 @@ int CInputMain::MyShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes)
 
 	if (ch->GetGold() >= GOLD_MAX)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  20 Ѿ ŷ ۼ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소유 돈이 20억냥을 넘어 거래를 핼수가 없습니다."));
 		sys_log(0, "MyShop ==> OverFlow Gold id %u name %s ", ch->GetPlayerID(), ch->GetName());
 		return (iExtraLen);
 	}
@@ -2962,7 +2962,7 @@ int CInputMain::MyShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes)
 
 	if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷϰ λ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
 		return (iExtraLen);
 	}
 
@@ -2977,7 +2977,7 @@ void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
 
 	if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->GetMyShop() || ch->IsCubeOpen())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO,  LC_TEXT("â,ŷâ  ¿  Ҽ ϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO,  LC_TEXT("창고,거래창등이 열린 상태에서는 개량을 할수가 없습니다"));
 		ch->ClearRefineMode();
 		return;
 	}
@@ -3034,7 +3034,7 @@ void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
 				}
 				else
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, " Ÿ Ϸ  ѹ 밡մϴ.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "사귀 타워 완료 보상은 한번까지 사용가능합니다.");
 				}
 			}
 		}
@@ -3099,7 +3099,7 @@ int CInputMain::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 					// if (version > date)
 					if (version != date) // Fix
 					{
-						ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+						ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("클라이언트 버전이 틀려 로그아웃 됩니다. 정상적으로 패치 후 접속하세요."));
 						d->DelayedDisconnect(10);
 						LogManager::instance().HackLog("VERSION_CONFLICT", d->GetAccountTable().login, ch->GetName(), d->GetHostName());
 					}
diff --git a/src/game/input_p2p.cpp b/src/game/input_p2p.cpp
index dcb8e4d..c4672f0 100644
--- a/src/game/input_p2p.cpp
+++ b/src/game/input_p2p.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h" 
+#include "stdafx.h" 
 #include "../../common/billing.h"
 #include "config.h"
 #include "desc_client.h"
@@ -68,7 +68,7 @@ int CInputP2P::Relay(LPDESC d, const char * c_pData, size_t uiBytes)
 	{
 		if (pkChr->IsBlockMode(BLOCK_WHISPER))
 		{
-			// ӼӸ ź ¿ ӼӸ ź.
+			// 귓속말 거부 상태에서 귓속말 거부.
 			return p->lSize;
 		}
 
@@ -76,12 +76,12 @@ int CInputP2P::Relay(LPDESC d, const char * c_pData, size_t uiBytes)
 		memcpy(buf, c_pbData, MIN(p->lSize, sizeof(buf)));
 
 		TPacketGCWhisper* p2 = (TPacketGCWhisper*) buf;
-		// bType  4Ʈ: Empire ȣ
-		// bType  4Ʈ: EWhisperType
+		// bType 상위 4비트: Empire 번호
+		// bType 하위 4비트: EWhisperType
 		BYTE bToEmpire = (p2->bType >> 4);
 		p2->bType = p2->bType & 0x0F;
 		if(p2->bType == 0x0F) {
-			// ý ޼ ӼӸ bType Ʈ  .
+			// 시스템 메세지 귓속말은 bType의 상위비트까지 모두 사용함.
 			p2->bType = WHISPER_TYPE_SYSTEM;
 		} else {
 			if (!pkChr->IsEquipUniqueGroup(UNIQUE_GROUP_RING_OF_LANGUAGE))
@@ -339,7 +339,7 @@ void CInputP2P::XmasWarpSanta(const char * c_pData)
 		else
 			iNextSpawnDelay = 50 * 60;
 
-		xmas::SpawnSanta(p->lMapIndex, iNextSpawnDelay); // 50ִٰ ο Ÿ Ÿ (ѱ 20)
+		xmas::SpawnSanta(p->lMapIndex, iNextSpawnDelay); // 50분있다가 새로운 산타가 나타남 (한국은 20분)
 
 		TPacketGGXmasWarpSantaReply pack_reply;
 		pack_reply.bHeader = HEADER_GG_XMAS_WARP_SANTA_REPLY;
diff --git a/src/game/input_teen.cpp b/src/game/input_teen.cpp
index cae29aa..41e5086 100644
--- a/src/game/input_teen.cpp
+++ b/src/game/input_teen.cpp
@@ -1,4 +1,4 @@
-/*********************************************************************
+/*********************************************************************
  * date        : 2007.06.07
  * file        : input_teen.cpp
  * author      : mhh
@@ -96,32 +96,32 @@ static void __proc_teen_notice(char *login, int hour)
 		case 1:
 		case 2:
 			{
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("  ¶ ð ̹ %dð ϴ."), hour);
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간이 이미 %d시간이 지났습니다."), hour);
 				SET_OVER_TIME(ch, OT_NONE);
 			}
 			break;
 		case 3:
 			{
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("  ¶ ð ̹ %dð Ǿϴ,"), hour);
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("  Ͻ  ǰ  ޽ ֽñٶϴ."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간이 이미 %d시간이 되었습니다,"), hour);
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("조속히 접속을 종료하신 후 건강을 위해 휴식을 취해주시기바랍니다."));
 				SET_OVER_TIME(ch, OT_3HOUR);
 			}
 			break;
 		case 4:
 			{
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ̹  Ƿ ¿ ,"));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   ġ 50% ˴ϴ."));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ǰ    Ͻð"));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("޽  о ֽʽÿ."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신은 이미 게임 피로 상태에 들어섰으며,"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("게임 내의 수익이 정상치의 50%로 하향됩니다."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 건강을 위해 조속히 접속을 종료하시고"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("휴식 및 학업에 열중해주십시오."));
 				SET_OVER_TIME(ch, OT_3HOUR);
 			}
 			break;
 		default:
 			{
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ̹    ð ϴ."));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("ǰ    Ͻ  ޽ ֽʽÿ,"));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("׷  ǰ  ظ      ġ 0 ˴ϴ."));
-				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("  ð 5ð Ǹ  ƿɴϴ."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신은 이미 온전하지 못한 게임 시간에 들어섰습니다."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("건강을 위해 조속히 접속을 종료하신 후 휴식을 취해주십시오,"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("그렇지 않으면 건강 상에 피해를 입을 수 있으며 게임 내의 수치는 0이 됩니다."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("누적 오프라인 시간이 5시간이 되면 정상으로 돌아옵니다."));
 				SET_OVER_TIME(ch, OT_5HOUR);
 			}
 			break;
@@ -134,9 +134,9 @@ static inline void __sec_to_timestring(int sec, char *buf, size_t buflen)
 	int min		= (sec/60);
 
 	if (hour>0)
-		snprintf(buf, buflen, LC_TEXT("%dð"), hour);
+		snprintf(buf, buflen, LC_TEXT("%d시간"), hour);
 	else
-		snprintf(buf, buflen, LC_TEXT("%d"), min);
+		snprintf(buf, buflen, LC_TEXT("%d분"), min);
 }
 
 static void __proc_login_notice(char *login, int on_time, int off_time)
@@ -157,13 +157,13 @@ static void __proc_login_notice(char *login, int on_time, int off_time)
 
 	if (0==on_time)
 	{
-		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   ð %sԴϴ."), off_time_string);
-		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("  ¶ ð 0 Ǿϴ. 100% ȿ   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 오프라인 시간은 %s입니다."), off_time_string);
+		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 온라인 시간은 0이 되었습니다. 100% 효과를 얻으실 수 있습니다."));
 		return;
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   ð %s̸,  ¶ ð %sԴϴ."),
+		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("당신의 누적 오프라인 시간은 %s이며, 누적 온라인 시간은 %s입니다."),
 				off_time_string, on_time_string);
 	}
 }
diff --git a/src/game/input_udp.cpp b/src/game/input_udp.cpp
index b3f2bb7..22d816b 100644
--- a/src/game/input_udp.cpp
+++ b/src/game/input_udp.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "input.h"
@@ -71,7 +71,7 @@ void CInputUDP::Handshake(LPDESC pDesc, const char * c_pData)
 
 void CInputUDP::StateChecker(const char * c_pData)
 {
-	// NOTE : TCP  ٲٸ鼭  X
+	// NOTE : TCP 연결로 바꾸면서 사용 X
 	/*
 	struct ServerStateChecker_RequestPacket * p = (struct ServerStateChecker_RequestPacket *) c_pData;
 	ServerStateChecker_ResponsePacket rp;
diff --git a/src/game/ip_ban.cpp b/src/game/ip_ban.cpp
index 128bfca..39cff18 100644
--- a/src/game/ip_ban.cpp
+++ b/src/game/ip_ban.cpp
@@ -1,4 +1,4 @@
-//#define __MAIN__
+//#define __MAIN__
 #ifdef __MAIN__
 
 #include 
diff --git a/src/game/ip_ban.h b/src/game/ip_ban.h
index 9f18064..e16a7cc 100644
--- a/src/game/ip_ban.h
+++ b/src/game/ip_ban.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_BAN_IP_H__
+#ifndef __INC_METIN_II_GAME_BAN_IP_H__
 #define __INC_METIN_II_GAME_BAN_IP_H__
 
 extern bool LoadBanIP(const char * filename);
diff --git a/src/game/item.cpp b/src/game/item.cpp
index d0bf1fb..639400a 100644
--- a/src/game/item.cpp
+++ b/src/game/item.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "char.h"
@@ -295,7 +295,7 @@ LPITEM CItem::RemoveFromCharacter()
 
 	LPCHARACTER pOwner = m_pOwner;
 
-	if (m_bEquipped)	// Ǿ°?
+	if (m_bEquipped)	// 장착되었는가?
 	{
 		Unequip();
 		//pOwner->UpdatePacket();
@@ -319,7 +319,7 @@ LPITEM CItem::RemoveFromCharacter()
 			{
 				TItemPos cell(INVENTORY, m_wCell);
 
-				if (false == cell.IsDefaultInventoryPosition() && false == cell.IsBeltInventoryPosition()) // ƴϸ ǰ?
+				if (false == cell.IsDefaultInventoryPosition() && false == cell.IsBeltInventoryPosition()) // 아니면 소지품에?
 					sys_err("CItem::RemoveFromCharacter: Invalid Item Position");
 				else
 				{
@@ -471,16 +471,16 @@ bool CItem::CanUsedBy(LPCHARACTER ch)
 
 int CItem::FindEquipCell(LPCHARACTER ch, int iCandidateCell)
 {
-	// ڽ (ITEM_COSTUME) WearFlag  . (sub type ġ .   wear flag  ʿ䰡 ֳ..)
-	// ȥ(ITEM_DS, ITEM_SPECIAL_DS)  SUB_TYPE . ű , Ʈ ITEM_TYPE  -_-
+	// 코스츔 아이템(ITEM_COSTUME)은 WearFlag 없어도 됨. (sub type으로 착용위치 구분. 귀찮게 또 wear flag 줄 필요가 있나..)
+	// 용혼석(ITEM_DS, ITEM_SPECIAL_DS)도  SUB_TYPE으로 구분. 신규 반지, 벨트는 ITEM_TYPE으로 구분 -_-
 	if ((0 == GetWearFlag() || ITEM_TOTEM == GetType()) && ITEM_COSTUME != GetType() && ITEM_DS != GetType() && ITEM_SPECIAL_DS != GetType() && ITEM_RING != GetType() && ITEM_BELT != GetType())
 		return -1;
 
-	// ȥ  WEAR ó  (WEAR ִ 32 ѵ ȥ ߰ϸ 32 Ѵ´.)
-	// κ丮 Ư ġ((INVENTORY_MAX_NUM + WEAR_MAX_NUM) (INVENTORY_MAX_NUM + WEAR_MAX_NUM + DRAGON_SOUL_DECK_MAX_NUM * DS_SLOT_MAX - 1))
-	// ȥ  .
-	// return  , INVENTORY_MAX_NUM  ,
-	//  WearCell INVENTORY_MAX_NUM  return ϱ .
+	// 용혼석 슬롯을 WEAR로 처리할 수가 없어서(WEAR는 최대 32개까지 가능한데 용혼석을 추가하면 32가 넘는다.)
+	// 인벤토리의 특정 위치((INVENTORY_MAX_NUM + WEAR_MAX_NUM)부터 (INVENTORY_MAX_NUM + WEAR_MAX_NUM + DRAGON_SOUL_DECK_MAX_NUM * DS_SLOT_MAX - 1)까지)를
+	// 용혼석 슬롯으로 정함.
+	// return 할 때에, INVENTORY_MAX_NUM을 뺀 이유는,
+	// 본래 WearCell이 INVENTORY_MAX_NUM를 빼고 return 하기 때문.
 	if (GetType() == ITEM_DS || GetType() == ITEM_SPECIAL_DS)
 	{
 		if (iCandidateCell < 0)
@@ -541,7 +541,7 @@ int CItem::FindEquipCell(LPCHARACTER ch, int iCandidateCell)
 			return WEAR_UNIQUE1;		
 	}
 
-	//  Ʈ   ° ѹ   E .
+	// 수집 퀘스트를 위한 아이템이 박히는곳으로 한번 박히면 절대 뺼수 없다.
 	else if (GetWearFlag() & WEARABLE_ABILITY)
 	{
 		if (!ch->GetWear(WEAR_ABILITY1))
@@ -588,12 +588,12 @@ void CItem::ModifyPoints(bool bAdd)
 {
 	int accessoryGrade;
 
-	//  ʸ  Ų.
+	// 무기와 갑옷만 소켓을 적용시킨다.
 	if (false == IsAccessoryForSocket())
 	{
 		if (m_pProto->bType == ITEM_WEAPON || m_pProto->bType == ITEM_ARMOR)
 		{
-			//  Ӽȭ Ǵ   ʴ´ (ARMOR_WRIST ARMOR_NECK ARMOR_EAR)
+			// 소켓이 속성강화에 사용되는 경우 적용하지 않는다 (ARMOR_WRIST ARMOR_NECK ARMOR_EAR)
 			for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 			{
 				DWORD dwVnum;
@@ -652,12 +652,12 @@ void CItem::ModifyPoints(bool bAdd)
 			m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value);
 		}
 	}
-	// ʽ´ , ҷ , ູ ,   Ʈ 
-	//  ϵ ڵ  Ӽ ο,
-	//  κ ϰ special item group ̺ Ӽ οϵ Ͽ.
-	//  ϵ ڵǾ      ־ Ưó س´.
-	//  ۵ , ؿ ITEM_UNIQUE  ó Ӽ οDZ ,
-	// ۿ ִ attribute  ʰ Ѿ.
+	// 초승달의 반지, 할로윈 사탕, 행복의 반지, 영원한 사랑의 펜던트의 경우
+	// 기존의 하드 코딩으로 강제로 속성을 부여했지만,
+	// 그 부분을 제거하고 special item group 테이블에서 속성을 부여하도록 변경하였다.
+	// 하지만 하드 코딩되어있을 때 생성된 아이템이 남아있을 수도 있어서 특수처리 해놓는다.
+	// 이 아이템들의 경우, 밑에 ITEM_UNIQUE일 때의 처리로 속성이 부여되기 때문에,
+	// 아이템에 박혀있는 attribute는 적용하지 않고 넘어간다.
 	if (true == CItemVnumHelper::IsRamadanMoonRing(GetVnum()) || true == CItemVnumHelper::IsHalloweenCandy(GetVnum())
 		|| true == CItemVnumHelper::IsHappinessRing(GetVnum()) || true == CItemVnumHelper::IsLovePendant(GetVnum()))
 	{
@@ -714,7 +714,7 @@ void CItem::ModifyPoints(bool bAdd)
 
 		case ITEM_ARMOR:
 			{
-				// ڽ body ԰ִٸ armor  Դ   ־  ָ  .
+				// 코스츔 body를 입고있다면 armor는 벗던 입던 상관 없이 비주얼에 영향을 주면 안 됨.
 				if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY))
 					break;
 
@@ -734,33 +734,33 @@ void CItem::ModifyPoints(bool bAdd)
 			}
 			break;
 
-		// ڽ  Ծ  ij parts  .  Ÿϴ ߰..
+		// 코스츔 아이템 입었을 때 캐릭터 parts 정보 세팅. 기존 스타일대로 추가함..
 		case ITEM_COSTUME:
 			{
 				DWORD toSetValue = this->GetVnum();
 				EParts toSetPart = PART_MAX_NUM;
 
-				//  ڽ
+				// 갑옷 코스츔
 				if (GetSubType() == COSTUME_BODY)
 				{
 					toSetPart = PART_MAIN;
 
 					if (false == bAdd)
 					{
-						// ڽ      ԰ ־ٸ   look ,  ʾҴٸ default look
+						// 코스츔 갑옷을 벗었을 때 원래 갑옷을 입고 있었다면 그 갑옷으로 look 세팅, 입지 않았다면 default look
 						const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
 						toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);						
 					}
 					
 				}
 
-				//  ڽ
+				// 헤어 코스츔
 				else if (GetSubType() == COSTUME_HAIR)
 				{
 					toSetPart = PART_HAIR;
 
-					// ڽ  shape item proto value3 ϵ . Ư    (ARMOR_BODY) shape  value3 ־   value3 .
-					// [NOTE]   vnum   shape(value3)  ..  ý ׷ Ǿ...
+					// 코스츔 헤어는 shape값을 item proto의 value3에 세팅하도록 함. 특별한 이유는 없고 기존 갑옷(ARMOR_BODY)의 shape값이 프로토의 value3에 있어서 헤어도 같이 value3으로 함.
+					// [NOTE] 갑옷은 아이템 vnum을 보내고 헤어는 shape(value3)값을 보내는 이유는.. 기존 시스템이 그렇게 되어있음...
 					toSetValue = (true == bAdd) ? this->GetValue(3) : 0;
 				}
 
@@ -821,7 +821,7 @@ bool CItem::EquipTo(LPCHARACTER ch, BYTE bWearCell)
 		return false;
 	}
 
-	// ȥ  index WEAR_MAX_NUM  ŭ.
+	// 용혼석 슬롯 index는 WEAR_MAX_NUM 보다 큼.
 	if (IsDragonSoul())
 	{
 		if (bWearCell < WEAR_MAX_NUM || bWearCell >= WEAR_MAX_NUM + DRAGON_SOUL_DECK_MAX_NUM * DS_SLOT_MAX)
@@ -848,7 +848,7 @@ bool CItem::EquipTo(LPCHARACTER ch, BYTE bWearCell)
 	if (GetOwner())
 		RemoveFromCharacter();
 
-	ch->SetWear(bWearCell, this); // ⼭ Ŷ 
+	ch->SetWear(bWearCell, this); // 여기서 패킷 나감
 
 	m_pOwner = ch;
 	m_bEquipped = true;
@@ -932,7 +932,7 @@ bool CItem::Unequip()
 		return false;
 	}
 
-	//ű   Ž ó
+	//신규 말 아이템 제거시 처리
 	if (IsRideItem())
 		ClearMountAttributeAndAffect();
 
@@ -1262,7 +1262,7 @@ void CItem::AlterToMagicItem()
 		}
 	}
 
-	// 100% Ȯ  Ӽ ϳ
+	// 100% 확률로 좋은 속성 하나
 	PutAttribute(aiItemMagicAttributePercentHigh);
 
 	if (number(1, 100) <= iSecondPct)
@@ -1348,8 +1348,8 @@ EVENTFUNC(unique_expire_event)
 		}
 		else
 		{
-			//   ð ۵ ϰ  ʴ װ ־
-			// 
+			// 게임 내에 시간제 아이템들이 빠릿빠릿하게 사라지지 않는 버그가 있어
+			// 수정
 			// by rtsummit
 			if (pkItem->GetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME) - cur < 600)
 				return PASSES_PER_SEC(pkItem->GetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME) - cur);
@@ -1359,9 +1359,9 @@ EVENTFUNC(unique_expire_event)
 	}
 }
 
-// ð ĺ
-// timer   ð ϴ  ƴ϶, 
-// timer ȭ  timer  ð ŭ ð  Ѵ.
+// 시간 후불제
+// timer를 시작할 때에 시간 차감하는 것이 아니라, 
+// timer가 발화할 때에 timer가 동작한 시간 만큼 시간 차감을 한다.
 EVENTFUNC(timer_based_on_wear_expire_event)
 {
 	item_event_info* info = dynamic_cast( event->info );
@@ -1380,7 +1380,7 @@ EVENTFUNC(timer_based_on_wear_expire_event)
 		pkItem->SetTimerBasedOnWearExpireEvent(NULL);
 		pkItem->SetSocket(ITEM_SOCKET_REMAIN_SEC, 0);
 	
-		// ϴ timer based on wear ȥ ð  Ǿٰ  ʴ´.
+		// 일단 timer based on wear 용혼석은 시간 다 되었다고 없애지 않는다.
 		if (pkItem->IsDragonSoul())
 		{
 			DSManager::instance().DeactivateDragonSoul(pkItem);
@@ -1479,7 +1479,7 @@ void CItem::StartUniqueExpireEvent()
 	if (m_pkUniqueExpireEvent)
 		return;
 
-	//Ⱓ   ð   ʴ´
+	//기간제 아이템일 경우 시간제 아이템은 동작하지 않는다
 	if (IsRealTimeItem())
 		return;
 
@@ -1502,14 +1502,14 @@ void CItem::StartUniqueExpireEvent()
 	SetUniqueExpireEvent(event_create(unique_expire_event, info, PASSES_PER_SEC(iSec)));
 }
 
-// ð ĺ
-// timer_based_on_wear_expire_event  
+// 시간 후불제
+// timer_based_on_wear_expire_event 설명 참조
 void CItem::StartTimerBasedOnWearExpireEvent()
 {
 	if (m_pkTimerBasedOnWearExpireEvent)
 		return;
 
-	//Ⱓ   ð   ʴ´
+	//기간제 아이템일 경우 시간제 아이템은 동작하지 않는다
 	if (IsRealTimeItem())
 		return;
 
@@ -1518,7 +1518,7 @@ void CItem::StartTimerBasedOnWearExpireEvent()
 
 	int iSec = GetSocket(0);
 	
-	//  ð д  ...
+	// 남은 시간을 분단위로 끊기 위해...
 	if (0 != iSec)
 	{
 		iSec %= 60;
@@ -1537,7 +1537,7 @@ void CItem::StopUniqueExpireEvent()
 	if (!m_pkUniqueExpireEvent)
 		return;
 
-	if (GetValue(2) != 0) // ӽð ̿  UniqueExpireEvent ߴ  .
+	if (GetValue(2) != 0) // 게임시간제 이외의 아이템은 UniqueExpireEvent를 중단할 수 없다.
 		return;
 
 	// HARD CODING
@@ -1574,12 +1574,12 @@ int CItem::GetSpecialGroup() const
 }
 
 //
-// Ǽ  ó.
+// 악세서리 소켓 처리.
 //
 bool CItem::IsAccessoryForSocket()
 {
 	return (m_pProto->bType == ITEM_ARMOR && (m_pProto->bSubType == ARMOR_WRIST || m_pProto->bSubType == ARMOR_NECK || m_pProto->bSubType == ARMOR_EAR)) ||
-		(m_pProto->bType == ITEM_BELT);				// 2013 2  ߰ 'Ʈ'   ȹ Ǽ  ý ״ ̿ڰ .
+		(m_pProto->bType == ITEM_BELT);				// 2013년 2월 새로 추가된 '벨트' 아이템의 경우 기획팀에서 악세서리 소켓 시스템을 그대로 이용하자고 함.
 }
 
 void CItem::SetAccessorySocketGrade(int iGrade) 
@@ -1604,7 +1604,7 @@ void CItem::SetAccessorySocketDownGradeTime(DWORD time)
 	SetSocket(2, time); 
 
 	if (test_server && GetOwner())
-		GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s    ð %d"), GetName(), time);
+		GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s에서 소켓 빠질때까지 남은 시간 %d"), GetName(), time);
 }
 
 EVENTFUNC(accessory_socket_expire_event)
@@ -1724,7 +1724,7 @@ void CItem::ClearMountAttributeAndAffect()
 }
 
 // fixme
-// ̰  Ⱦ... ٵ Ȥó ; ܵ.
+// 이거 지금은 안쓴데... 근데 혹시나 싶어서 남겨둠.
 // by rtsummit
 bool CItem::IsNewMountItem()
 {
@@ -1752,7 +1752,7 @@ void CItem::AccessorySocketDegrade()
 
 		if (ch)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ִ  ϴ."), GetName());
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s에 박혀있던 보석이 사라집니다."), GetName());
 		}
 
 		ModifyPoints(false);
@@ -1771,7 +1771,7 @@ void CItem::AccessorySocketDegrade()
 	}
 }
 
-// ring item   ִ θ üũؼ 
+// ring에 item을 박을 수 있는지 여부를 체크해서 리턴
 static const bool CanPutIntoRing(LPITEM ring, LPITEM item)
 {
 	const DWORD vnum = item->GetVnum();
@@ -1992,10 +1992,10 @@ int CItem::GetLevelLimit()
 
 bool CItem::OnAfterCreatedItem()
 {
-	//   ̶ ߴٸ,  Ŀ   ʾƵ ð Ǵ 
+	// 아이템을 한 번이라도 사용했다면, 그 이후엔 사용 중이지 않아도 시간이 차감되는 방식
 	if (-1 != this->GetProto()->cLimitRealTimeFirstUseIndex)
 	{
-		// Socket1   Ƚ ϵǾ ,  ̶   Ÿ̸Ӹ Ѵ.
+		// Socket1에 아이템의 사용 횟수가 기록되어 있으니, 한 번이라도 사용한 아이템은 타이머를 시작한다.
 		if (0 != GetSocket(1))
 		{
 			StartRealTimeExpireEvent();
@@ -2008,8 +2008,8 @@ bool CItem::OnAfterCreatedItem()
 
 #ifdef __AUCTION__
 
-// 
-// window  Ѵ.
+// 경매장
+// window를 경매장으로 한다.
 
 bool CItem::MoveToAuction()
 {
@@ -2076,7 +2076,7 @@ int CItem::GiveMoreTime_Per(float fPercent)
 			return given_time;
 		}
 	}
-	// 켱 ȥ ؼ ϵ Ѵ.
+	// 우선 용혼석에 관해서만 하도록 한다.
 	else
 		return 0;
 }
@@ -2100,7 +2100,7 @@ int CItem::GiveMoreTime_Fix(DWORD dwTime)
 			return dwTime;
 		}
 	}
-	// 켱 ȥ ؼ ϵ Ѵ.
+	// 우선 용혼석에 관해서만 하도록 한다.
 	else
 		return 0;
 }
@@ -2125,7 +2125,7 @@ int	CItem::GetDuration()
 
 bool CItem::IsSameSpecialGroup(const LPITEM item) const
 {
-	//  VNUM ٸ  ׷  
+	// 서로 VNUM이 같다면 같은 그룹인 것으로 간주
 	if (this->GetVnum() == item->GetVnum())
 		return true;
 
diff --git a/src/game/item.h b/src/game/item.h
index 2c012f5..a70e592 100644
--- a/src/game/item.h
+++ b/src/game/item.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_ITEM_H__
+#ifndef __INC_METIN_II_GAME_ITEM_H__
 #define __INC_METIN_II_GAME_ITEM_H__
 
 #include "entity.h"
@@ -60,10 +60,10 @@ class CItem : public CEntity
 		bool		SetCount(DWORD count);
 		DWORD		GetCount();
 
-		// GetVnum GetOriginalVnum  comment
-		// GetVnum Masking  Vnum̴. ̸ ν,   Vnum 10, Vnum 20 ó   ִ ̴.
-		// Masking  ori_to_new.txt ǵ ̴.
-		// GetOriginalVnum   Vnum, α  , Ŭ̾Ʈ    ,    Vnum Ͽ Ѵ.
+		// GetVnum과 GetOriginalVnum에 대한 comment
+		// GetVnum은 Masking 된 Vnum이다. 이를 사용함으로써, 아이템의 실제 Vnum은 10이지만, Vnum이 20인 것처럼 동작할 수 있는 것이다.
+		// Masking 값은 ori_to_new.txt에서 정의된 값이다.
+		// GetOriginalVnum은 아이템 고유의 Vnum으로, 로그 남길 때, 클라이언트에 아이템 정보 보낼 때, 저장할 때는 이 Vnum을 사용하여야 한다.
 		// 
 		DWORD		GetVnum() const		{ return m_dwMaskVnum ? m_dwMaskVnum : m_dwVnum;	}
 		DWORD		GetOriginalVnum() const		{ return m_dwVnum;	}
@@ -103,7 +103,7 @@ class CItem : public CEntity
 
 		bool		IsPolymorphItem();
 
-		void		ModifyPoints(bool bAdd);	//  ȿ ijͿ ο Ѵ. bAdd false̸ 
+		void		ModifyPoints(bool bAdd);	// 아이템의 효과를 캐릭터에 부여 한다. bAdd가 false이면 제거함
 
 		bool		CreateSocket(BYTE bSlot, BYTE bGold);
 		const long *	GetSockets()		{ return &m_alSockets[0];	}
@@ -146,7 +146,7 @@ class CItem : public CEntity
 
 		DWORD		GetLastOwnerPID()	{ return m_dwLastOwnerPID; }
 
-		int		GetAttributeSetIndex(); // Ӽ ٴ°  迭  ε ϴ ش.
+		int		GetAttributeSetIndex(); // 속성 붙는것을 지정한 배열의 어느 인덱스를 사용하는지 돌려준다.
 		void		AlterToMagicItem();
 		void		AlterToSocketItem(int iSocketCount);
 
@@ -165,7 +165,7 @@ class CItem : public CEntity
 		void		StopTimerBasedOnWearExpireEvent();
 		void		StopAccessorySocketExpireEvent();
 
-		//			ϴ REAL_TIME TIMER_BASED_ON_WEAR ۿ ؼ  .
+		//			일단 REAL_TIME과 TIMER_BASED_ON_WEAR 아이템에 대해서만 제대로 동작함.
 		int			GetDuration();
 
 		int		GetAttributeCount();
@@ -180,7 +180,7 @@ class CItem : public CEntity
 		bool	IsSameSpecialGroup(const LPITEM item) const;
 
 		// ACCESSORY_REFINE
-		// ׼    ߰
+		// 액세서리에 광산을 통해 소켓을 추가
 		bool		IsAccessoryForSocket();
 
 		int		GetAccessorySocketGrade();
@@ -193,7 +193,7 @@ class CItem : public CEntity
 
 		void		AccessorySocketDegrade();
 
-		// Ǽ縮  ۿ ۾ Ÿ̸ ư°( ,  )
+		// 악세사리 를 아이템에 밖았을때 타이머 돌아가는것( 구리, 등 )
 		void		StartAccessorySocketExpireEvent();
 		void		SetAccessorySocketExpireEvent(LPEVENT pkEvent);
 
@@ -227,7 +227,7 @@ class CItem : public CEntity
 
 	protected:
 		friend class CInputDB;
-		bool		OnAfterCreatedItem();			//     Բ  (ε)  Ҹ Լ.
+		bool		OnAfterCreatedItem();			// 서버상에 아이템이 모든 정보와 함께 완전히 생성(로드)된 후 불리우는 함수.
 
 	public:
 		bool		IsRideItem();
@@ -237,46 +237,46 @@ class CItem : public CEntity
 		bool		IsNewMountItem();
 
 #ifdef __AUCTION__
-		// 
+		// 경매장
 		bool		MoveToAuction ();
 		void		CopyToRawData (TPlayerItem* item);
 #endif
-		// Ͽ  ij ۰ , ȯ  ij  ٰ Ͽ,
-		//  ۿ, ȯ  ÷׸  ο ۵ ο  뿪 ҴϿ.
-		//  ο ۵  ۰  ȿ ϴµ,
-		// , Ŭ, vnum  Ǿ־
-		// ο vnum ˴    ھƾϴ Ÿ Ȳ ´Ҵ.
-		// ׷  vnum ̸,  ư    vnum ٲ㼭  ϰ,
-		//    vnum ٲֵ Ѵ.
+		// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
+		// 오리지널 아이템에, 교환 금지 플래그만 삭제한 새로운 아이템들을 새로운 아이템 대역에 할당하였다.
+		// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
+		// 서버건, 클라건, vnum 기반으로 되어있어
+		// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
+		// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
+		// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
 
-		// Mask vnum  (ex.  Ȳ)  vnum ٲ ư   ִ.
+		// Mask vnum은 어떤 이유(ex. 위의 상황)로 인해 vnum이 바뀌어 돌아가는 아이템을 위해 있다.
 		void		SetMaskVnum(DWORD vnum)	{	m_dwMaskVnum = vnum; }
 		DWORD		GetMaskVnum()			{	return m_dwMaskVnum; }
 		bool		IsMaskedItem()	{	return m_dwMaskVnum != 0;	}
 
-		// ȥ
+		// 용혼석
 		bool		IsDragonSoul();
 		int		GiveMoreTime_Per(float fPercent);
 		int		GiveMoreTime_Fix(DWORD dwTime);
 
 	private:
-		TItemTable const * m_pProto;		//  Ÿ
+		TItemTable const * m_pProto;		// 프로토 타잎
 
 		DWORD		m_dwVnum;
 		LPCHARACTER	m_pOwner;
 
-		BYTE		m_bWindow;		//   ġ  
-		DWORD		m_dwID;			// ȣ
-		bool		m_bEquipped;	//  Ǿ°?
+		BYTE		m_bWindow;		// 현재 아이템이 위치한 윈도우 
+		DWORD		m_dwID;			// 고유번호
+		bool		m_bEquipped;	// 장착 되었는가?
 		DWORD		m_dwVID;		// VID
-		WORD		m_wCell;		// ġ
-		DWORD		m_dwCount;		// 
-		long		m_lFlag;		// ߰ flag
-		DWORD		m_dwLastOwnerPID;	//   ־  PID
+		WORD		m_wCell;		// 위치
+		DWORD		m_dwCount;		// 개수
+		long		m_lFlag;		// 추가 flag
+		DWORD		m_dwLastOwnerPID;	// 마지막 가지고 있었던 사람의 PID
 
-		bool		m_bExchanging;	///<  ȯ  
+		bool		m_bExchanging;	///< 현재 교환중 상태 
 
-		long		m_alSockets[ITEM_SOCKET_MAX_NUM];	//  Ĺ
+		long		m_alSockets[ITEM_SOCKET_MAX_NUM];	// 아이템 소캣
 		TPlayerItemAttribute	m_aAttr[ITEM_ATTRIBUTE_MAX_NUM];
 
 		LPEVENT		m_pkDestroyEvent;
diff --git a/src/game/item_addon.cpp b/src/game/item_addon.cpp
index f5cb297..d724e6e 100644
--- a/src/game/item_addon.cpp
+++ b/src/game/item_addon.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "utils.h"
 #include "item.h"
@@ -20,7 +20,7 @@ void CItemAddonManager::ApplyAddonTo(int iAddonType, LPITEM pItem)
 		return;
 	}
 
-	// TODO ϴ ϵڵ Ÿ ų ġ 游 츸 ްѴ.
+	// TODO 일단 하드코딩으로 평타 스킬 수치 변경만 경우만 적용받게한다.
 
 	int iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30);
 	int iNormalHitBonus = 0;
diff --git a/src/game/item_addon.h b/src/game/item_addon.h
index 89bdf74..bc1ef79 100644
--- a/src/game/item_addon.h
+++ b/src/game/item_addon.h
@@ -1,4 +1,4 @@
-#ifndef __ITEM_ADDON_H
+#ifndef __ITEM_ADDON_H
 #define __ITEM_ADDON_H
 
 class CItemAddonManager : public singleton
diff --git a/src/game/item_attribute.cpp b/src/game/item_attribute.cpp
index 56b16a0..8e1596b 100644
--- a/src/game/item_attribute.cpp
+++ b/src/game/item_attribute.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "log.h"
 #include "item.h"
@@ -24,7 +24,7 @@ int CItem::GetAttributeSetIndex()
 		switch (GetSubType())
 		{
 			case ARMOR_BODY:
-//			case COSTUME_BODY: // ڽ  Ϲ ʰ  Attribute Set ̿Ͽ Ӽ  (ARMOR_BODY == COSTUME_BODY)
+//			case COSTUME_BODY: // 코스츔 갑옷은 일반 갑옷과 동일한 Attribute Set을 이용하여 랜덤속성 붙음 (ARMOR_BODY == COSTUME_BODY)
 				return ATTRIBUTE_SET_BODY;
 
 			case ARMOR_WRIST:
@@ -37,7 +37,7 @@ int CItem::GetAttributeSetIndex()
 				return ATTRIBUTE_SET_NECK;
 
 			case ARMOR_HEAD:
-//			case COSTUME_HAIR: // ڽ  Ϲ  ۰  Attribute Set ̿Ͽ Ӽ  (ARMOR_HEAD == COSTUME_HAIR)
+//			case COSTUME_HAIR: // 코스츔 헤어는 일반 투구 아이템과 동일한 Attribute Set을 이용하여 랜덤속성 붙음 (ARMOR_HEAD == COSTUME_HAIR)
 				return ATTRIBUTE_SET_HEAD;
 
 			case ARMOR_SHIELD:
@@ -125,7 +125,7 @@ void CItem::PutAttributeWithLevel(BYTE bLevel)
 
 	int total = 0;
 
-	//   ִ Ӽ 迭 
+	// 붙일 수 있는 속성 배열을 구축
 	for (int i = 0; i < MAX_APPLY_NUM; ++i)
 	{
 		const TItemAttrTable & r = g_map_itemAttr[i];
@@ -137,7 +137,7 @@ void CItem::PutAttributeWithLevel(BYTE bLevel)
 		}
 	}
 
-	//  迭 Ȯ    Ӽ 
+	// 구축된 배열로 확률 계산을 통해 붙일 속성 선정
 	unsigned int prob = number(1, total);
 	int attr_idx = APPLY_NONE;
 
@@ -162,7 +162,7 @@ void CItem::PutAttributeWithLevel(BYTE bLevel)
 
 	const TItemAttrTable & r = g_map_itemAttr[attr_idx];
 
-	//  Ӽ  ִ밪 
+	// 종류별 속성 레벨 최대값 제한
 	if (bLevel > r.bMaxLevelBySet[iAttributeSet])
 		bLevel = r.bMaxLevelBySet[iAttributeSet];
 
diff --git a/src/game/item_manager.h b/src/game/item_manager.h
index 8259209..4ddd0a1 100644
--- a/src/game/item_manager.h
+++ b/src/game/item_manager.h
@@ -1,13 +1,13 @@
-#ifndef __INC_ITEM_MANAGER__
+#ifndef __INC_ITEM_MANAGER__
 #define __INC_ITEM_MANAGER__
 
 #ifdef M2_USE_POOL
 #include "pool.h"
 #endif
 
-// special_item_group.txt ϴ Ӽ ׷
-// type attr   ִ.
-//  Ӽ ׷ ̿  ִ  special_item_group.txt Special type ǵ ׷쿡  UNIQUE ITEM̴.
+// special_item_group.txt에서 정의하는 속성 그룹
+// type attr로 선언할 수 있다.
+// 이 속성 그룹을 이용할 수 있는 것은 special_item_group.txt에서 Special type으로 정의된 그룹에 속한 UNIQUE ITEM이다.
 class CSpecialAttrGroup
 {
 public:
@@ -43,10 +43,10 @@ class CSpecialItemGroup
 			MOB_GROUP,
 		};
 
-		// QUEST Ÿ Ʈ ũƮ vnum.sig_use   ִ ׷̴.
-		//		,  ׷쿡  ؼ ITEM ü TYPE QUEST Ѵ.
-		// SPECIAL Ÿ idx, item_vnum, attr_vnum ԷѴ. attr_vnum  CSpecialAttrGroup Vnum̴.
-		//		 ׷쿡 ִ     .
+		// QUEST 타입은 퀘스트 스크립트에서 vnum.sig_use를 사용할 수 있는 그룹이다.
+		//		단, 이 그룹에 들어가기 위해서는 ITEM 자체의 TYPE이 QUEST여야 한다.
+		// SPECIAL 타입은 idx, item_vnum, attr_vnum을 입력한다. attr_vnum은 위에 CSpecialAttrGroup의 Vnum이다.
+		//		이 그룹에 들어있는 아이템은 같이 착용할 수 없다.
 		enum ESIGType { NORMAL, PCT, QUEST, SPECIAL };
 
 		struct CSpecialItemInfo
@@ -79,9 +79,9 @@ class CSpecialItemGroup
 			return m_vecProbs.empty();
 		}
 
-		// Type Multi,  m_bType == PCT  ,
-		// Ȯ ذ ʰ,  Ͽ  Ѵ.
-		//       ִ.
+		// Type Multi, 즉 m_bType == PCT 인 경우,
+		// 확률을 더해가지 않고, 독립적으로 계산하여 아이템을 생성한다.
+		// 따라서 여러 개의 아이템이 생성될 수 있다.
 		// by rtsummit
 		int GetMultiIndex(std::vector  &idx_vec) const
 		{
@@ -143,8 +143,8 @@ class CSpecialItemGroup
 			return false;
 		}
 		
-		// Group Type Special 쿡
-		// dwVnum ĪǴ AttrVnum returnش.
+		// Group의 Type이 Special인 경우에
+		// dwVnum에 매칭되는 AttrVnum을 return해준다.
 		DWORD GetAttrVnum(DWORD dwVnum) const
 		{
 			if (CSpecialItemGroup::SPECIAL != m_bType)
@@ -354,18 +354,18 @@ class ITEM_MANAGER : public singleton
 
 		bool                    Initialize(TItemTable * table, int size);
 		void			Destroy();
-		void			Update();	//   θ.
+		void			Update();	// 매 루프마다 부른다.
 		void			GracefulShutdown();
 
 		DWORD			GetNewID();
-		bool			SetMaxItemID(TItemIDRangeTable range); // ִ  ̵ 
+		bool			SetMaxItemID(TItemIDRangeTable range); // 최대 고유 아이디를 지정
 		bool			SetMaxSpareItemID(TItemIDRangeTable range);
 
-		// DelayedSave:  ƾ   ؾ    ϸ 
-		//  ʹ Ƿ " Ѵ"  ǥø صΰ 
-		// (: 1 frame) Ŀ Ų.
+		// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
+		// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
+		// (예: 1 frame) 후에 저장시킨다.
 		void			DelayedSave(LPITEM item);
-		void			FlushDelayedSave(LPITEM item); // Delayed Ʈ ִٸ  Ѵ.  ó  .
+		void			FlushDelayedSave(LPITEM item); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
 		void			SaveSingleItem(LPITEM item);
 
 		LPITEM                  CreateItem(DWORD vnum, DWORD count = 1, DWORD dwID = 0, bool bTryMagic = false, int iRarePct = -1, bool bSkipSave = false);
@@ -374,7 +374,7 @@ class ITEM_MANAGER : public singleton
 #else
 		void DestroyItem(LPITEM item, const char* file, size_t line);
 #endif
-		void			RemoveItem(LPITEM item, const char * c_pszReason=NULL); // ڷ   
+		void			RemoveItem(LPITEM item, const char * c_pszReason=NULL); // 사용자로 부터 아이템을 제거
 
 		LPITEM			Find(DWORD id);
 		LPITEM                  FindByVID(DWORD vid);
@@ -397,7 +397,7 @@ class ITEM_MANAGER : public singleton
 
 		DWORD			GetRefineFromVnum(DWORD dwVnum);
 
-		static void		CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem);		// pkNewItem  Ӽ   ϴ Լ.
+		static void		CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem);		// pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
 
 
 		const CSpecialItemGroup* GetSpecialItemGroup(DWORD dwVnum);
@@ -421,8 +421,8 @@ class ITEM_MANAGER : public singleton
 		std::map		m_map_ItemRefineFrom;
 		int				m_iTopOfTable;
 
-		ITEM_VID_MAP			m_VIDMap;			///< m_dwVIDCount    Ѵ.
-		DWORD				m_dwVIDCount;			///< ̳༮ VID ƴ϶ ׳ μ  ũ ȣ.
+		ITEM_VID_MAP			m_VIDMap;			///< m_dwVIDCount 의 값단위로 아이템을 저장한다.
+		DWORD				m_dwVIDCount;			///< 이녀석 VID가 아니라 그냥 프로세스 단위 유니크 번호다.
 		DWORD				m_dwCurrentID;
 		TItemIDRangeTable	m_ItemIDRange;
 		TItemIDRangeTable	m_ItemIDSpareRange;
@@ -443,15 +443,15 @@ class ITEM_MANAGER : public singleton
 		// END_OF_CHECK_UNIQUE_GROUP
 	
 	private:
-		// Ͽ  ij ۰ , ȯ  ij  ٰ Ͽ,
-		//  ۿ ȯ  ÷׸  ο ۵ ,
-		// ο  뿪 ҴϿ.
-		//  ο ۵  ۰  ȿ ϴµ,
-		// , Ŭ, vnum  Ǿ־
-		// ο vnum ˴    ھƾϴ Ÿ Ȳ ´Ҵ.
-		// ׷  vnum ̸,  ư    vnum ٲ㼭  ϰ,
-		//    vnum ٲֵ Ѵ.
-		// ̸   vnum ο vnum ִ  .
+		// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
+		// 오리지널 아이템에 교환 금지 플래그만 삭제한 새로운 아이템들을 만들어,
+		// 새로운 아이템 대역을 할당하였다.
+		// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
+		// 서버건, 클라건, vnum 기반으로 되어있어
+		// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
+		// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
+		// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
+		// 이를 위해 오리지널 vnum과 새로운 vnum을 연결시켜주는 맵을 만듦.
 		typedef std::map  TMapDW2DW;
 		TMapDW2DW	m_map_new_to_ori;
 
diff --git a/src/game/item_manager_idrange.cpp b/src/game/item_manager_idrange.cpp
index 55c6fa1..e10d137 100644
--- a/src/game/item_manager_idrange.cpp
+++ b/src/game/item_manager_idrange.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "desc_client.h"
 #include "item_manager.h"
diff --git a/src/game/item_manager_private_types.h b/src/game/item_manager_private_types.h
index 1a7e495..f438bc2 100644
--- a/src/game/item_manager_private_types.h
+++ b/src/game/item_manager_private_types.h
@@ -1,4 +1,4 @@
-class CItemDropInfo
+class CItemDropInfo
 {
 public:
 	CItemDropInfo(int iLevelStart, int iLevelEnd, int iPercent, DWORD dwVnum) :
diff --git a/src/game/limit_time.h b/src/game/limit_time.h
index 4da92d7..68f684e 100644
--- a/src/game/limit_time.h
+++ b/src/game/limit_time.h
@@ -1,4 +1,4 @@
-#ifndef __LIMIT_TIME__
+#ifndef __LIMIT_TIME__
 #define __LIMIT_TIME__
 
 // #define ENABLE_LIMIT_TIME
diff --git a/src/game/locale.cpp b/src/game/locale.cpp
index d46c7e4..cc7a4a7 100644
--- a/src/game/locale.cpp
+++ b/src/game/locale.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "locale_service.h"
 
@@ -48,7 +48,7 @@ const char *quote_find_end(const char *string)
 	{
 		if (quote && *tmp == '\\' && *(tmp + 1))
 		{
-			// \  ڰ "  ŵѴ.
+			// \ 다음 문자가 " 면 스킵한다.
 			switch (*(tmp + 1))
 			{
 				case '"':
diff --git a/src/game/locale.hpp b/src/game/locale.hpp
index 4b46630..8a8d6d8 100644
--- a/src/game/locale.hpp
+++ b/src/game/locale.hpp
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN2_GAME_LOCALE_H__
+#ifndef __INC_METIN2_GAME_LOCALE_H__
 #define __INC_METIN2_GAME_LOCALE_H__
 
 extern "C"
diff --git a/src/game/locale_service.cpp b/src/game/locale_service.cpp
index 5668497..3eb3a2c 100644
--- a/src/game/locale_service.cpp
+++ b/src/game/locale_service.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "locale_service.h"
 #include "constants.h"
 #include "banword.h"
@@ -87,7 +87,7 @@ int check_name_independent(const char * str)
 	if (CBanwordManager::instance().CheckString(str, strlen(str)))
 		return 0;
 
-	//  ̸δ   .
+	// 몬스터 이름으로는 만들 수 없다.
 	char szTmp[256];
 	str_lower(str, szTmp, sizeof(szTmp));
 
@@ -128,12 +128,12 @@ int check_name_gb2312(const char * str)
 			b1 = str[i++];
 			b2 = str[i++];
 
-			// ߱ ü ù° Ʈ  b0 -> f7 
-			// ι° Ʈ  a1 -> fe .
+			// 중국 간체는 첫번째 바이트 범위가 b0 -> f7 까지고
+			// 두번째 바이트 범위가 a1 -> fe 다.
 			if (b1 < 0xb0 || b1 > 0xf7 || b2 < 0xa1 || b2 > 0xfe)
 				return 0;
 
-			// ܰ ִ.
+			// 예외가 있다.
 			for (j = 0; j < 5; j++)
 				if (b1 == exceptions[j][0] && b2 == exceptions[j][1])
 					return 0;
@@ -180,8 +180,8 @@ int check_name_big5(const char * str )
 			b[0] = b2;
 			b[1] = b1;
 
-			// ߱ ü ( big5 : ȫ )
-			//   .
+			// 중국 번체 ( big5 : 홍콩 )
+			// 범위는 다음과 같다.
 			//  big5: 0xA140--0xF9D5
 			//  extended big5: 0x40--0x7E and 0xA1--0xFE
 
@@ -240,15 +240,15 @@ int check_name_euckr(const char * str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ѱ ƴϰ ĭ̸ ߸ 
+		// 한글이 아니고 빈칸이면 잘못된 것
 		if (isnhspace(*tmp))
 			return 0;
 
-		// ѱ ƴϰ ڶ ϴ.
+		// 한글이 아니고 숫자라면 적합하다.
 		if (isnhdigit(*tmp))
 			continue;
 
-		// ѱ ƴϰ ̶ ϴ.   
+		// 한글이 아니고 영문이라면 적합하다.   
 		if (!ishan(*tmp) && isalpha(*tmp))
 			continue;
 
@@ -280,15 +280,15 @@ int check_name_latin1(const char * str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ѱ ƴϰ ĭ̸ ߸ 
+		// 한글이 아니고 빈칸이면 잘못된 것
 		if (isnhspace(*tmp))
 			return 0;
 
-		// ѱ ƴϰ ڶ ϴ.
+		// 한글이 아니고 숫자라면 적합하다.
 		if (isnhdigit(*tmp))
 			continue;
 
-		// ѱ ƴϰ ̶ ϴ.   
+		// 한글이 아니고 영문이라면 적합하다.   
 		if (!ishan(*tmp) && isalpha(*tmp))
 			continue;
 
@@ -325,7 +325,7 @@ int check_name_alphabet(const char * str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ĺ ڸ 
+		// 알파벳과 수자만 허용
 		if (isdigit(*tmp) || isalpha(*tmp))
 			continue;
 		else
@@ -374,7 +374,7 @@ int check_name_sjis(const char *str)
 	const char	*p = str;
 	const char	*e = str + strlen(str);	// NULL position
 
-	// Ϻ ij ̸ 16byte 
+	// 일본은 캐릭터 이름길이 16byte 까지
 	if ( strlen(str) < 2 || strlen(str) > 16 )
 		return 0;
 
@@ -387,7 +387,7 @@ int check_name_sjis(const char *str)
 				return false;
 
 			// END_OF_DISABLE_SPECIAL_CHAR_NAMING
-			// ̹ڴ  ʴ´.
+			// 이문자는 허용되지 않는다.
 			if ((BYTE)p[0]==0x81 && (BYTE)p[1]==0x40) return false;
 
 			p += 2;
@@ -395,7 +395,7 @@ int check_name_sjis(const char *str)
 		}
 		else
 		{
-			// ̳ ڴ Ѵ.
+			// 영문이나 수자는 허용한다.
 			if (isalpha(*p) || isdigit(*p))
 			{
 				p += 1;
@@ -942,7 +942,7 @@ static void __LocaleService_Init_Singapore()
 	check_name	= check_name_alphabet;
 
 	g_iUseLocale = TRUE;
-	//exp_table = exp_table_newcibn; 2013 09 11 CYH europe  ϰ .
+	//exp_table = exp_table_newcibn; 2013 09 11 CYH europe 과 동일하게 간다.
 }
 
 static void __LocaleService_Init_Vietnam()
@@ -1362,18 +1362,18 @@ bool LC_IsEurope()
 		case LC_DENMARK:
 		case LC_BULGARIA:
 		case LC_CROATIA:
-		case LC_MEXICO: //  GF  ϹǷ  
-		case LC_ARABIA: // ߵ GF  ϹǷ  
+		case LC_MEXICO: // 남미지만 GF에서 서비스 하므로 여기 넣음
+		case LC_ARABIA: // 중동이지만 GF에서 서비스 하므로 여기 넣음
 		case LC_CZECH:
 		case LC_ROMANIA:
 		case LC_HUNGARY:
 		case LC_NETHERLANDS:
 		case LC_USA:
-		case LC_WE_KOREA:	// ѱ UK  ̹Ƿ  
-		case LC_TAIWAN:		// 븸 WE_KOREA  ̹Ƿ  
-		case LC_JAPAN:		// Ϻ WE(World Edition -_-) ̹Ƿ  
+		case LC_WE_KOREA:	// 한국이지만 UK 버전 기반이므로 여기 넣음
+		case LC_TAIWAN:		// 대만이지만 WE_KOREA 버전 기반이므로 여기 넣음
+		case LC_JAPAN:		// 일본이지만 WE(World Edition -_-) 버전이므로 여기 넣음
 		case LC_NEWCIBN:
-		case LC_CANADA:	// ij GF  
+		case LC_CANADA:	// 캐나다 GF에서 서비스 시작
 		case LC_ENGLISH: //Fix (Kinda)
 			return true;
 	}
diff --git a/src/game/locale_service.h b/src/game/locale_service.h
index 1e26298..8467f53 100644
--- a/src/game/locale_service.h
+++ b/src/game/locale_service.h
@@ -1,4 +1,4 @@
-#ifndef __LOCALE_SERVCICE__
+#ifndef __LOCALE_SERVCICE__
 #define __LOCALE_SERVCICE__
 
 bool LocaleService_Init(const std::string& c_rstServiceName);
diff --git a/src/game/log.cpp b/src/game/log.cpp
index bead477..ee4b074 100644
--- a/src/game/log.cpp
+++ b/src/game/log.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "log.h"
diff --git a/src/game/log.h b/src/game/log.h
index 471f8ff..d219628 100644
--- a/src/game/log.h
+++ b/src/game/log.h
@@ -1,4 +1,4 @@
-#ifndef __INC_LOG_MANAGER_H__
+#ifndef __INC_LOG_MANAGER_H__
 #define __INC_LOG_MANAGER_H__
 
 #include "../../libsql/AsyncSQL.h"
diff --git a/src/game/login_data.cpp b/src/game/login_data.cpp
index d41ff66..30a80c9 100644
--- a/src/game/login_data.cpp
+++ b/src/game/login_data.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "login_data.h"
 
diff --git a/src/game/login_data.h b/src/game/login_data.h
index 3b68bef..0fdf031 100644
--- a/src/game/login_data.h
+++ b/src/game/login_data.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_LOGIN_DATA_H__
+#ifndef __INC_METIN_II_LOGIN_DATA_H__
 #define __INC_METIN_II_LOGIN_DATA_H__
 
 class CLoginData
diff --git a/src/game/login_sim.h b/src/game/login_sim.h
index 36f93bb..a59d4d5 100644
--- a/src/game/login_sim.h
+++ b/src/game/login_sim.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_SERVER_LOGINSIM__
+#ifndef __INC_METIN_II_SERVER_LOGINSIM__
 #define __INC_METIN_II_SERVER_LOGINSIM__
 
 #include "desc_client.h"
diff --git a/src/game/lua_incl.h b/src/game/lua_incl.h
index 7e237cb..9673a01 100644
--- a/src/game/lua_incl.h
+++ b/src/game/lua_incl.h
@@ -1,4 +1,4 @@
-#if !defined(_MSC_VER) && defined(__cplusplus)
+#if !defined(_MSC_VER) && defined(__cplusplus)
 extern "C" {
 #endif
 
diff --git a/src/game/lzo_manager.cpp b/src/game/lzo_manager.cpp
index 872d23d..968b9e2 100644
--- a/src/game/lzo_manager.cpp
+++ b/src/game/lzo_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "lzo_manager.h"
 
 LZOManager::LZOManager()
diff --git a/src/game/lzo_manager.h b/src/game/lzo_manager.h
index 662f430..7f1bf4d 100644
--- a/src/game/lzo_manager.h
+++ b/src/game/lzo_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_LZO_MANAGER_H
+#ifndef __INC_LZO_MANAGER_H
 #define __INC_LZO_MANAGER_H
 
 #include "minilzo.h"
diff --git a/src/game/main.cpp b/src/game/main.cpp
index 24d9d9a..9e03f3d 100644
--- a/src/game/main.cpp
+++ b/src/game/main.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "event.h"
@@ -86,7 +86,7 @@
 #include 
 #endif
 
-// 쿡 ׽Ʈ  ׻ Ű üũ
+// 윈도우에서 테스트할 때는 항상 서버키 체크
 #ifdef _WIN32
 	//#define _USE_SERVER_KEY_
 #endif
@@ -108,10 +108,10 @@ void WriteMallocMessage(const char* p1, const char* p2, const char* p3, const ch
 #endif
 
 // TRAFFIC_PROFILER
-static const DWORD	TRAFFIC_PROFILE_FLUSH_CYCLE = 3600;	///< TrafficProfiler  Flush cycle. 1ð 
+static const DWORD	TRAFFIC_PROFILE_FLUSH_CYCLE = 3600;	///< TrafficProfiler 의 Flush cycle. 1시간 간격
 // END_OF_TRAFFIC_PROFILER
 
-// Ӱ Ǵ 
+// 게임과 연결되는 소켓
 volatile int	num_events_called = 0;
 int             max_bytes_written = 0;
 int             current_bytes_written = 0;
@@ -186,11 +186,11 @@ void ShutdownOnFatalError()
 		{
 			char buf[256];
 
-			strlcpy(buf, LC_TEXT(" ġ  ߻Ͽ ڵ õ˴ϴ."), sizeof(buf));
+			strlcpy(buf, LC_TEXT("서버에 치명적인 오류가 발생하여 자동으로 재부팅됩니다."), sizeof(buf));
 			SendNotice(buf);
-			strlcpy(buf, LC_TEXT("10 ڵ  Ǹ,"), sizeof(buf));
+			strlcpy(buf, LC_TEXT("10초후 자동으로 접속이 종료되며,"), sizeof(buf));
 			SendNotice(buf);
-			strlcpy(buf, LC_TEXT("5 Ŀ  ϽǼ ֽϴ."), sizeof(buf));
+			strlcpy(buf, LC_TEXT("5분 후에 정상적으로 접속하실수 있습니다."), sizeof(buf));
 			SendNotice(buf);
 		}
 
@@ -247,7 +247,7 @@ void heartbeat(LPHEART ht, int pulse)
 
 	t = get_dword_time();
 
-	// 1ʸ
+	// 1초마다
 	if (!(pulse % ht->passes_per_sec))
 	{
 #ifdef ENABLE_LIMIT_TIME
@@ -309,14 +309,14 @@ void heartbeat(LPHEART ht, int pulse)
 	}
 
 	//
-	// 25 PPS(Pulse per second)   
+	// 25 PPS(Pulse per second) 라고 가정할 때
 	//
 
-	//  1.16ʸ
+	// 약 1.16초마다
 	if (!(pulse % (passes_per_sec + 4)))
 		CHARACTER_MANAGER::instance().ProcessDelayedSave();
 
-	//4 
+	//4초 마다
 #if defined (OS_FREEBSD) && defined(__FILEMONITOR__)
 	if (!(pulse % (passes_per_sec * 5)))
 	{
@@ -324,7 +324,7 @@ void heartbeat(LPHEART ht, int pulse)
 	}
 #endif
 
-	//  5.08ʸ
+	// 약 5.08초마다
 	if (!(pulse % (passes_per_sec * 5 + 2)))
 	{
 		ITEM_MANAGER::instance().Update();
@@ -383,13 +383,13 @@ void Metin2Server_Check()
 		return;
 
 
-	//  ip
+	// 브라질 ip
 	if (strncmp (g_szPublicIP, "189.112.1", 9) == 0)
 	{
 		return;
 	}
 
-	// ij ip
+	// 캐나다 ip
 	if (strncmp (g_szPublicIP, "74.200.6", 8) == 0)
 	{
 		return;
@@ -413,7 +413,7 @@ void Metin2Server_Check()
 
 	if (0 > sockConnector)
 	{
-		if (true != LC_IsEurope()) //    ϸ   
+		if (true != LC_IsEurope()) // 유럽은 접속을 하지 못하면 인증된 것으로 간주
 			g_isInvalidServer = true;
 
 		return;
@@ -1004,7 +1004,7 @@ int io_loop(LPFDWATCH fdw)
 	LPDESC	d;
 	int		num_events, event_idx;
 
-	DESC_MANAGER::instance().DestroyClosed(); // PHASE_CLOSE ӵ ش.
+	DESC_MANAGER::instance().DestroyClosed(); // PHASE_CLOSE인 접속들을 끊어준다.
 	DESC_MANAGER::instance().TryConnect();
 
 	if ((num_events = fdwatch(fdw, 0)) < 0)
diff --git a/src/game/malloc_allocator.h b/src/game/malloc_allocator.h
index bc48039..bdaae36 100644
--- a/src/game/malloc_allocator.h
+++ b/src/game/malloc_allocator.h
@@ -1,4 +1,4 @@
-#ifndef _MALLOC_ALLOCATOR_H_
+#ifndef _MALLOC_ALLOCATOR_H_
 #define _MALLOC_ALLOCATOR_H_
 
 // Allocator implementation detail based on default CRT malloc/free.
diff --git a/src/game/map_location.cpp b/src/game/map_location.cpp
index 40dbd96..10817ca 100644
--- a/src/game/map_location.cpp
+++ b/src/game/map_location.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "map_location.h"
diff --git a/src/game/map_location.h b/src/game/map_location.h
index ecf87a3..58e8606 100644
--- a/src/game/map_location.h
+++ b/src/game/map_location.h
@@ -1,4 +1,4 @@
-
+
 #include "../../common/stl.h"
 
 class CMapLocation : public singleton
diff --git a/src/game/marriage.cpp b/src/game/marriage.cpp
index de32fee..df959e3 100644
--- a/src/game/marriage.cpp
+++ b/src/game/marriage.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 #include "char_manager.h"
 #include "sectree_manager.h"
@@ -21,19 +21,19 @@ namespace marriage
 		DWORD dwVnum;
 		int value[MAX_LOVE_GRADE];
 	} g_ItemBonus[MAX_MARRIAGE_UNIQUE_ITEM] = {
-		{ 71069,	{ 4,	5,	6,	8,  } }, //  
-		{ 71070,	{ 10,	12,	15,	20, } }, // ġ 
-		{ 71071,	{ 4,	5,	6,	8,  } }, // ũƼ 
-		{ 71072,	{ -4,	-5,	-6,	-8, } }, //  ݷ 
-		{ 71073,	{ 20,	25,	30,	40, } }, // ݷ  (밪)
-		{ 71074,	{ 12,	16,	20,	30, } }, //   (밪)
+		{ 71069,	{ 4,	5,	6,	8,  } }, // 관통 증가
+		{ 71070,	{ 10,	12,	15,	20, } }, // 경험치 증가
+		{ 71071,	{ 4,	5,	6,	8,  } }, // 크리티컬 증가
+		{ 71072,	{ -4,	-5,	-6,	-8, } }, // 상대방 공격력 감소
+		{ 71073,	{ 20,	25,	30,	40, } }, // 공격력 증가 (절대값)
+		{ 71074,	{ 12,	16,	20,	30, } }, // 방어력 증가 (절대값)
 
-		//{ 71069,	1,	2,	3,	6,	8,  }, //  
-		//{ 71070,	5,	7,	10,	15,	20, }, // ġ 
-		//{ 71071,	1,	2,	3,	6,	8,  }, // ũƼ 
-		//{ 71072,	5,	10,	15,	20,	30, }, //    Է
-		//{ 71073,	10,	15,	20,	25,	40, }, // ݷ  (밪)
-		//{ 71074,	5,	10,	15,	20,	30, }, //   (밪)
+		//{ 71069,	1,	2,	3,	6,	8,  }, // 관통 증가
+		//{ 71070,	5,	7,	10,	15,	20, }, // 경험치 증가
+		//{ 71071,	1,	2,	3,	6,	8,  }, // 크리티컬 증가
+		//{ 71072,	5,	10,	15,	20,	30, }, // 상대방이 입은 데미지를 나에게로
+		//{ 71073,	10,	15,	20,	25,	40, }, // 공격력 증가 (절대값)
+		//{ 71074,	5,	10,	15,	20,	30, }, // 방어력 증가 (절대값)
 	};
 
 	const int MARRIAGE_POINT_PER_DAY = 1;
@@ -101,17 +101,17 @@ namespace marriage
 		else
 			days /= 86400;
 
-		// ⺻ 50%
+		// 기본 50%
 
-		//     :
-		// ¥   80% Ϸ 8%
-		//    80%
-		// Ż 100%
+		// 원앙의 깃털 사용중일 때 :
+		// 날짜에 의한 영향 80% 하루당 8%
+		// 전투에 의한 영향 80%
+		// 토탈 100%
 
-		//   : 
-		// ¥   60% Ϸ 6%
-		//    60%
-		// Ż 100%
+		// 비사용중일 때 : 
+		// 날짜에 의한 영향 60% 하루당 6%
+		// 전투에 의한 영향 60%
+		// 토탈 100%
 		return MIN(50 + MIN(days * point_per_day, max_limit) + MIN(love_point / 1000000, max_limit), 100);
 	}
 
@@ -124,11 +124,11 @@ namespace marriage
 
 		return ch1->GetMapIndex() == ch2->GetMapIndex();
 
-		// Ƽ üũ 
+		// 파티 체크가 사라졌음
 		/*if (!ch1->GetParty() || ch1->GetParty() != ch2->GetParty())
 		  return false;*/
 
-		// Ÿ üũ 
+		// 거리 체크가 사라졌음
 		/*const int DISTANCE = 5000;
 
 		  if (labs(ch1->GetX() - ch2->GetX()) > DISTANCE)
@@ -140,15 +140,15 @@ namespace marriage
 		  return (DISTANCE_APPROX(ch1->GetX() - ch2->GetX(), ch1->GetY() - ch2->GetY()) < DISTANCE);*/
 	}
 
-	// ݽ ġ
+	// 금슬 수치
 	int TMarriage::GetBonus(DWORD dwItemVnum, bool bShare, LPCHARACTER me)
 	{
 		if (!is_married)
 			return 0;
 
-		// ֺ  ڱ ɸ ȴ.
+		// 주변에 없을때는 자기 기능만 적용된다.
 
-		// ش    ϴ ã´.
+		// 해당 아이템이 어떤 기능을 하는지 찾는다.
 		int iFindedBonusIndex=0;
 		{
 			for (iFindedBonusIndex = 0; iFindedBonusIndex < MAX_MARRIAGE_UNIQUE_ITEM; ++iFindedBonusIndex)
@@ -163,7 +163,7 @@ namespace marriage
 
 		if (bShare)
 		{
-			// θ ʽ Ѵ.
+			// 두명의 보너스를 합한다.
 			int count = 0;
 			if (NULL != ch1 && ch1->IsEquipUniqueItem(dwItemVnum))
 				count ++;
@@ -178,7 +178,7 @@ namespace marriage
 		}
 		else
 		{
-			//  ͸ 
+			// 상대방 것만 계산
 			int count = 0;
 			if (me != ch1 && NULL!= ch1 && ch1->IsEquipUniqueItem(dwItemVnum))
 				count ++;
@@ -208,7 +208,7 @@ namespace marriage
 				SendLoverInfo(ch2, name1, GetMarriagePoint());
 		}
 
-		//    μ α ̸ ͸ ϰ ̺Ʈ ߻
+		// 둘 다 이 프로세스에 로그인 중이면 포인터를 연결하고 이벤트 발생
 		if (IsOnline())
 		{
 			ch1->SetMarryPartner(ch2);
@@ -217,7 +217,7 @@ namespace marriage
 			StartNearCheckEvent();
 		}
 
-		//   α Ǿ ִٸ Ŷ .
+		// 둘 다 로그인 되어 있다면 패킷을 보낸다.
 		if (is_married)
 		{
 			LPDESC d1, d2;
@@ -581,7 +581,7 @@ namespace marriage
 
 			if (A && B)
 			{
-				//   û 
+				// 웨딩 맵 요청을 보낸다
 				TPacketWeddingRequest p;
 				p.dwPID1 = dwPID1;
 				p.dwPID2 = dwPID2;
@@ -703,11 +703,11 @@ namespace marriage
 		if (!pwi)
 			return;
 
-		// ȥڵ Ѿ
+		// 결혼자들을 워프시켜야함
 		pMarriage->WarpToWeddingMap(dwPID1);
 		pMarriage->WarpToWeddingMap(dwPID2);
 
-		// ؼ ޴â ̸;
+		// 등록해서 메뉴창에서 이름나와야함
 		m_setWedding.insert(make_pair(dwPID1, dwPID2));
 	}
 
@@ -726,7 +726,7 @@ namespace marriage
 			return;
 		}
 
-		// ʿ մϴ
+		// 맵에서 빼내야합니다
 		if (map_allow_find(WEDDING_MAP_INDEX))
 			if (!WeddingManager::instance().End(pMarriage->pWeddingInfo->dwMapIndex))
 			{
diff --git a/src/game/marriage.h b/src/game/marriage.h
index 08d48cb..238ff04 100644
--- a/src/game/marriage.h
+++ b/src/game/marriage.h
@@ -1,4 +1,4 @@
-#ifndef __MARRIAGE_H
+#ifndef __MARRIAGE_H
 #define __MARRIAGE_H
 
 namespace marriage
diff --git a/src/game/matrix_card.cpp b/src/game/matrix_card.cpp
index 7c02bcd..5e1ca65 100644
--- a/src/game/matrix_card.cpp
+++ b/src/game/matrix_card.cpp
@@ -1,4 +1,4 @@
-//#define __MATRIX_MAIN_ENABLE__ // define Ǿ  main Լ Եȴ. Unit test ÿ 
+//#define __MATRIX_MAIN_ENABLE__ // define 되어 있으면 main 함수가 포함된다. Unit test 시에 사용
 #ifndef __MATRIX_MAIN_ENABLE__
 #include "stdafx.h"
 #else
diff --git a/src/game/matrix_card.h b/src/game/matrix_card.h
index 02dedfd..5db06b4 100644
--- a/src/game/matrix_card.h
+++ b/src/game/matrix_card.h
@@ -1,4 +1,4 @@
-#ifndef __INC_DB_MATRIXCARD_H__
+#ifndef __INC_DB_MATRIXCARD_H__
 #define __INC_DB_MATRIXCARD_H__
 
 extern bool MatrixCardCheck(const char * src, const char * answer, unsigned long rows, unsigned cols);
diff --git a/src/game/messenger_manager.cpp b/src/game/messenger_manager.cpp
index b5b57f7..4a10135 100644
--- a/src/game/messenger_manager.cpp
+++ b/src/game/messenger_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "gm.h"
 #include "messenger_manager.h"
@@ -119,7 +119,7 @@ void MessengerManager::RequestToAdd(LPCHARACTER ch, LPCHARACTER target)
 	
 	if (quest::CQuestManager::instance().GetPCForce(ch->GetPlayerID())->IsRunning() == true)
 	{
-	    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ģ ߰    Դϴ."));
+	    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 친구 추가를 받을 수 없는 상태입니다."));
 	    return;
 	}
 
@@ -198,7 +198,7 @@ void MessengerManager::__AddToList(MessengerManager::keyA account, MessengerMana
 
 	if (d)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<޽> %s  ģ ߰Ͽϴ."), companion.c_str());
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> %s 님을 친구로 추가하였습니다."), companion.c_str());
 	}
 
 	LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(companion.c_str());
@@ -240,7 +240,7 @@ void MessengerManager::__RemoveFromList(MessengerManager::keyA account, Messenge
 	LPDESC d = ch ? ch->GetDesc() : NULL;
 
 	if (d)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<޽> %s  ޽ Ͽϴ."), companion.c_str());
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> %s 님을 메신저에서 삭제하였습니다."), companion.c_str());
 }
 
 bool MessengerManager::IsInList(MessengerManager::keyA account, MessengerManager::keyA companion) // Fix
@@ -291,11 +291,11 @@ void MessengerManager::RemoveAllList(keyA account)
 {
 	std::set	company(m_Relation[account]);
 
-	/* SQL Data  */
+	/* SQL Data 삭제 */
 	DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' OR companion='%s'",
 			get_table_postfix(), account.c_str(), account.c_str());
 
-	/*  ִ Ʈ  */
+	/* 내가 가지고있는 리스트 삭제 */
 	for (std::set::iterator iter = company.begin();
 			iter != company.end();
 			iter++ )
@@ -303,7 +303,7 @@ void MessengerManager::RemoveAllList(keyA account)
 		this->RemoveFromList(account, *iter);
 	}
 
-	/*  Ÿ  */
+	/* 복사한 데이타 삭제 */
 	for (std::set::iterator iter = company.begin();
 			iter != company.end();
 			)
diff --git a/src/game/messenger_manager.h b/src/game/messenger_manager.h
index 189d756..fc428ff 100644
--- a/src/game/messenger_manager.h
+++ b/src/game/messenger_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_MESSENGER_MANAGER_H
+#ifndef __INC_MESSENGER_MANAGER_H
 #define __INC_MESSENGER_MANAGER_H
 
 #include "db.h"
@@ -23,10 +23,10 @@ class MessengerManager : public singleton
 		// void	AuthToAdd(keyA account, keyA companion, bool bDeny);
 		bool	AuthToAdd(keyA account, keyA companion, bool bDeny);
 
-		void	__AddToList(keyA account, keyA companion);	//  m_Relation, m_InverseRelation ϴ ޼ҵ
+		void	__AddToList(keyA account, keyA companion);	// 실제 m_Relation, m_InverseRelation 수정하는 메소드
 		void	AddToList(keyA account, keyA companion);
 
-		void	__RemoveFromList(keyA account, keyA companion); //  m_Relation, m_InverseRelation ϴ ޼ҵ
+		void	__RemoveFromList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
 		void	RemoveFromList(keyA account, keyA companion);	
 
 		void	RemoveAllList(keyA account);
diff --git a/src/game/minilzo.c b/src/game/minilzo.c
index bf75166..a5121c3 100644
--- a/src/game/minilzo.c
+++ b/src/game/minilzo.c
@@ -1,4 +1,4 @@
-/* minilzo.c -- mini subset of the LZO real-time data compression library
+/* minilzo.c -- mini subset of the LZO real-time data compression library
 
 This file is part of the LZO real-time data compression library.
 
diff --git a/src/game/minilzo.h b/src/game/minilzo.h
index 7715a4c..4816b4c 100644
--- a/src/game/minilzo.h
+++ b/src/game/minilzo.h
@@ -1,4 +1,4 @@
-/* minilzo.h -- mini subset of the LZO real-time data compression library
+/* minilzo.h -- mini subset of the LZO real-time data compression library
 
    This file is part of the LZO real-time data compression library.
 
diff --git a/src/game/mining.cpp b/src/game/mining.cpp
index f1ea8a6..8989baa 100644
--- a/src/game/mining.cpp
+++ b/src/game/mining.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "mining.h"
 #include "char.h"
 #include "char_manager.h"
@@ -292,7 +292,7 @@ namespace mining
 		CItem& pick = *item;
 		Pick_MaxCurExp(pick);
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" õ ִ(%d) Ǿϴ."), Pick_GetCurExp(pick));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이 수련도가 최대(%d)가 되었습니다."), Pick_GetCurExp(pick));
 	}
 
 	void PracticePick(LPCHARACTER ch, LPITEM item)
@@ -312,20 +312,20 @@ namespace mining
 
 			if (Pick_Refinable(pick))
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̰ ִ õ Ͽϴ."));
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("۸    ̷ ׷̵   ֽϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이가 최대 수련도에 도달하였습니다."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나무꾼를 통해 다음 레벨의 곡괭이로 업그레이드 할 수 있습니다."));
 			}
 			else
 			{
 				Pick_IncCurExp(pick);	
 
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" õ Ͽϴ! (%d/%d)"),
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이의 수련도가 증가하였습니다! (%d/%d)"),
 						Pick_GetCurExp(pick), Pick_GetMaxExp(pick));
 
 				if (Pick_Refinable(pick))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̰ ִ õ Ͽϴ."));
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("۸    ̷ ׷̵   ֽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이가 최대 수련도에 도달하였습니다."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나무꾼를 통해 다음 레벨의 곡괭이로 업그레이드 할 수 있습니다."));
 				}
 			}
 		}
@@ -355,14 +355,14 @@ namespace mining
 		// REFINE_PICK
 		if (!pick || !Pick_Check(*pick))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̸   ʾƼ Ķ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("곡괭이를 들고 있지 않아서 캘 수 없습니다."));
 			return 0;
 		}
 		// END_OF_REFINE_PICK
 
 		if (!load)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̻ ij  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("더이상 캐낼 수 없습니다."));
 			return 0;
 		}
 
@@ -371,11 +371,11 @@ namespace mining
 		if (number(1, 100) <= iPct)
 		{
 			OreDrop(ch, load->GetRaceNum());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채광에 성공하였습니다."));
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채광에 실패하였습니다."));
 		}
 
 		PracticePick(ch, pick);
diff --git a/src/game/mining.h b/src/game/mining.h
index e978af9..38f2de7 100644
--- a/src/game/mining.h
+++ b/src/game/mining.h
@@ -1,4 +1,4 @@
-#ifndef __MINING_H
+#ifndef __MINING_H
 #define __MINING_H
 
 namespace mining
diff --git a/src/game/mob_manager.cpp b/src/game/mob_manager.cpp
index d3ce498..37ab1cb 100644
--- a/src/game/mob_manager.cpp
+++ b/src/game/mob_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 #include "char_manager.h"
 #include "item_manager.h"
diff --git a/src/game/mob_manager.h b/src/game/mob_manager.h
index a6d95c5..21d73bd 100644
--- a/src/game/mob_manager.h
+++ b/src/game/mob_manager.h
@@ -1,10 +1,10 @@
-#ifndef __INC_METIN_II_MOB_MANAGER_H__
+#ifndef __INC_METIN_II_MOB_MANAGER_H__
 #define __INC_METIN_II_MOB_MANAGER_H__
 
 typedef struct SMobSplashAttackInfo
 {
-	DWORD	dwTiming; // ų      ٸ ð (ms)
-	DWORD	dwHitDistance; // ų   ų  Ǵ Ÿ ( cm)
+	DWORD	dwTiming; // 스킬 사용 후 실제로 데미지 먹힐때까지 기다리는 시간 (ms)
+	DWORD	dwHitDistance; // 스킬 사용시 실제로 스킬 계산이 되는 거리 (전방 몇cm)
 
 	SMobSplashAttackInfo(DWORD dwTiming, DWORD dwHitDistance)
 		: dwTiming(dwTiming)
@@ -37,8 +37,8 @@ class CMobInstance
 	public:
 		CMobInstance();
 
-		PIXEL_POSITION	m_posLastAttacked;	//   ġ
-		DWORD		m_dwLastAttackedTime;	//   ð
+		PIXEL_POSITION	m_posLastAttacked;	// 마지막 맞은 위치
+		DWORD		m_dwLastAttackedTime;	// 마지막 맞은 시간
 		DWORD		m_dwLastWarpTime;
 
 		bool m_IsBerserk;
diff --git a/src/game/monarch.cpp b/src/game/monarch.cpp
index 49e04e2..a7cd07d 100644
--- a/src/game/monarch.cpp
+++ b/src/game/monarch.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "monarch.h"
 #include "char.h"
@@ -41,7 +41,7 @@ struct FHealMyEmpire
 
 			if (ch->IsPC() && m_bEmpire == ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ְ  ູ    äϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주가 내린 축복으로 모든 에너지가 가득 채워집니다"));
 				ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
 				ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
 				ch->EffectPacket(SE_SPUP_BLUE);
@@ -62,7 +62,7 @@ int CMonarch::HealMyEmpire(LPCHARACTER ch ,DWORD price)
 	{
 		if (!ch->IsGM())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 			sys_err("No Monarch pid %d ", pid);
 			return 0;
 		}
@@ -70,14 +70,14 @@ int CMonarch::HealMyEmpire(LPCHARACTER ch ,DWORD price)
 
 	if (!ch->IsMCOK(CHARACTER::MI_HEAL))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d  Ŀ  ູ   ֽϴ"), ch->GetMCLTime(CHARACTER::MI_HEAL));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초 후에 군주의 축복을 사용할 수 있습니다"), ch->GetMCLTime(CHARACTER::MI_HEAL));
 
 		return 0;
 	}
 
 	if (!IsMoneyOk(price, Empire)) 
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), GetMoney(Empire), price);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), GetMoney(Empire), price);
 		return 0;
 	}
 
@@ -87,14 +87,14 @@ int CMonarch::HealMyEmpire(LPCHARACTER ch ,DWORD price)
 	f.m_bEmpire = Empire;
 	SECTREE_MANAGER::instance().for_each(iMapIndex, f);	
 
-	// DB  谨  
+	// DB에 돈 삭감 보내기 
 	SendtoDBDecMoney(price, Empire, ch);
 
-	// Ÿ 	
+	// 쿨타임 설정	
 	ch->SetMC(CHARACTER::MI_HEAL);
 
 	if (test_server)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[TEST_ONLY]  : %d "), GetMoney(Empire) - price);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[TEST_ONLY]현재 국고 : %d "), GetMoney(Empire) - price);
 	return 1;
 }
 
@@ -140,7 +140,7 @@ bool CMonarch::SendtoDBDecMoney(int Money, BYTE bEmpire, LPCHARACTER ch)
 	if (GetMoney(bEmpire) - Money < 0)
 		return false;
 
-	//  ̴ κ     óȴ
+	// 실제 줄이는 부분은 서버에 갔다 온 다음에 처리된다
 	int nEmpire = bEmpire;	
 
 	db_clientdesc->DBPacketHeader(HEADER_GD_DEC_MONARCH_MONEY, ch->GetDesc()->GetHandle(), sizeof(int) + sizeof(int));
@@ -154,7 +154,7 @@ bool CMonarch::AddMoney(int Money, BYTE bEmpire)
 	if (bEmpire >= _countof(m_MonarchInfo.money))
 		return false;
 
-	// 20 ̻ Ա Ұ
+	// 20억 이상 입금 불가능
 	if (GetMoney(bEmpire) + Money > 2000000000)
 		return false;
 
@@ -239,7 +239,7 @@ void CMonarch::PowerUp(BYTE Empire, bool On)
 
 	m_PowerUp[Empire] = On;
 
-	//   Ÿ 
+	// 군주 사자후 쿨타임 
 	m_PowerUpCT[Empire] = thecore_pulse() + PASSES_PER_SEC(60 * 10);
 }
 
@@ -250,13 +250,13 @@ void CMonarch::DefenseUp(BYTE Empire, bool On)
 
 	m_DefenseUp[Empire] = On;
 
-	//  ݰ Ÿ 
+	// 군주 금강권 쿨타임 
 	m_DefenseUpCT[Empire] = thecore_pulse() + PASSES_PER_SEC(60 * 10);
 }
 
 bool IsMonarchWarpZone (int map_idx)
 {
-	// Ʊ͵, õǵ.
+	// 아귀동굴, 천의동굴.
 	if (map_idx >= 10000)
 		map_idx /= 10000;
 
@@ -266,9 +266,9 @@ bool IsMonarchWarpZone (int map_idx)
 	case 302:
 	case 303:
 	case 304:
-		//
-	case 351: // 漺
-	case 352: // 
+		//던전
+	case 351: // 적룡성
+	case 352: // 백룡지성
 		return false;
 	}
 
diff --git a/src/game/monarch.h b/src/game/monarch.h
index 5954339..82a4d6a 100644
--- a/src/game/monarch.h
+++ b/src/game/monarch.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_MONARCH_H__
+#ifndef __INC_METIN_II_MONARCH_H__
 #define __INC_METIN_II_MONARCH_H__
 
 #include "../../common/tables.h"
@@ -49,11 +49,11 @@ class CMonarch : public singleton
 	private:
 		TMonarchInfo m_MonarchInfo;	
 
-		int m_PowerUp[4]; ///<  
-		int m_DefenseUp[4]; ///<  ݰ
+		int m_PowerUp[4]; ///< 군주의 사자후
+		int m_DefenseUp[4]; ///< 군주의 금강권
 
-		int m_PowerUpCT[4]; ///<  
-		int m_DefenseUpCT[4]; ///<  ݰ
+		int m_PowerUpCT[4]; ///< 군주의 사자후
+		int m_DefenseUpCT[4]; ///< 군주의 금강권
 };
 
 bool IsMonarchWarpZone (int map_idx);
diff --git a/src/game/motion.h b/src/game/motion.h
index 79b52c1..cd3c008 100644
--- a/src/game/motion.h
+++ b/src/game/motion.h
@@ -1,4 +1,4 @@
-#ifndef __INC_GAME_MOTION_H__
+#ifndef __INC_GAME_MOTION_H__
 #define __INC_GAME_MOTION_H__
 
 #include "../../common/d3dtype.h"
@@ -18,40 +18,40 @@ enum EMotionMode
 
 enum EPublicMotion
 {
-	MOTION_NONE,                // 0 
-	MOTION_WAIT,                // 1           (00.msa)
-	MOTION_WALK,                // 2 ȱ          (02.msa)
-	MOTION_RUN,                 // 3 ٱ          (03.msa)
-	MOTION_CHANGE_WEAPON,       // 4 ٲٱ
-	MOTION_DAMAGE,              // 5 ±      (30.msa)
-	MOTION_DAMAGE_FLYING,       // 6 鳯ư  (32.msa)
-	MOTION_STAND_UP,            // 7 Ͼ  (33.msa)
-	MOTION_DAMAGE_BACK,         // 8 ĸ±      (34.msa)
-	MOTION_DAMAGE_FLYING_BACK,  // 9 ĸ鳯ư  (35.msa)
-	MOTION_STAND_UP_BACK,       // 10 ĸϾ (26.msa)
-	MOTION_DEAD,                // 11 ױ         (31.msa)
-	MOTION_DEAD_BACK,           // 12 ĸױ     (37.msa)
-	MOTION_NORMAL_ATTACK,		// 13 ⺻ 
-	MOTION_COMBO_ATTACK_1,		// 14 ޺ 
-	MOTION_COMBO_ATTACK_2,      // 15 ޺ 
-	MOTION_COMBO_ATTACK_3,      // 16 ޺ 
-	MOTION_COMBO_ATTACK_4,      // 17 ޺ 
-	MOTION_COMBO_ATTACK_5,      // 18 ޺ 
-	MOTION_COMBO_ATTACK_6,      // 19 ޺ 
-	MOTION_COMBO_ATTACK_7,      // 20 ޺ 
-	MOTION_COMBO_ATTACK_8,      // 21 ޺ 
-	MOTION_INTRO_WAIT,          // 22 ȭ 
-	MOTION_INTRO_SELECTED,      // 23 ȭ 
-	MOTION_INTRO_NOT_SELECTED,  // 24 ȭ 
-	MOTION_SPAWN,               // 25 ȯ
-	MOTION_FISHING_THROW,       // 26  
-	MOTION_FISHING_WAIT,        // 27  
-	MOTION_FISHING_STOP,        // 28  ׸α
-	MOTION_FISHING_REACT,       // 29  
-	MOTION_FISHING_CATCH,       // 30  
-	MOTION_FISHING_FAIL,        // 31  
-	MOTION_STOP,                // 32  ߱
-	MOTION_SPECIAL_1,           // 33  ų
+	MOTION_NONE,                // 0 없음
+	MOTION_WAIT,                // 1 대기          (00.msa)
+	MOTION_WALK,                // 2 걷기          (02.msa)
+	MOTION_RUN,                 // 3 뛰기          (03.msa)
+	MOTION_CHANGE_WEAPON,       // 4 무기바꾸기
+	MOTION_DAMAGE,              // 5 정면맞기      (30.msa)
+	MOTION_DAMAGE_FLYING,       // 6 정면날아가기  (32.msa)
+	MOTION_STAND_UP,            // 7 정면일어나기  (33.msa)
+	MOTION_DAMAGE_BACK,         // 8 후면맞기      (34.msa)
+	MOTION_DAMAGE_FLYING_BACK,  // 9 후면날아가기  (35.msa)
+	MOTION_STAND_UP_BACK,       // 10 후면일어나기 (26.msa)
+	MOTION_DEAD,                // 11 죽기         (31.msa)
+	MOTION_DEAD_BACK,           // 12 후면죽기     (37.msa)
+	MOTION_NORMAL_ATTACK,		// 13 기본 공격
+	MOTION_COMBO_ATTACK_1,		// 14 콤보 공격
+	MOTION_COMBO_ATTACK_2,      // 15 콤보 공격
+	MOTION_COMBO_ATTACK_3,      // 16 콤보 공격
+	MOTION_COMBO_ATTACK_4,      // 17 콤보 공격
+	MOTION_COMBO_ATTACK_5,      // 18 콤보 공격
+	MOTION_COMBO_ATTACK_6,      // 19 콤보 공격
+	MOTION_COMBO_ATTACK_7,      // 20 콤보 공격
+	MOTION_COMBO_ATTACK_8,      // 21 콤보 공격
+	MOTION_INTRO_WAIT,          // 22 선택화면 대기
+	MOTION_INTRO_SELECTED,      // 23 선택화면 선택
+	MOTION_INTRO_NOT_SELECTED,  // 24 선택화면 비선택
+	MOTION_SPAWN,               // 25 소환
+	MOTION_FISHING_THROW,       // 26 낚시 던지기
+	MOTION_FISHING_WAIT,        // 27 낚시 대기
+	MOTION_FISHING_STOP,        // 28 낚시 그만두기
+	MOTION_FISHING_REACT,       // 29 낚시 반응
+	MOTION_FISHING_CATCH,       // 30 낚시 잡기
+	MOTION_FISHING_FAIL,        // 31 낚시 실패
+	MOTION_STOP,                // 32 말 멈추기
+	MOTION_SPECIAL_1,           // 33 몬스터 스킬
 	MOTION_SPECIAL_2,           // 34 
 	MOTION_SPECIAL_3,			// 35
 	MOTION_SPECIAL_4,			// 36
diff --git a/src/game/object_allocator.h b/src/game/object_allocator.h
index 43fcb8f..8f6828c 100644
--- a/src/game/object_allocator.h
+++ b/src/game/object_allocator.h
@@ -1,4 +1,4 @@
-#ifndef _OBJECT_ALLOCATOR_H_
+#ifndef _OBJECT_ALLOCATOR_H_
 #define _OBJECT_ALLOCATOR_H_
 
 #include "debug_allocator.h"
diff --git a/src/game/over9refine.cpp b/src/game/over9refine.cpp
index 8369da7..6b37234 100644
--- a/src/game/over9refine.cpp
+++ b/src/game/over9refine.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "log.h"
 #include "char.h"
diff --git a/src/game/over9refine.h b/src/game/over9refine.h
index 2352184..dc32207 100644
--- a/src/game/over9refine.h
+++ b/src/game/over9refine.h
@@ -1,4 +1,4 @@
-
+
 #ifndef OVER_9_REFINE_MANAGER_H_
 #define OVER_9_REFINE_MANAGER_H_
 
diff --git a/src/game/p2p.cpp b/src/game/p2p.cpp
index 112a2d2..30de811 100644
--- a/src/game/p2p.cpp
+++ b/src/game/p2p.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/stl.h"
 
 #include "constants.h"
@@ -173,7 +173,7 @@ void P2P_MANAGER::Login(LPDESC d, const TPacketGGLogin * p)
 	CGuildManager::instance().P2PLoginMember(pkCCI->dwPID);
 	CPartyManager::instance().P2PLogin(pkCCI->dwPID, pkCCI->szName);
 
-	// CCI ÿ ޽ Ʈϸ ȴ.
+	// CCI가 생성시에만 메신저를 업데이트하면 된다.
 	if (UpdateP2P) {
 		std::string name(pkCCI->szName);
 	    MessengerManager::instance().P2PLogin(name);
diff --git a/src/game/p2p.h b/src/game/p2p.h
index 53faa29..63abd83 100644
--- a/src/game/p2p.h
+++ b/src/game/p2p.h
@@ -1,4 +1,4 @@
-
+
 #ifndef P2P_MANAGER_H_
 #define P2P_MANAGER_H_
 
@@ -24,19 +24,19 @@ class P2P_MANAGER : public singleton
 		P2P_MANAGER();
 		~P2P_MANAGER();
 
-		// Ʒ Register* Unregister* pair    ƾ Ѵ.
-		//   ǥϱ  
+		// 아래 Register* Unregister* pair들은 내부적으로 사실 같은 루틴을 사용한다.
+		// 단지 명시적으로 표시하기 위한 것
 		void			RegisterAcceptor(LPDESC d);
 		void			UnregisterAcceptor(LPDESC d);
 
 		void			RegisterConnector(LPDESC d);
 		void			UnregisterConnector(LPDESC d);
 
-		void			EraseUserByDesc(LPDESC d);	// ش desc ִ  .
+		void			EraseUserByDesc(LPDESC d);	// 해당 desc에 있는 유저들을 지운다.
 
 		void			FlushOutput();
 
-		void			Boot(LPDESC d);	// p2p ó ʿ  ش. ( ij α  )
+		void			Boot(LPDESC d);	// p2p 처리에 필요한 정보를 보내준다. (전 캐릭터의 로그인 정보 등)
 
 		void			Send(const void * c_pvData, int iSize, LPDESC except = NULL);
 
diff --git a/src/game/packet.h b/src/game/packet.h
index 4b5c3d8..fc1cfbe 100644
--- a/src/game/packet.h
+++ b/src/game/packet.h
@@ -1,4 +1,4 @@
-#ifndef __INC_PACKET_H__
+#ifndef __INC_PACKET_H__
 #define __INC_PACKET_H__
 
 enum
@@ -46,14 +46,14 @@ enum
 	HEADER_CG_ITEM_USE_TO_ITEM			= 60,
 	HEADER_CG_TARGET			 	= 61,
 
-	HEADER_CG_TEXT				= 64,	// @  ۵Ǹ ؽƮ ĽѴ.
+	HEADER_CG_TEXT				= 64,	// @ 로 시작되면 텍스트를 파싱한다.
 	HEADER_CG_WARP				= 65,
 	HEADER_CG_SCRIPT_BUTTON			= 66,
 	HEADER_CG_MESSENGER				= 67,
 
 	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,
@@ -92,7 +92,7 @@ enum
 	HEADER_CG_SCRIPT_SELECT_ITEM	= 114,
 	// END_OF_SCRIPT_SELECT_ITEM
 	
-	HEADER_CG_LOGIN5_OPENID			= 116,	//OpenID : Ŭ̾Ʈκ OpenID Ű ޴´.
+	HEADER_CG_LOGIN5_OPENID			= 116,	//OpenID : 클라이언트로부터 OpenID 인증키를 받는다.
 
 //	HEADER_CG_ROULETTE				= 200,
 //	HEADER_CG_RUNUP_MATRIX_ANSWER	= 201,
@@ -100,10 +100,10 @@ enum
 	//
 	HEADER_CG_PASSPOD_ANSWER		= 202,
 
-	//NOTE : ̷ XXX  ̰ Packet  . ̷ ڵϰ  Ѿ.
-	//enum   ϴ. ƴ namepsace  ϴ..
-	// packet generator ٶ ʴ´. ̷ XX
-	//̷ٰ  ġ  åµ???
+	//NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
+	//enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
+	//정말 packet generator까지는 바라지도 않는다. 이런 씨XX
+	//이러다가 숫자 겹치면 누가 책임지는데???
 	HEADER_CG_HS_ACK				= 203,
 	HEADER_CG_XTRAP_ACK				= 204,
 
@@ -305,7 +305,7 @@ enum
 	HEADER_GG_NOTICE				= 4,
 	HEADER_GG_SHUTDOWN				= 5,
 	HEADER_GG_GUILD				= 6,
-	HEADER_GG_DISCONNECT			= 7,	//     
+	HEADER_GG_DISCONNECT			= 7,	// 누군가의 접속을 강제로 끊을 때
 	HEADER_GG_SHOUT				= 8,
 	HEADER_GG_SETUP				= 9,
 	HEADER_GG_MESSENGER_ADD                     = 10,
@@ -473,8 +473,8 @@ typedef struct SPacketGGMessengerMobile
 typedef struct SPacketGGFindPosition
 {
 	BYTE header;
-	DWORD dwFromPID; //  ġ Ϸ 
-	DWORD dwTargetPID; // ã 
+	DWORD dwFromPID; // 저 위치로 워프하려는 사람
+	DWORD dwTargetPID; // 찾는 사람
 } TPacketGGFindPosition;
 
 typedef struct SPacketGGWarpCharacter
@@ -515,14 +515,14 @@ typedef struct SPacketGGBlockChat
 	long	lBlockDuration;
 } TPacketGGBlockChat;
 
-/* Ŭ̾Ʈ   Ŷ */
+/* 클라이언트 측에서 보내는 패킷 */
 
 typedef struct command_text
 {
 	BYTE	bHeader;
 } TPacketCGText;
 
-/* α (1) */
+/* 로그인 (1) */
 typedef struct command_handshake
 {
 	BYTE	bHeader;
@@ -613,7 +613,7 @@ typedef struct command_player_create_success
 	TSimplePlayer	player;
 } TPacketGCPlayerCreateSuccess;
 
-// 
+// 공격
 typedef struct command_attack
 {
 	BYTE	bHeader;
@@ -635,7 +635,7 @@ enum EMoveFuncType
 	FUNC_SKILL = 0x80,
 };
 
-// ̵
+// 이동
 typedef struct command_move
 {
 	BYTE	bHeader;
@@ -654,22 +654,22 @@ typedef struct command_sync_position_element
 	long	lY;
 } TPacketCGSyncPositionElement;
 
-// ġ ȭ
-typedef struct command_sync_position	//  Ŷ
+// 위치 동기화
+typedef struct command_sync_position	// 가변 패킷
 {
 	BYTE	bHeader;
 	WORD	wSize;
 } TPacketCGSyncPosition;
 
-/* ä (3) */
-typedef struct command_chat	//  Ŷ
+/* 채팅 (3) */
+typedef struct command_chat	// 가변 패킷
 {
 	BYTE	header;
 	WORD	size;
 	BYTE	type;
 } TPacketCGChat;
 
-/* ӼӸ */
+/* 귓속말 */
 typedef struct command_whisper
 {
 	BYTE	bHeader;
@@ -829,7 +829,7 @@ typedef struct command_quest_confirm
 } TPacketCGQuestConfirm;
 
 /*
- *    Ŷ 
+ * 서버 측에서 보내는 패킷 
  */
 typedef struct packet_quest_confirm
 {
@@ -961,7 +961,7 @@ typedef struct packet_add_char
 	BYTE	bAttackSpeed;
 
 	BYTE	bStateFlag;
-	DWORD	dwAffectFlag[2];	// ȿ
+	DWORD	dwAffectFlag[2];	// 효과
 } TPacketGCCharacterAdd;
 
 typedef struct packet_char_additional_info
@@ -1023,7 +1023,7 @@ typedef struct packet_del_char
 	DWORD	id;
 } TPacketGCCharacterDelete;
 
-typedef struct packet_chat	//  Ŷ
+typedef struct packet_chat	// 가변 패킷
 {
 	BYTE	header;
 	WORD	size;
@@ -1032,7 +1032,7 @@ typedef struct packet_chat	// 
 	BYTE	bEmpire;
 } TPacketGCChat;
 
-typedef struct packet_whisper	//  Ŷ
+typedef struct packet_whisper	// 가변 패킷
 {
 	BYTE	bHeader;
 	WORD	wSize;
@@ -1256,7 +1256,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 
 	{
@@ -1279,7 +1279,7 @@ typedef struct packet_shop_update_price
 	int				iPrice;
 } TPacketGCShopUpdatePrice;
 
-typedef struct packet_shop	//  Ŷ
+typedef struct packet_shop	// 가변 패킷
 {
 	BYTE        header;
 	WORD	size; 
@@ -1359,7 +1359,7 @@ typedef struct packet_move
 	DWORD		dwDuration;
 } TPacketGCMove;
 
-// 
+// 소유권
 typedef struct packet_ownership
 {
 	BYTE		bHeader;
@@ -1367,7 +1367,7 @@ typedef struct packet_ownership
 	DWORD		dwVictimVID;
 } TPacketGCOwnership;
 
-// ġ ȭ Ŷ bCount ŭ ٴ 
+// 위치 동기화 패킷의 bCount 만큼 붙는 단위
 typedef struct packet_sync_position_element
 {
 	DWORD	dwVID;
@@ -1375,11 +1375,11 @@ typedef struct packet_sync_position_element
 	long	lY;
 } TPacketGCSyncPositionElement;
 
-// ġ ȭ
-typedef struct packet_sync_position	//  Ŷ
+// 위치 동기화
+typedef struct packet_sync_position	// 가변 패킷
 {
 	BYTE	bHeader;
-	WORD	wSize;	//  = (wSize - sizeof(TPacketGCSyncPosition)) / sizeof(TPacketGCSyncPositionElement) 
+	WORD	wSize;	// 개수 = (wSize - sizeof(TPacketGCSyncPosition)) / sizeof(TPacketGCSyncPositionElement) 
 } TPacketGCSyncPosition;
 
 typedef struct packet_fly
@@ -1414,7 +1414,7 @@ typedef struct packet_shoot
 typedef struct packet_duel_start
 {
 	BYTE	header;
-	WORD	wSize;	// DWORD ?  = (wSize - sizeof(TPacketGCPVPList)) / 4
+	WORD	wSize;	// DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
 } TPacketGCDuelStart;
 
 enum EPVPModes
@@ -1430,7 +1430,7 @@ typedef struct packet_pvp
 	BYTE        bHeader;
 	DWORD       dwVIDSrc;
 	DWORD       dwVIDDst;
-	BYTE        bMode;	// 0 ̸ , 1̸ 
+	BYTE        bMode;	// 0 이면 끔, 1이면 켬
 } TPacketGCPVP;
 
 typedef struct command_use_skill
@@ -1827,7 +1827,7 @@ typedef struct packet_mark_idxlist
 	BYTE    header;
 	DWORD	bufSize;
 	WORD	count;
-	//ڿ size * (WORD + WORD)ŭ  
+	//뒤에 size * (WORD + WORD)만큼 데이터 붙음
 } TPacketGCMarkIDXList;
 
 typedef struct packet_mark_block
@@ -1836,7 +1836,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
@@ -1981,8 +1981,8 @@ typedef struct SPacketGCRefineInformaion
 	DWORD	src_vnum;
 	DWORD	result_vnum;
 	BYTE	material_count;
-	int		cost; // ҿ 
-	int		prob; // Ȯ
+	int		cost; // 소요 비용
+	int		prob; // 확률
 	TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
 } TPacketGCRefineInformation;
 
@@ -2209,13 +2209,13 @@ typedef struct SPacketGCPanamaPack
 	BYTE	abIV[32];
 } TPacketGCPanamaPack;
 
-//TODO :  ƿ ¯..Ŷ  ޾Ƶϼ ְ Ŷ ڵ鷯 Refactoring . 
+//TODO :  아우 짱나..가변패킷 사이즈 받아들일수 있게 패킷 핸들러 Refactoring 하자. 
 typedef struct SPacketGCHybridCryptKeys
 {
 	SPacketGCHybridCryptKeys() : m_pStream(NULL) {}
 	~SPacketGCHybridCryptKeys()
 	{
-		//GCC  NULL delete ص ? ϴ ϰ NULL üũ . ( ٵ ̰ C++ ǥؾƴϾ --a )
+		//GCC 에선 NULL delete 해도 괜찮나? 일단 안전하게 NULL 체크 하자. ( 근데 이거 C++ 표준아니었나 --a )
 		if( m_pStream )
 		{
 			delete[] m_pStream;
@@ -2248,7 +2248,7 @@ typedef struct SPacketGCHybridCryptKeys
 	}
 
 	BYTE	bHeader;
-	WORD    uDynamicPacketSize; //  Ŭ  DynamicPacketHeader  Ѵ -_-;
+	WORD    uDynamicPacketSize; // 빌어먹을 클라  DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
 	int		KeyStreamLen;
 	BYTE*   pDataKeyStream;
 
@@ -2296,7 +2296,7 @@ typedef struct SPacketGCPackageSDB
 	}
 
 	BYTE	bHeader;
-	WORD    uDynamicPacketSize; //  Ŭ  DynamicPacketHeader  Ѵ -_-;
+	WORD    uDynamicPacketSize; // 빌어먹을 클라  DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
 	int		iStreamLen;
 	BYTE*   m_pDataSDBStream;
 
@@ -2332,7 +2332,7 @@ typedef struct SPacketGCSpecificEffect
 	char effect_file[MAX_EFFECT_FILE_NAME];
 } TPacketGCSpecificEffect;
 
-// ȥ
+// 용혼석
 enum EDragonSoulRefineWindowRefineType
 {
 	DragonSoulRefineWindow_UPGRADE,
diff --git a/src/game/packet_info.cpp b/src/game/packet_info.cpp
index 7d2916b..6075d13 100644
--- a/src/game/packet_info.cpp
+++ b/src/game/packet_info.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/stl.h"
 #include "constants.h"
 #include "packet_info.h"
diff --git a/src/game/packet_info.h b/src/game/packet_info.h
index 8f2cebe..4cc9c04 100644
--- a/src/game/packet_info.h
+++ b/src/game/packet_info.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_PACKET_HEADER_INFO_H__
+#ifndef __INC_METIN_II_GAME_PACKET_HEADER_INFO_H__
 #define __INC_METIN_II_GAME_PACKET_HEADER_INFO_H__
 
 #include "packet.h"
diff --git a/src/game/panama.cpp b/src/game/panama.cpp
index ed07ddb..3ed42ee 100644
--- a/src/game/panama.cpp
+++ b/src/game/panama.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "desc.h"
 #include "packet.h"
 
@@ -84,7 +84,7 @@ void SendPanamaList(LPDESC d)
 		DWORD* ivs = (DWORD*)pack.abIV;
 		for (int i = 0; i != 32 / sizeof(DWORD); i++)
 		{
-			ivs[i] ^= d->GetPanamaKey() + i * 16777619;	//   ij Ű XOR ش
+			ivs[i] ^= d->GetPanamaKey() + i * 16777619;	// 더블워드단위로 변형된 파나마 키를 XOR 해준다
 		}
 		++it;
 
diff --git a/src/game/panama.h b/src/game/panama.h
index 2ba4c3c..7002a78 100644
--- a/src/game/panama.h
+++ b/src/game/panama.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_PANAMA_H__
+#ifndef __INC_METIN_II_PANAMA_H__
 #define __INC_METIN_II_PANAMA_H__
 
 extern size_t PanamaLoad();
diff --git a/src/game/party.cpp b/src/game/party.cpp
index bfb958b..a2a6bae 100644
--- a/src/game/party.cpp
+++ b/src/game/party.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "char.h"
 #include "party.h"
@@ -34,7 +34,7 @@ void CPartyManager::DeleteAllParty()
 	}
 }
 
-bool CPartyManager::SetParty(LPCHARACTER ch)	// PC ؾ Ѵ!!
+bool CPartyManager::SetParty(LPCHARACTER ch)	// PC만 사용해야 한다!!
 {
 	TPartyMap::iterator it = m_map_pkParty.find(ch->GetPlayerID());
 
@@ -295,7 +295,7 @@ void CParty::Destroy()
 {
 	sys_log(2, "Party::Destroy");
 
-	// PC  Ƽ ƼŴ ʿ PID ؾ Ѵ.
+	// PC가 만든 파티면 파티매니저에 맵에서 PID를 삭제해야 한다.
 	if (m_bPCParty)
 	{
 		for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it)
@@ -323,11 +323,11 @@ void CParty::Destroy()
 				p.header = HEADER_GC_PARTY_REMOVE;
 				p.pid = rMember.pCharacter->GetPlayerID();
 				rMember.pCharacter->GetDesc()->Packet(&p, sizeof(p));
-				rMember.pCharacter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ػ Ǿϴ."));
+				rMember.pCharacter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티가 해산 되었습니다."));
 			}
 			else
 			{
-				// NPC   ð    ƴ   ϴ ̺Ʈ ۽Ų.
+				// NPC일 경우 일정 시간 후 전투 중이 아닐 때 사라지게 하는 이벤트를 시작시킨다.
 				rMember.pCharacter->SetLastAttacked(dwTime);
 				rMember.pCharacter->StartDestroyWhenIdleEvent();
 			}
@@ -458,7 +458,7 @@ void CParty::Join(DWORD dwPID)
 		TPacketPartyAdd p;
 		p.dwLeaderPID = GetLeaderPID();
 		p.dwPID = dwPID;
-		p.bState = PARTY_ROLE_NORMAL; // #0000790: [M2EU] CZ ũ : ʱȭ ߿! 
+		p.bState = PARTY_ROLE_NORMAL; // #0000790: [M2EU] CZ 크래쉬 증가: 초기화 중요! 
 		db_clientdesc->DBPacket(HEADER_GD_PARTY_ADD, 0, &p, sizeof(p));
 	}
 }
@@ -504,11 +504,11 @@ void CParty::P2PQuit(DWORD dwPID)
 	if (m_bPCParty)
 		CPartyManager::instance().SetPartyMember(dwPID, NULL);
 
-	//   Ƽ ػǾ Ѵ.
+	// 리더가 나가면 파티는 해산되어야 한다.
 	if (bRole == PARTY_ROLE_LEADER)
 		CPartyManager::instance().DeleteParty(this);
 
-	//  Ʒ ڵ带 ߰  !!!  DeleteParty ϸ this .
+	// 이 아래는 코드를 추가하지 말 것!!! 위 DeleteParty 하면 this는 없다.
 }
 
 void CParty::Quit(DWORD dwPID)
@@ -546,7 +546,7 @@ void CParty::Link(LPCHARACTER pkChr)
 		return;
 	}
 
-	// ÷̾ Ƽ  Ʈ ̺Ʈ 
+	// 플레이어 파티일 경우 업데이트 이벤트 생성
 	if (m_bPCParty && !m_eventUpdate)
 	{
 		party_update_event_info* info = AllocEventInfo();
@@ -644,7 +644,7 @@ void CParty::Unlink(LPCHARACTER pkChr)
 	if (pkChr->IsPC())
 	{
 		SendPartyUnlinkOneToAll(pkChr);
-		//SendPartyUnlinkAllToOne(pkChr); //  ̹Ƿ  Unlink Ŷ  ʿ .
+		//SendPartyUnlinkAllToOne(pkChr); // 끊기는 것이므로 구지 Unlink 패킷을 보낼 필요 없다.
 
 		if (it->second.bRole == PARTY_ROLE_LEADER)
 		{
@@ -652,7 +652,7 @@ void CParty::Unlink(LPCHARACTER pkChr)
 
 			if (it->second.pCharacter->GetDungeon())
 			{
-				// TODO:    
+				// TODO: 던젼에 있으면 나머지도 나간다
 				FExitDungeon f;
 				ForEachNearMember(f);
 			}
@@ -900,9 +900,9 @@ void CParty::SendMessage(LPCHARACTER ch, BYTE bMsg, DWORD dwArg1, DWORD dwArg2)
 			}
 			break;
 
-		case PM_ATTACKED_BY:	//  ޾,   û
+		case PM_ATTACKED_BY:	// 공격 받았음, 리더에게 도움을 요청
 			{
-				//   
+				// 리더가 없을 때
 				LPCHARACTER pkChrVictim = ch->GetVictim();
 
 				if (!pkChrVictim)
@@ -1069,7 +1069,7 @@ void CParty::RemoveBonusForOne(DWORD pid)
 
 void CParty::HealParty()
 {
-	// XXX DELETEME Ŭ̾Ʈ Ϸɶ
+	// XXX DELETEME 클라이언트 완료될때까지
 	{
 		return;
 	}
@@ -1123,7 +1123,7 @@ void CParty::SummonToLeader(DWORD pid)
 
 	if (m_memberMap.find(pid) == m_memberMap.end())
 	{
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ȯϷ  ã  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 소환하려는 대상을 찾을 수 없습니다."));
 		return;
 	}
 
@@ -1131,13 +1131,13 @@ void CParty::SummonToLeader(DWORD pid)
 
 	if (!ch)
 	{
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ȯϷ  ã  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 소환하려는 대상을 찾을 수 없습니다."));
 		return;
 	}
 
 	if (!ch->CanSummon(m_iLeadership))
 	{
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȯ  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 대상을 소환할 수 없습니다."));
 		return;
 	}
 
@@ -1154,7 +1154,7 @@ void CParty::SummonToLeader(DWORD pid)
 	}
 
 	if (n == 0)
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ  ġ ȯ  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티원을 현재 위치로 소환할 수 없습니다."));
 	else
 	{
 		int i = number(0, n - 1);
@@ -1360,7 +1360,7 @@ void CParty::Update()
 
 	bool bLongTimeExpBonusChanged = false;
 
-	// Ƽ Ἲ   ð  ġ ʽ ޴´.
+	// 파티 결성 후 충분한 시간이 지나면 경험치 보너스를 받는다.
 	if (!m_iLongTimeExpBonus && (get_dword_time() - m_dwPartyStartTime > PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS * 60 * 1000 / (g_iUseLocale?1:2)))
 	{
 		bLongTimeExpBonusChanged = true;
@@ -1376,7 +1376,7 @@ void CParty::Update()
 			continue;
 
 		if (bLongTimeExpBonusChanged && ch->GetDesc())
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ƽ   ݺ ߰ ġ ʽ ޽ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("파티의 협동력이 높아져 지금부터 추가 경험치 보너스를 받습니다."));
 
 		bool bNear = it->second.bNear;
 
@@ -1405,9 +1405,9 @@ void CParty::Update()
 		if (!m_bCanUsePartyHeal && m_iLeadership >= 18)
 			m_dwPartyHealTime = get_dword_time();
 
-		m_bCanUsePartyHeal = m_iLeadership >= 18; // ַ 18 ̻    .
+		m_bCanUsePartyHeal = m_iLeadership >= 18; // 통솔력 18 이상은 힐을 사용할 수 있음.
 
-		// ַ 40̻ Ƽ  Ÿ .
+		// 통솔력 40이상은 파티 힐 쿨타임이 적다.
 		DWORD PartyHealCoolTime = (m_iLeadership >= 40) ? PARTY_HEAL_COOLTIME_SHORT * 60 * 1000 : PARTY_HEAL_COOLTIME_LONG * 60 * 1000;
 
 		if (m_bCanUsePartyHeal)
@@ -1417,7 +1417,7 @@ void CParty::Update()
 				m_bPartyHealReady = true;
 
 				// send heal ready
-				if (0) // XXX  DELETEME Ŭ̾Ʈ Ϸɶ
+				if (0) // XXX  DELETEME 클라이언트 완료될때까지
 					if (GetLeaderCharacter())
 						GetLeaderCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "PartyHealReady");
 			}
@@ -1689,7 +1689,7 @@ int CParty::ComputePartyBonusExpPercent()
 	if (leader && (leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP) || leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_MALL)
 		|| leader->IsEquipUniqueItem(UNIQUE_ITEM_PARTY_BONUS_EXP_GIFT) || leader->IsEquipUniqueGroup(10010)))
 	{
-		// ߱   ȮؾѴ.
+		// 중국측 육도 적용을 확인해야한다.
 		if (g_iUseLocale)
 		{
 			iBonusPartyExpFromItem = 30;
diff --git a/src/game/party.h b/src/game/party.h
index a15cc09..460f275 100644
--- a/src/game/party.h
+++ b/src/game/party.h
@@ -1,11 +1,11 @@
-#ifndef __INC_METIN_II_GAME_PARTY_H__
+#ifndef __INC_METIN_II_GAME_PARTY_H__
 #define __INC_METIN_II_GAME_PARTY_H__
 
 #include "char.h"
 
 enum // unit : minute
 {
-	PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60, // Ƽ Ἲ  60   ߰ ġ ʽ
+	PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60, // 파티 결성 후 60분 후 부터 추가 경험치 보너스
 	PARTY_HEAL_COOLTIME_LONG = 60,
 	PARTY_HEAL_COOLTIME_SHORT = 30,
 	PARTY_MAX_MEMBER = 8,
@@ -69,12 +69,12 @@ class CPartyManager : public singleton
 		void		P2PQuitParty(DWORD pid);
 
 	private:
-		TPartyMap	m_map_pkParty;		// PID  Ƽ ֳ ˻ϱ  ̳
-		TPartyMap	m_map_pkMobParty;	// Mob Ƽ PID  VID   Ѵ.
+		TPartyMap	m_map_pkParty;		// PID로 어느 파티에 있나 검색하기 위한 컨테이너
+		TPartyMap	m_map_pkMobParty;	// Mob 파티는 PID 대신 VID 로 따로 관리한다.
 
-		TPCPartySet	m_set_pkPCParty;	//  Ƽ ü 
+		TPCPartySet	m_set_pkPCParty;	// 사람들의 파티 전체 집합
 
-		bool		m_bEnablePCParty;	//     Ƽ ° Ұ
+		bool		m_bEnablePCParty;	// 디비가 켜져있지 않으면 사람들의 파티 상태가 변경불가
 };
 
 enum EPartyMessages
@@ -246,9 +246,9 @@ class CParty
 		TFlagMap	m_map_iFlag;
 
 		LPDUNGEON	m_pkDungeon;
-		// Ʊ  dungeon  .
-		//  ̷Ա ϰ  ʾҴµ,  party   ̶
-		// װ ġ  ̷ ӽ÷ س´.
+		// 아귀 동굴용 dungeon 멤버 변수.
+		// 정말 이렇게까지 하고 싶진 않았는데, 던전에서 party 관리가 정말로 개판이라
+		// 그거 고치기 전까지는 이렇게 임시로 해놓는다.
 		LPDUNGEON	m_pkDungeon_for_Only_party;
 	public:
 		void SetDungeon_for_Only_party(LPDUNGEON pDungeon);
diff --git a/src/game/passpod.cpp b/src/game/passpod.cpp
index afe4050..e225531 100644
--- a/src/game/passpod.cpp
+++ b/src/game/passpod.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "passpod.h"
 
@@ -46,7 +46,7 @@ int CPasspod::ConfirmPasspod( const char * account, const char * passpod )
 	char szResult[1024];
 	char szTmp[128];
 
-	int ret_code = 1; // 0   
+	int ret_code = 1; // 0 이 성공 
 
 	snprintf( szRequest, sizeof(szRequest), "username=%s&systemname=%s&passpod=%s&algname=%s", account, servername, passpod, algname );
 	snprintf( szResult, sizeof(szResult), "POST %s%s HTTP/1.0\r\n", posspod_server, auth );
@@ -105,14 +105,14 @@ int CPasspod::ConfirmPasspod( const char * account, const char * passpod )
 	{
 		int n = 0;
 
-		//γѱ
+		//라인넘기기
 		for (; pos[n]!='\n'; ++n  ) {}
 	
-		//\n ߱ ϳ  	
+		//\n에서 멈추기 하나더 남겨주자 	
 		pos = pos+n+1;
 
 		
-		//Return Value   
+		//Return Value 를 비교 
 		if ( 0 == strncmp( pos, "AUTH_SUCCESS", strlen(ERR_STRINGS[0]) ) )
 		{
 			ret_code = E_PASSPOD_SUCCESS;
diff --git a/src/game/passpod.h b/src/game/passpod.h
index f8a03cc..7e01fcc 100644
--- a/src/game/passpod.h
+++ b/src/game/passpod.h
@@ -1,4 +1,4 @@
-#ifndef PASSPOD_H
+#ifndef PASSPOD_H
 #define PASSPOD_H
 
 class CPasspod : public singleton
diff --git a/src/game/pcbang.cpp b/src/game/pcbang.cpp
index a5593c5..793e11d 100644
--- a/src/game/pcbang.cpp
+++ b/src/game/pcbang.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "config.h"
 #include "locale_service.h"
diff --git a/src/game/pcbang.h b/src/game/pcbang.h
index 57131e3..3171f36 100644
--- a/src/game/pcbang.h
+++ b/src/game/pcbang.h
@@ -1,4 +1,4 @@
-
+
 typedef unsigned long PCBang_IP;
 typedef unsigned long PCBang_ID;
 
diff --git a/src/game/polymorph.cpp b/src/game/polymorph.cpp
index 32c4111..b1436be 100644
--- a/src/game/polymorph.cpp
+++ b/src/game/polymorph.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "char.h"
 #include "mob_manager.h"
 #include "affect.h"
@@ -64,26 +64,26 @@ bool CPolymorphUtils::PolymorphCharacter(LPCHARACTER pChar, LPITEM pItem, const
 
 	// dwDuration *= 60;
 
-	//  Ȯ = ij  -   + а  + 29 + а ų 
+	// 변신 확률 = 캐릭터 레벨 - 몹 레벨 + 둔갑서 레벨 + 29 + 둔갑 스킬 레벨
 	iPolyPercent = pChar->GetLevel() - pMob->m_table.bLevel + pItem->GetSocket(2) + (29 + bySkillLevel);
 
 	if (iPolyPercent <= 0)
 	{
-		pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а  Ͽϴ"));
+		pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑에 실패 하였습니다"));
 		return false;
 	}
 	else
 	{
 		if (number(1, 100) > iPolyPercent)
 		{
-			pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а  Ͽϴ"));
+			pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑에 실패 하였습니다"));
 			return false;
 		}
 	}
 
 	pChar->AddAffect(AFFECT_POLYMORPH, POINT_POLYMORPH, pMob->m_table.dwVnum, AFF_POLYMORPH, dwDuration, 0, true);
 
-	//  ʽ = а ų  + а 
+	// 변신 보너스 = 둔갑 스킬 레벨 + 둔갑서 레벨
 	dwBonusPercent = bySkillLevel + pItem->GetSocket(2);
 
 	switch (GetBonusType(pMob->m_table.dwVnum))
@@ -116,15 +116,15 @@ bool CPolymorphUtils::UpdateBookPracticeGrade(LPCHARACTER pChar, LPITEM pItem)
 	if (pItem->GetSocket(1) > 0)
 		pItem->SetSocket(1, pItem->GetSocket(1) - 1);
 	else
-		pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а  úϴ. ż ãư."));
+		pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑서 수련을 마첬습니다. 신선에게 찾아가세요."));
 
 	return true;
 }
 
 bool CPolymorphUtils::GiveBook(LPCHARACTER pChar, DWORD dwMobVnum, DWORD dwPracticeCount, BYTE BookLevel, BYTE LevelLimit)
 {
-	// 0                1       2
-	// а  ȣ       а 
+	// 소켓0                소켓1       소켓2
+	// 둔갑할 몬스터 번호   수련정도    둔갑서 레벨
 	if (pChar == NULL)
 		return false;
 
@@ -140,9 +140,9 @@ bool CPolymorphUtils::GiveBook(LPCHARACTER pChar, DWORD dwMobVnum, DWORD dwPract
 		return false;
 	}
 
-	pItem->SetSocket(0, dwMobVnum);			// а  ȣ
-	pItem->SetSocket(1, dwPracticeCount);		// ؾ Ƚ
-	pItem->SetSocket(2, BookLevel);			// ÷
+	pItem->SetSocket(0, dwMobVnum);			// 둔갑할 몬스터 번호
+	pItem->SetSocket(1, dwPracticeCount);		// 수련해야할 횟수
+	pItem->SetSocket(2, BookLevel);			// 수련레벨
 	return true;
 }
 
diff --git a/src/game/polymorph.h b/src/game/polymorph.h
index ec8d381..292f2eb 100644
--- a/src/game/polymorph.h
+++ b/src/game/polymorph.h
@@ -1,4 +1,4 @@
-
+
 #ifndef __POLYMORPH_UTILS__
 #define __POLYMORPH_UTILS__
 
diff --git a/src/game/pool.h b/src/game/pool.h
index 77a0658..6d063df 100644
--- a/src/game/pool.h
+++ b/src/game/pool.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_POOL_H__
+#ifndef __INC_METIN_II_GAME_POOL_H__
 #define __INC_METIN_II_GAME_POOL_H__
 
 // Neither error-checking nor watermarking here.
diff --git a/src/game/priv_manager.cpp b/src/game/priv_manager.cpp
index 73df5e9..3d9e50e 100644
--- a/src/game/priv_manager.cpp
+++ b/src/game/priv_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "priv_manager.h"
 #include "char.h"
@@ -105,13 +105,13 @@ void CPrivManager::GiveGuildPriv(DWORD guild_id, BYTE type, int value, BYTE bLog
 		if (value)
 		{
 			char buf[100];
-			snprintf(buf, sizeof(buf), LC_TEXT("%s  %s %d%% ߽ϴ!"), g->GetName(), GetPrivName(type), value);
+			snprintf(buf, sizeof(buf), LC_TEXT("%s 길드의 %s이 %d%% 증가했습니다!"), g->GetName(), GetPrivName(type), value);
 			SendNotice(buf);
 		}
 		else
 		{
 			char buf[100];
-			snprintf(buf, sizeof(buf), LC_TEXT("%s  %s  ƿԽϴ."), g->GetName(), GetPrivName(type));
+			snprintf(buf, sizeof(buf), LC_TEXT("%s 길드의 %s이 정상으로 돌아왔습니다."), g->GetName(), GetPrivName(type));
 			SendNotice(buf);
 		}
 
@@ -160,7 +160,7 @@ void CPrivManager::GiveEmpirePriv(BYTE empire, BYTE type, int value, BYTE bLog,
 	if (value)
 	{
 		char buf[100];
-		snprintf(buf, sizeof(buf), LC_TEXT("%s %s %d%% ߽ϴ!"), GetEmpireName(empire), GetPrivName(type), value);
+		snprintf(buf, sizeof(buf), LC_TEXT("%s의 %s이 %d%% 증가했습니다!"), GetEmpireName(empire), GetPrivName(type), value);
 
 		if (empire)
 			SendNotice(buf);
@@ -170,7 +170,7 @@ void CPrivManager::GiveEmpirePriv(BYTE empire, BYTE type, int value, BYTE bLog,
 	else
 	{
 		char buf[100];
-		snprintf(buf, sizeof(buf), LC_TEXT("%s %s  ƿԽϴ."), GetEmpireName(empire), GetPrivName(type));
+		snprintf(buf, sizeof(buf), LC_TEXT("%s의 %s이 정상으로 돌아왔습니다."), GetEmpireName(empire), GetPrivName(type));
 
 		if (empire)
 			SendNotice(buf);
@@ -225,7 +225,7 @@ void CPrivManager::RemoveCharacterPriv(DWORD pid, BYTE type)
 
 int CPrivManager::GetPriv(LPCHARACTER ch, BYTE type)
 {
-	// ij  ġ -  - ǰ
+	// 캐릭터의 변경 수치가 -라면 무조건 -만 적용되게
 	int val_ch = GetPrivByCharacter(ch->GetPlayerID(), type);
 
 	if (val_ch < 0 && !ch->IsEquipUniqueItem(UNIQUE_ITEM_NO_BAD_LUCK_EFFECT))
@@ -234,7 +234,7 @@ int CPrivManager::GetPriv(LPCHARACTER ch, BYTE type)
 	{
 		int val;
 
-		// , , , ü  ū  Ѵ.
+		// 개인, 제국, 길드, 전체 중 큰 값을 취한다.
 		val = MAX(val_ch, GetPrivByEmpire(0, type));
 		val = MAX(val, GetPrivByEmpire(ch->GetEmpire(), type));
 
diff --git a/src/game/priv_manager.h b/src/game/priv_manager.h
index 58b011d..1107717 100644
--- a/src/game/priv_manager.h
+++ b/src/game/priv_manager.h
@@ -1,11 +1,11 @@
-#ifndef __PRIV_MANAGER_H
+#ifndef __PRIV_MANAGER_H
 #define __PRIV_MANAGER_H
 
 /**
- * @version 05/06/08	Bang2ni - Guild privilege  Լ  ð ߰
- * 			          RequestGiveGuildPriv, GiveGuildPriv Լ Ÿ 
- * 			          m_aPrivGuild Ÿ 
- * 			          ü SPrivGuildData,  Լ GetPrivByGuildEx ߰
+ * @version 05/06/08	Bang2ni - Guild privilege 관련 함수 지속 시간 추가
+ * 			          RequestGiveGuildPriv, GiveGuildPriv 함수 프로토타잎 수정
+ * 			          m_aPrivGuild 타잎 수정
+ * 			          구조체 SPrivGuildData, 멤버 함수 GetPrivByGuildEx 추가
  */
 class CPrivManager : public singleton
 {
@@ -38,18 +38,18 @@ class CPrivManager : public singleton
 
 		SPrivEmpireData* GetPrivByEmpireEx(BYTE bEmpire, BYTE type);
 
-		///  ʽ 
+		/// 길드 보너스 데이터
 		struct SPrivGuildData
 		{
-			int		value;		///< ʽ ġ
-			time_t	end_time_sec;	///<  ð
+			int		value;		///< 보너스 수치
+			time_t	end_time_sec;	///< 지속 시간
 		};
 
-		///  ʽ ͸ ´.
+		/// 길드 보너스 데이터를 얻어온다.
 		/**
-		 * @param [in]	dwGuildID   ID
-		 * @param [in]	byType ʽ Ÿ
-		 * @return	   ʽ  , شϴ ʽ Ÿٰ  ID   ʽ Ͱ   NULL
+		 * @param [in]	dwGuildID 얻어올 길드의 ID
+		 * @param [in]	byType 보너스 타잎
+		 * @return	대상 길드의 길드 보너스 데이터의 포인터, 해당하는 보너스 타잎과 길드의 ID 에 대해 보너스 데이터가 없을 경우 NULL
 		 */
 		const SPrivGuildData*	GetPrivByGuildEx( DWORD dwGuildID, BYTE byType ) const;
 
diff --git a/src/game/profiler.h b/src/game/profiler.h
index b074c46..7c1acdc 100644
--- a/src/game/profiler.h
+++ b/src/game/profiler.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_PROFILER_H__
+#ifndef __INC_METIN_II_GAME_PROFILER_H__
 #define __INC_METIN_II_GAME_PROFILER_H__
 
 #include 
diff --git a/src/game/protocol.h b/src/game/protocol.h
index 58e85d8..732863e 100644
--- a/src/game/protocol.h
+++ b/src/game/protocol.h
@@ -1,4 +1,4 @@
-#ifndef __PROTOCOL_H__
+#ifndef __PROTOCOL_H__
 #define __PROTOCOL_H__
 
 inline const char *encode_byte(char ind)
diff --git a/src/game/pvp.cpp b/src/game/pvp.cpp
index caa8987..40cf933 100644
--- a/src/game/pvp.cpp
+++ b/src/game/pvp.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "pvp.h"
 #include "crc32.h"
@@ -131,7 +131,7 @@ void CPVP::Win(DWORD dwPID)
 
 	m_bRevenge = true;
 
-	m_players[iSlot].bAgree = true; // ڵ 
+	m_players[iSlot].bAgree = true; // 자동으로 동의
 	m_players[!iSlot].bCanRevenge = true;
 	m_players[!iSlot].bAgree = false;
 
@@ -180,11 +180,11 @@ void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 
 	if ((pkPVP = Find(kPVP.m_dwCRC)))
 	{
-		//    ٷ ο!
+		// 복수할 수 있으면 바로 싸움!
 		if (pkPVP->Agree(pkChr->GetPlayerID()))
 		{
-			pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s԰  !"), pkChr->GetName());
-			pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s԰  !"), pkVictim->GetName());
+			pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s님과의 대결 시작!"), pkChr->GetName());
+			pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s님과의 대결 시작!"), pkVictim->GetName());
 		}
 		return;
 	}
@@ -202,10 +202,10 @@ void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 	pkPVP->Packet();
 
 	char msg[CHAT_MAX_LEN + 1];
-	snprintf(msg, sizeof(msg), LC_TEXT("%s û ߽ϴ. ³Ϸ ᵿǸ ϼ."), pkChr->GetName());
+	snprintf(msg, sizeof(msg), LC_TEXT("%s님이 대결신청을 했습니다. 승낙하려면 대결동의를 하세요."), pkChr->GetName());
 
 	pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
-	pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s û ߽ϴ."), pkVictim->GetName());
+	pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s에게 대결신청을 했습니다."), pkVictim->GetName());
 
 	// NOTIFY_PVP_MESSAGE
 	LPDESC pkVictimDesc = pkVictim->GetDesc();
@@ -299,8 +299,8 @@ void CPVPManager::GiveUp(LPCHARACTER pkChr, DWORD dwKillerPID) // This method is
 	}
 }
 
-// ϰ: 0 = PK, 1 = PVP
-// PVP ϸ ġ   PK  ʴ´.
+// 리턴값: 0 = PK, 1 = PVP
+// PVP를 리턴하면 경험치나 아이템을 떨구고 PK면 떨구지 않는다.
 bool CPVPManager::Dead(LPCHARACTER pkChr, DWORD dwKillerPID)
 {
 	CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChr->GetPlayerID());
@@ -354,7 +354,7 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 			return false;
 	}
 
-	if (pkChr == pkVictim)  //   ĥ ϳ -_-
+	if (pkChr == pkVictim)  // 내가 날 칠라고 하네 -_-
 		return false;
 
 	if (pkVictim->IsNPC() && pkChr->IsNPC() && !pkChr->IsGuardNPC())
@@ -380,7 +380,7 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 			case 20116:
 			case 20117:
 			case 20118:
-				//ű Ż 
+				//신규 탈것 고급
 			case 20205:
 			case 20206:
 			case 20207:
@@ -389,21 +389,21 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 			case 20210:
 			case 20211:
 			case 20212:
-			case 20119:		// 󸶴 渶
-			case 20219:		// 󸶴 渶 Ŭ (ҷ)
-			case 20220:		// ũ Ż
-			case 20221:		//  
-			case 20222:		//  Ҵ
+			case 20119:		// 라마단 흑마
+			case 20219:		// 라마단 흑마 클론 (할로윈용)
+			case 20220:		// 크리스마스 탈것
+			case 20221:		// 전갑 백웅
+			case 20222:		// 전갑 팬더
 			case 20120:
 			case 20121:
 			case 20122:
 			case 20123:
 			case 20124:
 			case 20125:
-			case 20214:		//  	
-			case 20215:		//  	
-			case 20217:		//  ϼ	
-			case 20218:		//  ϼ	
+			case 20214:		// 난폭한 전갑순순록	
+			case 20215:		// 용맹한 전갑순순록	
+			case 20217:		// 난폭한 전갑암순록	
+			case 20218:		// 용맹한 전갑암순록	
 			case 20224:
 			case 20229:
 			case 20225:
@@ -464,7 +464,7 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 		{
 		    if (g_protectNormalPlayer)
 		    {
-			// ڴ ȭ ѻ   .
+			// 범법자는 평화모드인 착한사람을 공격할 수 없다.
 			if (PK_MODE_PEACE == pkVictim->GetPKMode())
 			    return false;
 		    }
@@ -596,7 +596,7 @@ void CPVPManager::SendList(LPDESC d)
 		if (!pkPVP->m_players[0].dwVID || !pkPVP->m_players[1].dwVID)
 			continue;
 
-		// VID Ѵ  쿡 .
+		// VID가 둘다 있을 경우에만 보낸다.
 		if (pkPVP->IsFight())
 		{
 			pack.bMode = PVP_MODE_FIGHT;
@@ -651,7 +651,7 @@ void CPVPManager::Process()
 	{
 		CPVP * pvp = (it++)->second;
 
-		if (get_dword_time() - pvp->GetLastFightTime() > 600000) // 10 ̻ ο 
+		if (get_dword_time() - pvp->GetLastFightTime() > 600000) // 10분 이상 싸움이 없었으면
 		{
 			pvp->Packet(true);
 			Delete(pvp);
diff --git a/src/game/pvp.h b/src/game/pvp.h
index 116c632..9973ce7 100644
--- a/src/game/pvp.h
+++ b/src/game/pvp.h
@@ -1,10 +1,10 @@
-#ifndef __INC_METIN_II_GAME_PVP_H__
+#ifndef __INC_METIN_II_GAME_PVP_H__
 #define __INC_METIN_II_GAME_PVP_H__
 
 class CHARACTER;
 
-// CPVP DWORD ̵ ΰ ޾Ƽ m_dwCRC   ִ´.
-// CPVPManager ̷  CRC  ˻Ѵ.
+// CPVP에는 DWORD 아이디 두개를 받아서 m_dwCRC를 만들어서 가지고 있는다.
+// CPVPManager에서 이렇게 만든 CRC를 통해 검색한다.
 class CPVP
 {
 	public:
@@ -26,8 +26,8 @@ class CPVP
 		CPVP(CPVP & v);
 		~CPVP();
 
-		void	Win(DWORD dwPID); // dwPID ̰!
-		bool	CanRevenge(DWORD dwPID); // dwPID   ־?
+		void	Win(DWORD dwPID); // dwPID가 이겼다!
+		bool	CanRevenge(DWORD dwPID); // dwPID가 복수할 수 있어?
 		bool	IsFight();
 		bool	Agree(DWORD dwPID);
 
@@ -57,7 +57,7 @@ class CPVPManager : public singleton
 
 	void			Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim);
 	bool			CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim);
-	bool			Dead(LPCHARACTER pkChr, DWORD dwKillerPID);	// PVP ־  
+	bool			Dead(LPCHARACTER pkChr, DWORD dwKillerPID);	// PVP에 있었나 없었나를 리턴
 	void			GiveUp(LPCHARACTER pkChr, DWORD dwKillerPID);
 	void			Connect(LPCHARACTER pkChr);
 	void			Disconnect(LPCHARACTER pkChr);
diff --git a/src/game/quest.h b/src/game/quest.h
index 984869e..d702bd3 100644
--- a/src/game/quest.h
+++ b/src/game/quest.h
@@ -1,4 +1,4 @@
-#ifndef __METIN2_SERVER_QUEST_H__
+#ifndef __METIN2_SERVER_QUEST_H__
 #define __METIN2_SERVER_QUEST_H__
 
 #define INDUCTION_LEVEL3	(1 << 0)
diff --git a/src/game/questevent.cpp b/src/game/questevent.cpp
index 898a0b0..44d6e24 100644
--- a/src/game/questevent.cpp
+++ b/src/game/questevent.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "char.h"
 #include "char_manager.h"
@@ -35,7 +35,7 @@ namespace quest
 		if (!q.ServerTimer(info->npc_id, info->arg))
 			return passes_per_sec / 2 + 1;
 
-		if (0 == info->time_cycle)	//  ƴ϶  Ų.
+		if (0 == info->time_cycle)	// 루프가 아니라면 종료 시킨다.
 		{
 			q.ClearServerTimerNotCancel(info->name, info->arg);
 			M2_DELETE_ARRAY(info->name);
@@ -62,7 +62,7 @@ namespace quest
 			if (!CQuestManager::instance().Timer(info->player_id, info->npc_id))
 				return (passes_per_sec / 2 + 1);
 
-			if (0 == info->time_cycle)	//  ƴ϶  Ų.
+			if (0 == info->time_cycle)	// 루프가 아니라면 종료 시킨다.
 				goto END_OF_TIMER_EVENT;
 		}
 		else
diff --git a/src/game/questevent.h b/src/game/questevent.h
index f1bf200..c9faf24 100644
--- a/src/game/questevent.h
+++ b/src/game/questevent.h
@@ -1,4 +1,4 @@
-#ifndef __QUEST_EVENT_H
+#ifndef __QUEST_EVENT_H
 #define __QUEST_EVENT_H
 
 namespace quest
diff --git a/src/game/questlua.cpp b/src/game/questlua.cpp
index d628f34..9d36e71 100644
--- a/src/game/questlua.cpp
+++ b/src/game/questlua.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include 
@@ -450,7 +450,7 @@ namespace quest
 	}
 
 	/**
-	 * @version 05/06/08	Bang2ni - __get_guildid_byname ũƮ Լ 
+	 * @version 05/06/08	Bang2ni - __get_guildid_byname 스크립트 함수 등록
 	 */
 	bool CQuestManager::InitializeLua()
 	{
@@ -696,7 +696,7 @@ namespace quest
 
 		if (chReply)
 		{
-			// ð  ˾Ƽ 
+			// 시간 지나면 알아서 닫힘
 		}
 
 		if (chWait)
@@ -716,12 +716,12 @@ namespace quest
 
 		sys_log(0, "GotoConfirmState vid %u msg '%s', timeout %d", dwVID, szMsg, iTimeout);
 
-		// 1. 濡 Ȯâ 
-		// 2.  Ȯ ٸٰ ǥϴ â 
-		// 3. ŸӾƿ  (ŸӾƿ Ǹ  â ݰ Ե â  )
+		// 1. 상대방에게 확인창 띄움
+		// 2. 나에게 확인 기다린다고 표시하는 창 띄움
+		// 3. 타임아웃 설정 (타임아웃 되면 상대방 창 닫고 나에게도 창 닫으라고 보냄)
 
 		// 1
-		//    ׳ 濡  ʴ´. ŸӾƿ ؼ ѾԵ
+		// 상대방이 없는 경우는 그냥 상대방에게 보내지 않는다. 타임아웃에 의해서 넘어가게됨
 		LPCHARACTER ch = CHARACTER_MANAGER::instance().Find(dwVID);
 		if (ch && ch->IsPC())
 		{
@@ -757,7 +757,7 @@ namespace quest
 		AddScript("[INPUT]");
 		SendScript();
 
-		// ð  
+		// 시간 제한을 검
 		//event_create(input_timeout_event, dwEI, PASSES_PER_SEC(iTimeout));
 	}
 
diff --git a/src/game/questlua.h b/src/game/questlua.h
index 43b7043..1b0c403 100644
--- a/src/game/questlua.h
+++ b/src/game/questlua.h
@@ -1,4 +1,4 @@
-#ifndef __HEADER_QUEST_LUA__
+#ifndef __HEADER_QUEST_LUA__
 #define __HEADER_QUEST_LUA__
 
 #include "quest.h"
diff --git a/src/game/questlua_affect.cpp b/src/game/questlua_affect.cpp
index 108d835..4ed8278 100644
--- a/src/game/questlua_affect.cpp
+++ b/src/game/questlua_affect.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "questmanager.h"
 #include "sectree_manager.h"
@@ -31,7 +31,7 @@ namespace quest
 			return 0;
 		}
 
-		if (ch->FindAffect(AFFECT_QUEST_START_IDX, applyOn)) // Ʈ    ȿ ɷ ŵ
+		if (ch->FindAffect(AFFECT_QUEST_START_IDX, applyOn)) // 퀘스트로 인해 같은 곳에 효과가 걸려있으면 스킵
 			return 0;
 
 		long value = (long) lua_tonumber(L, 2);
@@ -62,14 +62,14 @@ namespace quest
 		return 0;
 	}
 
-	int affect_remove_bad(lua_State * L) //  ȿ 
+	int affect_remove_bad(lua_State * L) // 나쁜 효과를 없앰
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 		ch->RemoveBadAffect();
 		return 0;
 	}
 
-	int affect_remove_good(lua_State * L) //  ȿ 
+	int affect_remove_good(lua_State * L) // 좋은 효과를 없앰
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 		ch->RemoveGoodAffect();
@@ -104,7 +104,7 @@ namespace quest
 		return 0;
 	}
 
-	int affect_remove_hair(lua_State * L) //  ȿ ش.
+	int affect_remove_hair(lua_State * L) // 헤어 효과를 없앤다.
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
@@ -123,7 +123,7 @@ namespace quest
 		return 1;
 	}
 	
-	//  ijͰ AFFECT_TYPE affect  bApplyOn  ȯϰ  nil ȯϴ Լ.
+	// 현재 캐릭터가 AFFECT_TYPE affect를 갖고있으면 bApplyOn 값을 반환하고 없으면 nil을 반환하는 함수.
 	// usage :	applyOn = affect.get_apply(AFFECT_TYPE) 
 	int affect_get_apply_on(lua_State * L)
 	{
diff --git a/src/game/questlua_arena.cpp b/src/game/questlua_arena.cpp
index abf94c0..c643a39 100644
--- a/src/game/questlua_arena.cpp
+++ b/src/game/questlua_arena.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "questmanager.h"
 #include "char.h"
diff --git a/src/game/questlua_ba.cpp b/src/game/questlua_ba.cpp
index 20d54f8..f3fc1bf 100644
--- a/src/game/questlua_ba.cpp
+++ b/src/game/questlua_ba.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "questmanager.h"
 #include "BattleArena.h"
diff --git a/src/game/questlua_building.cpp b/src/game/questlua_building.cpp
index 24c84b0..8b7ae46 100644
--- a/src/game/questlua_building.cpp
+++ b/src/game/questlua_building.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "questmanager.h"
 #include "sectree_manager.h"
diff --git a/src/game/questlua_danceevent.cpp b/src/game/questlua_danceevent.cpp
index 6de12a0..4fbbf59 100644
--- a/src/game/questlua_danceevent.cpp
+++ b/src/game/questlua_danceevent.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "questmanager.h"
 #include "sectree_manager.h"
diff --git a/src/game/questlua_dragonlair.cpp b/src/game/questlua_dragonlair.cpp
index 29835a6..eefebb9 100644
--- a/src/game/questlua_dragonlair.cpp
+++ b/src/game/questlua_dragonlair.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "questmanager.h"
diff --git a/src/game/questlua_dragonsoul.cpp b/src/game/questlua_dragonsoul.cpp
index 0f9351d..613729a 100644
--- a/src/game/questlua_dragonsoul.cpp
+++ b/src/game/questlua_dragonsoul.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "config.h"
 #include "questmanager.h"
diff --git a/src/game/questlua_dungeon.cpp b/src/game/questlua_dungeon.cpp
index 7b6ab91..f662e39 100644
--- a/src/game/questlua_dungeon.cpp
+++ b/src/game/questlua_dungeon.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "questmanager.h"
 #include "questlua.h"
@@ -999,7 +999,7 @@ namespace quest
 		return 0;
 	}
 
-	int dungeon_exit(lua_State* L) //    ġ 
+	int dungeon_exit(lua_State* L) // 던전에 들어오기 전 위치로 보냄
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
@@ -1007,7 +1007,7 @@ namespace quest
 		return 0;
 	}
 
-	int dungeon_exit_all(lua_State* L) //  ִ      ġ 
+	int dungeon_exit_all(lua_State* L) // 던전에 있는 모든 사람을 던전에 들어오기 전 위치로 보냄
 	{
 		CQuestManager& q = CQuestManager::instance();
 		LPDUNGEON pDungeon = q.GetCurrentDungeon();
@@ -1135,7 +1135,7 @@ namespace quest
 		}
 	};
 	
-	int dungeon_exit_all_by_item_group (lua_State* L) // Ư  ׷쿡   » 
+	int dungeon_exit_all_by_item_group (lua_State* L) // 특정 아이템 그룹에 속한 아이템이 없는사람은 강퇴
 	{
 		if (!lua_isstring(L, 1))
 		{
@@ -1200,7 +1200,7 @@ namespace quest
 		}
 	};
 	
-	int dungeon_delete_item_in_item_group_from_all(lua_State* L) // Ư    pcԼ .
+	int dungeon_delete_item_in_item_group_from_all(lua_State* L) // 특정 아이템을 던전 내 pc에게서 삭제.
 	{
 		if (!lua_isstring(L, 1))
 		{
diff --git a/src/game/questlua_forked.cpp b/src/game/questlua_forked.cpp
index 53e328b..826aa73 100644
--- a/src/game/questlua_forked.cpp
+++ b/src/game/questlua_forked.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "threeway_war.h"
 
diff --git a/src/game/questlua_game.cpp b/src/game/questlua_game.cpp
index 6a17377..d337d84 100644
--- a/src/game/questlua_game.cpp
+++ b/src/game/questlua_game.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "questlua.h"
 #include "questmanager.h"
 #include "desc_client.h"
diff --git a/src/game/questlua_guild.cpp b/src/game/questlua_guild.cpp
index 3d0a94f..1d71f13 100644
--- a/src/game/questlua_guild.cpp
+++ b/src/game/questlua_guild.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "questlua.h"
 #include "questmanager.h"
@@ -304,12 +304,12 @@ namespace quest
 
 	int guild_change_master(lua_State* L)
 	{
-		// ϰ
-		//	0 : Է ̸ ߸Ǿ ( ڿ ƴ )
-		//	1 :  ƴ
-		//	2 :  ̸  
-		//	3 : û 
-		//	4 : 尡 
+		// 리턴값
+		//	0 : 입력한 이름이 잘못되었음 ( 문자열이 아님 )
+		//	1 : 길드장이 아님
+		//	2 : 지정한 이름의 길드원이 없음
+		//	3 : 요청 성공
+		//	4 : 길드가 없음
 
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
@@ -345,23 +345,23 @@ namespace quest
 
 	int guild_change_master_with_limit(lua_State* L)
 	{
-		// 
-		//  arg0 :   ̸
-		//  arg1 :    
-		//  arg2 : resign_limit  ð
-		//  arg3 : be_other_leader  ð
-		//  arg4 : be_other_member  ð
-		//  arg5 : ijΰ ƴѰ
+		// 인자
+		//  arg0 : 새 길드장 이름
+		//  arg1 : 새 길드장 레벨 제한
+		//  arg2 : resign_limit 제한 시간
+		//  arg3 : be_other_leader 제한 시간
+		//  arg4 : be_other_member 제한 시간
+		//  arg5 : 캐시템인가 아닌가
 		//
-		// ϰ
-		//	0 : Է ̸ ߸Ǿ ( ڿ ƴ )
-		//	1 :  ƴ
-		//	2 :  ̸  
-		//	3 : û 
-		//	4 : 尡 
-		//	5 :  ̸ ¶ ƴ
-		//	6 :  ij  ط 
-		//	7 :   be_other_leader ѿ ɸ
+		// 리턴값
+		//	0 : 입력한 이름이 잘못되었음 ( 문자열이 아님 )
+		//	1 : 길드장이 아님
+		//	2 : 지정한 이름의 길드원이 없음
+		//	3 : 요청 성공
+		//	4 : 길드가 없음
+		//	5 : 지정한 이름이 온라인이 아님
+		//	6 : 지정한 캐릭터 레벨이 기준레벨보다 낮음
+		//	7 : 새 길드장이 be_other_leader 제한에 걸림
 
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
diff --git a/src/game/questlua_horse.cpp b/src/game/questlua_horse.cpp
index 91708a8..f592a65 100644
--- a/src/game/questlua_horse.cpp
+++ b/src/game/questlua_horse.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "questlua.h"
 #include "questmanager.h"
@@ -68,10 +68,10 @@ namespace quest
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
-		// ȯϸ ָ ޷ 
+		// 소환하면 멀리서부터 달려오는지 여부
 		bool bFromFar = lua_isboolean(L, 1) ? lua_toboolean(L, 1) : false;
 
-		// ȯ vnum
+		// 소환수의 vnum
 		DWORD horseVnum= lua_isnumber(L, 2) ? lua_tonumber(L, 2) : 0;
 
 		const char* name = lua_isstring(L, 3) ? lua_tostring(L, 3) : 0;
@@ -219,10 +219,10 @@ namespace quest
 
 	int horse_set_name(lua_State* L)
 	{
-		// ϰ
-		// 0 :   
-		// 1 : ߸ ̸̴
-		// 2 : ̸ ٲٱ 
+		// 리턴값
+		// 0 : 소유한 말이 없다
+		// 1 : 잘못된 이름이다
+		// 2 : 이름 바꾸기 성공
 
 		if ( lua_isstring(L, -1) != true ) return 0;
 
diff --git a/src/game/questlua_mgmt.cpp b/src/game/questlua_mgmt.cpp
index 9614f44..7edfef9 100644
--- a/src/game/questlua_mgmt.cpp
+++ b/src/game/questlua_mgmt.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "questmanager.h"
 #include "monarch.h"
diff --git a/src/game/questlua_monarch.cpp b/src/game/questlua_monarch.cpp
index a6152b3..a0e3462 100644
--- a/src/game/questlua_monarch.cpp
+++ b/src/game/questlua_monarch.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "questlua.h"
 #include "questmanager.h"
@@ -145,7 +145,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -153,22 +153,22 @@ namespace quest
 	
 		int HealPrice = quest::CQuestManager::instance().GetEventFlag("MonarchHealGold");
 		if (HealPrice == 0)
-			HealPrice = 2000000;	// 200
+			HealPrice = 2000000;	// 200만
 
 		if (CMonarch::instance().HealMyEmpire(ch, HealPrice))
 		{
 			char szNotice[256];
 			snprintf(szNotice, sizeof(szNotice),
-					LC_TEXT(" ູ  %s  HP,SP  äϴ."), EMPIRE_NAME(ch->GetEmpire()));
+					LC_TEXT("군주의 축복으로 이지역 %s 유저는 HP,SP가 모두 채워집니다."), EMPIRE_NAME(ch->GetEmpire()));
 			SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
-			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ູ Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 축복을 사용하였습니다."));
 		}
 
 		return 1;
 	}
 
-	//   Ʈ Լ 
+	// 군주의 사자후 퀘스트 함수 
 	int monarch_powerup(lua_State * L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); 
@@ -176,37 +176,37 @@ namespace quest
 		if (!ch)
 			return 0;
 
-		// üũ 
+		//군주 체크 
 		if (false==ch->IsMonarch())
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
 		}
 
-		//  ˻
-		int	money_need = 5000000;	// 500
+		//군주 국고 검사
+		int	money_need = 5000000;	// 500만
 		if (!CMonarch::instance().IsMoneyOk(money_need, ch->GetEmpire()))
 		{
 			int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, money_need);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, money_need);
 			return 0;
 		}
 
 		if (!CMonarch::instance().CheckPowerUpCT(ch->GetEmpire()))
 		{
 			int	next_sec = CMonarch::instance().GetPowerUpCT(ch->GetEmpire()) / passes_per_sec;
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ   %d  밡"), next_sec);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쿨타임 적용중  %d 후 사용가능"), next_sec);
 			return 0;
 		}
 
-		//  	
+		//군주의 사자후 적용	
 		CMonarch::instance().PowerUp(ch->GetEmpire(), true); 
 	
-		//  ð 	
+		//군주의 사자후 적용시간 	
 		int g_nMonarchPowerUpCT = 60 * 3;
 		
 		monarch_powerup_event_info* info = AllocEventInfo();
@@ -218,13 +218,13 @@ namespace quest
 		CMonarch::instance().SendtoDBDecMoney(5000000, ch->GetEmpire(), ch);
 		
 		char szNotice[256];
-		snprintf(szNotice, sizeof(szNotice), LC_TEXT("    %s  3а 10 %%  ݷ  ˴ϴ"), EMPIRE_NAME(ch->GetEmpire()));
+		snprintf(szNotice, sizeof(szNotice), LC_TEXT("군주의 사자후 영향으로 이지역 %s 유저는 3분간 10 %% 의 공격력이  증가됩니다"), EMPIRE_NAME(ch->GetEmpire()));
 		
 		SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
 		return 1;		
 	}
-	//  ݰ Ʈ Լ 
+	// 군주의 금강권 퀘스트 함수 
 	int monarch_defenseup(lua_State * L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); 
@@ -233,37 +233,37 @@ namespace quest
 			return 0;
 	
 		
-		// üũ	
+		//군주 체크	
 		
 		if (false==ch->IsMonarch())
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
 		}
 	
-		int	money_need = 5000000;	// 500
+		int	money_need = 5000000;	// 500만
 		if (!CMonarch::instance().IsMoneyOk(money_need, ch->GetEmpire()))
 		{
 			int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, money_need);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, money_need);
 			return 0;
 		}
 	
 		if (!CMonarch::instance().CheckDefenseUpCT(ch->GetEmpire()))
 		{
 			int	next_sec = CMonarch::instance().GetDefenseUpCT(ch->GetEmpire()) / passes_per_sec;
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ   %d  밡"), next_sec);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("쿨타임 적용중  %d 후 사용가능"), next_sec);
 			return 0;
 		}	
 		
-		// ݰ 	
+		//군주의 금강권 적용	
 		CMonarch::instance().DefenseUp(ch->GetEmpire(), true); 
 
-		// ݰ  ð
+		//군주의 금강권 적용 시간
 		int g_nMonarchDefenseUpCT = 60 * 3;
 		
 		monarch_defenseup_event_info* info = AllocEventInfo();
@@ -275,7 +275,7 @@ namespace quest
 		CMonarch::instance().SendtoDBDecMoney(5000000, ch->GetEmpire(), ch);
 		
 		char szNotice[256];
-		snprintf(szNotice, sizeof(szNotice), LC_TEXT(" ݰ   %s  3а 10 %%    ˴ϴ"), EMPIRE_NAME(ch->GetEmpire()));
+		snprintf(szNotice, sizeof(szNotice), LC_TEXT("군주의 금강권 영향으로 이지역 %s 유저는 3분간 10 %% 의 방어력이  증가됩니다"), EMPIRE_NAME(ch->GetEmpire()));
 
 		SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
@@ -319,7 +319,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -334,13 +334,13 @@ namespace quest
 			long x = ch->GetX();
 			long y = ch->GetY();
 #if 0
-			if (11505 == mob_vnum)	// Ȳݵβ
+			if (11505 == mob_vnum)	// 황금두꺼비
 			{
-				//  ˻
+				//군주 국고 검사
 				if (!CMonarch::instance().IsMoneyOk(CASTLE_FROG_PRICE, ch->GetEmpire()))
 				{
 					int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, CASTLE_FROG_PRICE);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, CASTLE_FROG_PRICE);
 					return 0;
 				}
 
@@ -348,7 +348,7 @@ namespace quest
 
 				if (mob)
 				{
-					// 
+					// 국고감소
 					CMonarch::instance().SendtoDBDecMoney(CASTLE_FROG_PRICE, ch->GetEmpire(), ch);
 					castle_save();
 				}
@@ -407,7 +407,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -415,7 +415,7 @@ namespace quest
 
 		if (false==castle_is_my_castle(ch->GetEmpire(), ch->GetMapIndex()))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ִ Դϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("성에서만 사용할 수 있는 기능입니다."));
 			return 0;
 		}
 
@@ -425,18 +425,18 @@ namespace quest
 		{
 			int	money_need = castle_cost_of_hiring_guard(group_vnum);
 
-			//  ˻
+			//군주 국고 검사
 			if (!CMonarch::instance().IsMoneyOk(money_need, ch->GetEmpire()))
 			{
 				int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, money_need);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, money_need);
 				return 0;
 			}
 			guard_leader = castle_spawn_guard(ch->GetEmpire(), group_vnum, region_index);
 
 			if (guard_leader)
 			{
-				// 
+				// 국고감소
 				CMonarch::instance().SendtoDBDecMoney(money_need, ch->GetEmpire(), ch);
 				castle_save();
 			}
@@ -456,7 +456,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("군주의 자격을 가지고 있지 않습니다"));
 				sys_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -465,14 +465,14 @@ namespace quest
 		if (castle_frog_to_empire_money(ch))
 		{
 			int empire_money = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : Ȳݵβ  ȯǾϴ."));
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST :   : %d"), empire_money);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : 황금두꺼비가 국고로 환원되었습니다."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : 현재 국고 : %d"), empire_money);
 			castle_save();
 			return 1;
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : Ȳݵβ  ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : 황금두꺼비를 국고로 환원할 수 없습니다."));
 			return 0;
 		}
 	}
@@ -495,26 +495,26 @@ namespace quest
 		
 		if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 			return 0;
 		}
 
-		// Ÿ ˻
+		//군주 쿨타임 검사
 		if (!ch->IsMCOK(CHARACTER::MI_WARP))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_WARP));	
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_WARP));	
 			return 0;
 		}
 
 
-		//  ȯ  
+		//군주 몹 소환 비용 
 		const int WarpPrice = 10000;
 
-		//  ˻ 
+		//군주 국고 검사 
 		if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
 		{
 			int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, WarpPrice);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, WarpPrice);
 			return 0;	
 		}
 
@@ -530,18 +530,18 @@ namespace quest
 			{
 				if (pkCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("타제국 유저에게는 이동할수 없습니다"));
 					return 0;
 				}
 				if (pkCCI->bChannel != g_bChannel)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ش  %d äο ֽϴ. ( ä %d)"), pkCCI->bChannel, g_bChannel);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("해당 유저는 %d 채널에 있습니다. (현재 채널 %d)"), pkCCI->bChannel, g_bChannel);
 					return 0;
 				}
 	
 				if (!IsMonarchWarpZone(pkCCI->lMapIndex))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));	
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));	
 					return 0;
 				}
 
@@ -552,13 +552,13 @@ namespace quest
 				else
 				{
 					//ch->ChatPacket(CHAT_TYPE_INFO, "You warp to (%d, %d)", pos.x, pos.y);
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), name.c_str());
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 에게로 이동합니다"), name.c_str());
 					ch->WarpSet(pos.x, pos.y);
 
-					//  谨	
+					//군주 돈 삭감	
 					CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-					//Ÿ ʱȭ 
+					//쿨타임 초기화 
 					ch->SetMC(CHARACTER::MI_WARP);
 				}
 
@@ -574,13 +574,13 @@ namespace quest
 		{
 			if (tch->GetEmpire() != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("타제국 유저에게는 이동할수 없습니다"));
 				return 0;
 			}
 
 			if (!IsMonarchWarpZone(tch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 				return 0;
 			}
 
@@ -588,14 +588,14 @@ namespace quest
 			y = tch->GetY();
 		}
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), name.c_str());
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 에게로 이동합니다"), name.c_str());
 		ch->WarpSet(x,y);
 		ch->Stop();
 
-		//  谨	
+		//군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-		//Ÿ ʱȭ 
+		//쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_WARP); 
 
 		return 0;
@@ -612,22 +612,22 @@ namespace quest
 
 		if (CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))	
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("  "));
+			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("나의 군주 정보"));
 		
 			for (int n = 1; n < 4; ++n)
 			{
 				if (n == ch->GetEmpire())
-					ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s] : %s  ݾ %lld "), EMPIRE_NAME(n), p->name[n], p->money[n]);
+					ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s군주] : %s  보유금액 %lld "), EMPIRE_NAME(n), p->name[n], p->money[n]);
 				else
-					ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s] : %s  "), EMPIRE_NAME(n), p->name[n]);
+					ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s군주] : %s  "), EMPIRE_NAME(n), p->name[n]);
 			}
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT(" "));
+			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("군주 정보"));
 
 			for (int n = 1; n < 4; ++n)
-				ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s] : %s  "), EMPIRE_NAME(n), p->name[n]);
+				ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("[%s군주] : %s  "), EMPIRE_NAME(n), p->name[n]);
 		}
 
 		return 0;
@@ -650,25 +650,25 @@ namespace quest
 
 		if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 			return 0;
 		}
 
-		//  Ÿ ˻
+		// 군주 쿨타임 검사
 		if (!ch->IsMCOK(CHARACTER::MI_TRANSFER))
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));	
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));	
 			return 0;
 		}
 
-		//    
+		// 군주 워프 비용 
 		const int WarpPrice = 10000;
 
-		//   ˻ 
+		// 군주 국고 검사 
 		if (!CMonarch::instance().IsMoneyOk(WarpPrice, ch->GetEmpire()))
 		{
 			int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, WarpPrice);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, WarpPrice);
 			return 0;	
 		}
 
@@ -682,24 +682,24 @@ namespace quest
 			{
 				if (pkCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 					return 0;
 				}
 
 				if (pkCCI->bChannel != g_bChannel)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  %d äο   Դϴ. ( ä: %d)"), name.c_str(), pkCCI->bChannel, g_bChannel);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 %d 채널에 접속 중 입니다. (현재 채널: %d)"), name.c_str(), pkCCI->bChannel, g_bChannel);
 					return 0;
 				}
 
 				if (!IsMonarchWarpZone(pkCCI->lMapIndex))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));	
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));	
 					return 0;
 				}
 				if (!IsMonarchWarpZone(ch->GetMapIndex()))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 					return 0;
 				}
 
@@ -711,17 +711,17 @@ namespace quest
 				pgg.lY = ch->GetY();
 
 				P2P_MANAGER::instance().Send(&pgg, sizeof(TPacketGGTransfer));
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ȯϿϴ."), name.c_str());
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님을 소환하였습니다."), name.c_str());
 
-				//   谨
+				// 군주 돈 삭감
 				CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-				// Ÿ ʱȭ 
+				// 쿨타임 초기화 
 				ch->SetMC(CHARACTER::MI_TRANSFER);
 			}
 			else
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ԷϽ ̸  ڰ ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("입력하신 이름을 가진 사용자가 없습니다."));
 			}
 
 			return 0;
@@ -729,31 +729,31 @@ namespace quest
 
 		if (ch == tch)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자신을 소환할 수 없습니다."));
 			return 0;
 		}
 
 		if (tch->GetEmpire() != ch->GetEmpire())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 			return 0;
 		}
 
 		if (!IsMonarchWarpZone(tch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 			return 0;
 		}
 		if (!IsMonarchWarpZone(ch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 			return 0;
 		}
 		tch->WarpSet(ch->GetX(), ch->GetY(), ch->GetMapIndex());
 
-		//   谨	
+		// 군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
-		// Ÿ ʱȭ 
+		// 쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_TRANSFER);
 		return 0;
 	}
@@ -770,7 +770,7 @@ namespace quest
 		
 		if (ch->IsMonarch() == false)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 			return 0;
 		}
 
@@ -834,13 +834,13 @@ namespace quest
 
 		if (CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()) == false)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("군주만이 사용 가능한 기능입니다"));
 			return 0;
 		}
 
 		if (ch->IsMCOK(CHARACTER::MI_TRANSFER) == false)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ʰ Ÿ Դϴ."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d 초간 쿨타임이 적용중입니다."), ch->GetMCLTime(CHARACTER::MI_TRANSFER));
 			return 0;
 		}
 		
@@ -849,7 +849,7 @@ namespace quest
 		if (CMonarch::instance().IsMoneyOk(ciTransferCost, ch->GetEmpire()) == false)
 		{
 			int NationMoney = CMonarch::instance().GetMoney(ch->GetEmpire());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ.  : %u ʿݾ : %u"), NationMoney, ciTransferCost);
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("국고에 돈이 부족합니다. 현재 : %u 필요금액 : %u"), NationMoney, ciTransferCost);
 			return 0;
 		}
 
@@ -865,25 +865,25 @@ namespace quest
 			{
 				if (pCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 					return 0;
 				}
 
 				if (pCCI->bChannel != g_bChannel)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  %d äο Դϴ. ( ä: %d)"),
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 %d 채널에 접속중입니다. (현재 채널: %d)"),
 						   strTargetName.c_str(), pCCI->bChannel, g_bChannel);
 					return 0;
 				}
 
 				if (!IsMonarchWarpZone(pCCI->lMapIndex))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 					return 0;
 				}
 				if (!IsMonarchWarpZone(ch->GetMapIndex()))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 					return 0;
 				}
 
@@ -894,14 +894,14 @@ namespace quest
 				packet.y = ch->GetY();
 
 				P2P_MANAGER::instance().Send(&packet, sizeof(TPacketMonarchGGTransfer));
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯ û ½ϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소환 요청을 보냈습니다"));
 
 				CMonarch::instance().SendtoDBDecMoney(ciTransferCost, ch->GetEmpire(), ch);
 				ch->SetMC(CHARACTER::MI_TRANSFER);
 			}
 			else
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ԷϽ ̸  ڰ ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("입력하신 이름을 가진 사용자가 없습니다."));
 				return 0;
 			}
 		}
@@ -909,30 +909,30 @@ namespace quest
 		{
 			if (pTargetChar == ch)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자신을 소환할 수 없습니다."));
 				return 0;
 			}
 
 			if (pTargetChar->GetEmpire() != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 제국 유저는 소환할 수 없습니다."));
 				return 0;
 			}
 
 			if (DISTANCE_APPROX(pTargetChar->GetX() - ch->GetX(), pTargetChar->GetY() - ch->GetY()) <= 5000)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ó ֽϴ"), pTargetChar->GetName());
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 근처에 있습니다"), pTargetChar->GetName());
 				return 0;
 			}
 
 			if (!IsMonarchWarpZone(pTargetChar->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 이동할 수 없습니다."));
 				return 0;
 			}
 			if (!IsMonarchWarpZone(ch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("해당 지역으로 소환할 수 없습니다."));
 				return 0;
 			}
 
@@ -945,7 +945,7 @@ namespace quest
 
 			event_create(monarch_transfer2_event, info, 1);
 
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯ û ½ϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소환 요청을 보냈습니다"));
 
 			CMonarch::instance().SendtoDBDecMoney(ciTransferCost, ch->GetEmpire(), ch);
 			ch->SetMC(CHARACTER::MI_TRANSFER);
diff --git a/src/game/questlua_npc.cpp b/src/game/questlua_npc.cpp
index ffee1ca..678c85e 100644
--- a/src/game/questlua_npc.cpp
+++ b/src/game/questlua_npc.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "questmanager.h"
diff --git a/src/game/questlua_oxevent.cpp b/src/game/questlua_oxevent.cpp
index 604db88..3c7857e 100644
--- a/src/game/questlua_oxevent.cpp
+++ b/src/game/questlua_oxevent.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 #include "questmanager.h"
 #include "char.h"
diff --git a/src/game/questlua_party.cpp b/src/game/questlua_party.cpp
index 4f3eb6f..85eae76 100644
--- a/src/game/questlua_party.cpp
+++ b/src/game/questlua_party.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 
 #include "desc.h"
@@ -330,8 +330,8 @@ namespace quest
 		}
 	};
 	
-	// Ƽ   ִ Լ.
-	//  ʿ ִ Ƽ  ޴´.
+	// 파티 단위로 버프 주는 함수.
+	// 같은 맵에 있는 파티원만 영향을 받는다.
 	int party_give_buff (lua_State* L)
 	{
 		CQuestManager & q = CQuestManager::instance();
@@ -412,7 +412,7 @@ namespace quest
 			{ "is_in_dungeon",	party_is_in_dungeon	},
 			{ "give_buff",		party_give_buff		},
 			{ "is_map_member_flag_lt",	party_is_map_member_flag_lt	},
-			{ "get_member_pids",		party_get_member_pids	}, // Ƽ pid return
+			{ "get_member_pids",		party_get_member_pids	}, // 파티원들의 pid를 return
 			{ NULL,				NULL				}
 		};
 
diff --git a/src/game/questlua_pc.cpp b/src/game/questlua_pc.cpp
index 85c44d1..2c17e7a 100644
--- a/src/game/questlua_pc.cpp
+++ b/src/game/questlua_pc.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "config.h"
@@ -233,15 +233,15 @@ namespace quest
 		int iPulse = thecore_pulse();	
 		if ( pkChr->GetExchange() || pkChr->GetMyShop() || pkChr->GetShopOwner() || pkChr->IsOpenSafebox() )
 		{
-			pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("ŷâ,â   ¿ ٸ ̵Ҽ ϴ" ));
+			pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동할수 없습니다" ));
 
 			return;
 		}
 		//PREVENT_PORTAL_AFTER_EXCHANGE
-		//ȯ  ðüũ
+		//교환 후 시간체크
 		if ( iPulse - pkChr->GetExchangeTime()  < PASSES_PER_SEC(60) )
 		{
-			pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("ŷ  1 ̳ ٸ ̵   ϴ." ) );
+			pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("거래 후 1분 이내에는 다른지역으로 이동 할 수 없습니다." ) );
 			return;
 		}
 		//END_PREVENT_PORTAL_AFTER_EXCHANGE
@@ -249,7 +249,7 @@ namespace quest
 		{
 			if ( iPulse - pkChr->GetMyShopTime() < PASSES_PER_SEC(60) )
 			{
-				pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("ŷ  1 ̳ ٸ ̵   ϴ." ) );
+				pkChr->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("거래 후 1분 이내에는 다른지역으로 이동 할 수 없습니다." ) );
 				return;
 			}
 
@@ -406,12 +406,12 @@ namespace quest
 			{
 				if (dwVnums[i] == 1)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("돈 %d 냥을 획득했습니다."), dwCounts[i]);
 				}
 				else if (dwVnums[i] == 2)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ź  ɴϴ."));
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ġ ȹ߽ϴ."), dwCounts[i]);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("나무에서 부터 신비한 빛이 나옵니다."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d의 경험치를 획득했습니다."), dwCounts[i]);
 				}
 			}
 		}
@@ -453,7 +453,7 @@ namespace quest
 
 		DWORD dwVnum;
 
-		if (lua_isnumber(L,2)) // ȣΰ ȣ ش.
+		if (lua_isnumber(L,2)) // 번호인경우 번호로 준다.
 			dwVnum = (int) lua_tonumber(L, 2);
 		else if (!ITEM_MANAGER::instance().GetVnum(lua_tostring(L, 2), dwVnum))
 		{
@@ -493,7 +493,7 @@ namespace quest
 
 		DWORD dwVnum;
 
-		if (lua_isnumber(L, 1)) // ȣΰ ȣ ش.
+		if (lua_isnumber(L, 1)) // 번호인경우 번호로 준다.
 		{
 			dwVnum = (int) lua_tonumber(L, 1);
 		}
@@ -549,7 +549,7 @@ namespace quest
 
 		DWORD dwVnum;
 
-		if (lua_isnumber(L, 1)) // ȣΰ ȣ ش.
+		if (lua_isnumber(L, 1)) // 번호인경우 번호로 준다.
 		{
 			dwVnum = (int) lua_tonumber(L, 1);
 		}
@@ -810,7 +810,7 @@ namespace quest
 
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
-		if (val > 0) // Ű ̹Ƿ   
+		if (val > 0) // 증가시키는 것이므로 무조건 성공 리턴
 			ch->PointChange(POINT_SP, val);
 		else if (val < 0)
 		{
@@ -863,18 +863,18 @@ namespace quest
 			PC* pPC = CQuestManager::instance().GetCurrentPC();
 			LogManager::instance().QuestRewardLog(pPC->GetCurrentQuestName().c_str(), ch->GetPlayerID(), ch->GetLevel(), newLevel, 0);
 			
-			//Ʈ : ų, 꽺ų, 
+			//포인트 : 스킬, 서브스킬, 스탯
 			ch->PointChange(POINT_SKILL, newLevel - ch->GetLevel());
 			ch->PointChange(POINT_SUB_SKILL, newLevel < 10 ? 0 : newLevel - MAX(ch->GetLevel(), 9));
 			ch->PointChange(POINT_STAT, ((MINMAX(1, newLevel, 90) - ch->GetLevel()) * 3) + ch->GetPoint(POINT_LEVEL_STEP));
-			//
+			//레벨
 			ch->PointChange(POINT_LEVEL, newLevel - ch->GetLevel());
 			//HP, SP
 			ch->SetRandomHP((newLevel - 1) * number(JobInitialPoints[ch->GetJob()].hp_per_lv_begin, JobInitialPoints[ch->GetJob()].hp_per_lv_end));
 			ch->SetRandomSP((newLevel - 1) * number(JobInitialPoints[ch->GetJob()].sp_per_lv_begin, JobInitialPoints[ch->GetJob()].sp_per_lv_end));
 
 
-			// ȸ
+			// 회복
 			ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
 			ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
 			
@@ -937,8 +937,8 @@ namespace quest
 		return 1;
 	}
 
-	// 20050725.myevan.   ȥ ý ġ ι ҸǴ װ ߻
-	//  ġ ̿  ϰ Ѵ.
+	// 20050725.myevan.은둔의 망토 사용중 혼석 수련시 선악치가 두배 소모되는 버그가 발생해
+	// 실제 선악치를 이용해 계산을 하게 한다.
 	int pc_get_real_alignment(lua_State* L)
 	{
 		lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetRealAlignment()/10);
@@ -1264,7 +1264,7 @@ namespace quest
 		ch->RemoveAffect(AFFECT_MOUNT);
 		ch->RemoveAffect(AFFECT_MOUNT_BONUS);
 
-		//  ȯǾ ٴϴ ¶  
+		// 말이 소환되어 따라다니는 상태라면 말부터 없앰
 		if (ch->GetHorse())
 			ch->HorseSummon(false);
 
@@ -1532,7 +1532,7 @@ namespace quest
 
 		if (pct == 100 || number(1, 100) <= pct)
 		{
-			//  
+			// 개량 성공
 			lua_pushboolean(L, 1);
 
 			LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(item->GetRefinedVnum(), 1, 0, false);
@@ -1569,7 +1569,7 @@ namespace quest
 		}
 		else
 		{
-			//  
+			// 개량 실패
 			lua_pushboolean(L, 0);
 		}
 
@@ -1606,7 +1606,7 @@ namespace quest
 		pdw[1] = 1;
 		pdw[2] = q.GetEventFlag("lotto_round");
 
-		// ÷  Ѵ
+		// 추첨서는 소켓을 설정한다
 		DBManager::instance().ReturnQuery(QID_LOTTO, ch->GetPlayerID(), pdw,
 				"INSERT INTO lotto_list VALUES(0, 'server%s', %u, NOW())",
 				get_table_postfix(), ch->GetPlayerID());
@@ -1855,14 +1855,14 @@ namespace quest
 		return 0;
 	}
 
-	//ڷƮ 
+	//텔레포트 
 	int pc_teleport ( lua_State * L )
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 		int x=0,y=0;	
 		if ( lua_isnumber(L, 1) )
 		{
-			//  
+			// 지역명 워프
 			const int TOWN_NUM = 10;
 			struct warp_by_town_name
 			{
@@ -1871,16 +1871,16 @@ namespace quest
 				DWORD y;
 			} ws[TOWN_NUM] = 
 			{
-				{"",	4743,	9548},
-				{"",		3235,	9086},
-				{"ھ",		3531,	8829},
-				{"",	638,	1664},
-				{"·",		1745,	1909},
-				{"",		1455,	2400},
-				{"",	9599,	2692},
-				{"",		8036,	2984},
-				{"ڶ",		8639,	2460},
-				{"ѻ",		4350,	2143},
+				{"영안읍성",	4743,	9548},
+				{"임지곡",		3235,	9086},
+				{"자양현",		3531,	8829},
+				{"조안읍성",	638,	1664},
+				{"승룡곡",		1745,	1909},
+				{"복정현",		1455,	2400},
+				{"평무읍성",	9599,	2692},
+				{"방산곡",		8036,	2984},
+				{"박라현",		8639,	2460},
+				{"서한산",		4350,	2143},
 			};
 			int idx  = (int)lua_tonumber(L, 1);
 
@@ -2063,13 +2063,13 @@ teleport_area:
 	
 	int pc_change_name(lua_State* L)
 	{
-		// ϰ
-		//		0: ̸   α׾ƿ 
-		//		1: ũƮ ڿ Ѿ ʾ
-		//		2: check_name   
-		//		3: ̹  ̸ 
-		//		4: 
-		//		5: ش   
+		// 리턴값
+		//		0: 새이름을 설정한 뒤 로그아웃을 안했음
+		//		1: 스크립트에서 문자열이 넘어오지 않았음
+		//		2: check_name 을 통과하지 못했음
+		//		3: 이미 같은 이름이 사용중
+		//		4: 성공
+		//		5: 해당 기능 지원하지 않음
 
 		// if ( LC_IsEurope() ) // Fix
 		// {
@@ -2110,7 +2110,7 @@ teleport_area:
 			int	count = 0;
 			str_to_number(count, row[0]);
 
-			// ̹ ش ̸  ijͰ 
+			// 이미 해당 이름을 가진 캐릭터가 있음
 			if ( count != 0 )
 			{
 				lua_pushnumber(L, 3);
@@ -2362,8 +2362,8 @@ teleport_area:
 
 		int idx = 1;
 
-		// ȥ   ʿ  .
-		//  Լ Ż Լ  ϴ.
+		// 용혼석 슬롯은 할 필요 없을 듯.
+		// 이 함수는 탈석서용 함수인 듯 하다.
 		for ( int i=0; i < INVENTORY_MAX_NUM + WEAR_MAX_NUM; i++ )
 		{
 			LPITEM pItem = pChar->GetInventoryItem(i);
@@ -2752,7 +2752,7 @@ teleport_area:
 		return 1;
 	}
 
-	int pc_get_informer_type(lua_State* L)	//  
+	int pc_get_informer_type(lua_State* L)	//독일 선물 기능
 	{
 		LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr();
 
@@ -2995,17 +2995,17 @@ teleport_area:
 
 			{ "charge_cash",		pc_charge_cash		},
 			
-			{ "get_informer_type",	pc_get_informer_type	},	//  
+			{ "get_informer_type",	pc_get_informer_type	},	//독일 선물 기능
 			{ "get_informer_item",  pc_get_informer_item	},
 
-			{ "give_award",			pc_give_award			},	//Ϻ  ѹ ݱ 
-			{ "give_award_socket",	pc_give_award_socket	},	// κ丮  .    Լ.
+			{ "give_award",			pc_give_award			},	//일본 계정당 한번씩 금괴 지급
+			{ "give_award_socket",	pc_give_award_socket	},	//몰 인벤토리에 아이템 지급. 소켓 설정을 위한 함수.
 
-			{ "get_killee_drop_pct",	pc_get_killee_drop_pct	}, /* mob_vnum.kill ̺Ʈ killee pc level , pc ̾      Ȯ.
-																    * return  (, и).
-																    * ( ѵ, CreateDropItem GetDropPct iDeltaPercent, iRandRange returnѴٰ  .)
-																	* (    Ф)
-																	* ǻ : kill event  !
+			{ "get_killee_drop_pct",	pc_get_killee_drop_pct	}, /* mob_vnum.kill 이벤트에서 killee와 pc와의 level 차이, pc의 프리미엄 드랍률 등등을 고려한 아이템 드랍 확률.
+																    * return 값은 (분자, 분모).
+																    * (말이 복잡한데, CreateDropItem의 GetDropPct의 iDeltaPercent, iRandRange를 return한다고 보면 됨.)
+																	* (이 말이 더 어려울라나 ㅠㅠ)
+																	* 주의사항 : kill event에서만 사용할 것!
 																	*/
 
 			{ NULL,			NULL			}
diff --git a/src/game/questlua_pet.cpp b/src/game/questlua_pet.cpp
index 09c2e03..4a5a50f 100644
--- a/src/game/questlua_pet.cpp
+++ b/src/game/questlua_pet.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "questlua.h"
 #include "questmanager.h"
@@ -41,13 +41,13 @@ namespace quest
 			return 1;
 		}
 
-		// ȯ vnum
+		// 소환수의 vnum
 		DWORD mobVnum= lua_isnumber(L, 1) ? lua_tonumber(L, 1) : 0;
 
-		// ȯ ̸
+		// 소환수의 이름
 		const char* petName = lua_isstring(L, 2) ? lua_tostring(L, 2) : 0;
 
-		// ȯϸ ָ ޷ 
+		// 소환하면 멀리서부터 달려오는지 여부
 		bool bFromFar = lua_isboolean(L, 3) ? lua_toboolean(L, 3) : false;
 
 		CPetActor* pet = petSystem->Summon(mobVnum, pItem, petName, bFromFar);
@@ -69,7 +69,7 @@ namespace quest
 		if (0 == petSystem)
 			return 0;
 
-		// ȯ vnum
+		// 소환수의 vnum
 		DWORD mobVnum= lua_isnumber(L, 1) ? lua_tonumber(L, 1) : 0;
 
 		petSystem->Unsummon(mobVnum);
@@ -101,7 +101,7 @@ namespace quest
 		if (0 == petSystem)
 			return 0;
 
-		// ȯ vnum
+		// 소환수의 vnum
 		DWORD mobVnum= lua_isnumber(L, 1) ? lua_tonumber(L, 1) : 0;
 
 		CPetActor* petActor = petSystem->GetByVnum(mobVnum);
diff --git a/src/game/questlua_quest.cpp b/src/game/questlua_quest.cpp
index 32ae029..accc254 100644
--- a/src/game/questlua_quest.cpp
+++ b/src/game/questlua_quest.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "questlua.h"
 #include "questmanager.h"
@@ -149,7 +149,7 @@ namespace quest
 	int quest_coroutine_yield(lua_State * L)
 	{
 		CQuestManager& q = CQuestManager::instance();
-		// other_pc_block ο yield Ͼ ȵȴ. .
+		// other_pc_block 내부에서는 yield가 일어나서는 안된다. 절대로.
 		if (q.IsInOtherPCBlock())
 		{
 			sys_err("FATAL ERROR! Yield occur in other_pc_block.");
@@ -223,10 +223,10 @@ namespace quest
 			{ "done",					quest_done					},
 			{ "getcurrentquestindex",	quest_get_current_quest_index	},
 			{ "no_send",				quest_no_send				},
-			// begin_other_pc_block(pid), end_other_pc_block ̸ other_pc_block̶ .
-			// other_pc_block current_pc pid ȴ.
-			//						 ٽ  current_pc ư.
-			/*		̷   .
+			// begin_other_pc_block(pid), end_other_pc_block 사이를 other_pc_block이라고 하자.
+			// other_pc_block에서는 current_pc가 pid로 변경된다.
+			//						끝나면 다시 원래의 current_pc로 돌아간다.
+			/*		이런 것을 위해 만듬.
 					for i, pid in next, pids, nil do
 						q.begin_other_pc_block(pid)
 						if pc.count_item(PASS_TICKET) < 1 then
@@ -236,7 +236,7 @@ namespace quest
 						q.end_other_pc_block()
 					end
 			*/
-			//  : other_pc_block ο  yield Ͼ ȵȴ.(ex. wait, select, input, ...)
+			// 주의 : other_pc_block 내부에서는 절대로 yield가 일어나서는 안된다.(ex. wait, select, input, ...)
 			{ "begin_other_pc_block",	quest_begin_other_pc_block	}, 
 			{ "end_other_pc_block",		quest_end_other_pc_block	},
 			{ NULL,						NULL						}
diff --git a/src/game/questlua_speedserver.cpp b/src/game/questlua_speedserver.cpp
index 17163ab..4d6142d 100644
--- a/src/game/questlua_speedserver.cpp
+++ b/src/game/questlua_speedserver.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "SpeedServer.h"
 #include "questlua.h"
 #include "questmanager.h"
diff --git a/src/game/questlua_target.cpp b/src/game/questlua_target.cpp
index 165bb71..bbee545 100644
--- a/src/game/questlua_target.cpp
+++ b/src/game/questlua_target.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "questmanager.h"
 #include "char.h"
 #include "sectree_manager.h"
@@ -69,7 +69,7 @@ namespace quest
 		return 0;
 	}
 
-	//  Ʈ ϵ Ÿ  Ѵ.
+	// 현재 퀘스트에 등록된 타겟을 삭제 한다.
 	int target_delete(lua_State* L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
@@ -86,7 +86,7 @@ namespace quest
 		return 0;
 	}
 
-	//  Ʈ ε Ǿִ Ÿ  Ѵ.
+	// 현재 퀘스트 인덱스로 되어있는 타겟을 모두 삭제한다.
 	int target_clear(lua_State* L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
diff --git a/src/game/questmanager.cpp b/src/game/questmanager.cpp
index fd5a557..d677022 100644
--- a/src/game/questmanager.cpp
+++ b/src/game/questmanager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #include "constants.h"
 #include "buffer_manager.h"
@@ -57,29 +57,29 @@ namespace quest
 
 		m_pSelectedDungeon = NULL;
 
-		m_mapEventName.insert(TEventNameMap::value_type("click", QUEST_CLICK_EVENT));		// NPC Ŭ
-		m_mapEventName.insert(TEventNameMap::value_type("kill", QUEST_KILL_EVENT));		// Mob 
-		m_mapEventName.insert(TEventNameMap::value_type("timer", QUEST_TIMER_EVENT));		// ̸ ص ð 
-		m_mapEventName.insert(TEventNameMap::value_type("levelup", QUEST_LEVELUP_EVENT));	//  
-		m_mapEventName.insert(TEventNameMap::value_type("login", QUEST_LOGIN_EVENT));		// α 
-		m_mapEventName.insert(TEventNameMap::value_type("logout", QUEST_LOGOUT_EVENT));		// α׾ƿ 
-		m_mapEventName.insert(TEventNameMap::value_type("button", QUEST_BUTTON_EVENT));		// Ʈ ư 
-		m_mapEventName.insert(TEventNameMap::value_type("info", QUEST_INFO_EVENT));		// Ʈ â 
-		m_mapEventName.insert(TEventNameMap::value_type("chat", QUEST_CHAT_EVENT));		// Ư Ű ȭ 
-		m_mapEventName.insert(TEventNameMap::value_type("in", QUEST_ATTR_IN_EVENT));		//  Ư Ӽ 
-		m_mapEventName.insert(TEventNameMap::value_type("out", QUEST_ATTR_OUT_EVENT));		//  Ư Ӽ 
-		m_mapEventName.insert(TEventNameMap::value_type("use", QUEST_ITEM_USE_EVENT));		// Ʈ  
-		m_mapEventName.insert(TEventNameMap::value_type("server_timer", QUEST_SERVER_TIMER_EVENT));	//  Ÿ̸ ( ׽Ʈ ȵ)
-		m_mapEventName.insert(TEventNameMap::value_type("enter", QUEST_ENTER_STATE_EVENT));	//  Ʈ 
-		m_mapEventName.insert(TEventNameMap::value_type("leave", QUEST_LEAVE_STATE_EVENT));	//  Ʈ ٸ Ʈ ٲ
-		m_mapEventName.insert(TEventNameMap::value_type("letter", QUEST_LETTER_EVENT));		// α ϰų Ʈ ٲ   
-		m_mapEventName.insert(TEventNameMap::value_type("take", QUEST_ITEM_TAKE_EVENT));	//  
-		m_mapEventName.insert(TEventNameMap::value_type("target", QUEST_TARGET_EVENT));		// Ÿ
-		m_mapEventName.insert(TEventNameMap::value_type("party_kill", QUEST_PARTY_KILL_EVENT));	// Ƽ  ͸  ( )
+		m_mapEventName.insert(TEventNameMap::value_type("click", QUEST_CLICK_EVENT));		// NPC를 클릭
+		m_mapEventName.insert(TEventNameMap::value_type("kill", QUEST_KILL_EVENT));		// Mob을 사냥
+		m_mapEventName.insert(TEventNameMap::value_type("timer", QUEST_TIMER_EVENT));		// 미리 지정해둔 시간이 지남
+		m_mapEventName.insert(TEventNameMap::value_type("levelup", QUEST_LEVELUP_EVENT));	// 레벨업을 함
+		m_mapEventName.insert(TEventNameMap::value_type("login", QUEST_LOGIN_EVENT));		// 로그인 시
+		m_mapEventName.insert(TEventNameMap::value_type("logout", QUEST_LOGOUT_EVENT));		// 로그아웃 시
+		m_mapEventName.insert(TEventNameMap::value_type("button", QUEST_BUTTON_EVENT));		// 퀘스트 버튼을 누름
+		m_mapEventName.insert(TEventNameMap::value_type("info", QUEST_INFO_EVENT));		// 퀘스트 정보창을 염
+		m_mapEventName.insert(TEventNameMap::value_type("chat", QUEST_CHAT_EVENT));		// 특정 키워드로 대화를 함
+		m_mapEventName.insert(TEventNameMap::value_type("in", QUEST_ATTR_IN_EVENT));		// 맵의 특정 속성에 들어감
+		m_mapEventName.insert(TEventNameMap::value_type("out", QUEST_ATTR_OUT_EVENT));		// 맵의 특정 속성에서 나옴
+		m_mapEventName.insert(TEventNameMap::value_type("use", QUEST_ITEM_USE_EVENT));		// 퀘스트 아이템을 사용
+		m_mapEventName.insert(TEventNameMap::value_type("server_timer", QUEST_SERVER_TIMER_EVENT));	// 서버 타이머 (아직 테스트 안됐음)
+		m_mapEventName.insert(TEventNameMap::value_type("enter", QUEST_ENTER_STATE_EVENT));	// 현재 스테이트가 됨
+		m_mapEventName.insert(TEventNameMap::value_type("leave", QUEST_LEAVE_STATE_EVENT));	// 현재 스테이트에서 다른 스테이트로 바뀜
+		m_mapEventName.insert(TEventNameMap::value_type("letter", QUEST_LETTER_EVENT));		// 로긴 하거나 스테이트가 바껴 새로 정보를 세팅해줘야함
+		m_mapEventName.insert(TEventNameMap::value_type("take", QUEST_ITEM_TAKE_EVENT));	// 아이템을 받음
+		m_mapEventName.insert(TEventNameMap::value_type("target", QUEST_TARGET_EVENT));		// 타겟
+		m_mapEventName.insert(TEventNameMap::value_type("party_kill", QUEST_PARTY_KILL_EVENT));	// 파티 멤버가 몬스터를 사냥 (리더에게 옴)
 		m_mapEventName.insert(TEventNameMap::value_type("unmount", QUEST_UNMOUNT_EVENT));
-		m_mapEventName.insert(TEventNameMap::value_type("pick", QUEST_ITEM_PICK_EVENT));	// ִ  .
-		m_mapEventName.insert(TEventNameMap::value_type("sig_use", QUEST_SIG_USE_EVENT));		// Special item group   .
-		m_mapEventName.insert(TEventNameMap::value_type("item_informer", QUEST_ITEM_INFORMER_EVENT));	// ϼ׽Ʈ
+		m_mapEventName.insert(TEventNameMap::value_type("pick", QUEST_ITEM_PICK_EVENT));	// 떨어져있는 아이템을 습득함.
+		m_mapEventName.insert(TEventNameMap::value_type("sig_use", QUEST_SIG_USE_EVENT));		// Special item group에 속한 아이템을 사용함.
+		m_mapEventName.insert(TEventNameMap::value_type("item_informer", QUEST_ITEM_INFORMER_EVENT));	// 독일선물기능테스트
 
 		m_bNoSend = false;
 
@@ -255,9 +255,9 @@ namespace quest
 
 			if (!pPC->GetRunningQuestState()->chat_scripts.empty())
 			{
-				// ä ̺Ʈ 
-				//  Ʈ  Ʈ  ΰ  Ʈ ̹Ƿ
-				//  õ Ʈ Ѵ.
+				// 채팅 이벤트인 경우
+				// 현재 퀘스트는 어느 퀘스트를 실행할 것인가를 고르는 퀘스트 이므로
+				// 끝내고 선택된 퀘스트를 실행한다.
 				QuestState& old_qs = *pPC->GetRunningQuestState();
 				CloseState(old_qs);
 
@@ -370,7 +370,7 @@ namespace quest
 			pPC->CancelRunning();
 		}
 
-		//   α׾ƿ Ѵ.
+		// 지우기 전에 로그아웃 한다.
 		Logout(ch->GetPlayerID());
 
 		if (ch == m_pCurrentCharacter)
@@ -382,7 +382,7 @@ namespace quest
 
 	///////////////////////////////////////////////////////////////////////////////////////////
 	//
-	// Quest Event 
+	// Quest Event 관련
 	//
 	///////////////////////////////////////////////////////////////////////////////////////////
 	void CQuestManager::Login(unsigned int pc, const char * c_pszQuest)
@@ -429,9 +429,9 @@ namespace quest
 			if (!CheckQuestLoaded(pPC))
 				return;
 
-			/* [hyo]  kill ߺ ī ̽  
-			   quest script when 171.kill begin ...  ڵ Ͽ ũƮ óǾ
-			   ٷ return ʰ ٸ ˻絵 ϵ . (2011/07/21)
+			/* [hyo] 몹 kill시 중복 카운팅 이슈 관련한 수정사항
+			   quest script에 when 171.kill begin ... 등의 코드로 인하여 스크립트가 처리되었더라도
+			   바로 return하지 않고 다른 검사도 수행하도록 변경함. (2011/07/21)
 			*/   
 			// call script
 			
@@ -585,7 +585,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 
 				if (ch)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 
 				return;
 			}
@@ -610,7 +610,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 				if (ch)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 				}
 				return;
 			}
@@ -635,7 +635,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 				if (ch)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 				}
 				return false;
 			}
@@ -663,7 +663,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 				if (ch)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 				}
 				return false;
 			}
@@ -694,7 +694,7 @@ namespace quest
 		}
 	}
 
-	// Speical Item Group ǵ Group Use
+	// Speical Item Group에 정의된 Group Use
 	bool CQuestManager::SIGUse(unsigned int pc, DWORD sig_vnum, LPITEM item, bool bReceiveAll)
 	{
 		if (test_server)
@@ -707,7 +707,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 				if (ch)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 				}
 				return false;
 			}
@@ -761,7 +761,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 
 				if (ch)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 
 				return false;
 			}
@@ -842,7 +842,7 @@ namespace quest
 		else
 			sys_err("QUEST no such pc id : %d", pc);
 	}
-	//   ׽Ʈ
+	//독일 선물 기능 테스트
 	void CQuestManager::ItemInformer(unsigned int pc,unsigned int vnum)
 	{
 		
@@ -852,7 +852,7 @@ namespace quest
 		m_mapNPC[QUEST_NO_NPC].OnItemInformer(*pPC,vnum);
 	}
 	///////////////////////////////////////////////////////////////////////////////////////////
-	// END OF Ʈ ̺Ʈ ó
+	// END OF 퀘스트 이벤트 처리
 	///////////////////////////////////////////////////////////////////////////////////////////
 
 	///////////////////////////////////////////////////////////////////////////////////////////
@@ -1277,19 +1277,19 @@ namespace quest
 					continue;
 				if (value)
 				{
-					// 
+					// 밤
 					ch->ChatPacket(CHAT_TYPE_COMMAND, "DayMode dark");
 				}
 				else
 				{
-					// 
+					// 낮
 					ch->ChatPacket(CHAT_TYPE_COMMAND, "DayMode light");
 				}
 			}
 
 			if (value && !prev_value)
 			{
-				//  ش
+				// 없으면 만들어준다
 				struct SNPCSellFireworkPosition
 				{
 					long lMapIndex;
@@ -1325,7 +1325,7 @@ namespace quest
 			}
 			else if (!value && prev_value)
 			{
-				//  ش
+				// 있으면 지워준다
 				CharacterVectorInteractor i;
 
 				if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(xmas::MOB_XMAS_FIRWORK_SELLER_VNUM, i))
@@ -1414,7 +1414,7 @@ namespace quest
 		}
 		else if (name == "new_xmas_event")
 		{
-			// 20126 newŸ.
+			// 20126 new산타.
 			static DWORD new_santa = 20126;
 			if (value != 0)
 			{
@@ -1553,12 +1553,12 @@ namespace quest
 
 	bool CQuestManager::ExecuteQuestScript(PC& pc, const string& quest_name, const int state, const char* code, const int code_size, vector* pChatScripts, bool bUseCache)
 	{
-		//  
+		// 실행공간을 생성
 		QuestState qs = CQuestManager::instance().OpenState(quest_name, state);
 		if (pChatScripts)
 			qs.chat_scripts.swap(*pChatScripts);
 
-		// ڵ带 о
+		// 코드를 읽어들임
 		if (bUseCache)
 		{
 			lua_getglobal(qs.co, "__codecache");
@@ -1597,10 +1597,10 @@ namespace quest
 		else
 			luaL_loadbuffer(qs.co, code, code_size, quest_name.c_str());
 
-		// ÷̾ 
+		// 플레이어와 연결
 		pc.SetQuest(quest_name, qs);
 
-		// 
+		// 실행
 		QuestState& rqs = *pc.GetRunningQuestState();
 		if (!CQuestManager::instance().RunState(rqs))
 		{
@@ -1789,7 +1789,7 @@ namespace quest
 				LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(pc);
 				if (ch)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("퀘스트를 로드하는 중입니다. 잠시만 기다려 주십시오."));
 				}
 				return false;
 			}
diff --git a/src/game/questmanager.h b/src/game/questmanager.h
index 5a91549..64bf376 100644
--- a/src/game/questmanager.h
+++ b/src/game/questmanager.h
@@ -1,4 +1,4 @@
-#ifndef __METIN2_SERVER_QUEST_MANAGER__
+#ifndef __METIN2_SERVER_QUEST_MANAGER__
 #define __METIN2_SERVER_QUEST_MANAGER__
 
 #include 
@@ -50,7 +50,7 @@ namespace quest
 			bool		RunState(QuestState& qs);
 
 			PC *		GetPC(unsigned int pc);
-			PC *		GetPCForce(unsigned int pc);	//  PC ٲ ʰ PC ͸ ´.
+			PC *		GetPCForce(unsigned int pc);	// 현재 PC를 바꾸지 않고 PC 포인터를 가져온다.
 
 			unsigned int	GetCurrentNPCRace();
 			const string & 	GetCurrentQuestName();
@@ -100,7 +100,7 @@ namespace quest
 			void		Letter(DWORD pc);
 			void		Letter(DWORD pc, DWORD quest_index, int state);
 			
-			void		ItemInformer(unsigned int pc, unsigned int vnum);	//ϼ
+			void		ItemInformer(unsigned int pc, unsigned int vnum);	//독일선물기능
 
 			//
 
@@ -248,7 +248,7 @@ namespace quest
 			static bool ExecuteQuestScript(PC& pc, DWORD quest_index, const int state, const char* code, const int code_size, vector* pChatScripts = NULL, bool bUseCache = true);
 		
 
-		// begin_other_pc_blcok, end_other_pc_block  ü.
+		// begin_other_pc_blcok, end_other_pc_block을 위한 객체들.
 		public:
 			void		BeginOtherPCBlock(DWORD pid);
 			void		EndOtherPCBlock();
diff --git a/src/game/questnpc.cpp b/src/game/questnpc.cpp
index a596bbb..7934abe 100644
--- a/src/game/questnpc.cpp
+++ b/src/game/questnpc.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #include 
 #include "questmanager.h"
@@ -132,7 +132,7 @@ namespace quest
 			//
 
 			///////////////////////////////////////////////////////////////////////////
-			//  Index (   Ƿ ִ ,  index   )
+			// 순서 Index (여러개 있을 수 있으므로 있는 것임, 실제 index 값은 쓰지 않음)
 			j = i;
 			i = s.find('.', i + 1);
 
@@ -411,7 +411,7 @@ namespace quest
 
 		void operator()(PC::QuestInfoIterator& itPCQuest, NPC::QuestMapType::iterator& itQuestMap)
 		{
-			//   
+			// 없으니 새로 시작
 			DWORD dwQuestIndex = itQuestMap->first;
 
 			if (NPC::HasStartState(itQuestMap->second) && CQuestManager::instance().CanStartQuest(dwQuestIndex))
@@ -495,8 +495,8 @@ namespace quest
 			for (int i = 0; i < fMatch.size; i++)
 			{
 				if ( i != 0 ) {
-					//2012.05.14 <> : Ʈ Ŵ m_pCurrentPC ٲ 찡 ߻Ͽ,
-					//ΰ ̻ ũƮ , ι° ʹ Ʈ Ŵ PC   Ѵ.
+					//2012.05.14 <김용욱> : 퀘스트 매니저의 m_pCurrentPC가 바뀌는 경우가 발생하여,
+					//두개 이상의 스크립트를 실행시, 두번째 부터는 퀘스트 매니저의 PC 값을 새로 셋팅한다.
 					PC * pPC = CQuestManager::instance().GetPC(pc.GetID());		
 				}
 				
@@ -806,7 +806,7 @@ namespace quest
 		QuestMapType & rmapEventOwnQuest = m_mapOwnQuest[EventIndex];
 		QuestMapType::iterator itQuestMap = rmapEventOwnQuest.find(quest_index);
 
-		// ׷ Ʈ 
+		// 그런 퀘스트가 없음
 		if (itQuestMap == rmapEventOwnQuest.end())
 			return false;
 
@@ -818,7 +818,7 @@ namespace quest
 		}
 		else
 		{
-			//  ұ?
+			// 새로 시작할까요?
 			if (CQuestManager::instance().CanStartQuest(itQuestMap->first, pc) && HasStartState(itQuestMap->second))
 				iState = 0;
 			else
@@ -918,7 +918,7 @@ namespace quest
 			{
 				os << ",\"" << ScriptToString(AvailScript[i]->arg.c_str()) << '"';
 			}
-			os << ", '"< AQuestScriptType;
 			// first: quest number
 			typedef map QuestMapType;
 
-			// ڰ ִ ũƮ
+			// 인자가 있는 스크립트들
 			// first: state number
 			typedef map > AArgQuestScriptType;
 			// first: quest number
@@ -69,7 +69,7 @@ namespace quest
 			bool	OnChat(PC& pc);
 			bool	HasChat();
 
-			bool	OnItemInformer(PC& pc,unsigned int vnum);	//    ׽Ʈ
+			bool	OnItemInformer(PC& pc,unsigned int vnum);	// 독일 선물 기능 테스트
 
 			bool	OnTarget(PC& pc, DWORD dwQuestIndex, const char * c_pszTargetName, const char * c_pszVerb, bool & bRet);
 			bool	OnUnmount(PC& pc);
diff --git a/src/game/questpc.cpp b/src/game/questpc.cpp
index 7379e9e..c4ea99b 100644
--- a/src/game/questpc.cpp
+++ b/src/game/questpc.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "constants.h"
 #include "questmanager.h"
 #include "packet.h"
@@ -311,10 +311,10 @@ namespace quest
 		{
 			LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr();
 			LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
-			// npc ־ 
+			// npc 있었던 경우
 			if (npc && !npc->IsPC())
 			{
-				//  Ǿ   
+				// 그 엔피씨가 나에게 락인 경우
 				if (ch->GetPlayerID() == npc->GetQuestNPCID())
 				{
 					npc->SetQuestNPCID(0);
@@ -627,7 +627,7 @@ namespace quest
 	{
 		if (m_bIsGivenReward)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ʈ>      ־ ٽ  ʽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<퀘스트> 이전에 같은 보상을 받은 적이 있어 다시 받지 않습니다."));
 			m_bIsGivenReward = false;
 		}
 
diff --git a/src/game/questpc.h b/src/game/questpc.h
index 9a95080..06763b6 100644
--- a/src/game/questpc.h
+++ b/src/game/questpc.h
@@ -1,4 +1,4 @@
-#ifndef __QUEST_PC_H
+#ifndef __QUEST_PC_H
 #define __QUEST_PC_H
 
 #include "quest.h"
@@ -35,12 +35,12 @@ namespace quest
 			enum 
 			{
 				QUEST_SEND_ISBEGIN		= (1 << 0),
-				QUEST_SEND_TITLE		= (1 << 1),  // 30  
-				QUEST_SEND_CLOCK_NAME		= (1 << 2),  // 16 		
+				QUEST_SEND_TITLE		= (1 << 1),  // 30자 까지 
+				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 map	QuestInfo;
@@ -122,7 +122,7 @@ namespace quest
 			bool		IsLoaded() const	{ return m_bLoaded; }
 			void		SetLoaded()	{ m_bLoaded = true; }
 			void		Build();
-			// DB 
+			// DB에 저장
 			void		Save();
 
 			bool		HasReward() { return !m_vRewardData.empty() || m_bIsGivenReward; }
@@ -176,7 +176,7 @@ namespace quest
 			TTimerMap		m_TimerMap;
 
 			int			m_iSendToClient;
-			bool		m_bLoaded; // ε ѹ Ѵ.
+			bool		m_bLoaded; // 로드는 한번만 한다.
 
 			int			m_iLastState;
 
diff --git a/src/game/refine.cpp b/src/game/refine.cpp
index 8a11d3e..c9a74f9 100644
--- a/src/game/refine.cpp
+++ b/src/game/refine.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "refine.h"
 
 CRefineManager::CRefineManager()
diff --git a/src/game/refine.h b/src/game/refine.h
index 77a1e05..b8b79f0 100644
--- a/src/game/refine.h
+++ b/src/game/refine.h
@@ -1,12 +1,12 @@
-#ifndef __INC_REFINE_H
+#ifndef __INC_REFINE_H
 #define __INC_REFINE_H
 
 #include "constants.h"
 
 enum
 {
-	BLACKSMITH_MOB = 20016, // Ȯ 
-	ALCHEMIST_MOB = 20001, // 100%   
+	BLACKSMITH_MOB = 20016, // 확률 개량
+	ALCHEMIST_MOB = 20001, // 100% 개량 성공 
 
 	BLACKSMITH_WEAPON_MOB = 20044,
 	BLACKSMITH_ARMOR_MOB = 20045,
diff --git a/src/game/regen.cpp b/src/game/regen.cpp
index 1978e98..4106907 100644
--- a/src/game/regen.cpp
+++ b/src/game/regen.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "char.h"
 #include "char_manager.h"
@@ -24,7 +24,7 @@ enum ERegenModes
 	MODE_VNUM
 };
 
-static bool get_word(FILE *fp, char *buf) //  ޴´.
+static bool get_word(FILE *fp, char *buf) // 워드단위로 받는다.
 {
 	int i = 0;
 	int c;
@@ -172,7 +172,7 @@ static bool read_line(FILE *fp, LPREGEN regen)
 			case MODE_Z_SECTION:
 				str_to_number(regen->z_section, szTmp);
 
-				// ͼ ̸ .
+				// 익셉션 이면 나가주자.
 				if (regen->type == REGEN_TYPE_EXCEPTION)
 					return true;
 
@@ -500,7 +500,7 @@ bool regen_do(const char* filename, long lMapIndex, int base_x, int base_y, LPDU
 				// before the call to CHARACTER::SetRegen()
 			}
 
-			// ó   ش.
+			// 처음엔 무조건 리젠 해준다.
 			regen_spawn_dungeon(regen, pDungeon, bOnce);
 
 		}
@@ -576,7 +576,7 @@ bool regen_load_in_file(const char* filename, long lMapIndex, int base_x, int ba
 				}
 			}
 
-			// ó   ش.
+			// 처음엔 무조건 리젠 해준다.
 			regen_spawn(regen, true);
 		}
 	}
@@ -683,11 +683,11 @@ bool regen_load(const char* filename, long lMapIndex, int base_x, int base_y)
 			}
 
 			//NO_REGEN
-			// Desc: 	regen.txt (  ؽƮ )   ð 0 ҽ 
-			// 			  Ѵ.
+			// Desc: 	regen.txt (외 리젠관련 텍스트 ) 에서 리젠 시간을 0으로 세팅할시 
+			// 			리젠을 하지 안한다.
 			if (regen->time != 0)
 			{
-				// ó   ش.
+				// 처음엔 무조건 리젠 해준다.
 				regen_spawn(regen, false);
 
 				regen_event_info* info = AllocEventInfo();
@@ -752,14 +752,14 @@ void regen_reset(int x, int y)
 		if (!regen->event)
 			continue;
 
-		// ǥ  ǥ  ִ  Ʈ  Ų.
+		// 좌표가 있으면 좌표 내에 있는 리젠 리스트만 리젠 시킨다.
 		if (x != 0 || y != 0)
 		{
 			if (x >= regen->sx && x <= regen->ex)
 				if (y >= regen->sy && y <= regen->ey)
 					event_reset_time(regen->event, 1);
 		}
-		//   
+		// 없으면 전부 리젠
 		else
 			event_reset_time(regen->event, 1);
 	}
diff --git a/src/game/regen.h b/src/game/regen.h
index 5964866..c484dd2 100644
--- a/src/game/regen.h
+++ b/src/game/regen.h
@@ -1,4 +1,4 @@
-#include "dungeon.h"
+#include "dungeon.h"
 
 enum
 {
diff --git a/src/game/safebox.cpp b/src/game/safebox.cpp
index 313b8d4..948649f 100644
--- a/src/game/safebox.cpp
+++ b/src/game/safebox.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/grid.h"
 #include "constants.h"
 #include "safebox.h"
@@ -62,7 +62,7 @@ bool CSafebox::Add(DWORD dwPos, LPITEM pkItem)
 
 	pkItem->SetWindow(m_bWindowMode);
 	pkItem->SetCell(m_pkChrOwner, dwPos);
-	pkItem->Save(); //  Save ҷ Ѵ.
+	pkItem->Save(); // 강제로 Save를 불러줘야 한다.
 	ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
 
 	m_pkGrid->Put(dwPos, 1, pkItem->GetSize());
@@ -141,7 +141,7 @@ bool CSafebox::IsEmpty(DWORD dwPos, BYTE bSize)
 
 void CSafebox::ChangeSize(int iSize)
 {
-	//   ں ũ   д.
+	// 현재 사이즈가 인자보다 크면 사이즈를 가만 둔다.
 	if (m_iSize >= iSize)
 		return;
 
@@ -189,7 +189,7 @@ bool CSafebox::MoveItem(BYTE bCell, BYTE bDestCell, BYTE count)
 
 		if ((item2 = GetItem(bDestCell)) && item != item2 && item2->IsStackable() &&
 				!IS_SET(item2->GetAntiFlag(), ITEM_ANTIFLAG_STACK) &&
-				item2->GetVnum() == item->GetVnum()) // ĥ  ִ  
+				item2->GetVnum() == item->GetVnum()) // 합칠 수 있는 아이템의 경우
 		{
 			for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 				if (item2->GetSocket(i) != item->GetSocket(i))
diff --git a/src/game/safebox.h b/src/game/safebox.h
index 5afb20c..2526b8e 100644
--- a/src/game/safebox.h
+++ b/src/game/safebox.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_SAFEBOX_H__
+#ifndef __INC_METIN_II_GAME_SAFEBOX_H__
 #define __INC_METIN_II_GAME_SAFEBOX_H__
 
 class CHARACTER;
diff --git a/src/game/sectree.cpp b/src/game/sectree.cpp
index 8bdf51a..27581da 100644
--- a/src/game/sectree.cpp
+++ b/src/game/sectree.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/attribute.h"
 #include "sectree_manager.h"
 #include "char.h"
@@ -149,7 +149,7 @@ bool SECTREE::InsertEntity(LPENTITY pkEnt)
 			if (pkCurTree)
 				pkCurTree->DecreasePC();
 		}
-		else if (m_iPCCount > 0 && !pkChr->IsWarp() && !pkChr->IsGoto()) // PC ƴϰ   PC ִٸ Idle event  Ų.
+		else if (m_iPCCount > 0 && !pkChr->IsWarp() && !pkChr->IsGoto()) // PC가 아니고 이 곳에 PC가 있다면 Idle event를 시작 시킨다.
 		{
 			pkChr->StartStateMachine();
 		}
diff --git a/src/game/sectree.h b/src/game/sectree.h
index 8074ca2..5946330 100644
--- a/src/game/sectree.h
+++ b/src/game/sectree.h
@@ -1,4 +1,4 @@
-#ifndef __INC_SECTREE_H__
+#ifndef __INC_SECTREE_H__
 #define __INC_SECTREE_H__
 
 #include "entity.h"
@@ -132,7 +132,7 @@ class SECTREE
 
 			while (it_tree != m_neighbor_list.end())
 			{
-				//ù° ã ٷ 
+				//첫번째를 찾으면 바로 리턴
 				if ( (*(it_tree++))->for_each_entity_for_find_victim(func) )
 					return;
 			}
@@ -143,7 +143,7 @@ class SECTREE
 
 			while (it != m_set_entity.end())
 			{
-				// ã ٷ 
+				//정상적으로 찾으면 바로 리턴
 				if ( func(*it++) )
 					return true;
 			}
@@ -176,9 +176,9 @@ class SECTREE
 		DWORD				GetAttribute(long x, long y);
 		bool				IsAttr(long x, long y, DWORD dwFlag);
 
-		void				CloneAttribute(LPSECTREE tree); // private map ó 
+		void				CloneAttribute(LPSECTREE tree); // private map 처리시 사용
 
-		int				GetEventAttribute(long x, long y); // 20050313   
+		int				GetEventAttribute(long x, long y); // 20050313 현재는 사용하지 않음
 
 		void				SetAttribute(DWORD x, DWORD y, DWORD dwAttr);
 		void				RemoveAttribute(DWORD x, DWORD y, DWORD dwAttr);
diff --git a/src/game/sectree_manager.cpp b/src/game/sectree_manager.cpp
index 9b7db76..32561fb 100644
--- a/src/game/sectree_manager.cpp
+++ b/src/game/sectree_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include 
 #include "../../libgame/include/targa.h"
 #include "../../libgame/include/attribute.h"
@@ -77,8 +77,8 @@ LPSECTREE SECTREE_MAP::Find(DWORD x, DWORD y)
 
 void SECTREE_MAP::Build()
 {
-    // Ŭ̾Ʈ ݰ 150m ij  ֱ
-    // 3x3ĭ -> 5x5 ĭ ֺsectree Ȯ(ѱ)
+    // 클라이언트에게 반경 150m 캐릭터의 정보를 주기위해
+    // 3x3칸 -> 5x5 칸으로 주변sectree 확대(한국)
     if (LC_IsYMIR() || LC_IsKorea())
     {
 #define NEIGHBOR_LENGTH		5
@@ -107,7 +107,7 @@ void SECTREE_MAP::Build()
 	}
 
 	//
-	//  sectree   sectree Ʈ .
+	// 모든 sectree에 대해 주위 sectree들 리스트를 만든다.
 	//
 	MapType::iterator it = map_.begin();
 
@@ -115,7 +115,7 @@ void SECTREE_MAP::Build()
 	{
 		LPSECTREE tree = it->second;
 
-		tree->m_neighbor_list.push_back(tree); // ڽ ִ´.
+		tree->m_neighbor_list.push_back(tree); // 자신을 넣는다.
 
 		sys_log(3, "%dx%d", tree->m_id.coord.x, tree->m_id.coord.y);
 
@@ -154,7 +154,7 @@ void SECTREE_MAP::Build()
 	};
 
 	//
-	//  sectree   sectree Ʈ .
+	// 모든 sectree에 대해 주위 sectree들 리스트를 만든다.
 	//
 	MapType::iterator it = map_.begin();
 
@@ -162,7 +162,7 @@ void SECTREE_MAP::Build()
 	{
 		LPSECTREE tree = it->second;
 
-		tree->m_neighbor_list.push_back(tree); // ڽ ִ´.
+		tree->m_neighbor_list.push_back(tree); // 자신을 넣는다.
 
 		sys_log(3, "%dx%d", tree->m_id.coord.x, tree->m_id.coord.y);
 
@@ -231,7 +231,7 @@ LPSECTREE SECTREE_MANAGER::Get(DWORD dwIndex, DWORD x, DWORD y)
 }
 
 // -----------------------------------------------------------------------------
-// Setting.txt   SECTREE 
+// Setting.txt 로 부터 SECTREE 만들기
 // -----------------------------------------------------------------------------
 int SECTREE_MANAGER::LoadSettingFile(long lMapIndex, const char * c_pszSettingFileName, TMapSetting & r_setting)
 {
@@ -366,10 +366,10 @@ void SECTREE_MANAGER::LoadDungeon(int iIndex, const char * c_pszFileName)
 }
 
 // Fix me
-//  Town.txt x, y ׳ ް, װ  ڵ  base ǥ ֱ 
-// ٸ ʿ ִ Ÿ  ̵   Ǿִ.
-// տ map̶ų, Ÿ ٸ ĺڰ ,
-// ٸ  Ÿε ̵  ְ .
+// 현재 Town.txt에서 x, y를 그냥 받고, 그걸 이 코드 내에서 base 좌표를 더해주기 때문에
+// 다른 맵에 있는 타운으로 절대 이동할 수 없게 되어있다.
+// 앞에 map이라거나, 기타 다른 식별자가 있으면,
+// 다른 맵의 타운으로도 이동할 수 있게 하자.
 // by rtsummit
 bool SECTREE_MANAGER::LoadMapRegion(const char * c_pszFileName, TMapSetting & r_setting, const char * c_pszMapName)
 {
@@ -478,7 +478,7 @@ bool SECTREE_MANAGER::LoadAttribute(LPSECTREE_MAP pkMapSectree, const char * c_p
 	for (int y = 0; y < iHeight; ++y)
 		for (int x = 0; x < iWidth; ++x)
 		{
-			// UNION  ǥ ĸ DWORD ̵ Ѵ.
+			// UNION 으로 좌표를 합쳐만든 DWORD값을 아이디로 사용한다.
 			SECTREEID id;
 			id.coord.x = (r_setting.iBaseX / SECTREE_SIZE) + x;
 			id.coord.y = (r_setting.iBaseY / SECTREE_SIZE) + y;
@@ -553,7 +553,7 @@ bool SECTREE_MANAGER::GetRecallPositionByEmpire(int iMapIndex, BYTE bEmpire, PIX
 {
 	std::vector::iterator it = m_vec_mapRegion.begin();
 
-	// 10000 Ѵ  νϽ  Ǿִ.
+	// 10000을 넘는 맵은 인스턴스 던전에만 한정되어있다.
 	if (iMapIndex >= 10000)
 	{
 		iMapIndex /= 10000;
@@ -687,7 +687,7 @@ const TMapRegion * SECTREE_MANAGER::FindRegionByPartialName(const char* szMapNam
 		//if (rRegion.index == lMapIndex)
 		//return &rRegion;
 		if (rRegion.strMapName.find(szMapName))
-			return &rRegion; // ij ؼ  
+			return &rRegion; // 캐싱 해서 빠르게 하자
 	}
 
 	return NULL;
@@ -782,7 +782,7 @@ int SECTREE_MANAGER::Build(const char * c_pszListFileName, const char* c_pszMapB
 		if (true == test_server)
 			sys_log ( 0,"[BUILD] Build %s %s %d ",c_pszMapBasePath, szMapName, iIndex );
 
-		//      ͸ ؾ ϴ° Ȯ Ѵ.
+		// 먼저 이 서버에서 이 맵의 몬스터를 스폰해야 하는가 확인 한다.
 		if (map_allow_find(iIndex))
 		{
 			LPSECTREE_MAP pkMapSectree = BuildSectreeFromSetting(setting);
@@ -981,7 +981,7 @@ bool SECTREE_MANAGER::GetRandomLocation(long lMapIndex, PIXEL_POSITION & r_pos,
 
 long SECTREE_MANAGER::CreatePrivateMap(long lMapIndex)
 {
-	if (lMapIndex >= 10000) // 10000 ̻  . (Ȥ ̹ private ̴)
+	if (lMapIndex >= 10000) // 10000번 이상의 맵은 없다. (혹은 이미 private 이다)
 		return 0;
 
 	LPSECTREE_MAP pkMapSectree = GetMap(lMapIndex);
@@ -1092,7 +1092,7 @@ struct FDestroyPrivateMapEntity
 
 void SECTREE_MANAGER::DestroyPrivateMap(long lMapIndex)
 {
-	if (lMapIndex < 10000) // private map  ε 10000 ̻ ̴.
+	if (lMapIndex < 10000) // private map 은 인덱스가 10000 이상 이다.
 		return;
 
 	LPSECTREE_MAP pkMapSectree = GetMap(lMapIndex);
@@ -1100,11 +1100,11 @@ void SECTREE_MANAGER::DestroyPrivateMap(long lMapIndex)
 	if (!pkMapSectree)
 		return;
 
-	//     ϴ ͵  ش.
+	// 이 맵 위에 현재 존재하는 것들을 전부 없앤다.
 	// WARNING:
-	//  ʿ   Sectree    
-	//  ⼭ delete   Ƿ Ͱ   
-	//  ó ؾ
+	// 이 맵에 있지만 어떤 Sectree에도 존재하지 않을 수 있음
+	// 따라서 여기서 delete 할 수 없으므로 포인터가 깨질 수 있으니
+	// 별도 처리를 해야함
 	FDestroyPrivateMapEntity f;
 	pkMapSectree->for_each(f);
 
@@ -1120,7 +1120,7 @@ TAreaMap& SECTREE_MANAGER::GetDungeonArea(long lMapIndex)
 
 	if (it == m_map_pkArea.end())
 	{
-		return m_map_pkArea[-1]; // ӽ÷  Area 
+		return m_map_pkArea[-1]; // 임시로 빈 Area를 리턴
 	}
 	return it->second;
 }
@@ -1143,7 +1143,7 @@ void SECTREE_MANAGER::SendNPCPosition(LPCHARACTER ch)
 
 	TNPCPosition np;
 
-	// TODO m_mapNPCPosition[lMapIndex]  ּ
+	// TODO m_mapNPCPosition[lMapIndex] 를 보내주세요
 	itertype(m_mapNPCPosition[lMapIndex]) it;
 
 	for (it = m_mapNPCPosition[lMapIndex].begin(); it != m_mapNPCPosition[lMapIndex].end(); ++it)
@@ -1379,7 +1379,7 @@ bool SECTREE_MANAGER::ForAttrRegion(long lMapIndex, long lStartX, long lStartY,
 	}
 
 	//
-	//  ǥ Cell  ũ⿡  ȮѴ.
+	// 영역의 좌표를 Cell 의 크기에 맞춰 확장한다.
 	//
 
 	lStartX	-= lStartX % CELL_SIZE;
@@ -1388,7 +1388,7 @@ bool SECTREE_MANAGER::ForAttrRegion(long lMapIndex, long lStartX, long lStartY,
 	lEndY	+= lEndY % CELL_SIZE;
 
 	//
-	// Cell ǥ Ѵ.
+	// Cell 좌표를 구한다.
 	// 
 
 	long lCX = lStartX / CELL_SIZE;
diff --git a/src/game/sectree_manager.h b/src/game/sectree_manager.h
index aab7c99..119cd24 100644
--- a/src/game/sectree_manager.h
+++ b/src/game/sectree_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_SECTREE_MANAGER_H__
+#ifndef __INC_METIN_II_GAME_SECTREE_MANAGER_H__
 #define __INC_METIN_II_GAME_SECTREE_MANAGER_H__
 
 #include "sectree.h"
@@ -165,16 +165,16 @@ class SECTREE_MANAGER : public singleton
 		size_t		GetMonsterCountInMap(long lMapIndex);
 		size_t		GetMonsterCountInMap(long lMpaIndex, DWORD dwVnum);
 
-		///   Sectree  Attribute   Ư ó Ѵ.
+		/// 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
 		/**
-		 * @param [in]	lMapIndex  Map index
-		 * @param [in]	lStartX 簢    ǥ
-		 * @param [in]	lStartY 簢    ǥ
-		 * @param [in]	lEndX 簢    ǥ
-		 * @param [in]	lEndY 簢   Ʒ ǥ
-		 * @param [in]	lRotate   ȸ 
-		 * @param [in]	dwAttr  Attribute
-		 * @param [in]	mode Attribute   ó type
+		 * @param [in]	lMapIndex 적용할 Map index
+		 * @param [in]	lStartX 사각형 영역의 가장 왼쪽 좌표
+		 * @param [in]	lStartY 사각형 영역의 가장 위쪽 좌표
+		 * @param [in]	lEndX 사각형 영역의 가장 오른쪽 좌표
+		 * @param [in]	lEndY 사각형 영역의 가장 아랫쪽 좌표
+		 * @param [in]	lRotate 영역에 대해 회전할 각
+		 * @param [in]	dwAttr 적용할 Attribute
+		 * @param [in]	mode Attribute 에 대해 처리할 type
 		 */
 		bool		ForAttrRegion(long lMapIndex, long lStartX, long lStartY, long lEndX, long lEndY, long lRotate, DWORD dwAttr, EAttrRegionMode mode);
 
@@ -182,39 +182,39 @@ class SECTREE_MANAGER : public singleton
 
 	private:
 
-		///  簢   Sectree  Attribute   Ư ó Ѵ.
+		/// 직각의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
 		/**
-		 * @param [in]	lMapIndex  Map index
-		 * @param [in]	lCX 簢    Cell  ǥ
-		 * @param [in]	lCY 簢    Cell  ǥ
-		 * @param [in]	lCW 簢  Cell  
-		 * @param [in]	lCH 簢  Cell  
-		 * @param [in]	lRotate ȸ ()
-		 * @param [in]	dwAttr  Attribute
-		 * @param [in]	mode Attribute   ó type
+		 * @param [in]	lMapIndex 적용할 Map index
+		 * @param [in]	lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
+		 * @param [in]	lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
+		 * @param [in]	lCW 사각형 영역의 Cell 단위 폭
+		 * @param [in]	lCH 사각형 영역의 Cell 단위 높이
+		 * @param [in]	lRotate 회전할 각(직각)
+		 * @param [in]	dwAttr 적용할 Attribute
+		 * @param [in]	mode Attribute 에 대해 처리할 type
 		 */
 		bool		ForAttrRegionRightAngle( long lMapIndex, long lCX, long lCY, long lCW, long lCH, long lRotate, DWORD dwAttr, EAttrRegionMode mode );
 
-		///  ̿ 簢   Sectree  Attribute   Ư ó Ѵ.
+		/// 직각 이외의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
 		/**
-		 * @param [in]	lMapIndex  Map index
-		 * @param [in]	lCX 簢    Cell  ǥ
-		 * @param [in]	lCY 簢    Cell  ǥ
-		 * @param [in]	lCW 簢  Cell  
-		 * @param [in]	lCH 簢  Cell  
-		 * @param [in]	lRotate ȸ ( ̿ )
-		 * @param [in]	dwAttr  Attribute
-		 * @param [in]	mode Attribute   ó type
+		 * @param [in]	lMapIndex 적용할 Map index
+		 * @param [in]	lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
+		 * @param [in]	lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
+		 * @param [in]	lCW 사각형 영역의 Cell 단위 폭
+		 * @param [in]	lCH 사각형 영역의 Cell 단위 높이
+		 * @param [in]	lRotate 회전할 각(직각 이외의 각)
+		 * @param [in]	dwAttr 적용할 Attribute
+		 * @param [in]	mode Attribute 에 대해 처리할 type
 		 */
 		bool		ForAttrRegionFreeAngle( long lMapIndex, long lCX, long lCY, long lCW, long lCH, long lRotate, DWORD dwAttr, EAttrRegionMode mode );
 
-		///  Cell  Attribute   Ư ó Ѵ.
+		/// 한 Cell 의 Attribute 에 대해 특정한 처리를 수행한다.
 		/**
-		 * @param [in]	lMapIndex  Map index
-		 * @param [in]	lCX  Cell  X ǥ
-		 * @param [in]	lCY  Cell  Y ǥ
-		 * @param [in]	dwAttr  Attribute
-		 * @param [in]	mode Attribute   ó type
+		 * @param [in]	lMapIndex 적용할 Map index
+		 * @param [in]	lCX 적용할 Cell 의 X 좌표
+		 * @param [in]	lCY 적용할 Cell 의 Y 좌표
+		 * @param [in]	dwAttr 적용할 Attribute
+		 * @param [in]	mode Attribute 에 대해 처리할 type
 		 */
 		bool		ForAttrRegionCell( long lMapIndex, long lCX, long lCY, DWORD dwAttr, EAttrRegionMode mode );
 
diff --git a/src/game/sequence.cpp b/src/game/sequence.cpp
index eafe007..5614eb1 100644
--- a/src/game/sequence.cpp
+++ b/src/game/sequence.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "sequence.h"
 
 const BYTE gc_abSequence[SEQUENCE_MAX_NUM] =
diff --git a/src/game/sequence.h b/src/game/sequence.h
index 8c22bfb..e3f6a5d 100644
--- a/src/game/sequence.h
+++ b/src/game/sequence.h
@@ -1,3 +1,3 @@
-#define SEQUENCE_MAX_NUM	32768
+#define SEQUENCE_MAX_NUM	32768
 
 extern const BYTE gc_abSequence[SEQUENCE_MAX_NUM];
diff --git a/src/game/shop.cpp b/src/game/shop.cpp
index 28a5c1b..b6e24dd 100644
--- a/src/game/shop.cpp
+++ b/src/game/shop.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/grid.h"
 #include "constants.h"
 #include "utils.h"
@@ -159,8 +159,8 @@ void CShop::SetShopItems(TShopItemTable * pTable, BYTE bItemCount)
 		if (item.pkItem)
 		{
 			item.vnum = pkItem->GetVnum();
-			item.count = pkItem->GetCount(); // PC     ¥   Ѵ.
-			item.price = pTable->price; // ݵ ڰ Ѵ..
+			item.count = pkItem->GetCount(); // PC 샵의 경우 아이템 개수는 진짜 아이템의 개수여야 한다.
+			item.price = pTable->price; // 가격도 사용자가 정한대로..
 			item.itemid	= pkItem->GetID();
 		}
 		else
@@ -247,7 +247,7 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 
 	LPITEM item;
 
-	if (m_pkPC) // Ǿ ϴ  Ǿ   ־ Ѵ.
+	if (m_pkPC) // 피씨가 운영하는 샵은 피씨가 실제 아이템을 가지고있어야 한다.
 		item = r_item.pkItem;
 	else
 		item = ITEM_MANAGER::instance().CreateItem(r_item.vnum, r_item.count);
@@ -259,7 +259,7 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 	{
 		if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
 		{
-			//ູ  && ö ̺Ʈ 
+			//축복의 구슬 && 만년한철 이벤트 
 			if (item->GetVnum() == 70024 || item->GetVnum() == 70035)
 			{
 				return SHOP_SUBHEADER_GC_END;
@@ -294,7 +294,7 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 
 	ch->PointChange(POINT_GOLD, -dwPrice, false);
 
-	// 
+	//세금 계산
 	DWORD dwTax = 0;
 	int iVal = 0;
 
@@ -334,13 +334,13 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 		}
 	}
 
-	//  싚  5%
+	// 상점에서 살떄 세금 5%
 	if (!m_pkPC) 
 	{
 		CMonarch::instance().SendtoDBAddMoney(dwTax, ch->GetEmpire(), ch);
 	}
 
-	//  ý :  ¡
+	// 군주 시스템 : 세금 징수
 	if (m_pkPC)
 	{
 		m_pkPC->SyncQuickslot(QUICKSLOT_TYPE_ITEM, item->GetCell(), 255);
@@ -382,7 +382,7 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 		m_pkPC->PointChange(POINT_GOLD, dwPrice, false);
 
 		if (iVal > 0)
-			m_pkPC->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ǹűݾ %d %%   Ե˴ϴ"), iVal);
+			m_pkPC->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("판매금액의 %d %% 가 세금으로 나가게됩니다"), iVal);
 
 		CMonarch::instance().SendtoDBAddMoney(dwTax, m_pkPC->GetEmpire(), m_pkPC);
 	}
@@ -443,7 +443,7 @@ bool CShop::AddGuest(LPCHARACTER ch, DWORD owner_vid, bool bOtherEmpire)
 		//HIVALUE_ITEM_EVENT
 		if (quest::CQuestManager::instance().GetEventFlag("hivalue_item_sell") == 0)
 		{
-			//ູ  && ö ̺Ʈ 
+			//축복의 구슬 && 만년한철 이벤트 
 			if (item.vnum == 70024 || item.vnum == 70035)
 			{				
 				continue;
diff --git a/src/game/shop.h b/src/game/shop.h
index 15713b9..ff193b8 100644
--- a/src/game/shop.h
+++ b/src/game/shop.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_SHOP_H__
+#ifndef __INC_METIN_II_GAME_SHOP_H__
 #define __INC_METIN_II_GAME_SHOP_H__
 
 enum
@@ -14,12 +14,12 @@ class CShop
 	public:
 		typedef struct shop_item
 		{
-			DWORD	vnum;		//  ȣ
-			long	price;		// 
-			BYTE	count;		//  
+			DWORD	vnum;		// 아이템 번호
+			long	price;		// 가격
+			BYTE	count;		// 아이템 개수
 
 			LPITEM	pkItem;
-			int		itemid;		//  ̵
+			int		itemid;		// 아이템 고유아이디
 
 			shop_item()
 			{
@@ -40,20 +40,20 @@ class CShop
 		virtual void	SetPCShop(LPCHARACTER ch);
 		virtual bool	IsPCShop()	{ return m_pkPC ? true : false; }
 
-		// ԽƮ ߰/
+		// 게스트 추가/삭제
 		virtual bool	AddGuest(LPCHARACTER ch,DWORD owner_vid, bool bOtherEmpire);
 		void	RemoveGuest(LPCHARACTER ch);
 
-		//  
+		// 물건 구입
 		virtual int	Buy(LPCHARACTER ch, BYTE pos);
 
-		// ԽƮ Ŷ 
+		// 게스트에게 패킷을 보냄
 		void	BroadcastUpdateItem(BYTE pos);
 
-		// Ǹ   ˷ش.
+		// 판매중인 아이템의 갯수를 알려준다.
 		int		GetNumberByVnum(DWORD dwVnum);
 
-		//   ϵǾ ִ ˷ش.
+		// 아이템이 상점에 등록되어 있는지 알려준다.
 		virtual bool	IsSellingItem(DWORD itemID);
 
 		DWORD	GetVnum() { return m_dwVnum; }
@@ -70,7 +70,7 @@ class CShop
 
 		typedef std::unordered_map GuestMapType;
 		GuestMapType m_map_guest;
-		std::vector		m_itemVector;	//   ϴ ǵ
+		std::vector		m_itemVector;	// 이 상점에서 취급하는 물건들
 
 		LPCHARACTER			m_pkPC;
 };
diff --git a/src/game/shopEx.h b/src/game/shopEx.h
index d688181..e28dc07 100644
--- a/src/game/shopEx.h
+++ b/src/game/shopEx.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_SHOP_SECONDARY_COIN_H__
+#ifndef __INC_METIN_II_GAME_SHOP_SECONDARY_COIN_H__
 #define __INC_METIN_II_GAME_SHOP_SECONDARY_COIN_H__
 #include "typedef.h"
 #include "shop.h"
@@ -12,11 +12,11 @@ typedef struct SShopTableEx : SShopTable
 
 class CGroupNode;
 
-// Ȯ shop.
-//  ȭ   ְ,   ǿ  ġ  ִ.
-// , pc   .
-// Ŭ    pos 45  .
-//   m_itemVector  ʴ´.
+// 확장 shop.
+// 명도전을 화폐로 쓸 수 있고, 아이템을 여러 탭에 나눠 배치할 수 있다.
+// 단, pc 샵은 구현하지 않음.
+// 클라와 통신할 때에 탭은 pos 45 단위로 구분.
+// 기존 샵의 m_itemVector은 사용하지 않는다.
 class CShopEx: public CShop
 {
 public:
diff --git a/src/game/shop_manager.cpp b/src/game/shop_manager.cpp
index 37d623f..3d74207 100644
--- a/src/game/shop_manager.cpp
+++ b/src/game/shop_manager.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/grid.h"
 #include "constants.h"
 #include "utils.h"
@@ -97,10 +97,10 @@ LPSHOP CShopManager::GetByNPCVnum(DWORD dwVnum)
 }
 
 /*
- * ̽ Լ
+ * 인터페이스 함수들
  */
 
-//  ŷ 
+// 상점 거래를 시작
 bool CShopManager::StartShopping(LPCHARACTER pkChr, LPCHARACTER pkChrShopKeeper, int iShopVnum)
 {
 	if (pkChr->GetShopOwner() == pkChrShopKeeper)
@@ -112,7 +112,7 @@ bool CShopManager::StartShopping(LPCHARACTER pkChr, LPCHARACTER pkChrShopKeeper,
 	//PREVENT_TRADE_WINDOW
 	if (pkChr->IsOpenSafebox() || pkChr->GetExchange() || pkChr->GetMyShop() || pkChr->IsCubeOpen())
 	{
-		pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ŷâ ¿ ŷ Ҽ  ϴ."));
+		pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
 		return false;
 	}
 	//END_PREVENT_TRADE_WINDOW
@@ -187,7 +187,7 @@ void CShopManager::DestroyPCShop(LPCHARACTER ch)
 	M2_DELETE(pkShop);
 }
 
-//  ŷ 
+// 상점 거래를 종료
 void CShopManager::StopShopping(LPCHARACTER ch)
 {
 	LPSHOP shop;
@@ -203,7 +203,7 @@ void CShopManager::StopShopping(LPCHARACTER ch)
 	sys_log(0, "SHOP: END: %s", ch->GetName());
 }
 
-//  
+// 아이템 구입
 void CShopManager::Buy(LPCHARACTER ch, BYTE pos)
 {
 	if (!ch->GetShop())
@@ -214,7 +214,7 @@ void CShopManager::Buy(LPCHARACTER ch, BYTE pos)
 
 	if (DISTANCE_APPROX(ch->GetX() - ch->GetShopOwner()->GetX(), ch->GetY() - ch->GetShopOwner()->GetY()) > 2000)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ÿ ʹ ־    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상점과의 거리가 너무 멀어 물건을 살 수 없습니다."));
 		return;
 	}
 
@@ -243,7 +243,7 @@ void CShopManager::Buy(LPCHARACTER ch, BYTE pos)
 
 	int ret = pkShop->Buy(ch, pos);
 
-	if (SHOP_SUBHEADER_GC_OK != ret) //  ־ .
+	if (SHOP_SUBHEADER_GC_OK != ret) // 문제가 있었으면 보낸다.
 	{
 		TPacketGCShop pack;
 
@@ -271,7 +271,7 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 
 	if (DISTANCE_APPROX(ch->GetX()-ch->GetShopOwner()->GetX(), ch->GetY()-ch->GetShopOwner()->GetY())>2000)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ÿ ʹ ־    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상점과의 거리가 너무 멀어 물건을 팔 수 없습니다."));
 		return;
 	}
 	
@@ -282,7 +282,7 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 
 	if (item->IsEquipped() == true)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   Ǹ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("착용 중인 아이템은 판매할 수 없습니다."));
 		return;
 	}
 
@@ -313,7 +313,7 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 
 	dwPrice /= 5;
 	
-	// 
+	//세금 계산
 	DWORD dwTax = 0;
 	int iVal = 3;
 	
@@ -336,22 +336,22 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 	if (GOLD_MAX <= nTotalMoney)
 	{
 		sys_err("[OVERFLOW_GOLD] id %u name %s gold %u", ch->GetPlayerID(), ch->GetName(), ch->GetGold());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20 ʰϿ ǰ ȼ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20억냥이 초과하여 물품을 팔수 없습니다."));
 		return;
 	}
 
-	// 20050802.myevan. Ǹ α׿  ID ߰
+	// 20050802.myevan.상점 판매 로그에 아이템 ID 추가
 	sys_log(0, "SHOP: SELL: %s item name: %s(x%d):%u price: %u", ch->GetName(), item->GetName(), bCount, item->GetID(), dwPrice);
 
 	if (iVal > 0)
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ǹűݾ %d %%   Ե˴ϴ"), iVal);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("판매금액의 %d %% 가 세금으로 나가게됩니다"), iVal);
 
 	DBManager::instance().SendMoneyLog(MONEY_LOG_SHOP, item->GetVnum(), dwPrice);
 
 	if (bCount == item->GetCount())
 	{
-		// ѱ   ش޶  Ƽ
-		//  ǸŽ Ӽα׸ .
+		// 한국에는 아이템을 버리고 복구해달라는 진상유저들이 많아서
+		// 상점 판매시 속성로그를 남긴다.
 		if (LC_IsYMIR())
 			item->AttrLog();
 
@@ -360,7 +360,7 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 	else
 		item->SetCount(item->GetCount() - bCount);
 
-	// ý :  ¡
+	//군주 시스템 : 세금 징수
 	CMonarch::instance().SendtoDBAddMoney(dwTax, ch->GetEmpire(), ch);
 
 	ch->PointChange(POINT_GOLD, dwPrice, false);
@@ -491,8 +491,8 @@ bool ConvertToShopItemTable(IN CGroupNode* pNode, OUT TShopTableEx& shopTable)
 
 bool CShopManager::ReadShopTableEx(const char* stFileName)
 {
-	// file  üũ.
-	//    ó ʴ´.
+	// file 유무 체크.
+	// 없는 경우는 에러로 처리하지 않는다.
 	FILE* fp = fopen(stFileName, "rb");
 	if (NULL == fp)
 		return true;
diff --git a/src/game/shop_manager.h b/src/game/shop_manager.h
index 5069be4..202df9c 100644
--- a/src/game/shop_manager.h
+++ b/src/game/shop_manager.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_SHOP_MANAGER_H__
+#ifndef __INC_METIN_II_GAME_SHOP_MANAGER_H__
 #define __INC_METIN_II_GAME_SHOP_MANAGER_H__
 
 class CShop;
diff --git a/src/game/skill.cpp b/src/game/skill.cpp
index cd05b5a..ee5b335 100644
--- a/src/game/skill.cpp
+++ b/src/game/skill.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/stl.h"
 
 #include "constants.h"
@@ -297,7 +297,7 @@ bool CSkillManager::Initialize(TSkillTable * pTab, int iSize)
 
 	if (!bError)
 	{
-		//  ̺  .
+		// 기존 테이블의 내용을 지운다.
 		itertype(m_map_pkSkillProto) it = m_map_pkSkillProto.begin();
 
 		while (it != m_map_pkSkillProto.end()) {
@@ -307,7 +307,7 @@ bool CSkillManager::Initialize(TSkillTable * pTab, int iSize)
 
 		m_map_pkSkillProto.clear();
 
-		// ο  
+		// 새로운 내용을 삽입
 		it = map_pkSkillProto.begin();
 
 		while (it != map_pkSkillProto.end())
diff --git a/src/game/skill.h b/src/game/skill.h
index 6ee1810..23bec28 100644
--- a/src/game/skill.h
+++ b/src/game/skill.h
@@ -1,37 +1,37 @@
-#ifndef __INC_METIN_II_GAME_CSkillManager_H__
+#ifndef __INC_METIN_II_GAME_CSkillManager_H__
 #define __INC_METIN_II_GAME_CSkillManager_H__
 
 #include "../../libpoly/Poly.h"
 
 enum ESkillFlags
 {
-	SKILL_FLAG_ATTACK			= (1 << 0),	//  
-	SKILL_FLAG_USE_MELEE_DAMAGE		= (1 << 1),	// ⺻ и Ÿġ b  
-	SKILL_FLAG_COMPUTE_ATTGRADE		= (1 << 2),	// ݵ Ѵ
-	SKILL_FLAG_SELFONLY			= (1 << 3),	// ڽſԸ   
-	SKILL_FLAG_USE_MAGIC_DAMAGE		= (1 << 4),	// ⺻  Ÿġ b  
-	SKILL_FLAG_USE_HP_AS_COST		= (1 << 5),	// HP SP 
+	SKILL_FLAG_ATTACK			= (1 << 0),	// 공격 기술
+	SKILL_FLAG_USE_MELEE_DAMAGE		= (1 << 1),	// 기본 밀리 타격치를 b 값으로 사용
+	SKILL_FLAG_COMPUTE_ATTGRADE		= (1 << 2),	// 공격등급을 계산한다
+	SKILL_FLAG_SELFONLY			= (1 << 3),	// 자신에게만 쓸 수 있음
+	SKILL_FLAG_USE_MAGIC_DAMAGE		= (1 << 4),	// 기본 마법 타격치를 b 값으로 사용
+	SKILL_FLAG_USE_HP_AS_COST		= (1 << 5),	// HP를 SP대신 쓴다
 	SKILL_FLAG_COMPUTE_MAGIC_DAMAGE	= (1 << 6),
 	SKILL_FLAG_SPLASH			= (1 << 7),
-	SKILL_FLAG_GIVE_PENALTY		= (1 << 8),	//  õ(3) 2  ޴´.
-	SKILL_FLAG_USE_ARROW_DAMAGE		= (1 << 9),	// ⺻ ȭ Ÿġ b  
-	SKILL_FLAG_PENETRATE		= (1 << 10),	// 
-	SKILL_FLAG_IGNORE_TARGET_RATING	= (1 << 11),	//   
-	SKILL_FLAG_SLOW			= (1 << 12),	// ο 
-	SKILL_FLAG_STUN			= (1 << 13),	//  
-	SKILL_FLAG_HP_ABSORB		= (1 << 14),	// HP 
-	SKILL_FLAG_SP_ABSORB		= (1 << 15),	// SP 
-	SKILL_FLAG_FIRE_CONT		= (1 << 16),	// FIRE  
-	SKILL_FLAG_REMOVE_BAD_AFFECT	= (1 << 17),	// ȿ 
-	SKILL_FLAG_REMOVE_GOOD_AFFECT	= (1 << 18),	// ȿ 
-	SKILL_FLAG_CRUSH			= (1 << 19),	//  
-	SKILL_FLAG_POISON			= (1 << 20),	//  
-	SKILL_FLAG_TOGGLE			= (1 << 21),	// 
-	SKILL_FLAG_DISABLE_BY_POINT_UP	= (1 << 22),	//  ø  .
-	SKILL_FLAG_CRUSH_LONG		= (1 << 23),	//  ָ 
-	SKILL_FLAG_WIND		= (1 << 24),	// ٶ Ӽ 
-	SKILL_FLAG_ELEC		= (1 << 25),	//  Ӽ
-	SKILL_FLAG_FIRE		= (1 << 26),	//  Ӽ
+	SKILL_FLAG_GIVE_PENALTY		= (1 << 8),	// 쓰고나면 잠시동안(3초) 2배 데미지를 받는다.
+	SKILL_FLAG_USE_ARROW_DAMAGE		= (1 << 9),	// 기본 화살 타격치를 b 값으로 사용
+	SKILL_FLAG_PENETRATE		= (1 << 10),	// 방어무시
+	SKILL_FLAG_IGNORE_TARGET_RATING	= (1 << 11),	// 상대 레이팅 무시
+	SKILL_FLAG_SLOW			= (1 << 12),	// 슬로우 공격
+	SKILL_FLAG_STUN			= (1 << 13),	// 스턴 공격
+	SKILL_FLAG_HP_ABSORB		= (1 << 14),	// HP 흡수
+	SKILL_FLAG_SP_ABSORB		= (1 << 15),	// SP 흡수
+	SKILL_FLAG_FIRE_CONT		= (1 << 16),	// FIRE 지속 데미지
+	SKILL_FLAG_REMOVE_BAD_AFFECT	= (1 << 17),	// 나쁜효과 제거
+	SKILL_FLAG_REMOVE_GOOD_AFFECT	= (1 << 18),	// 나쁜효과 제거
+	SKILL_FLAG_CRUSH			= (1 << 19),	// 상대방을 날림
+	SKILL_FLAG_POISON			= (1 << 20),	// 독 공격
+	SKILL_FLAG_TOGGLE			= (1 << 21),	// 토글
+	SKILL_FLAG_DISABLE_BY_POINT_UP	= (1 << 22),	// 찍어서 올릴 수 없다.
+	SKILL_FLAG_CRUSH_LONG		= (1 << 23),	// 상대방을 멀리 날림
+	SKILL_FLAG_WIND		= (1 << 24),	// 바람 속성 
+	SKILL_FLAG_ELEC		= (1 << 25),	// 전기 속성
+	SKILL_FLAG_FIRE		= (1 << 26),	// 불 속성
 };
 
 enum
@@ -44,84 +44,84 @@ enum ESkillIndexes
 {
 	SKILL_RESERVED = 0,
 
-	//   迭
+	// 무사 전사 계열
 	// A
-	SKILL_SAMYEON = 1,		// ↓()
-	SKILL_PALBANG,		// ȹdz
+	SKILL_SAMYEON = 1,		// 삼연참(세번베기)
+	SKILL_PALBANG,		// 팔방풍우
 	// S
-	SKILL_JEONGWI,		// ȥ
-	SKILL_GEOMKYUNG,		// ˰
-	SKILL_TANHWAN,		// źȯ
+	SKILL_JEONGWI,		// 전귀혼
+	SKILL_GEOMKYUNG,		// 검경
+	SKILL_TANHWAN,		// 탄환격
 
-	//   迭
+	// 무사 기공 계열
 	// A
-	SKILL_GIGONGCHAM = 16,	// 
-	SKILL_GYOKSAN,		// ݻŸ
-	SKILL_DAEJINGAK,		// 
+	SKILL_GIGONGCHAM = 16,	// 기공참
+	SKILL_GYOKSAN,		// 격산타우
+	SKILL_DAEJINGAK,		// 대진각
 	// S
-	SKILL_CHUNKEON,		// õ
-	SKILL_GEOMPUNG,		// dz
+	SKILL_CHUNKEON,		// 천근추
+	SKILL_GEOMPUNG,		// 검풍
 
-	// ڰ ϻ 迭
+	// 자객 암살 계열
 	// A
-	SKILL_AMSEOP = 31,		// Ͻ 
-	SKILL_GUNGSIN,		// ýź 
-	SKILL_CHARYUN,		//  
+	SKILL_AMSEOP = 31,		// 암습 
+	SKILL_GUNGSIN,		// 궁신탄영 
+	SKILL_CHARYUN,		// 차륜살 
 	// S
-	SKILL_EUNHYUNG,		//  
-	SKILL_SANGONG,		// 
+	SKILL_EUNHYUNG,		// 은형법 
+	SKILL_SANGONG,		// 산공분
 
-	// ڰ ü 迭
+	// 자객 궁수 계열
 	// A
-	SKILL_YEONSA = 46,		//  
-	SKILL_KWANKYEOK,		// ݼ 
-	SKILL_HWAJO,		// ȭ
+	SKILL_YEONSA = 46,		// 연사 
+	SKILL_KWANKYEOK,		// 관격술 
+	SKILL_HWAJO,		// 화조파
 	// S
-	SKILL_GYEONGGONG,		//  
-	SKILL_GIGUNG,		// 
+	SKILL_GYEONGGONG,		// 경공술 
+	SKILL_GIGUNG,		// 기궁
 
-	//  
+	// 수라 검
 	// A
-	SKILL_SWAERYUNG = 61,	//  
-	SKILL_YONGKWON,		//  
+	SKILL_SWAERYUNG = 61,	// 쇄령지 
+	SKILL_YONGKWON,		// 용권파 
 	// S
-	SKILL_GWIGEOM,		// Ͱ
-	SKILL_TERROR,		//  
-	SKILL_JUMAGAP,		// ָ 
-	SKILL_PABEOB,		// Ĺ
+	SKILL_GWIGEOM,		// 귀검
+	SKILL_TERROR,		// 공포 
+	SKILL_JUMAGAP,		// 주마갑 
+	SKILL_PABEOB,		// 파법술
 
-	//  
+	// 수라 마법
 	// A
-	SKILL_MARYUNG = 76,		//  
-	SKILL_HWAYEOMPOK,		// ȭ 
-	SKILL_MUYEONG,		//  
+	SKILL_MARYUNG = 76,		// 마령 
+	SKILL_HWAYEOMPOK,		// 화염폭 
+	SKILL_MUYEONG,		// 무영진 
 	// S
-	SKILL_MANASHILED,		// żȣ
-	SKILL_TUSOK,		// Ӹ 
-	SKILL_MAHWAN,		// ȯ
+	SKILL_MANASHILED,		// 흑신수호
+	SKILL_TUSOK,		// 투속마령 
+	SKILL_MAHWAN,		// 마환격
 
-	//  
+	// 무당 용신
 	// A
 	SKILL_BIPABU = 91,
-	SKILL_YONGBI,		// 񱤻 
-	SKILL_PAERYONG,		// з泪ѹ
+	SKILL_YONGBI,		// 용비광사파 
+	SKILL_PAERYONG,		// 패룡나한무
 	// S
-	//SKILL_BUDONG,		// εں 
-	SKILL_HOSIN,		// ȣ 
-	SKILL_REFLECT,		// ȣ
-	SKILL_GICHEON,		// õ
+	//SKILL_BUDONG,		// 부동박부 
+	SKILL_HOSIN,		// 호신 
+	SKILL_REFLECT,		// 보호
+	SKILL_GICHEON,		// 기천대공
 
-	//  
+	// 무당 뇌신
 	// A
-	SKILL_NOEJEON = 106,	//  
-	SKILL_BYEURAK,		//  
-	SKILL_CHAIN,		// üζƮ 
+	SKILL_NOEJEON = 106,	// 뇌전령 
+	SKILL_BYEURAK,		// 벼락 
+	SKILL_CHAIN,		// 체인라이트닝 
 	// S
-	SKILL_JEONGEOP,		//  
-	SKILL_KWAESOK,		// ̵ӵ
-	SKILL_JEUNGRYEOK,		// ¼
+	SKILL_JEONGEOP,		// 정업인 
+	SKILL_KWAESOK,		// 이동속도업
+	SKILL_JEUNGRYEOK,		// 증력술
 
-	//  ų
+	// 공통 스킬
 	// 7
 	SKILL_7_A_ANTI_TANHWAN = 112,
 	SKILL_7_B_ANTI_AMSEOP,
@@ -134,27 +134,27 @@ enum ESkillIndexes
 	SKILL_8_C_ANTI_MAHWAN,
 	SKILL_8_D_ANTI_BYEURAK,
 
-	//  ų
+	// 보조 스킬
 
-	SKILL_LEADERSHIP = 121,	// ַ
-	SKILL_COMBO	= 122,		// 
-	SKILL_CREATE = 123,		// 
+	SKILL_LEADERSHIP = 121,	// 통솔력
+	SKILL_COMBO	= 122,		// 연계기
+	SKILL_CREATE = 123,		// 제조
 	SKILL_MINING = 124,
 
-	SKILL_LANGUAGE1 = 126,	// ż ɷ
-	SKILL_LANGUAGE2 = 127,	// õ ɷ
-	SKILL_LANGUAGE3 = 128,	//  ɷ
-	SKILL_POLYMORPH = 129,	// а
+	SKILL_LANGUAGE1 = 126,	// 신수어 능력
+	SKILL_LANGUAGE2 = 127,	// 천조어 능력
+	SKILL_LANGUAGE3 = 128,	// 진노어 능력
+	SKILL_POLYMORPH = 129,	// 둔갑
 
-	SKILL_HORSE			= 130,	// ¸ ų
-	SKILL_HORSE_SUMMON		= 131,	//  ȯ ų
-	SKILL_HORSE_WILDATTACK	= 137,	// 
-	SKILL_HORSE_CHARGE		= 138,	// 
-	SKILL_HORSE_ESCAPE		= 139,	// Ż
-	SKILL_HORSE_WILDATTACK_RANGE = 140,	// (Ȱ)
+	SKILL_HORSE			= 130,	// 승마 스킬
+	SKILL_HORSE_SUMMON		= 131,	// 말 소환 스킬
+	SKILL_HORSE_WILDATTACK	= 137,	// 난무
+	SKILL_HORSE_CHARGE		= 138,	// 돌격
+	SKILL_HORSE_ESCAPE		= 139,	// 탈출
+	SKILL_HORSE_WILDATTACK_RANGE = 140,	// 난무(활)
 
-	SKILL_ADD_HP	=	141,			// 
-	SKILL_RESIST_PENETRATE	=	142,	// ö
+	SKILL_ADD_HP	=	141,			// 증혈
+	SKILL_RESIST_PENETRATE	=	142,	// 철통
 
 	GUILD_SKILL_START = 151,
 	GUILD_SKILL_EYE = 151,
@@ -176,35 +176,35 @@ class CSkillProto
 {
 	public:
 		char	szName[64];
-		DWORD	dwVnum;			// ȣ
+		DWORD	dwVnum;			// 번호
 
-		DWORD	dwType;			// 0: , 1: , 2: ڰ, 3: , 4: 
-		BYTE	bMaxLevel;		// ִ õ
-		BYTE	bLevelLimit;		// 
-		int	iSplashRange;		// ÷ Ÿ 
+		DWORD	dwType;			// 0: 전직업, 1: 무사, 2: 자객, 3: 수라, 4: 무당
+		BYTE	bMaxLevel;		// 최대 수련도
+		BYTE	bLevelLimit;		// 레벨제한
+		int	iSplashRange;		// 스플래쉬 거리 제한
 
-		BYTE	bPointOn;		//    ۰? (Ÿġ, MAX HP, HP REGEN )
-		CPoly	kPointPoly;		//   
+		BYTE	bPointOn;		// 어디에 결과값을 적용 시키는가? (타격치, MAX HP, HP REGEN 등등등)
+		CPoly	kPointPoly;		// 결과값 만드는 공식
 
-		CPoly	kSPCostPoly;		//  SP 
-		CPoly	kDurationPoly;		//  ð 
-		CPoly	kDurationSPCostPoly;	//  SP 
-		CPoly	kCooldownPoly;		// ٿ ð 
-		CPoly	kMasterBonusPoly;	//   ʽ 
-		CPoly	kSplashAroundDamageAdjustPoly;	// ÷        
+		CPoly	kSPCostPoly;		// 사용 SP 공식
+		CPoly	kDurationPoly;		// 지속 시간 공식
+		CPoly	kDurationSPCostPoly;	// 지속 SP 공식
+		CPoly	kCooldownPoly;		// 쿨다운 시간 공식
+		CPoly	kMasterBonusPoly;	// 마스터일 때 보너스 공식
+		CPoly	kSplashAroundDamageAdjustPoly;	// 스플래쉬 공격일 경우 주위 적에게 입히는 데미지 감소 비율
 
-		DWORD	dwFlag;			// ųɼ
-		DWORD	dwAffectFlag;		// ų   Ǵ Affect
+		DWORD	dwFlag;			// 스킬옵션
+		DWORD	dwAffectFlag;		// 스킬에 맞은 경우 적용되는 Affect
 
-		BYTE	bLevelStep;		// ѹ øµ ʿ ų Ʈ 
-		DWORD	preSkillVnum;		// µ ʿ   ų
-		BYTE	preSkillLevel;		//   ų 
+		BYTE	bLevelStep;		// 한번에 올리는데 필요한 스킬 포인트 수
+		DWORD	preSkillVnum;		// 배우는데 필요한 이전에 배워야할 스킬
+		BYTE	preSkillLevel;		// 이전에 배워야할 스킬의 레벨
 
 		long	lMaxHit;
 
 		BYTE	bSkillAttrType;
 
-		// 2 
+		// 2차 적용
 		BYTE	bPointOn2;		
 		CPoly	kPointPoly2;		
 		CPoly	kDurationPoly2;		
@@ -218,7 +218,7 @@ class CSkillProto
 			return dwVnum == SKILL_TANHWAN || dwVnum == SKILL_HORSE_CHARGE; 
 		}
 
-		// 3 
+		// 3차 적용
 		BYTE bPointOn3;
 		CPoly kPointPoly3;
 		CPoly kDurationPoly3;
diff --git a/src/game/skill_power.cpp b/src/game/skill_power.cpp
index 88629fb..003c579 100644
--- a/src/game/skill_power.cpp
+++ b/src/game/skill_power.cpp
@@ -1,4 +1,4 @@
-
+
 #include "stdafx.h"
 
 #include "../../common/length.h"
diff --git a/src/game/skill_power.h b/src/game/skill_power.h
index a82afae..3eed712 100644
--- a/src/game/skill_power.h
+++ b/src/game/skill_power.h
@@ -1,4 +1,4 @@
-
+
 #ifndef METIN2_TABLE_BY_SKILL_
 #define METIN2_TABLE_BY_SKILL_
 
@@ -8,7 +8,7 @@ class CTableBySkill : public singleton
 		CTableBySkill()
 			: m_aiSkillDamageByLevel(NULL)
 		{
-			//ų  ߰ ʱȭ
+			//스킬 레벨당 추가데미지 초기화
 			for ( int job = 0; job < JOB_MAX_NUM * 2; ++job )
 				m_aiSkillPowerByLevelFromType[job] = NULL;
 		}
@@ -18,18 +18,18 @@ class CTableBySkill : public singleton
 			DeleteAll();
 		}
 
-		//̺  üũ
+		//테이블 세팅 체크
 		bool 	Check() const;
 
-		//
+		//삭제
 		void 	DeleteAll();
 
-		//ų ųĿ ̺
+		//스킬레벨단위 스킬파워 테이블
 		int 	GetSkillPowerByLevelFromType( int job, int skillgroup, int skilllevel, bool bMob ) const;
 		void 	SetSkillPowerByLevelFromType( int idx, const int* aTable );
 		void	DeleteSkillPowerByLevelFromType( int idx );
 
-		// ߰ ų  ̺
+		//레벨당 추가 스킬데미지  테이블
 		int 	GetSkillDamageByLevel( int Level ) const;
 		void	SetSkillDamageByLevelTable( const int* aTable );
 		void 	DeleteSkillDamageByLevelTable();
diff --git a/src/game/spam.h b/src/game/spam.h
index 492ead3..cb5c44f 100644
--- a/src/game/spam.h
+++ b/src/game/spam.h
@@ -1,4 +1,4 @@
-#ifndef __INC_SPAM_MANAGER_H__
+#ifndef __INC_SPAM_MANAGER_H__
 #define __INC_SPAM_MANAGER_H__
 
 #include 
diff --git a/src/game/stable_priority_queue.h b/src/game/stable_priority_queue.h
index 6b4f1b8..1016d47 100644
--- a/src/game/stable_priority_queue.h
+++ b/src/game/stable_priority_queue.h
@@ -1,4 +1,4 @@
-
+
 #ifndef STABLE_PRIORITY_QUEUE_H_
 #define STABLE_PRIORITY_QUEUE_H_
 
diff --git a/src/game/start_position.cpp b/src/game/start_position.cpp
index 0cb6b6c..1867975 100644
--- a/src/game/start_position.cpp
+++ b/src/game/start_position.cpp
@@ -1,42 +1,42 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "start_position.h"
 
 
 char g_nation_name[4][32] =
 {
 	"",
-	"ż",
-	"õ",
-	"뱹",
+	"신수국",
+	"천조국",
+	"진노국",
 };
 
-//	LC_TEXT("ż")
-//	LC_TEXT("õ")
-//	LC_TEXT("뱹")
+//	LC_TEXT("신수국")
+//	LC_TEXT("천조국")
+//	LC_TEXT("진노국")
 
 long g_start_map[4] =
 {
 	0,	// reserved
-	1,	// ż
-	21,	// õ
-	41	// 뱹
+	1,	// 신수국
+	21,	// 천조국
+	41	// 진노국
 };
 
 DWORD g_start_position[4][2] =
 {
 	{      0,      0 },	// reserved
-	{ 469300, 964200 },	// ż
-	{  55700, 157900 },	// õ
-	{ 969600, 278400 }	// 뱹
+	{ 469300, 964200 },	// 신수국
+	{  55700, 157900 },	// 천조국
+	{ 969600, 278400 }	// 진노국
 };
 
 
 DWORD arena_return_position[4][2] =
 {
 	{       0,  0       },
-	{   347600, 882700  }, // ھ
-	{   138600, 236600  }, // 
-	{   857200, 251800  }  // ڶ
+	{   347600, 882700  }, // 자양현
+	{   138600, 236600  }, // 복정현
+	{   857200, 251800  }  // 박라현
 };
 
 
diff --git a/src/game/start_position.h b/src/game/start_position.h
index da8b3ee..573d64a 100644
--- a/src/game/start_position.h
+++ b/src/game/start_position.h
@@ -1,4 +1,4 @@
-#ifndef __START_POSITION_H
+#ifndef __START_POSITION_H
 #define __START_POSITION_H
 
 #include "locale_service.h"
diff --git a/src/game/state.h b/src/game/state.h
index bd084a2..bce315b 100644
--- a/src/game/state.h
+++ b/src/game/state.h
@@ -1,4 +1,4 @@
-#ifndef _fsm_state_h
+#ifndef _fsm_state_h
 #define _fsm_state_h
 
 // System Includes
diff --git a/src/game/stdafx.h b/src/game/stdafx.h
index f2e2226..4474cfd 100644
--- a/src/game/stdafx.h
+++ b/src/game/stdafx.h
@@ -1,4 +1,4 @@
-// Basic features
+// Basic features
 // Enable or disable memory pooling for specific object types
 //#define M2_USE_POOL
 // Enable or disable heap allocation debugging
diff --git a/src/game/target.cpp b/src/game/target.cpp
index 34d71dd..cdf60e9 100644
--- a/src/game/target.cpp
+++ b/src/game/target.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "questmanager.h"
diff --git a/src/game/target.h b/src/game/target.h
index abc1f62..4041d78 100644
--- a/src/game/target.h
+++ b/src/game/target.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_TARGET_H__
+#ifndef __INC_METIN_II_GAME_TARGET_H__
 #define __INC_METIN_II_GAME_TARGET_H__
 
 enum ETargetTypes
@@ -17,8 +17,8 @@ EVENTINFO(TargetInfo)
 	DWORD       dwPID;
 	DWORD       dwQuestIndex;
 
-	char        szTargetName[32+1]; // Ʈ ϴ ̸
-	char        szTargetDesc[32+1]; //  Ŭ̾Ʈ ۵Ǵ ̸
+	char        szTargetName[32+1]; // 퀘스트에서 사용하는 이름
+	char        szTargetDesc[32+1]; // 실제 클라이언트에 전송되는 이름
 
 	int         iType;
 	int         iArg1;
diff --git a/src/game/test.cpp b/src/game/test.cpp
index 17c2043..cc414b6 100644
--- a/src/game/test.cpp
+++ b/src/game/test.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/attribute.h"
 #include "../../libgame/include/targa.h"
 #include "../../common/d3dtype.h"
@@ -120,7 +120,7 @@ int main(int argc, char ** argv)
 	SECTREE_MANAGER	sectree_manager;
 	DESC_MANAGER desc_manager;
 	CHARACTER_MANAGER char_manager;
-	quest::CQuestManager quest_manager; // CHARACTER::Intiailize ʿ
+	quest::CQuestManager quest_manager; // CHARACTER::Intiailize에서 필요함
 	CArenaManager arena_manager;
 	CPVPManager pvp_manager;
 	LZOManager lzo;
@@ -186,7 +186,7 @@ int main(int argc, char ** argv)
 					// Buffer overflow test (must use with valgrind or gdb at least)
                     LPCHARACTER ch = CHARACTER_MANAGER::instance().CreateCharacter("test");
 
-					// ÿ Ҵϸ valgrind    
+					// 스택에 할당하면 valgrind가 제대로 오류를 잡지 못함
 					size_t bufsize = 512 + 1;
 					size_t linesize = 1024 + 1;
 
@@ -289,11 +289,11 @@ bool ReadMapAttribute(DWORD dwAreaX, DWORD dwAreaY, const char * c_pszFileName)
 	fclose(fp);	// close file
 
 	// 
-	// ϳ SECTREE 6400 PIXEL  100ȼ 1 ̹Ƿ 
+	// 하나의 SECTREE는 6400 PIXEL을 차지 100픽셀이 1미터 이므로 
 	// 1 SECTREE = 64m = 6400px
 	//
-	// Ŭ̾Ʈ ϳ Area 256m ϹǷ SECTREE װ óؾ 
-	// Ѵ.
+	// 클라이언트의 하나의 Area는 256m를 차지하므로 SECTREE 네개를 처리해야 
+	// 한다.
 	//
 	DWORD dwStartX, dwStartY, dwEndX, dwEndY;
 
@@ -325,9 +325,9 @@ bool ReadMapAttribute(DWORD dwAreaX, DWORD dwAreaY, const char * c_pszFileName)
 			{
 				for (int ax = region[x - dwStartX][0], px = 0; ax < region[x - dwStartX][1]; ++ax, px += 2)
 				{
-					// AREA  Ӽ ػ󵵰 1m ̹Ƿ
-					// CELL 1 50x50cm SECTREE
-					// AREA Ӽ Ѱ 2x2  Ѵ.
+					// AREA의 경우 속성 해상도가 1m 이므로
+					// CELL 1개가 50x50cm인 SECTREE에서는
+					// AREA의 속성 한개가 2x2개를 차지 한다.
 					BYTE bAttr = pbAttr[ay * wHeight + ax];
 
 					if (bAttr & ATTR_OBJECT)
@@ -535,7 +535,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 	else
 		h = ey - sy;
 
-	// distance = (w * w) + (h * h); // Ÿ
+	// distance = (w * w) + (h * h); // 거리
 	if (w > h)
 	{
 		d = (h << 1) - w;
@@ -564,7 +564,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 				default: return;
 			}
 
-			if (!f(px, py))	// false   Ǹ ߴ Ѵ.
+			if (!f(px, py))	// false 가 리턴 되면 중단 한다.
 			{
 				printf("putting error %d %d", px, py);
 				return;
@@ -598,7 +598,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 				default: return;
 			}
 
-			if (!f(px, py))	// false   Ǹ ߴ Ѵ.
+			if (!f(px, py))	// false 가 리턴 되면 중단 한다.
 			{
 				printf("putting error %d %d", px, py);
 				return;
@@ -750,10 +750,10 @@ void ReadCollisionData(const char * c_pszFileName, int iBaseX, int iBaseY)
 
 								}
 							}
-							// 簢 ä⵵ սô
-							// 0 1 2 3 
+							// 사각형 채우기도 합시다
+							// 0 1 2 3 순서대로
 							// -- +- -+ ++
-							// ٵ y  ̳ʽ ϴ° ȮϽñ
+							// 근데 y 는 마이너스 취하는거 확인하시길
 							// TODO
 						}
 						break;
@@ -825,7 +825,7 @@ void ConvertAttribute(const char * c_pszCollisionDataFileName, const char * c_ps
 	printf("bx by %d %d\n", bx, by);
 	int x, y;
 
-	// ϴ Ӽ ʱȭ
+	// 일단 속성 초기화
 	for (y = 0; y < iMapHeight * (25600 / SECTREE_SIZE); ++y)
 	{
 		for (x = 0; x < iMapWidth * (25600 / SECTREE_SIZE); ++x)
diff --git a/src/game/test_allocator.cpp b/src/game/test_allocator.cpp
index 266ae2a..3f9f8ae 100644
--- a/src/game/test_allocator.cpp
+++ b/src/game/test_allocator.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include 
 #define DBG_ALLOC
diff --git a/src/game/test_stacktrace.cpp b/src/game/test_stacktrace.cpp
index b326415..ae8242d 100644
--- a/src/game/test_stacktrace.cpp
+++ b/src/game/test_stacktrace.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include 
 #include 
diff --git a/src/game/test_window.cpp b/src/game/test_window.cpp
index 9dc81ca..0b63615 100644
--- a/src/game/test_window.cpp
+++ b/src/game/test_window.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../libgame/include/attribute.h"
 #include "../../libgame/include/targa.h"
 #include "../../common/d3dtype.h"
@@ -120,7 +120,7 @@ int main(int argc, char ** argv)
 	SECTREE_MANAGER	sectree_manager;
 	DESC_MANAGER desc_manager;
 	CHARACTER_MANAGER char_manager;
-	quest::CQuestManager quest_manager; // CHARACTER::Intiailize ʿ
+	quest::CQuestManager quest_manager; // CHARACTER::Intiailize에서 필요함
 	CArenaManager arena_manager;
 	CPVPManager pvp_manager;
 	LZOManager lzo;
@@ -186,7 +186,7 @@ int main(int argc, char ** argv)
 					// Buffer overflow test (must use with valgrind or gdb at least)
                     LPCHARACTER ch = CHARACTER_MANAGER::instance().CreateCharacter("test");
 
-					// ÿ Ҵϸ valgrind    
+					// 스택에 할당하면 valgrind가 제대로 오류를 잡지 못함
 					size_t bufsize = 512 + 1;
 					size_t linesize = 1024 + 1;
 
@@ -289,11 +289,11 @@ bool ReadMapAttribute(DWORD dwAreaX, DWORD dwAreaY, const char * c_pszFileName)
 	fclose(fp);	// close file
 
 	// 
-	// ϳ SECTREE 6400 PIXEL  100ȼ 1 ̹Ƿ 
+	// 하나의 SECTREE는 6400 PIXEL을 차지 100픽셀이 1미터 이므로 
 	// 1 SECTREE = 64m = 6400px
 	//
-	// Ŭ̾Ʈ ϳ Area 256m ϹǷ SECTREE װ óؾ 
-	// Ѵ.
+	// 클라이언트의 하나의 Area는 256m를 차지하므로 SECTREE 네개를 처리해야 
+	// 한다.
 	//
 	DWORD dwStartX, dwStartY, dwEndX, dwEndY;
 
@@ -325,9 +325,9 @@ bool ReadMapAttribute(DWORD dwAreaX, DWORD dwAreaY, const char * c_pszFileName)
 			{
 				for (int ax = region[x - dwStartX][0], px = 0; ax < region[x - dwStartX][1]; ++ax, px += 2)
 				{
-					// AREA  Ӽ ػ󵵰 1m ̹Ƿ
-					// CELL 1 50x50cm SECTREE
-					// AREA Ӽ Ѱ 2x2  Ѵ.
+					// AREA의 경우 속성 해상도가 1m 이므로
+					// CELL 1개가 50x50cm인 SECTREE에서는
+					// AREA의 속성 한개가 2x2개를 차지 한다.
 					BYTE bAttr = pbAttr[ay * wHeight + ax];
 
 					if (bAttr & ATTR_OBJECT)
@@ -367,7 +367,7 @@ void GetFindFileList(LPCTSTR pszDirectory, LPCTSTR pszFilter, std::vector 2) &&
-			( 0 != _stricmp( FindFileData.cFileName, "Replay"))) //  Replay   ʴ´
+			( 0 != _stricmp( FindFileData.cFileName, "Replay"))) //  Replay 폴더는 지우지 않는다
 		{
 			lstrcpy(buf,pszDirectory);
 			lstrcat(buf,_T("\\"));
@@ -541,7 +541,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 	else
 		h = ey - sy;
 
-	// distance = (w * w) + (h * h); // Ÿ
+	// distance = (w * w) + (h * h); // 거리
 	if (w > h)
 	{
 		d = (h << 1) - w;
@@ -570,7 +570,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 				default: return;
 			}
 
-			if (!f(px, py))	// false   Ǹ ߴ Ѵ.
+			if (!f(px, py))	// false 가 리턴 되면 중단 한다.
 			{
 				printf("putting error %d %d", px, py);
 				return;
@@ -604,7 +604,7 @@ void ProcessLine(int sx, int sy, int ex, int ey, _f f)
 				default: return;
 			}
 
-			if (!f(px, py))	// false   Ǹ ߴ Ѵ.
+			if (!f(px, py))	// false 가 리턴 되면 중단 한다.
 			{
 				printf("putting error %d %d", px, py);
 				return;
@@ -756,10 +756,10 @@ void ReadCollisionData(const char * c_pszFileName, int iBaseX, int iBaseY)
 
 								}
 							}
-							// 簢 ä⵵ սô
-							// 0 1 2 3 
+							// 사각형 채우기도 합시다
+							// 0 1 2 3 순서대로
 							// -- +- -+ ++
-							// ٵ y  ̳ʽ ϴ° ȮϽñ
+							// 근데 y 는 마이너스 취하는거 확인하시길
 							// TODO
 						}
 						break;
@@ -831,7 +831,7 @@ void ConvertAttribute(const char * c_pszCollisionDataFileName, const char * c_ps
 	printf("bx by %d %d\n", bx, by);
 	int x, y;
 
-	// ϴ Ӽ ʱȭ
+	// 일단 속성 초기화
 	for (y = 0; y < iMapHeight * (25600 / SECTREE_SIZE); ++y)
 	{
 		for (x = 0; x < iMapWidth * (25600 / SECTREE_SIZE); ++x)
diff --git a/src/game/text_file_loader.cpp b/src/game/text_file_loader.cpp
index 2b7a38b..aa83f77 100644
--- a/src/game/text_file_loader.cpp
+++ b/src/game/text_file_loader.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "../../common/stl.h"
 #include "text_file_loader.h"
 
diff --git a/src/game/text_file_loader.h b/src/game/text_file_loader.h
index 5315f73..e82a292 100644
--- a/src/game/text_file_loader.h
+++ b/src/game/text_file_loader.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_TEXTFILELOADER_H__
+#ifndef __INC_METIN_II_TEXTFILELOADER_H__
 #define __INC_METIN_II_TEXTFILELOADER_H__
 
 #include "../../common/d3dtype.h"
diff --git a/src/game/threeway_war.cpp b/src/game/threeway_war.cpp
index ece59fc..136dcba 100644
--- a/src/game/threeway_war.cpp
+++ b/src/game/threeway_war.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "threeway_war.h"
 
@@ -323,13 +323,13 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 	if (NULL == pkKiller || true != pkKiller->IsPC())
 		return;
 
-	//    
+	// 같은 제국은 계산하지 않음
 	if (pChar->GetEmpire() == pkKiller->GetEmpire())
 		return;
 
 	int nKillScore = GetKillScore(pkKiller->GetEmpire());
 
-	//  ų ھ -1ϰ Ẕ̇⶧  üũ ϸ ȵȴ.
+	// 제국 킬 스코어가 -1일경우는 탈락국가이기때문에 점수 체크를 하면 안된다.
 	if (nKillScore >= 0)
 	{
 		nKillScore += GetKillValue(pChar->GetLevel());
@@ -340,7 +340,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 	{
 		char szBuf[64 + 1];
 
-		snprintf(szBuf, sizeof(szBuf), LC_TEXT(" ھ ż:%d õ:%d 뱹:%d"),
+		snprintf(szBuf, sizeof(szBuf), LC_TEXT("현재 스코어 신수국:%d 천조국:%d 진노국:%d"),
 				GetKillScore(1), GetKillScore(2), GetKillScore(3));
 
 		SendNoticeMap(szBuf, GetSungziMapIndex(), false);
@@ -366,7 +366,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 			return;
 
 		//----------------------
-		//īƮ ʱȭ 
+		//카운트 초기화 
 		//----------------------
 		SetKillScore(1, 0);
 		SetKillScore(2, 0);
@@ -376,7 +376,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 		quest::warp_all_to_map_my_empire_event_info * info;
 
 		//----------------------
-		//Ż  Ű :  
+		//탈락국가 퇴장 시키기 : 성지에서 
 		//----------------------
 		info = AllocEventInfo();
 
@@ -389,7 +389,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 		event_create(quest::warp_all_to_map_my_empire_event, info, PASSES_PER_SEC(10));
 
 		//----------------------
-		//Ż  Ű : ο 
+		//탈락국가 퇴장 시키기 : 통로에서 
 		//----------------------
 		info = AllocEventInfo();
 
@@ -402,30 +402,30 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 		event_create(quest::warp_all_to_map_my_empire_event, info, PASSES_PER_SEC(10));
 
 		//----------------------
-		// ñ   ̾߱⸦  !
+		//성지에 팅기는 국가에 대한 이야기를 마왕이 함!
 		//----------------------
 		const std::string Nation(EMPIRE_NAME(bLoseEmpire));
 		const std::string Script(
-				LC_TEXT(" :  ") +
+				LC_TEXT("성지의 마왕: 너희 ") +
 				Nation +
-				LC_TEXT("༮ ̰   ڰ Ҿ.   Ŷ~~[ENTER][ENTER] 10 Ŀ   ̵ϰ ˴ϴ. ") +
+				LC_TEXT("녀석들은 이곳 성지에 있을 자격을 잃었다. 모두 성지에서 물러나거라~~[ENTER][ENTER] 10초 후에 모두 마을로 이동하게 됩니다. ") +
 				"[ENTER][DONE]"
 				);
 
 		CHARACTER_MANAGER::instance().SendScriptToMap(pChar->GetMapIndex(), Script);
 
 		//----------------------
-		//  ѹ .
+		// 공지 한방 날려줌.
 		//----------------------
 		char szNotice[512+1];
-		snprintf(szNotice, sizeof(szNotice), LC_TEXT("Ÿ  %s   Ż Ͽϴ"), Nation.c_str());
+		snprintf(szNotice, sizeof(szNotice), LC_TEXT("삼거리 전투에서 %s 국가가 가장먼저 탈락을 하였습니다"), Nation.c_str());
 		BroadcastNotice(szNotice);
 
 		snprintf(szNotice, sizeof(szNotice), "First Step: %s exclusion", Nation.c_str());
 		LogManager::instance().CharLog(0, 0, 0, 0, "THREEWAY", szNotice, NULL);
 
 		//----------------------
-		//  Ѵ.
+		// 몹을 리젠한다.
 		//----------------------
 		regen_mob_event_info* regen_info = AllocEventInfo();
 
@@ -464,7 +464,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 				quest::warp_all_to_map_my_empire_event_info * info;
 
 				//----------------------
-				//Ż  Ű :  
+				//탈락국가 퇴장 시키기 : 성지에서 
 				//----------------------
 				info = AllocEventInfo();
 
@@ -477,7 +477,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 				event_create(quest::warp_all_to_map_my_empire_event, info, PASSES_PER_SEC(5));
 
 				//----------------------
-				//Ż  Ű : ο 
+				//탈락국가 퇴장 시키기 : 통로에서 
 				//----------------------
 				info = AllocEventInfo();
 
@@ -492,17 +492,17 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 		}
 
 		//------------------------------
-		//  ھ ǥ 
+		// 최종 스코어 표시 
 		//------------------------------
 		{
 			char szBuf[64 + 1];
-			snprintf(szBuf, sizeof(szBuf), LC_TEXT(" ھ ż:%d õ:%d 뱹:%d"),
+			snprintf(szBuf, sizeof(szBuf), LC_TEXT("현재 스코어 신수국:%d 천조국:%d 진노국:%d"),
 					GetKillScore(1), GetKillScore(2), GetKillScore(3));
 
 			SendNoticeMap(szBuf, GetSungziMapIndex(), false);
 		}
 
-		// ޼ ش.
+		// 메세지를 띄워준다.
 		LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap(pChar->GetMapIndex());
 
 		if (NULL != pSecMap)
@@ -510,7 +510,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 			const std::string EmpireName(EMPIRE_NAME(nVictoryEmpireIndex));
 			const std::string Script(
 					EmpireName +
-					LC_TEXT(".   ȣڸ  ȴٸ    ȴ.[ENTER][ENTER] ") +
+					LC_TEXT(". 너희가 성지의 수호자를 잡게 된다면 너희는 성지의 주인이 된다.[ENTER][ENTER] ") +
 					"[ENTER][DONE]");
 
 			struct packet_script pack_script;
@@ -534,7 +534,7 @@ void CThreeWayWar::onDead(LPCHARACTER pChar, LPCHARACTER pkKiller)
 		}
 
 		//------------------------------
-		//   : ȣ ȯ 
+		// 마지막 보상 : 진구미호 소환 
 		//-----------------------------	
 		for (int n = 0; n < quest::CQuestManager::instance().GetEventFlag("threeway_war_boss_count");)
 		{
diff --git a/src/game/threeway_war.h b/src/game/threeway_war.h
index 805b410..caeb142 100644
--- a/src/game/threeway_war.h
+++ b/src/game/threeway_war.h
@@ -1,4 +1,4 @@
-
+
 #ifndef THREE_WAY_WAR_EVENT_
 #define THREE_WAY_WAR_EVENT_
 
diff --git a/src/game/trigger.cpp b/src/game/trigger.cpp
index 73db88b..35f6127 100644
--- a/src/game/trigger.cpp
+++ b/src/game/trigger.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "utils.h"
 #include "config.h"
 #include "char.h"
@@ -46,7 +46,7 @@ int OnClickShop(TRIGGERPARAM)
 }
 
 /*
- *  AI Լ BattleAI Ŭ 
+ * 몬스터 AI 함수들을 BattleAI 클래스로 수정
  */
 int OnIdleDefault(TRIGGERPARAM)
 {
@@ -100,7 +100,7 @@ class FuncFindMobVictim
 					pkChr->IsAffectFlag(AFF_REVIVE_INVISIBLE))
 				return false;
 
-			if (pkChr->IsAffectFlag(AFF_TERROR) && m_pkChr->IsImmune(IMMUNE_TERROR) == false )	//  ó
+			if (pkChr->IsAffectFlag(AFF_TERROR) && m_pkChr->IsImmune(IMMUNE_TERROR) == false )	// 공포 처리
 			{
 				if ( pkChr->GetLevel() >= m_pkChr->GetLevel() )
 					return false;
@@ -137,7 +137,7 @@ class FuncFindMobVictim
 
 		LPCHARACTER GetVictim()
 		{
-			// ó ǹ ְ ǰ  ִٸ ǹ Ѵ. ǹ ־ ǹ 
+			// 근처에 건물이 있고 피가 많이 있다면 건물을 공격한다. 건물만 있어도 건물을 공격
 			if (m_pkChrBuilding && m_pkChr->GetHP() * 2 > m_pkChr->GetMaxHP() || !m_pkChrVictim)
 			{
 				return m_pkChrBuilding;
diff --git a/src/game/typedef.h b/src/game/typedef.h
index da2e046..63a2a6d 100644
--- a/src/game/typedef.h
+++ b/src/game/typedef.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_TYPEDEF_H__
+#ifndef __INC_METIN_II_GAME_TYPEDEF_H__
 #define __INC_METIN_II_GAME_TYPEDEF_H__
 
 class DESC;
diff --git a/src/game/unique_item.h b/src/game/unique_item.h
index f3b0990..4bcce49 100644
--- a/src/game/unique_item.h
+++ b/src/game/unique_item.h
@@ -1,4 +1,4 @@
-
+
 #ifndef __INC_METIN2_UNIQUE_ITEM_H
 #define __INC_METIN2_UNIQUE_ITEM_H
 
@@ -40,13 +40,13 @@ enum
 
 	ITEM_GIVE_STAT_RESET_COUNT_VNUM = 70014,
 	ITEM_SKILLFORGET_VNUM = 70037,
-	ITEM_SKILLFORGET2_VNUM = 70055,		// 7, 8 ų 
+	ITEM_SKILLFORGET2_VNUM = 70055,		// 7, 8 스킬 망각서
 
-	UNIQUE_ITEM_FISH_MIND = 71008,		// 
-	UNIQUE_ITEM_SAFEBOX_EXPAND = 71009,		// âȮ
-	UNIQUE_ITEM_AUTOLOOT_GOLD = 71010,		// 3 
-	UNIQUE_ITEM_EMOTION_MASK = 71011,	//  
-	UNIQUE_ITEM_EMOTION_MASK2 = 71033,	//  
+	UNIQUE_ITEM_FISH_MIND = 71008,		// 월간어심
+	UNIQUE_ITEM_SAFEBOX_EXPAND = 71009,		// 창고확장권
+	UNIQUE_ITEM_AUTOLOOT_GOLD = 71010,		// 제3의 손
+	UNIQUE_ITEM_EMOTION_MASK = 71011,	// 열정의 가면
+	UNIQUE_ITEM_EMOTION_MASK2 = 71033,	// 열정의 가면
 
 	ITEM_NEW_YEAR_GREETING_VNUM = 50023,
 
@@ -106,11 +106,11 @@ enum
 
 	REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE = 76007,
 	
-	// ȥ  Ȯ ִ 
+	// 용혼석 추출 확률을 높여주는 아이템
 	DRAGON_SOUL_EXTRACTOR_GROUP = 10600,
-	//  ִ 
+	// 용심 추출해주는 아이템
 	DRAGON_HEART_EXTRACTOR_GROUP = 10601,
-	// ȥ   ִ .
+	// 용혼석에서 추출할 때 주는 용심.
 	DRAGON_HEART_VNUM = 100000,
 };
 
diff --git a/src/game/utils.h b/src/game/utils.h
index 4b1146d..ca2fd93 100644
--- a/src/game/utils.h
+++ b/src/game/utils.h
@@ -1,4 +1,4 @@
-
+
 #ifndef __INC_METIN_II_UTILS_H__
 #define __INC_METIN_II_UTILS_H__
 
diff --git a/src/game/vector.cpp b/src/game/vector.cpp
index 15d9726..8aea124 100644
--- a/src/game/vector.cpp
+++ b/src/game/vector.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #include "vector.h"
 
diff --git a/src/game/vector.h b/src/game/vector.h
index 81463e1..1b8a051 100644
--- a/src/game/vector.h
+++ b/src/game/vector.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GAME_VECTOR_H__
+#ifndef __INC_METIN_II_GAME_VECTOR_H__
 #define __INC_METIN_II_GAME_VECTOR_H__
 
 typedef struct SVector
diff --git a/src/game/version.cpp b/src/game/version.cpp
index fc2d98f..eb26bee 100644
--- a/src/game/version.cpp
+++ b/src/game/version.cpp
@@ -1,4 +1,4 @@
-#include 
+#include 
 
 void WriteVersion()
 {
diff --git a/src/game/vid.h b/src/game/vid.h
index 25b81dc..9cb15b7 100644
--- a/src/game/vid.h
+++ b/src/game/vid.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_VID_H__
+#ifndef __INC_METIN_II_VID_H__
 #define __INC_METIN_II_VID_H__
 
 class VID
diff --git a/src/game/war_map.cpp b/src/game/war_map.cpp
index 6d26f17..fea7b2f 100644
--- a/src/game/war_map.cpp
+++ b/src/game/war_map.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "war_map.h"
 #include "sectree_manager.h"
 #include "char.h"
@@ -304,7 +304,7 @@ void CWarMap::STeamData::AppendMember(LPCHARACTER ch)
 
 void CWarMap::STeamData::RemoveMember(LPCHARACTER ch)
 {
-	// set_pidJoiner   ο ϱ   ʴ´
+	// set_pidJoiner 는 누적 인원을 계산하기 때문에 제거하지 않는다
 	--iMemberCount;
 }
 
@@ -382,8 +382,8 @@ void CWarMap::IncMember(LPCHARACTER ch)
 		++m_iObserverCount; 
 		sys_log(0, "WarMap +o %d", m_iObserverCount);
 		ch->SetObserverMode(true);
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ϼ̽ϴ."));
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ Ͻø    ִ < > ư ɴϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("관전 모드로 길드전에 참가하셨습니다."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자신을 선택하시면 밖으로 나갈 수 있는 <관람 종료> 버튼이 나옵니다."));
 	}
 
 	UpdateUserCount();
@@ -480,8 +480,8 @@ void CWarMap::CheckWarEnd()
 		if (m_pkTimeoutEvent)
 			return;
 
-		Notice(LC_TEXT("    ƹ ϴ."));
-		Notice(LC_TEXT("1 ̳ ƹ    ڵ ˴ϴ."));
+		Notice(LC_TEXT("길드전에 참가한 상대방 길드원이 아무도 없습니다."));
+		Notice(LC_TEXT("1분 이내에 아무도 접속하지 않으면 길드전이 자동 종료됩니다."));
 
 		sys_log(0, "CheckWarEnd: Timeout begin %u vs %u", m_TeamData[0].dwID, m_TeamData[1].dwID);
 
@@ -523,7 +523,7 @@ void CWarMap::Timeout()
 
 	if (get_dword_time() - m_dwStartTime < 60000 * 5)
 	{
-		Notice(LC_TEXT("  Ǿ ºη  Ǿϴ. (5  )"));
+		Notice(LC_TEXT("길드전이 일찍 종료되어 무승부로 판정 되었습니다. (5분이 지나지 않음)"));
 		dwWinner = 0;
 		dwLoser = 0;
 	}
@@ -688,11 +688,11 @@ bool CWarMap::CheckScore()
 	if (m_bEnded)
 		return true;
 
-	// 30   ȮѴ.
+	// 30초 이후 부터 확인한다.
 	if (get_dword_time() - m_dwStartTime < 30000)
 		return false;
 
-	//   üũ ʴ´.
+	// 점수가 같으면 체크하지 않는다.
 	if (m_TeamData[0].iScore == m_TeamData[1].iScore)
 		return false;
 
diff --git a/src/game/war_map.h b/src/game/war_map.h
index b87da03..113e3fb 100644
--- a/src/game/war_map.h
+++ b/src/game/war_map.h
@@ -1,4 +1,4 @@
-#ifndef __GUILD_WAR_MAP_MANAGER_H
+#ifndef __GUILD_WAR_MAP_MANAGER_H
 #define __GUILD_WAR_MAP_MANAGER_H
 
 #include "constants.h"
@@ -68,7 +68,7 @@ class CWarMap
 		DWORD	GetWinnerGuild();
 		void	UsePotion(LPCHARACTER ch, LPITEM item);
 
-		void	Draw();	//  º ó
+		void	Draw();	// 강제 무승부 처리
 		void	Timeout();
 		void	CheckWarEnd();
 		bool	SetEnded();
@@ -125,8 +125,8 @@ class CWarMap
 
 			void Initialize();
 
-			int GetAccumulatedJoinerCount(); //   
-			int GetCurJointerCount(); //   
+			int GetAccumulatedJoinerCount(); // 누적된 참가자 수
+			int GetCurJointerCount(); // 현재 참가자 수
 
 			void AppendMember(LPCHARACTER ch);
 			void RemoveMember(LPCHARACTER ch);
diff --git a/src/game/wedding.cpp b/src/game/wedding.cpp
index 7dc71c1..ece0fc0 100644
--- a/src/game/wedding.cpp
+++ b/src/game/wedding.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "desc_client.h"
 #include "desc_manager.h"
 #include "char_manager.h"
@@ -78,8 +78,8 @@ namespace marriage
 
 		m_pEndEvent = event_create(wedding_end_event, info, PASSES_PER_SEC(5));
 
-		Notice(LC_TEXT("ȥ ˴ϴ."));
-		Notice(LC_TEXT("ڵ Ե˴ϴ."));
+		Notice(LC_TEXT("결혼식이 종료됩니다."));
+		Notice(LC_TEXT("자동으로 나가게됩니다."));
 
 		for (itertype(m_set_pkChr) it = m_set_pkChr.begin(); it != m_set_pkChr.end(); ++it)
 		{
@@ -87,7 +87,7 @@ namespace marriage
 			if (ch->GetPlayerID() == dwPID1 || ch->GetPlayerID() == dwPID2)
 				continue;
 
-			if (ch->GetLevel() < 10) // 10 ϴ ʴ´.
+			if (ch->GetLevel() < 10) // 10 레벨이하는 주지않는다.
 				continue;
 
 			//ch->AutoGiveItem(27003, 5);
@@ -122,9 +122,9 @@ namespace marriage
 		{
 			if (ch->IsPC())
 			{
-				// ExitToSavedLocation WarpSet θµ  Լ
-				// Sectree NULL ȴ.   SectreeManager ʹ
-				//  ij͸ ã  Ƿ Ʒ DestroyAll  ó
+				// ExitToSavedLocation은 WarpSet을 부르는데 이 함수에서
+				// Sectree가 NULL이 된다. 추 후 SectreeManager로 부터는
+				// 이 캐릭터를 찾을 수 없으므로 아래 DestroyAll에서 별도 처리함
 				ch->ExitToSavedLocation();
 			}
 		}
diff --git a/src/game/wedding.h b/src/game/wedding.h
index 0125a7e..7aa7c51 100644
--- a/src/game/wedding.h
+++ b/src/game/wedding.h
@@ -1,4 +1,4 @@
-#ifndef __WEDDING_H
+#ifndef __WEDDING_H
 #define __WEDDING_H
 
 #include "marriage.h"
diff --git a/src/game/xmas_event.cpp b/src/game/xmas_event.cpp
index 511ba2b..456bfef 100644
--- a/src/game/xmas_event.cpp
+++ b/src/game/xmas_event.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "config.h"
 #include "xmas_event.h"
 #include "desc.h"
@@ -14,7 +14,7 @@ namespace xmas
 	{
 		if (name == "xmas_snow" || name == "xmas_boom" || name == "xmas_song" || name == "xmas_tree")
 		{
-			// ѷش
+			// 뿌려준다
 			const DESC_MANAGER::DESC_SET & c_ref_set = DESC_MANAGER::instance().GetClientSet();
 
 			for (itertype(c_ref_set) it = c_ref_set.begin(); it != c_ref_set.end(); ++it)
@@ -44,13 +44,13 @@ namespace xmas
 				{
 					CharacterVectorInteractor i;
 
-					//  ش
+					// 없으면 만들어준다
 					if (!CHARACTER_MANAGER::instance().GetCharactersByRaceNum(MOB_XMAS_TREE_VNUM, i))
 						CHARACTER_MANAGER::instance().SpawnMob(MOB_XMAS_TREE_VNUM, 61, 76500 + 358400, 60900 + 153600, 0, false, -1);
 				}
 				else if (prev_value > 0 && value == 0)
 				{
-					//  ش
+					// 있으면 지워준다
 					CharacterVectorInteractor i;
 
 					if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(MOB_XMAS_TREE_VNUM, i))
@@ -68,7 +68,7 @@ namespace xmas
 			switch (value)
 			{
 				case 0:
-					//   ڵ
+					// 있으면 지우는 코드
 					{
 						CharacterVectorInteractor i;
 
@@ -84,7 +84,7 @@ namespace xmas
 					break;
 
 				case 1:
-					//  ѻ̸ Ÿ   ¸ 2 .
+					// 내가 서한산이면 산타 없으면 만들고 상태를 2로 만든다.
 					if (map_allow_find(61))
 					{
 						quest::CQuestManager::instance().RequestSetEventFlag("xmas_santa", 2);
@@ -160,7 +160,7 @@ namespace xmas
 	{
 		if ( spawn == true )
 		{
-			//  ش
+			// 없으면 만들어준다
 			struct SNPCSellFireworkPosition
 			{
 				long lMapIndex;
@@ -199,7 +199,7 @@ namespace xmas
 		{
 			CharacterVectorInteractor i;
 
-			//  ش
+			// 있으면 지워준다
 			if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(MOB_XMAS_FIRWORK_SELLER_VNUM, i))
 			{
 				CharacterVectorInteractor::iterator it = i.begin();
diff --git a/src/libgame/attribute.cpp b/src/libgame/attribute.cpp
index b98ecae..150564d 100644
--- a/src/libgame/attribute.cpp
+++ b/src/libgame/attribute.cpp
@@ -1,4 +1,4 @@
-#include "libthecore/stdafx.h"
+#include "libthecore/stdafx.h"
 #include "attribute.h"
 
 #define SET_BIT(var,bit)                ((var) |= (bit))
@@ -85,13 +85,13 @@ void CAttribute::Alloc()
     }
 }
 
-CAttribute::CAttribute(DWORD width, DWORD height) // dword Ÿ  0 ä.
+CAttribute::CAttribute(DWORD width, DWORD height) // dword 타잎으로 모두 0을 채운다.
 {
     Initialize(width, height);
     Alloc();
 }
 
-CAttribute::CAttribute(DWORD * attr, DWORD width, DWORD height) // attr о smartϰ Ӽ о´.
+CAttribute::CAttribute(DWORD * attr, DWORD width, DWORD height) // attr을 읽어서 smart하게 속성을 읽어온다.
 {
     Initialize(width, height);
 
@@ -102,7 +102,7 @@ CAttribute::CAttribute(DWORD * attr, DWORD width, DWORD height) // attr
 	if (attr[0] != attr[i])
 	    break;
 
-    // Ӽ    defaultAttr Ѵ.
+    // 속성이 전부 같으면 단지 defaultAttr만 설정한다.
     if (i == size)
 	defaultAttr = attr[0];
     else
@@ -112,22 +112,22 @@ CAttribute::CAttribute(DWORD * attr, DWORD width, DWORD height) // attr
 	for (i = 0; i < size; ++i)
 	    allAttr |= attr[i];
 
-	//  8Ʈ   D_BYTE
+	// 하위 8비트만 사용할 경우 D_BYTE
 	if (!(allAttr & 0xffffff00))
 	    dataType = D_BYTE;
-	//  16Ʈ   D_WORD
+	// 하위 16비트만 사용할 경우 D_WORD
 	else if (!(allAttr & 0xffff0000))
 	    dataType = D_WORD;
-	else //  ̿ܿ D_DWORD
+	else // 그 이외에는 D_DWORD
 	    dataType = D_DWORD;
 
 	Alloc();
 
-	if (dataType == D_DWORD) // D_DWORD   Ӽ Ƿ  .
+	if (dataType == D_DWORD) // D_DWORD일 때는 원본 속성과 같으므로 단지 복사.
 	    thecore_memcpy(data, attr, sizeof(DWORD) * width * height);
 	else
 	{
-	    // ƴϸ Ʈ ؾ Ѵ.
+	    // 아니면 컨버트 해야 한다.
 	    DWORD * pdw = (DWORD *) attr;
 
 	    if (dataType == D_BYTE)
@@ -199,7 +199,7 @@ void CAttribute::Remove(DWORD x, DWORD y, DWORD attr)
     if (x > width || y > height)
 	return;
 
-    if (!data) // Ӽ    Ͱ  ׳ Ѵ.
+    if (!data) // 속성을 삭제할 때 만약 데이터가 없으면 그냥 리턴한다.
 	return;
 
     if (bytePtr)
diff --git a/src/libgame/attribute.h b/src/libgame/attribute.h
index 33d22fd..597a87a 100644
--- a/src/libgame/attribute.h
+++ b/src/libgame/attribute.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_ATTRIBUTE_H__
+#ifndef __INC_METIN_II_ATTRIBUTE_H__
 #define __INC_METIN_II_ATTRIBUTE_H__
 
 enum EDataType
@@ -9,13 +9,13 @@ enum EDataType
 };
 
 //
-//  Ӽ ó  
+// 맵 속성들을 처리할 때 사용
 //
 class CAttribute
 {
     public:
-	CAttribute(DWORD width, DWORD height); // dword Ÿ  0 ä.
-	CAttribute(DWORD * attr, DWORD width, DWORD height); // attr о smartϰ Ӽ о´.
+	CAttribute(DWORD width, DWORD height); // dword 타잎으로 모두 0을 채운다.
+	CAttribute(DWORD * attr, DWORD width, DWORD height); // attr을 읽어서 smart하게 속성을 읽어온다.
 	~CAttribute();
 	void Alloc();
 	int GetDataType();
diff --git a/src/libgame/grid.cpp b/src/libgame/grid.cpp
index 834d734..f198bc0 100644
--- a/src/libgame/grid.cpp
+++ b/src/libgame/grid.cpp
@@ -1,4 +1,4 @@
-#include 
+#include 
 #include 
 #include "libthecore/memcpy.h"
 #include "common/stl.h"
@@ -29,7 +29,7 @@ void CGrid::Clear()
 
 int CGrid::FindBlank(int w, int h)
 {
-    // ũⰡ  ũٸ Ȯ ʿ  ׳ 
+    // 크기가 더 크다면 확인할 필요 없이 그냥 리턴
     if (w > m_iWidth || h > m_iHeight)
 	return -1;
 
@@ -90,7 +90,7 @@ bool CGrid::IsEmpty(int iPos, int w, int h)
 
     int iRow = iPos / m_iWidth;
 
-    // Grid ΰ  ˻
+    // Grid 안쪽인가를 먼저 검사
     if (iRow + h > m_iHeight)
 	return false;
 
diff --git a/src/libgame/grid.h b/src/libgame/grid.h
index 2e22471..0b05cbd 100644
--- a/src/libgame/grid.h
+++ b/src/libgame/grid.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_GRID_H__
+#ifndef __INC_METIN_II_GRID_H__
 #define __INC_METIN_II_GRID_H__
 
 class CGrid
diff --git a/src/libgame/targa.cpp b/src/libgame/targa.cpp
index 5481543..81f67b9 100644
--- a/src/libgame/targa.cpp
+++ b/src/libgame/targa.cpp
@@ -1,4 +1,4 @@
-#include "libthecore/stdafx.h"
+#include "libthecore/stdafx.h"
 #include 
 #include 
 #include "targa.h"
diff --git a/src/libgame/targa.h b/src/libgame/targa.h
index bf0a18f..4f34a88 100644
--- a/src/libgame/targa.h
+++ b/src/libgame/targa.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_SERVER_TARGA_H__
+#ifndef __INC_METIN_II_SERVER_TARGA_H__
 #define __INC_METIN_II_SERVER_TARGA_H__
 
 #pragma pack(1)
@@ -6,11 +6,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/liblua/include/lauxlib.h b/src/liblua/include/lauxlib.h
index 450e16c..2e059bc 100644
--- a/src/liblua/include/lauxlib.h
+++ b/src/liblua/include/lauxlib.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lauxlib.h,v 1.60 2003/04/03 13:35:34 roberto Exp $
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/include/lua.h b/src/liblua/include/lua.h
index bd4acc9..dc39823 100644
--- a/src/liblua/include/lua.h
+++ b/src/liblua/include/lua.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lua.h,v 1.175c 2003/03/18 12:31:39 roberto Exp $
 ** Lua - An Extensible Extension Language
 ** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
diff --git a/src/liblua/include/lualib.h b/src/liblua/include/lualib.h
index e22c4c3..f757f20 100644
--- a/src/liblua/include/lualib.h
+++ b/src/liblua/include/lualib.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lualib.h,v 1.28 2003/03/18 12:24:26 roberto Exp $
 ** Lua standard libraries
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lapi.c b/src/liblua/src/lapi.c
index 2ed4c63..58c9068 100644
--- a/src/liblua/src/lapi.c
+++ b/src/liblua/src/lapi.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lapi.c,v 1.235a 2003/04/07 14:36:08 roberto Exp $
 ** Lua API
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lapi.h b/src/liblua/src/lapi.h
index d12612f..7964dfe 100644
--- a/src/liblua/src/lapi.h
+++ b/src/liblua/src/lapi.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lapi.h,v 1.21 2002/03/04 21:29:41 roberto Exp $
 ** Auxiliary functions from Lua API
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lcode.c b/src/liblua/src/lcode.c
index 3925c97..c96e122 100644
--- a/src/liblua/src/lcode.c
+++ b/src/liblua/src/lcode.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lcode.c,v 1.117a 2003/04/03 13:35:34 roberto Exp $
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lcode.h b/src/liblua/src/lcode.h
index 74908c6..43e819a 100644
--- a/src/liblua/src/lcode.h
+++ b/src/liblua/src/lcode.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lcode.h,v 1.38 2002/12/11 12:34:22 roberto Exp $
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ldebug.c b/src/liblua/src/ldebug.c
index 8e511e3..fd83a78 100644
--- a/src/liblua/src/ldebug.c
+++ b/src/liblua/src/ldebug.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldebug.c,v 1.150 2003/03/19 21:24:04 roberto Exp $
 ** Debug Interface
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ldebug.h b/src/liblua/src/ldebug.h
index 7ff3958..33f9a00 100644
--- a/src/liblua/src/ldebug.h
+++ b/src/liblua/src/ldebug.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldebug.h,v 1.32 2002/11/18 11:01:55 roberto Exp $
 ** Auxiliary functions from Debug Interface module
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ldo.c b/src/liblua/src/ldo.c
index a6d344c..669c0f5 100644
--- a/src/liblua/src/ldo.c
+++ b/src/liblua/src/ldo.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldo.c,v 1.217a 2003/04/03 13:35:34 roberto Exp $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ldo.h b/src/liblua/src/ldo.h
index 2a61bf5..1796941 100644
--- a/src/liblua/src/ldo.h
+++ b/src/liblua/src/ldo.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldo.h,v 1.56 2002/12/04 17:29:32 roberto Exp $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ldump.c b/src/liblua/src/ldump.c
index 234b011..9c88728 100644
--- a/src/liblua/src/ldump.c
+++ b/src/liblua/src/ldump.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldump.c,v 1.4 2003/02/11 23:52:12 lhf Exp $
 ** save bytecodes
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lfunc.c b/src/liblua/src/lfunc.c
index 6d75e72..4a03e1b 100644
--- a/src/liblua/src/lfunc.c
+++ b/src/liblua/src/lfunc.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lfunc.c,v 1.67a 2003/03/18 12:50:04 roberto Exp $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lfunc.h b/src/liblua/src/lfunc.h
index dc61e2e..868e685 100644
--- a/src/liblua/src/lfunc.h
+++ b/src/liblua/src/lfunc.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lfunc.h,v 1.21a 2003/03/18 12:50:04 roberto Exp $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lgc.c b/src/liblua/src/lgc.c
index b44f201..9de39eb 100644
--- a/src/liblua/src/lgc.c
+++ b/src/liblua/src/lgc.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lgc.c,v 1.171b 2003/04/03 13:35:34 roberto Exp $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lgc.h b/src/liblua/src/lgc.h
index 3f4d748..b3cf35a 100644
--- a/src/liblua/src/lgc.h
+++ b/src/liblua/src/lgc.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lgc.h,v 1.19a 2003/02/28 19:45:15 roberto Exp $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/lauxlib.c b/src/liblua/src/lib/lauxlib.c
index ee2d133..16e6fa6 100644
--- a/src/liblua/src/lib/lauxlib.c
+++ b/src/liblua/src/lib/lauxlib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lauxlib.c,v 1.100 2003/04/07 14:35:00 roberto Exp $
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/lbaselib.c b/src/liblua/src/lib/lbaselib.c
index fb26a54..e6f3fe3 100644
--- a/src/liblua/src/lib/lbaselib.c
+++ b/src/liblua/src/lib/lbaselib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lbaselib.c,v 1.130c 2003/04/03 13:35:34 roberto Exp $
 ** Basic library
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/ldblib.c b/src/liblua/src/lib/ldblib.c
index 6dc9b64..0f85490 100644
--- a/src/liblua/src/lib/ldblib.c
+++ b/src/liblua/src/lib/ldblib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ldblib.c,v 1.80 2003/04/03 13:35:34 roberto Exp $
 ** Interface from Lua to its debug API
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/liolib.c b/src/liblua/src/lib/liolib.c
index bcadcdf..af197e2 100644
--- a/src/liblua/src/lib/liolib.c
+++ b/src/liblua/src/lib/liolib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: liolib.c,v 2.39b 2003/03/19 21:16:12 roberto Exp $
 ** Standard I/O (and system) library
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/lmathlib.c b/src/liblua/src/lib/lmathlib.c
index f074a56..a8e208e 100644
--- a/src/liblua/src/lib/lmathlib.c
+++ b/src/liblua/src/lib/lmathlib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lmathlib.c,v 1.56 2003/03/11 12:30:37 roberto Exp $
 ** Standard mathematical library
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/loadlib.c b/src/liblua/src/lib/loadlib.c
index ac4d697..f82c6eb 100644
--- a/src/liblua/src/lib/loadlib.c
+++ b/src/liblua/src/lib/loadlib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: loadlib.c,v 1.4 2003/04/07 20:11:53 roberto Exp $
 ** Dynamic library loader for Lua
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/lstrlib.c b/src/liblua/src/lib/lstrlib.c
index 8752e3a..2d97fe6 100644
--- a/src/liblua/src/lib/lstrlib.c
+++ b/src/liblua/src/lib/lstrlib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lstrlib.c,v 1.98 2003/04/03 13:35:34 roberto Exp $
 ** Standard library for string operations and pattern-matching
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lib/ltablib.c b/src/liblua/src/lib/ltablib.c
index c9bb2d1..cef942a 100644
--- a/src/liblua/src/lib/ltablib.c
+++ b/src/liblua/src/lib/ltablib.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltablib.c,v 1.21 2003/04/03 13:35:34 roberto Exp $
 ** Library for Table Manipulation
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/llex.c b/src/liblua/src/llex.c
index 053837b..4a6d920 100644
--- a/src/liblua/src/llex.c
+++ b/src/liblua/src/llex.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: llex.c,v 1.119 2003/03/24 12:39:34 roberto Exp $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/llex.h b/src/liblua/src/llex.h
index a42eb09..75c92d7 100644
--- a/src/liblua/src/llex.h
+++ b/src/liblua/src/llex.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: llex.h,v 1.47 2003/02/28 17:19:47 roberto Exp $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/llimits.h b/src/liblua/src/llimits.h
index 343c922..9684b76 100644
--- a/src/liblua/src/llimits.h
+++ b/src/liblua/src/llimits.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: llimits.h,v 1.52 2003/02/20 19:33:23 roberto Exp $
 ** Limits, basic types, and some other `installation-dependent' definitions
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lmem.c b/src/liblua/src/lmem.c
index f977770..acbdafa 100644
--- a/src/liblua/src/lmem.c
+++ b/src/liblua/src/lmem.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lmem.c,v 1.61 2002/12/04 17:38:31 roberto Exp $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lmem.h b/src/liblua/src/lmem.h
index 1bb4fde..3564478 100644
--- a/src/liblua/src/lmem.h
+++ b/src/liblua/src/lmem.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lmem.h,v 1.26 2002/05/01 20:40:42 roberto Exp $
 ** Interface to Memory Manager
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lobject.c b/src/liblua/src/lobject.c
index 9522b6e..dbdf8e8 100644
--- a/src/liblua/src/lobject.c
+++ b/src/liblua/src/lobject.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lobject.c,v 1.97 2003/04/03 13:35:34 roberto Exp $
 ** Some generic functions over Lua objects
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lobject.h b/src/liblua/src/lobject.h
index 321a7e0..1a64e7a 100644
--- a/src/liblua/src/lobject.h
+++ b/src/liblua/src/lobject.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lobject.h,v 1.159 2003/03/18 12:50:04 roberto Exp $
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lopcodes.c b/src/liblua/src/lopcodes.c
index 993e426..445eebb 100644
--- a/src/liblua/src/lopcodes.c
+++ b/src/liblua/src/lopcodes.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lopcodes.c,v 1.22 2002/12/04 17:38:31 roberto Exp $
 ** extracted automatically from lopcodes.h by mkprint.lua
 ** DO NOT EDIT
diff --git a/src/liblua/src/lopcodes.h b/src/liblua/src/lopcodes.h
index 0b6b58f..955c5e4 100644
--- a/src/liblua/src/lopcodes.h
+++ b/src/liblua/src/lopcodes.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lopcodes.h,v 1.102 2002/08/21 18:56:09 roberto Exp $
 ** Opcodes for Lua virtual machine
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lparser.c b/src/liblua/src/lparser.c
index 99bd302..07094b4 100644
--- a/src/liblua/src/lparser.c
+++ b/src/liblua/src/lparser.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lparser.c,v 1.208a 2003/04/03 13:35:34 roberto Exp $
 ** Lua Parser
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lparser.h b/src/liblua/src/lparser.h
index d6aaaf0..626bdd0 100644
--- a/src/liblua/src/lparser.h
+++ b/src/liblua/src/lparser.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lparser.h,v 1.47 2003/02/11 10:46:24 roberto Exp $
 ** Lua Parser
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lstate.c b/src/liblua/src/lstate.c
index b593658..172fab2 100644
--- a/src/liblua/src/lstate.c
+++ b/src/liblua/src/lstate.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lstate.c,v 1.123 2003/04/03 13:35:34 roberto Exp $
 ** Global State
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lstate.h b/src/liblua/src/lstate.h
index 5422f1b..70b1255 100644
--- a/src/liblua/src/lstate.h
+++ b/src/liblua/src/lstate.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lstate.h,v 1.109 2003/02/27 11:52:30 roberto Exp $
 ** Global State
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lstring.c b/src/liblua/src/lstring.c
index 8cbddbd..0e84880 100644
--- a/src/liblua/src/lstring.c
+++ b/src/liblua/src/lstring.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lstring.c,v 1.78 2002/12/04 17:38:31 roberto Exp $
 ** String table (keeps all strings handled by Lua)
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lstring.h b/src/liblua/src/lstring.h
index be5a1e3..9401e39 100644
--- a/src/liblua/src/lstring.h
+++ b/src/liblua/src/lstring.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lstring.h,v 1.37 2002/08/16 14:45:55 roberto Exp $
 ** String table (keep all strings handled by Lua)
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ltable.c b/src/liblua/src/ltable.c
index 8fa4600..5bfffb4 100644
--- a/src/liblua/src/ltable.c
+++ b/src/liblua/src/ltable.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltable.c,v 1.132 2003/04/03 13:35:34 roberto Exp $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ltable.h b/src/liblua/src/ltable.h
index 3d4d753..b84047e 100644
--- a/src/liblua/src/ltable.h
+++ b/src/liblua/src/ltable.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltable.h,v 1.44 2003/03/18 12:50:04 roberto Exp $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ltests.c b/src/liblua/src/ltests.c
index 649b14e..277f514 100644
--- a/src/liblua/src/ltests.c
+++ b/src/liblua/src/ltests.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltests.c,v 1.158 2003/04/07 14:35:00 roberto Exp $
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ltm.c b/src/liblua/src/ltm.c
index 1b3e515..c360600 100644
--- a/src/liblua/src/ltm.c
+++ b/src/liblua/src/ltm.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltm.c,v 1.106 2003/04/03 13:35:34 roberto Exp $
 ** Tag methods
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/ltm.h b/src/liblua/src/ltm.h
index 8eebfd3..a1c72d9 100644
--- a/src/liblua/src/ltm.h
+++ b/src/liblua/src/ltm.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: ltm.h,v 1.41 2002/11/14 11:51:50 roberto Exp $
 ** Tag methods
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lua/lua.c b/src/liblua/src/lua/lua.c
index 28c84cb..fbf87a3 100644
--- a/src/liblua/src/lua/lua.c
+++ b/src/liblua/src/lua/lua.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lua.c,v 1.122 2003/04/03 13:34:42 roberto Exp $
 ** Lua stand-alone interpreter
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/luac/luac.c b/src/liblua/src/luac/luac.c
index 1aff0bd..c4400af 100644
--- a/src/liblua/src/luac/luac.c
+++ b/src/liblua/src/luac/luac.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: luac.c,v 1.44a 2003/04/07 20:34:20 lhf Exp $
 ** Lua compiler (saves bytecodes to files; also list bytecodes)
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/luac/print.c b/src/liblua/src/luac/print.c
index d0b5efb..5cb9786 100644
--- a/src/liblua/src/luac/print.c
+++ b/src/liblua/src/luac/print.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: print.c,v 1.44 2003/04/07 20:34:20 lhf Exp $
 ** print bytecodes
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lundump.c b/src/liblua/src/lundump.c
index 151a850..c0c2e9b 100644
--- a/src/liblua/src/lundump.c
+++ b/src/liblua/src/lundump.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lundump.c,v 1.49 2003/04/07 20:34:20 lhf Exp $
 ** load pre-compiled Lua chunks
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lundump.h b/src/liblua/src/lundump.h
index c7e6959..9762f23 100644
--- a/src/liblua/src/lundump.h
+++ b/src/liblua/src/lundump.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lundump.h,v 1.30 2003/04/07 20:34:20 lhf Exp $
 ** load pre-compiled Lua chunks
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lvm.c b/src/liblua/src/lvm.c
index 9513293..d98fb04 100644
--- a/src/liblua/src/lvm.c
+++ b/src/liblua/src/lvm.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lvm.c,v 1.284c 2003/04/03 13:35:34 roberto Exp $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lvm.h b/src/liblua/src/lvm.h
index 19cce20..754e2f5 100644
--- a/src/liblua/src/lvm.h
+++ b/src/liblua/src/lvm.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lvm.h,v 1.47 2002/11/14 16:16:21 roberto Exp $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lzio.c b/src/liblua/src/lzio.c
index 3aeca1c..83d1332 100644
--- a/src/liblua/src/lzio.c
+++ b/src/liblua/src/lzio.c
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lzio.c,v 1.24 2003/03/20 16:00:56 roberto Exp $
 ** a generic input stream interface
 ** See Copyright Notice in lua.h
diff --git a/src/liblua/src/lzio.h b/src/liblua/src/lzio.h
index 5e73615..5c918f5 100644
--- a/src/liblua/src/lzio.h
+++ b/src/liblua/src/lzio.h
@@ -1,4 +1,4 @@
-/*
+/*
 ** $Id: lzio.h,v 1.15 2003/03/20 16:00:56 roberto Exp $
 ** Buffered streams
 ** See Copyright Notice in lua.h
diff --git a/src/libpoly/Base.cpp b/src/libpoly/Base.cpp
index 3f85f67..bc8df64 100644
--- a/src/libpoly/Base.cpp
+++ b/src/libpoly/Base.cpp
@@ -1,4 +1,4 @@
-#include "Base.h"
+#include "Base.h"
 
 CBase::CBase()
 {
diff --git a/src/libpoly/Base.h b/src/libpoly/Base.h
index a7b0187..29169a7 100644
--- a/src/libpoly/Base.h
+++ b/src/libpoly/Base.h
@@ -1,4 +1,4 @@
-#ifndef __POLY_BASE_H__
+#ifndef __POLY_BASE_H__
 #define __POLY_BASE_H__
 
 #define MID_UNKNOWN		0
diff --git a/src/libpoly/Constants.h b/src/libpoly/Constants.h
index fe15561..c2e0dce 100644
--- a/src/libpoly/Constants.h
+++ b/src/libpoly/Constants.h
@@ -1,4 +1,4 @@
-#define MAXVALUE        0
+#define MAXVALUE        0
 #define NONE            MAXVALUE
 #define ROOT            MAXVALUE + 1
 #define MUL             MAXVALUE + 2
diff --git a/src/libpoly/Poly.cpp b/src/libpoly/Poly.cpp
index 2f4229b..449fb32 100644
--- a/src/libpoly/Poly.cpp
+++ b/src/libpoly/Poly.cpp
@@ -1,4 +1,4 @@
-#include 
+#include 
 #include "Poly.h"
 #include "Constants.h"
 #include 
diff --git a/src/libpoly/Poly.h b/src/libpoly/Poly.h
index c243159..5e679c2 100644
--- a/src/libpoly/Poly.h
+++ b/src/libpoly/Poly.h
@@ -1,4 +1,4 @@
-#ifndef __POLY_POLY_H__
+#ifndef __POLY_POLY_H__
 #define __POLY_POLY_H__
 
 #include "SymTable.h"
diff --git a/src/libpoly/SymTable.cpp b/src/libpoly/SymTable.cpp
index 6246ec7..3e53b8d 100644
--- a/src/libpoly/SymTable.cpp
+++ b/src/libpoly/SymTable.cpp
@@ -1,4 +1,4 @@
-#include "SymTable.h"
+#include "SymTable.h"
 
 using namespace std;
 
diff --git a/src/libpoly/SymTable.h b/src/libpoly/SymTable.h
index 50db283..61a083f 100644
--- a/src/libpoly/SymTable.h
+++ b/src/libpoly/SymTable.h
@@ -1,4 +1,4 @@
-#ifndef __POLY_SYMTABLE_H__
+#ifndef __POLY_SYMTABLE_H__
 #define __POLY_SYMTABLE_H__
 
 #include 
diff --git a/src/libpoly/Symbol.cpp b/src/libpoly/Symbol.cpp
index cb818c2..f58d430 100644
--- a/src/libpoly/Symbol.cpp
+++ b/src/libpoly/Symbol.cpp
@@ -1,4 +1,4 @@
-#include "Symbol.h"
+#include "Symbol.h"
 
 CSymbol::CSymbol()
 {
diff --git a/src/libpoly/Symbol.h b/src/libpoly/Symbol.h
index 427cfe5..204beb1 100644
--- a/src/libpoly/Symbol.h
+++ b/src/libpoly/Symbol.h
@@ -1,4 +1,4 @@
-#ifndef __POLY_SYMBOL_H__
+#ifndef __POLY_SYMBOL_H__
 #define __POLY_SYMBOL_H__
 
 #include "Base.h"
diff --git a/src/libpoly/main.cpp b/src/libpoly/main.cpp
index 145d12f..04f6763 100644
--- a/src/libpoly/main.cpp
+++ b/src/libpoly/main.cpp
@@ -1,4 +1,4 @@
-#ifdef OS_WINDOWS
+#ifdef OS_WINDOWS
 #include 
 #endif
 
diff --git a/src/libsql/AsyncSQL.cpp b/src/libsql/AsyncSQL.cpp
index c703991..84cd15b 100644
--- a/src/libsql/AsyncSQL.cpp
+++ b/src/libsql/AsyncSQL.cpp
@@ -1,4 +1,4 @@
-#ifndef OS_WINDOWS
+#ifndef OS_WINDOWS
 #include 
 #endif
 
@@ -145,10 +145,10 @@ bool CAsyncSQL::Connect()
 
 	fprintf(stdout, "AsyncSQL: connected to %s (reconnect %d)\n", m_stHost.c_str(), reconnect);
 
-	// db cache common db LOCALE ̺ locale ˾ƿ,  character set Ѵ.
-	//   Connection   locale 𸣱  character set    ұϰ,
-	//  character set euckr ϵ Ǿ־  κ ּó Ͽ.
-	// (Ʒ ּ Ǯ mysql euckr  ִ    .)
+	// db cache는 common db의 LOCALE 테이블에서 locale을 알아오고, 이후 character set을 수정한다.
+	// 따라서 최초 Connection을 맺을 때에는 locale을 모르기 때문에 character set을 정할 수가 없음에도 불구하고,
+	// 강제로 character set을 euckr로 정하도록 되어있어 이 부분을 주석처리 하였다.
+	// (아래 주석을 풀면 mysql에 euckr이 안 깔려있는 디비에 접근할 수가 없다.)
 	//while (!QueryLocaleSet());
 	m_ulThreadID = mysql_thread_id(&m_hDB);
 
@@ -529,7 +529,7 @@ class cProfiler
 
 void CAsyncSQL::ChildLoop()
 {
-	cProfiler profiler(500000); // 0.5
+	cProfiler profiler(500000); // 0.5초
 
 	while (!m_bEnd)
 	{
@@ -546,7 +546,7 @@ void CAsyncSQL::ChildLoop()
 
 		while (count--)
 		{
-			//ð üũ  
+			//시간 체크 시작 
 			profiler.Start();
 
 			if (!PeekQueryFromCopyQueue(&p))
@@ -591,7 +591,7 @@ void CAsyncSQL::ChildLoop()
 
 			profiler.Stop();
 			
-			// 0.5 ̻ ɷ α׿ 
+			// 0.5초 이상 걸렸으면 로그에 남기기
 			if (!profiler.IsOk())
 				sys_log(0, "[QUERY : LONG INTERVAL(OverSec %ld.%ld)] : %s", 
 						profiler.GetResultSec(), profiler.GetResultUSec(), p->stQuery.c_str());
@@ -693,9 +693,9 @@ size_t CAsyncSQL::EscapeString(char* dst, size_t dstSize, const char *src, size_
 
 	if (dstSize < srcSize * 2 + 1)
 	{
-		// \0 Ⱥپ  ؼ 256 Ʈ ؼ α׷ 
+		// \0이 안붙어있을 때를 대비해서 256 바이트만 복사해서 로그로 출력
 		char tmp[256];
-		size_t tmpLen = sizeof(tmp) > srcSize ? srcSize : sizeof(tmp); //  ߿  ũ
+		size_t tmpLen = sizeof(tmp) > srcSize ? srcSize : sizeof(tmp); // 둘 중에 작은 크기
 		std::strncpy(tmp, src, tmpLen);
 
 		sys_err("FATAL ERROR!! not enough buffer size (dstSize %u srcSize %u src%s: %s)",
diff --git a/src/libsql/Semaphore.cpp b/src/libsql/Semaphore.cpp
index e1ee6db..acad857 100644
--- a/src/libsql/Semaphore.cpp
+++ b/src/libsql/Semaphore.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "Semaphore.h"
 
 #ifndef OS_WINDOWS
diff --git a/src/libsql/Semaphore.h b/src/libsql/Semaphore.h
index 9b5921f..2d7817f 100644
--- a/src/libsql/Semaphore.h
+++ b/src/libsql/Semaphore.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_SEMAPHORE_H__
+#ifndef __INC_METIN_II_SEMAPHORE_H__
 #define __INC_METIN_II_SEMAPHORE_H__
 
 #ifndef OS_WINDOWS
diff --git a/src/libsql/Statement.cpp b/src/libsql/Statement.cpp
index 7515a2f..3863c51 100644
--- a/src/libsql/Statement.cpp
+++ b/src/libsql/Statement.cpp
@@ -1,4 +1,4 @@
-#include "Statement.h"
+#include "Statement.h"
 
 #include 
 #include 
diff --git a/src/libsql/Statement.h b/src/libsql/Statement.h
index 93baf13..681fdfb 100644
--- a/src/libsql/Statement.h
+++ b/src/libsql/Statement.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_LIBSQL_STATEMENT_H__
+#ifndef __INC_METIN_II_LIBSQL_STATEMENT_H__
 #define __INC_METIN_II_LIBSQL_STATEMENT_H__
 
 #include "AsyncSQL.h"
diff --git a/src/libsql/Tellwait.cpp b/src/libsql/Tellwait.cpp
index b470e25..5a78a38 100644
--- a/src/libsql/Tellwait.cpp
+++ b/src/libsql/Tellwait.cpp
@@ -1,4 +1,4 @@
-#ifndef OS_WINDOWS
+#ifndef OS_WINDOWS
 
 #include 
 #include 
diff --git a/src/libsql/Tellwait.h b/src/libsql/Tellwait.h
index e26cbf2..b5b7c13 100644
--- a/src/libsql/Tellwait.h
+++ b/src/libsql/Tellwait.h
@@ -1,4 +1,4 @@
-#ifndef __INC_METIN_II_TELLWAIT_H__
+#ifndef __INC_METIN_II_TELLWAIT_H__
 #define __INC_METIN_II_TELLWAIT_H__
 
 #ifndef OS_WINDOWS
diff --git a/src/libsql/libsql.h b/src/libsql/libsql.h
index 97130ca..dbe2888 100644
--- a/src/libsql/libsql.h
+++ b/src/libsql/libsql.h
@@ -1 +1 @@
-#include "AsyncSQL.h"
+#include "AsyncSQL.h"
diff --git a/src/libsql/stdafx.h b/src/libsql/stdafx.h
index 51e7c25..8a35625 100644
--- a/src/libsql/stdafx.h
+++ b/src/libsql/stdafx.h
@@ -1,2 +1,2 @@
-#include "libthecore/stdafx.h"
+#include "libthecore/stdafx.h"
 #include "AsyncSQL.h"
diff --git a/src/libthecore/DES_table.h b/src/libthecore/DES_table.h
index 5014d7d..51e4fbe 100644
--- a/src/libthecore/DES_table.h
+++ b/src/libthecore/DES_table.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 static DWORD SP_boxes[8][64]=
 {
     /* 0 */
diff --git a/src/libthecore/buffer.cpp b/src/libthecore/buffer.cpp
index c5b85fb..08432f8 100644
--- a/src/libthecore/buffer.cpp
+++ b/src/libthecore/buffer.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 static LPBUFFER normalized_buffer_pool[32] = { NULL, };
 
diff --git a/src/libthecore/buffer.h b/src/libthecore/buffer.h
index 6b6e601..59e1e60 100644
--- a/src/libthecore/buffer.h
+++ b/src/libthecore/buffer.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #define SAFE_BUFFER_DELETE(buf)		{ if(buf != NULL) { buffer_delete(buf); buf = NULL; } }
 
diff --git a/src/libthecore/crypt.h b/src/libthecore/crypt.h
index e97621d..43218f0 100644
--- a/src/libthecore/crypt.h
+++ b/src/libthecore/crypt.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 /* TEA is a 64-bit symmetric block cipher with a 128-bit key, developed
     by David J. Wheeler and Roger M. Needham, and described in their
diff --git a/src/libthecore/des.cpp b/src/libthecore/des.cpp
index 61d8545..e9caaad 100644
--- a/src/libthecore/des.cpp
+++ b/src/libthecore/des.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "DES_table.h"
 
 #define DES_ECB_ENCRYPT 0
diff --git a/src/libthecore/fdwatch.cpp b/src/libthecore/fdwatch.cpp
index e220c9b..0c618d8 100644
--- a/src/libthecore/fdwatch.cpp
+++ b/src/libthecore/fdwatch.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #ifndef __USE_SELECT__
 
diff --git a/src/libthecore/fdwatch.h b/src/libthecore/fdwatch.h
index 186142e..9b9a77f 100644
--- a/src/libthecore/fdwatch.h
+++ b/src/libthecore/fdwatch.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #ifndef OS_WINDOWS
 
diff --git a/src/libthecore/gost.cpp b/src/libthecore/gost.cpp
index 4c0192e..0e6bc3f 100644
--- a/src/libthecore/gost.cpp
+++ b/src/libthecore/gost.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 static unsigned char const k8[16] = { 15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13 };
 static unsigned char const k7[16] = {  3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5 };
diff --git a/src/libthecore/gost_old.cpp b/src/libthecore/gost_old.cpp
index db76ca5..edbb571 100644
--- a/src/libthecore/gost_old.cpp
+++ b/src/libthecore/gost_old.cpp
@@ -1,4 +1,4 @@
-/*
+/*
  * The GOST 28147-89 cipher
  *
  * This is based on the 25 Movember 1993 draft translation
diff --git a/src/libthecore/hangul.h b/src/libthecore/hangul.h
index ffa84d4..97e6c8a 100644
--- a/src/libthecore/hangul.h
+++ b/src/libthecore/hangul.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #ifdef OS_WINDOWS
 #define isdigit iswdigit
diff --git a/src/libthecore/heart.cpp b/src/libthecore/heart.cpp
index 32809d9..64f0bf8 100644
--- a/src/libthecore/heart.cpp
+++ b/src/libthecore/heart.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 extern volatile int num_events_called;
 
diff --git a/src/libthecore/heart.h b/src/libthecore/heart.h
index c331d1f..a060f54 100644
--- a/src/libthecore/heart.h
+++ b/src/libthecore/heart.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 typedef struct heart	HEART;
 typedef struct heart *	LPHEART;
 
@@ -18,5 +18,5 @@ struct heart
 
 LPHEART	heart_new(int opt_usec, HEARTFUNC func);
 void	heart_delete(LPHEART ht);
-int	    heart_idle(LPHEART ht);	//  pulse  Ѵ.
+int	    heart_idle(LPHEART ht);	// 몇 pulse가 지났나 리턴한다.
 void	heart_beat(LPHEART ht, int pulses);
diff --git a/src/libthecore/kstbl.cpp b/src/libthecore/kstbl.cpp
index c751ff1..20c43e0 100644
--- a/src/libthecore/kstbl.cpp
+++ b/src/libthecore/kstbl.cpp
@@ -1,4 +1,4 @@
-unsigned KStbl[2350] = 
+unsigned KStbl[2350] = 
 {
     0x8861,0x8862,0x8865,0x8868,0x8869,0x886a,0x886b,0x8871,
     0x8873,0x8874,0x8875,0x8876,0x8877,0x8878,0x8879,0x887b,
diff --git a/src/libthecore/kstbl.h b/src/libthecore/kstbl.h
index b3e7703..9c8595c 100644
--- a/src/libthecore/kstbl.h
+++ b/src/libthecore/kstbl.h
@@ -1,2 +1,2 @@
-#pragma once
+#pragma once
 extern unsigned KStbl[2350];
diff --git a/src/libthecore/log.cpp b/src/libthecore/log.cpp
index 919bd6d..10b93df 100644
--- a/src/libthecore/log.cpp
+++ b/src/libthecore/log.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #ifndef OS_WINDOWS
 #define SYSLOG_FILENAME "syslog"
@@ -106,7 +106,7 @@ void _sys_err(const char *func, int line, const char *format, ...)
 	time_t ct = time(0);  
 	char *time_s = asctime(localtime(&ct));
 
-	char buf[1024 + 2]; // \n ̱ ..
+	char buf[1024 + 2]; // \n을 붙이기 위해..
 	int len;
 
 	if (!log_file_err)
@@ -125,11 +125,11 @@ void _sys_err(const char *func, int line, const char *format, ...)
 
 	strcat(buf, "\n");
 
-	// log_file_err  
+	// log_file_err 에 출력
 	fputs(buf, log_file_err->fp);
 	fflush(log_file_err->fp);
 
-	// log_file_sys  
+	// log_file_sys 에도 출력
 	fputs(buf, log_file_sys->fp);
 	fflush(log_file_sys->fp);
 }
@@ -140,7 +140,7 @@ void _sys_err(const char *func, int line, const char *format, ...)
 	time_t ct = time(0);  
 	char *time_s = asctime(localtime(&ct));
 
-	char buf[1024 + 2]; // \n ̱ ..
+	char buf[1024 + 2]; // \n을 붙이기 위해..
 	int len;
 
 	if (!log_file_err)
@@ -159,11 +159,11 @@ void _sys_err(const char *func, int line, const char *format, ...)
 
 	strcat(buf, "\n");
 
-	// log_file_err  
+	// log_file_err 에 출력
 	fputs(buf, log_file_err->fp);
 	fflush(log_file_err->fp);
 
-	// log_file_sys  
+	// log_file_sys 에도 출력
 	fputs(buf, log_file_sys->fp);
 	fflush(log_file_sys->fp);
 
@@ -205,7 +205,7 @@ void sys_log(unsigned int bit, const char *format, ...)
 	}
 
 #ifndef OS_WINDOWS
-	// log_level 1 ̻ 쿡 ׽Ʈ 찡  stdout Ѵ.
+	// log_level이 1 이상일 경우에는 테스트일 경우가 많으니 stdout에도 출력한다.
 	if (log_level_bits > 1)
 	{
 #endif
@@ -286,7 +286,7 @@ void log_file_check(LPLOGFILE logfile)
 {
 	struct stat	sb;
 
-	//  Ƿ ٽ .
+	// 파일이 없으므로 다시 연다.
 	if (stat(logfile->filename, &sb) != 0 && errno == ENOENT)
 	{
 		fclose(logfile->fp);
@@ -426,10 +426,10 @@ void log_file_rotate(LPLOGFILE logfile)
 		sys_log(0, "SYSTEM: LOG ROTATE (%04d-%02d-%02d %d)", 
 				curr_tm.tm_year + 1900, curr_tm.tm_mon + 1, curr_tm.tm_mday, logfile->last_hour);
 
-		// α  ݰ
+		// 로그 파일을 닫고
 		fclose(logfile->fp);
 
-		// ű.
+		// 옮긴다.
 #ifndef OS_WINDOWS
 		snprintf(system_cmd, 128, "mv %s %s/%s.%02d", logfile->filename, dir, logfile->filename, logfile->last_hour);
 #else
@@ -437,10 +437,10 @@ void log_file_rotate(LPLOGFILE logfile)
 #endif
 		system(system_cmd);
 
-		//  ð 
+		// 마지막 저장시간 저장
 		logfile->last_hour = curr_tm.tm_hour;
 
-		// α  ٽ .	
+		// 로그 파일을 다시 연다.	
 		logfile->fp = fopen(logfile->filename, "a+");
 	}
 }
diff --git a/src/libthecore/log.h b/src/libthecore/log.h
index da6be21..ccbf9b2 100644
--- a/src/libthecore/log.h
+++ b/src/libthecore/log.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 int		log_init(void);
 void	log_destroy(void);
diff --git a/src/libthecore/main.cpp b/src/libthecore/main.cpp
index 6dbf007..3e25069 100644
--- a/src/libthecore/main.cpp
+++ b/src/libthecore/main.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "memory.h"
 
 extern void GOST_Init();
diff --git a/src/libthecore/main.h b/src/libthecore/main.h
index 2e871dc..04e4862 100644
--- a/src/libthecore/main.h
+++ b/src/libthecore/main.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 extern volatile int	tics;
 extern volatile int shutdowned;
@@ -25,5 +25,5 @@ float		thecore_time(void);
 float		thecore_pulse_per_second(void);
 int			thecore_is_shutdowned(void);
 
-void		thecore_tick(void); // tics 
+void		thecore_tick(void); // tics 증가
 
diff --git a/src/libthecore/memcpy.cpp b/src/libthecore/memcpy.cpp
index ce2dafc..30088ed 100644
--- a/src/libthecore/memcpy.cpp
+++ b/src/libthecore/memcpy.cpp
@@ -1,4 +1,4 @@
-/*
+/*
    (c) Copyright 2000-2002  convergence integrated media GmbH.
    (c) Copyright 2002       convergence GmbH.
    
diff --git a/src/libthecore/memcpy.h b/src/libthecore/memcpy.h
index 0d7b08d..b4052ca 100644
--- a/src/libthecore/memcpy.h
+++ b/src/libthecore/memcpy.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 void thecore_find_best_memcpy();
 
diff --git a/src/libthecore/signal.cpp b/src/libthecore/signal.cpp
index e949797..6bc0853 100644
--- a/src/libthecore/signal.cpp
+++ b/src/libthecore/signal.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #ifdef OS_WIN32
 void signal_setup() {}
diff --git a/src/libthecore/signal.h b/src/libthecore/signal.h
index a195ef1..94ed277 100644
--- a/src/libthecore/signal.h
+++ b/src/libthecore/signal.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 void signal_setup();
 void signal_timer_disable();
 void signal_timer_enable(int timeout_seconds);
\ No newline at end of file
diff --git a/src/libthecore/socket.cpp b/src/libthecore/socket.cpp
index 4da0522..1e939df 100644
--- a/src/libthecore/socket.cpp
+++ b/src/libthecore/socket.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 /* Forwards */
 void socket_lingeron(socket_t s);
@@ -26,7 +26,7 @@ int socket_read(socket_t desc, char* read_point, size_t space_left)
     if (ret > 0)
 	return ret;
 
-    if (ret == 0)	//   
+    if (ret == 0)	// 정상적으로 접속 끊김
 	return -1;
 
 #ifdef EINTR            /* Interrupted system call - various platforms */
@@ -66,7 +66,7 @@ int socket_write_tcp(socket_t desc, const char *txt, int length)
 {
     int bytes_written = send(desc, txt, length, 0);
 
-    // 
+    // 성공
     if (bytes_written > 0)
 	return (bytes_written);
 
@@ -119,7 +119,7 @@ int socket_write(socket_t desc, const char *data, size_t length)
 	    if (errno == EAGAIN)
 		sys_err("socket write would block, about to close!");
 	    else
-		sys_err("write to desc error");   // ''     ̴.
+		sys_err("write to desc error");   // '보통' 상대편으로 부터 접속이 끊긴 것이다.
 
 	    return -1;
 	}
@@ -162,8 +162,8 @@ int socket_bind(const char * ip, int port, int protocol)
 
     memset(&sa, 0, sizeof(sa));
     sa.sin_family	= AF_INET;
-//  ߿θ   BIND ip INADDR_ANY 
-//(׽Ʈ Ǽ )
+//윈도우 서버는 개발용으로만 쓰기 때문에 BIND ip를 INADDR_ANY로 고정
+//(테스트의 편의성을 위해)
 #ifndef OS_WINDOWS
     sa.sin_addr.s_addr	= inet_addr(ip);
 #else
@@ -240,7 +240,7 @@ socket_t socket_connect(const char* host, WORD port)
     struct sockaddr_in  server_addr;
     int                 rslt;
 
-    /* ּ ü ʱȭ */
+    /* 소켓주소 구조체 초기화 */
     memset(&server_addr, 0, sizeof(server_addr));
 
     if (isdigit(*host))
@@ -273,7 +273,7 @@ socket_t socket_connect(const char* host, WORD port)
     socket_timeout(s, 10, 0);
     socket_lingeron(s);
 
-    /*  û */
+    /*  연결요청 */
     if ((rslt = connect(s, (struct sockaddr *) &server_addr, sizeof(server_addr))) < 0)
     {
 	socket_close(s);
diff --git a/src/libthecore/socket.h b/src/libthecore/socket.h
index 13da6fe..154f174 100644
--- a/src/libthecore/socket.h
+++ b/src/libthecore/socket.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #ifdef OS_WINDOWS
 typedef int socklen_t;
diff --git a/src/libthecore/stdafx.h b/src/libthecore/stdafx.h
index 25dec2c..86aedf1 100644
--- a/src/libthecore/stdafx.h
+++ b/src/libthecore/stdafx.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #if defined(__GNUC__)
 #define INLINE __inline__
diff --git a/src/libthecore/tea.cpp b/src/libthecore/tea.cpp
index c7fe43a..2b34321 100644
--- a/src/libthecore/tea.cpp
+++ b/src/libthecore/tea.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #define TEA_ROUND		32
 #define DELTA			0x9E3779B9
diff --git a/src/libthecore/typedef.h b/src/libthecore/typedef.h
index e54a915..b85e0f9 100644
--- a/src/libthecore/typedef.h
+++ b/src/libthecore/typedef.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 typedef unsigned long int       QWORD;
 typedef unsigned char           UBYTE;
diff --git a/src/libthecore/utils.cpp b/src/libthecore/utils.cpp
index cc92fcb..cbc6dc0 100644
--- a/src/libthecore/utils.cpp
+++ b/src/libthecore/utils.cpp
@@ -1,8 +1,8 @@
-/*
+/*
  *    Filename: utils.c
- * Description:  ƿƼ
+ * Description: 각종 유틸리티
  *
- *      Author:  aka. Cronan
+ *      Author: 비엽 aka. Cronan
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
@@ -134,7 +134,7 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
 	return;
     }
 
-    // տ ĭ dz ٱ
+    // 앞에 빈칸 건너 뛰기
     while (*tmp)
     {
 	if (!isnhspace(*tmp))
@@ -143,12 +143,12 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
 	tmp++;
     }
 
-    // \0 Ȯ
+    // \0 확보
     --dest_size;
 
     while (*tmp && len < dest_size)
     {
-	*(dest++) = LOWER(*tmp); // LOWER ũζ ++  ȵ
+	*(dest++) = LOWER(*tmp); // LOWER는 매크로라 ++ 쓰면 안됨
 	++tmp;
 	++len;
     }
@@ -157,7 +157,7 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
 
     if (len > 0)
     {
-	// ڿ ĭ 
+	// 뒤에 빈칸 지우기
 	--dest;
 
 	while (*dest && isnhspace(*dest) && len--)
@@ -179,12 +179,12 @@ void lower_string(const char *src, char *dest, size_t dest_size)
 	return;
     }
 
-    // \0 Ȯ
+    // \0 확보
     --dest_size;
 
     while (*tmp && len < dest_size)
     {
-	*(dest++) = LOWER(*tmp); // LOWER ũζ ++  ȵ
+	*(dest++) = LOWER(*tmp); // LOWER는 매크로라 ++ 쓰면 안됨
 	++tmp;
 	++len;
     }
@@ -200,7 +200,7 @@ char *str_dup(const char *source)
     return (strcpy(new_line, source));
 }
 
-/* arg1  arg2  մܰ   1  Ѵ. */
+/* arg1 이 arg2 의 앞단과 같을 때 1 을 리턴한다. */
 int is_abbrev(char *arg1, char *arg2)
 {
     if (!*arg1)
@@ -232,8 +232,8 @@ int filesize(FILE *fp)
 }
 
 
-/* "Name : "   "׸ : "  ̷ ڿ 
-   ׸ token ,  value  Ͽ Ѵ. */
+/* "Name : 비엽" 과 같이 "항목 : 값" 으로 이루어진 문자열에서 
+   항목을 token 으로, 값을 value 로 복사하여 리턴한다. */
 void parse_token(char *src, char *token, char *value)
 {
     char *tmp;
diff --git a/src/libthecore/utils.h b/src/libthecore/utils.h
index 5739e88..1cc4d71 100644
--- a/src/libthecore/utils.h
+++ b/src/libthecore/utils.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 
 #define SAFE_FREE(p)		{ if (p) { free( (void *) p);		(p) = NULL;  } }
 #define SAFE_DELETE(p)		{ if (p) { delete (p);			(p) = NULL;  } }
diff --git a/src/libthecore/xdirent.cpp b/src/libthecore/xdirent.cpp
index cddb02f..aac9b9f 100644
--- a/src/libthecore/xdirent.cpp
+++ b/src/libthecore/xdirent.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #ifdef OS_WINDOWS
 
diff --git a/src/libthecore/xdirent.h b/src/libthecore/xdirent.h
index 7d16687..55f96c0 100644
--- a/src/libthecore/xdirent.h
+++ b/src/libthecore/xdirent.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
 /*
 
     Declaration of POSIX directory browsing functions and types for Win32.
diff --git a/src/libthecore/xgetopt.cpp b/src/libthecore/xgetopt.cpp
index 7c23f80..c054713 100644
--- a/src/libthecore/xgetopt.cpp
+++ b/src/libthecore/xgetopt.cpp
@@ -1,4 +1,4 @@
-// XGetopt.cpp  Version 1.2
+// XGetopt.cpp  Version 1.2
 //
 // Author:  Hans Dietrich
 //          hdietrich2@hotmail.com
diff --git a/src/libthecore/xgetopt.h b/src/libthecore/xgetopt.h
index 90a3b18..ddaf86f 100644
--- a/src/libthecore/xgetopt.h
+++ b/src/libthecore/xgetopt.h
@@ -1,4 +1,4 @@
-// XGetopt.h  Version 1.2
+// XGetopt.h  Version 1.2
 //
 // Author:  Hans Dietrich
 //          hdietrich2@hotmail.com
diff --git a/src/libthecore/xmd5.cpp b/src/libthecore/xmd5.cpp
index a377c72..3608929 100644
--- a/src/libthecore/xmd5.cpp
+++ b/src/libthecore/xmd5.cpp
@@ -1,4 +1,4 @@
-#include "stdafx.h"
+#include "stdafx.h"
 
 #ifndef OS_FREEBSD
 
diff --git a/src/libthecore/xmd5.h b/src/libthecore/xmd5.h
index 29e4e5b..dca5327 100644
--- a/src/libthecore/xmd5.h
+++ b/src/libthecore/xmd5.h
@@ -1,4 +1,4 @@
-#ifndef OS_FREEBSD
+#ifndef OS_FREEBSD
 
 /*
  * luau (Lib Update/Auto-Update): Simple Update Library