diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..28c3106 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cmake.configureOnOpen": true +} diff --git a/gamefiles/locale/english/locale_string.txt b/gamefiles/locale/english/locale_string.txt index b630594..572c426 100644 --- a/gamefiles/locale/english/locale_string.txt +++ b/gamefiles/locale/english/locale_string.txt @@ -1,2285 +1,2285 @@ -" ش ̵˴ϴ."; +"Everyone will be teleported into the city shortly."; "Everyone will be teleported into the city shortly."; -" ʴ Դϴ"; +"This item does not exist."; "This item does not exist."; -"ڰ ڱ Ͽϴ! ߽ϴ."; +"The box suddenly exploded! You have lost Hit Points (HP)."; "The box suddenly exploded! You have lost Hit Points (HP)."; -"ڿ ⸦ ̸ ¸ ϴ!"; +"If you inhale the green smoke that is coming out of the box, the poison will spread through your body!"; "If you inhale the green smoke that is coming out of the box, the poison will spread through your body!"; -"%s ȹϼ̽ϴ"; +"You have received %s, %d units."; "You have received %s, %d units."; -"ڿ %s Խϴ."; +"The box contains %s."; "The box contains %s."; -"谡 ʴ ."; +"This key does not seem to fit the lock."; "This key does not seem to fit the lock."; -"ƹ͵ ϴ."; +"You have not received anything."; "You have not received anything."; -" ϱ մϴ."; +"You do not have enough Yang to use this item."; "You do not have enough Yang to use this item."; -" Ͽ ϴ."; +"You do not have enough Yang to use this item."; "You do not have enough Yang to use this item."; -"ų µ Ͽϴ."; +"You have lowered your Skill Level."; "You have lowered your Skill Level."; -"ų ϴ."; +"You cannot lower your Skill Level."; "You cannot lower your Skill Level."; -"̹ ȿ ɷ ֽϴ."; +"This effect is already activated."; "This effect is already activated."; -" PC濡 ֽϴ."; +"This item can only be used in an Internet cafe."; "This item can only be used in an Internet cafe."; -" ѷ ʰϿϴ."; +"That is over the limit."; "That is over the limit."; -"ǰ κ丮 մϴ. κ丮 ּ!"; +"Unfortunately you don't have enough space in your inventory."; "Unfortunately you don't have enough space in your inventory."; -" Ǵ Ͽϴ"; +"Used Moon Cake or Seed."; "Used Moon Cake or Seed."; -"ȥ ° ƴϸ ȥ ϴ."; +"You cannot wear a Wedding Ring if you are not married."; "You cannot wear a Wedding Ring if you are not married."; -" ̺Ʈ Ⱑ ʴ° ϴ."; +"You cannot use the Event Detector from this position."; "You cannot use the Event Detector from this position."; -" ϴ."; +"This item cannot be absorbed."; "This item cannot be absorbed."; -"̺Ʈ Ⱑ źο ϴ."; +"The Event Detector vanished in a mysterious light."; "The Event Detector vanished in a mysterious light."; -"̺Ʈ Ⱑ ϴ."; +"The Event Detector has vanished."; "The Event Detector has vanished."; -" Ⱑ ʴ° ϴ."; +"The Compass for Metin Stones does not work in dungeons."; "The Compass for Metin Stones does not work in dungeons."; -" Ⱑ źο ϴ."; +"The Compass for Metin Stones has vanished in the mysterious light."; "The Compass for Metin Stones has vanished in the mysterious light."; -"ڿ %s %d Խϴ."; +"Receive: %s - %d"; "Receive: %s - %d"; -" Ⱑ ϴ."; +"The Compass for Metin Stones has vanished."; "The Compass for Metin Stones has vanished."; -" Խϴ."; +"You find a simple Piece of Stone in the Clam."; "You find a simple Piece of Stone in the Clam."; -" ϴ."; +"The Clam has vanished."; "The Clam has vanished."; -" ְ Խϴ."; +"There is a White Pearl inside the Clam."; "There is a White Pearl inside the Clam."; -" ûְ Խϴ."; +"There is a Blue Pearl inside the Clam."; "There is a Blue Pearl inside the Clam."; -" ְ Խϴ."; +"There is a Blood-Red Pearl inside the Clam."; "There is a Blood-Red Pearl inside the Clam."; -" å ʹ ϱⰡ ϴ."; +"It isn't easy to understand this book."; "It isn't easy to understand this book."; -" å ƹ ʽϴ."; +"This book will not help you."; "This book will not help you."; -" 30 DZ ʽϴ."; +"You need to have a minimum level of 30 to understand this book."; "You need to have a minimum level of 30 to understand this book."; -" 50 DZ ʽϴ."; +"You need a minimum level of 50 to understand this book."; "You need a minimum level of 50 to understand this book."; -" ̻ ϴ."; +"You can't train any more Combos."; "You can't train any more Combos."; -"%s %s ȹϿϴ."; +"%s has captured the flag of %s!"; "%s has captured the flag of %s!"; -"̹ Ϻϰ ˾Ƶ ִ ̴."; +"You already understand this language."; "You already understand this language."; -" å ÷ մϴ."; +"You have to improve your Level to read this Book."; "You have to improve your Level to read this Book."; -" å ʹ ϴ."; +"The book is too hard for practising."; "The book is too hard for practising."; -" åδ ̻ ϴ."; +"You cannot train with this Book any more."; "You cannot train with this Book any more."; -" %d % Ǿϴ"; +"Taxes are set to %d%%."; "Taxes are set to %d%%."; -" ¸ ų ִ ƴմϴ."; +"You need a minimum level of 50 to get riding training."; "You need a minimum level of 50 to get riding training."; -"־ȼ ȭԸ Խϴ."; +"You have escaped the evil ghost curse with the help of an Exorcism Scroll."; "You have escaped the evil ghost curse with the help of an Exorcism Scroll."; -" ̻ ¸ ü ϴ."; +"You cannot read any more Riding Guides."; "You cannot read any more Riding Guides."; -"¸ ü о ¸ ų Ʈ ϴ."; +"You read the Horse Riding Manual and received a Riding Point."; "You read the Horse Riding Manual and received a Riding Point."; -" Ʈδ ¸ ų ø ֽϴ."; +"You can use this point to improve your riding skill!"; "You can use this point to improve your riding skill!"; -"%s 尡 %s Ѿҽϴ!"; +"The guild %s's flag has been stolen by player %s."; "The guild %s's flag has been stolen by player %s."; -"¸ ü ؿ Ͽϴ."; +"You did not understand the riding guide."; "You did not understand the riding guide."; -" ±. 𰡰 ̾."; +"Your mind is clear. You can concentrate really well now."; "Your mind is clear. You can concentrate really well now."; -"ġ %d Ͽϴ."; +"Your rank has increased by %d points."; "Your rank has increased by %d points."; -" ŸϿ Ż Ұմϴ."; +"You cannot dye or bleach your current hairstyle."; "You cannot dye or bleach your current hairstyle."; -"%d Ǿ ٽ Ͻ ֽϴ."; +"You need to have reached level %d to be able to dye your hair again."; "You need to have reached level %d to be able to dye your hair again."; -" ʾ ϴ."; +"This item can only be opened by the another gender."; "This item can only be opened by the another gender."; -" ġ ϴ."; +"You cannot use this from your current position."; "You cannot use this from your current position."; -"̵ غ Ǿ ȯθ Ҽ ϴ"; +"You are ready to warp, so you cannot use the Scroll of the Location."; "You are ready to warp, so you cannot use the Scroll of the Location."; -" ġ "; +"You are being brought back to the place of origin."; "You are being brought back to the place of origin."; -" ȿ %s%s ϴ."; +"%s%s cannot be used in a dungeon."; "%s%s cannot be used in a dungeon."; -"<Ʈ> ־ ٽ ʽϴ."; +"[Quest] You have already received your reward."; "[Quest] You have already received your reward."; -""; +"the"; "the"; -""; +"the"; "the"; -"û ʽϴ."; +"There aren't any Pieces of Broken Stone available for removal."; "There aren't any Pieces of Broken Stone available for removal."; -"Ӽ Դϴ."; +"You cannot change the upgrade of this item."; "You cannot change the upgrade of this item."; -" Ӽ ϴ."; +"There is no upgrade that you can change."; "There is no upgrade that you can change."; -"Ӽ ٲ %d ̳ ٽ ϴ.(%d )"; +"You can only do this %d minutes after an upgrade. (%d minutes left)"; "You can only do this %d minutes after an upgrade. (%d minutes left)"; -"Ӽ Ͽϴ."; +"You have changed the upgrade."; "You have changed the upgrade."; -"Ӽ ߰ Ͽϴ."; +"Upgrade successfully added."; "Upgrade successfully added."; -"Ӽ ߰ Ͽϴ."; +"No upgrade added."; "No upgrade added."; -"̻ ̿Ͽ Ӽ ߰ ϴ."; +"You must use the Blessing Marble in order to add another bonus to this item."; "You must use the Blessing Marble in order to add another bonus to this item."; -"忡 Ͻ ϴ."; +"You cannot use this in the duel arena."; "You cannot use this in the duel arena."; -" ̻ ̿Ͽ Ӽ ߰ ϴ."; +"This item can no longer be improved. The maximum number of bonuses has been reached."; "This item can no longer be improved. The maximum number of bonuses has been reached."; -" 簡񼭸 ̿Ͽ Ӽ ߰ ּ."; +"You can only use the Blessing Marble with an item which already has 4 bonuses."; "You can only use the Blessing Marble with an item which already has 4 bonuses."; -" ߰Ǿϴ."; +"Socket successfully added."; "Socket successfully added."; -" ߰ Ͽϴ."; +"No socket added."; "No socket added."; -" ׼ ̻ ߰ ϴ."; +"No additional sockets could be added to this item."; "No additional sockets could be added to this item."; -" ߰ Դϴ."; +"You cannot add a socket to this item."; "You cannot add a socket to this item."; -" Ͽϴ."; +"Arming successful."; "Arming successful."; -" Ͽϴ."; +"Arming has failed."; "Arming has failed."; -" ̾Ƹ Ǽ ߰ؾմϴ."; +"You have to add a socket first. Use a diamond in order to do this."; "You have to add a socket first. Use a diamond in order to do this."; -" ׼ ̻ ϴ."; +"There are no sockets for gemstones in this item."; "There are no sockets for gemstones in this item."; -" ÿ ֽϴ."; +"You can do this when you wear an Emotion Mask."; "You can do this when you wear an Emotion Mask."; -"̾Ƹ ߰ؾմϴ."; +"You have to add a socket if you want to use a Diamond."; "You have to add a socket if you want to use a Diamond."; -" ׼ ̻ ϴ."; +"No more gems can be added to this item."; "No more gems can be added to this item."; -" ϴ."; +"These items cannot be used together."; "These items cannot be used together."; -" ߿ ̳ Ƴ ϴ."; +"You cannot change the Bait whilst fishing."; "You cannot change the Bait whilst fishing."; -"̹ ִ ̳ %s ϴ."; +"You are exchanging the current Bait for %s."; "You are exchanging the current Bait for %s."; -"ô뿡 %s ̳ ϴ."; +"You attached %s to the hook as bait."; "You attached %s to the hook as bait."; -" ᰡ մϴ."; +"You are missing some ingredients to make the potion."; "You are missing some ingredients to make the potion."; -"(%s) մϴ."; +"You do not have enough material (%s)."; "You do not have enough material (%s)."; -" ڸϴ."; +"You do not have enough empty bottles."; "You do not have enough empty bottles."; -" ߽ϴ."; +"The potion production has failed."; "The potion production has failed."; -"ڸ ֽϴ."; +"Only women can do this."; "Only women can do this."; -" ƾ ϴ."; +"You cannot attach several stones of the same type."; "You cannot attach several stones of the same type."; -" ƾ ϴ."; +"This Spirit Stone cannot be attached to this type of item."; "This Spirit Stone cannot be attached to this type of item."; -" ƾ ⿡ ϴ."; +"You cannot attach this Spirit Stone to a weapon."; "You cannot attach this Spirit Stone to a weapon."; -"ƾ Ͽϴ."; +"You have attached the Spirit Stone successfully."; "You have attached the Spirit Stone successfully."; -"ƾ Ͽϴ."; +"The Spirit Stone broke while being attached."; "The Spirit Stone broke while being attached."; -" ִ ϴ."; +"No slot free."; "No slot free."; -"Ҽ ϴ."; +"This function is not available right now."; "This function is not available right now."; -"Ÿ ߿ ȯ,ȯθ Ҽ ϴ."; +"You cannot use a Scroll of the Location whilst taking part in a kingdom battle."; "You cannot use a Scroll of the Location whilst taking part in a kingdom battle."; -"â %d ̳ ȯ,ȯθ ϴ."; +"After opening the Storeroom you cannot use a Scroll of the Location for %d seconds."; "After opening the Storeroom you cannot use a Scroll of the Location for %d seconds."; -"ŷâ,â ¿ ȯ,ȯ Ҽ ϴ."; +"You cannot use a Scroll of the Location while another window is open."; "You cannot use a Scroll of the Location while another window is open."; -"׷ ϴ."; +"This person does not exist."; "This person does not exist."; -" %d ̳ ȯ,ȯθ ϴ."; +"After a trade, you cannot use a scroll for another %d seconds."; "After a trade, you cannot use a scroll for another %d seconds."; -"λ %d ̳ ȯ,ȯθ ϴ."; +"After opening a storeroom you cannot use a Scroll of the Location for another %d seconds."; "After opening a storeroom you cannot use a Scroll of the Location for another %d seconds."; -"̵ Ǿ ġ ʹ ȯθ Ҽ ϴ."; +"You cannot use the Scroll of the Location because the distance is too small."; "You cannot use the Scroll of the Location because the distance is too small."; -"ŷ %d ̳ ȯ,ȯε ϴ."; +"After a trade you cannot use a Scroll of the Location for %d seconds."; "After a trade you cannot use a Scroll of the Location for %d seconds."; -"ŷâ,â ¿ ,ܺ Ҽ ϴ."; +"You cannot open the Storeroom if another window is already open."; "You cannot open the Storeroom if another window is already open."; -" Դϴ."; +"You cannot drop this item."; "You cannot drop this item."; -" 3 ϴ."; +"The dropped item will vanish in 5 minutes."; "The dropped item will vanish in 5 minutes."; -" ȹ: %s"; +"%s received"; "%s received"; -"ϰ ִ ʹ ϴ."; +"You have too many items in your inventory."; "You have too many items in your inventory."; -" ȹ: %s κ %s"; +"%s receives %s."; "%s receives %s."; -" ̵˴ϴ."; +"Everyone will be teleported into the city shortly."; "Everyone will be teleported into the city shortly."; -"ʹ ֽϴ."; +"You are too near."; "You are too near."; -" : %s Կ %s"; +"Item Trade: %s, %s"; "Item Trade: %s, %s"; -"а ߿ ϴ."; +"You cannot change the equipped item while you are transformed."; "You cannot change the equipped item while you are transformed."; -" ֽϴ."; +"You have to stand still to equip the item."; "You have to stand still to equip the item."; -" ʸ ϴ."; +"Monkey Herbs cannot be fed to living horses. It is used to revive dead horses."; "Monkey Herbs cannot be fed to living horses. It is used to revive dead horses."; -" Ḧ ϴ."; +"You cannot feed a dead Horse."; "You cannot feed a dead Horse."; -" ʸ ־ϴ."; +"You fed the Horse with Herbs."; "You fed the Horse with Herbs."; -" Ḧ ־ϴ."; +"You have fed the Horse."; "You have fed the Horse."; -" Ӹ Դϴ."; +"Your level is too low to wear this Hairstyle."; "Your level is too low to wear this Hairstyle."; -" Ӹ ŸϷδ ü ϴ."; +"You already have this Hairstyle."; "You already have this Hairstyle."; -"̹ а Դϴ."; +"You have already transformed."; "You have already transformed."; -"ʹ ָ ֽϴ"; +"You are too far away."; "You are too far away."; -"߸ а Դϴ."; +"That's the wrong trading item."; "That's the wrong trading item."; -" ʹ ͷδ ϴ."; +"You cannot transform into a monster who has a higher level than you."; "You cannot transform into a monster who has a higher level than you."; -" ϴ."; +"Your level is too low to equip this item."; "Your level is too low to equip this item."; -"ٷ ϴ."; +"You are not strong enough to equip yourself with this item."; "You are not strong enough to equip yourself with this item."; -" ϴ."; +"Your intelligence is too low to equip yourself with this item."; "Your intelligence is too low to equip yourself with this item."; -"ø ϴ."; +"Your dexterity is too low to equip yourself with this item."; "Your dexterity is too low to equip yourself with this item."; -"ü ϴ."; +"Your vitality is too low to equip yourself with this item."; "Your vitality is too low to equip yourself with this item."; -"ȥ ¿ ϴ."; +"You cannot use this item because you are not married."; "You cannot use this item because you are not married."; -" ũ ÿ ϴ."; +"You cannot equip this item twice."; "You cannot equip this item twice."; -"%s ð %d"; +"Time left until the removal of the socket of %s: %d"; "Time left until the removal of the socket of %s: %d"; -"̼ ֽϴ."; +"This action can only be done with another gender."; "This action can only be done with another gender."; -"%s ִ ϴ."; +"A gem socketed in the %s has vanished."; "A gem socketed in the %s has vanished."; -"<> ̸ ʽϴ."; +"[Guild] This guild name is invalid."; "[Guild] This guild name is invalid."; -"<> ̹ ̸ 尡 ֽϴ."; +"[Guild] This guild name is already taken."; "[Guild] This guild name is already taken."; -"<> 带 ϴ."; +"[Guild] You cannot found a guild."; "[Guild] You cannot found a guild."; -"%s 尡 %s 忡 Ͽϴ!"; +"The guild %s has declared war on %s!"; "The guild %s has declared war on %s!"; -"<> %s 尡 źϿϴ."; +"[Guild] %s has refused the Guild war."; "[Guild] %s has refused the Guild war."; -"%s %s 尡 մϴ!"; +"The guild war between %s and %s will start in a few seconds!"; "The guild war between %s and %s will start in a few seconds!"; -"%s %s 尡 Ͽϴ!"; +"The guild war between %s and %s has begun!"; "The guild war between %s and %s has begun!"; -"%s %s ºη ϴ."; +"The guild war between %s and %s has ended in a draw."; "The guild war between %s and %s has ended in a draw."; -"%s 尡 %s £ ¸ ߽ϴ."; +"%s has won the guild war against %s."; "%s has won the guild war against %s."; -" ൿ ȣ Ͽ մϴ."; +"You need your fellow player's approval for this."; "You need your fellow player's approval for this."; -"<> Ǿϴ."; +"[Guild] The guild war has been cancelled."; "[Guild] The guild war has been cancelled."; -"%s %s ҵǾϴ."; +"The guild war between %s and %s has been cancelled."; "The guild war between %s and %s has been cancelled."; -"ݱ"; +"Close"; "Close"; -" Ǿ Ǿϴ."; +"Action cancelled. You have entered a battle."; "Action cancelled. You have entered a battle."; -"ٸ ǻͿ α Ͽ մϴ."; +"Someone has logged into your account. You will be disconnected from the server."; "Someone has logged into your account. You will be disconnected from the server."; -" ź ɴϴ."; +"A mysterious light appears from the tree."; "A mysterious light appears from the tree."; -"%d ð ߰ Ǿϴ. (ȣ %d)"; +"%d Playtime added to your account. (Payment number %d)"; "%d Playtime added to your account. (Payment number %d)"; -" ϼ̽ϴ."; +"You can participate in the guild battle in viewer mode."; "You can participate in the guild battle in viewer mode."; -"ڽ Ͻø ִ < > ư ɴϴ."; +"While choosing a character, an icon appears."; "While choosing a character, an icon appears."; -" ƹ ϴ."; +"There are no opponents."; "There are no opponents."; -"%s԰ !"; +"The battle with %s has begun!"; "The battle with %s has begun!"; -"1 ̳ ƹ ڵ ˴ϴ."; +"If no enemy can be found, the guild war will be ended automatically."; "If no enemy can be found, the guild war will be ended automatically."; -" Ǿ ºη Ǿϴ. (5 )"; +"Because the guild war finished early, the result will judged as a draw."; "Because the guild war finished early, the result will judged as a draw."; -"ְ ູ äϴ"; +"The energy is reflected because of the Emperors Blessing."; "The energy is reflected because of the Emperors Blessing."; -"%d Ŀ ູ ֽϴ"; +"After %d seconds you can use the Emperors Blessing."; "After %d seconds you can use the Emperors Blessing."; -"Ÿ %d 밡"; +"After %d seconds you can use the Emperors Blessing."; "After %d seconds you can use the Emperors Blessing."; -" ڱ ڶϴ : %d "; +"Not enough tax income : %d."; "Not enough tax income : %d."; -"[TEST_ONLY] : %d "; +"[TEST_ONLY]Tax : %d"; "[TEST_ONLY]Tax : %d"; -"а Ͽϴ"; +"Transformation error."; "Transformation error."; -"а úϴ. ż ãư."; +"You learned the transmutation completely."; "You learned the transmutation completely."; -" ȯּ."; +"Please call your Horse first."; "Please call your Horse first."; -" ½ϴ."; +"You have sent your horse away."; "You have sent your horse away."; -"%s û ߽ϴ. ³Ϸ ᵿǸ ϼ."; +"%s challenged you to a battle!"; "%s challenged you to a battle!"; -" մϴ."; +"You have to get off your Horse."; "You have to get off your Horse."; -" ź ¿ ̸ ϴ."; +"You cannot feed your Horse whilst sitting on it."; "You cannot feed your Horse whilst sitting on it."; -" %s%s ־ϴ."; +"You have fed the Horse with %s%s."; "You have fed the Horse with %s%s."; -"%s ʿմϴ"; +"You need %s."; "You need %s."; -"˴ٿ %d ҽϴ."; +"%d seconds until Exit."; "%d seconds until Exit."; -"%d ˴ٿ ˴ϴ."; +"The game will be closed in %d seconds."; "The game will be closed in %d seconds."; -"%d ҽϴ."; +"%d seconds until Exit."; "%d seconds until Exit."; -" Ǿϴ."; +"Your logout has been cancelled."; "Your logout has been cancelled."; -"α ȭ ϴ. ø ٸ."; +"Back to login window. Please wait."; "Back to login window. Please wait."; -" մϴ. ø ٸ."; +"You have been disconnected from the server. Please wait."; "You have been disconnected from the server. Please wait."; -"%s û ߽ϴ."; +"You have challenged %s to a battle."; "You have challenged %s to a battle."; -"ij͸ ȯ մϴ. ø ٸ."; +"You are changing character. Please wait."; "You are changing character. Please wait."; -" ϴ. (%d )"; +"A new start is not possible at the moment. Please wait %d seconds."; "A new start is not possible at the moment. Please wait %d seconds."; -" ϴ.(%d )"; +"You cannot restart yet. Please wait another %d seconds."; "You cannot restart yet. Please wait another %d seconds."; -" ϴ.(%d )"; +"You cannot restart yet. Please wait another %d seconds."; "You cannot restart yet. Please wait another %d seconds."; -" ϴ. (%d )"; +"You cannot restart in the city yet. Wait another %d seconds."; "You cannot restart in the city yet. Wait another %d seconds."; -" Ȱ ȸ Ҿϴ! ̵մϴ!"; +"The waiting time has expired. You will be revived in the city."; "The waiting time has expired. You will be revived in the city."; -"а ߿ ɷ ø ϴ."; +"You cannot change your status while you are transformed."; "You cannot change your status while you are transformed."; -" Դϴ."; +"This player is currently fighting."; "This player is currently fighting."; -"<> 忡 ʽϴ."; +"[Guild] It does not belong to the guild."; "[Guild] It does not belong to the guild."; -"<> ų ϴ."; +"[Guild] You do not have the authority to change the level of the guild skills."; "[Guild] You do not have the authority to change the level of the guild skills."; -"߸ ߽ϴ"; +"Your choice is incorrect."; "Your choice is incorrect."; -"<â> ߸ ȣ Էϼ̽ϴ."; +"[Storeroom] You have entered an incorrect password."; "[Storeroom] You have entered an incorrect password."; -"<â> â ̹ ֽϴ."; +"[Storeroom] The Storeroom is already open."; "[Storeroom] The Storeroom is already open."; -"<â> â 10 ȿ ϴ."; +"[Storeroom] You have to wait 10 seconds before you can open the Storeroom again."; "[Storeroom] You have to wait 10 seconds before you can open the Storeroom again."; -"<â> Ÿ ־ â ϴ."; +"[Storeroom] You are too far away to open the storeroom."; "[Storeroom] You are too far away to open the storeroom."; -"<Ƽ> Ƽ ó ϴ."; +"[Group] The server cannot execute this group request."; "[Group] The server cannot execute this group request."; -"<Ƽ> ȿ Ƽ ϴ."; +"[Group] You cannot leave a group while you are in a dungeon."; "[Group] You cannot leave a group while you are in a dungeon."; -"<Ƽ> Ƽ ̽ϴ."; +"[Group] You have left the group."; "[Group] You have left the group."; -"<> ̹ ٸ £ Դϴ."; +"[Guild] Your guild is already participating in another war."; "[Guild] Your guild is already participating in another war."; -"<> ϴ."; +"[Guild] No one is entitled to a guild war."; "[Guild] No one is entitled to a guild war."; -"<> ׷ 尡 ϴ."; +"[Guild] No guild with this name exists."; "[Guild] No guild with this name exists."; -"̹ ĺǾֽϴ"; +"There already is a candidacy."; "There already is a candidacy."; -"̹ Դϴ."; +"[Guild] This guild is already participating in a war."; "[Guild] This guild is already participating in a war."; -"<> Ͽ ϴ."; +"[Guild] Not enough Yang to participate in a guild war."; "[Guild] Not enough Yang to participate in a guild war."; -"<> Ͽ ϴ."; +"[Guild] The guild does not have enough Yang to participate in a guild war."; "[Guild] The guild does not have enough Yang to participate in a guild war."; -"<> ̹ Դϴ."; +"[Guild] This Guild is already scheduled for another war."; "[Guild] This Guild is already scheduled for another war."; -"<> 尡 ̹ Դϴ."; +"[Guild] This guild is already participating in another war."; "[Guild] This guild is already participating in another war."; -"<> ϱ ؼ ּ %d ־ մϴ."; +"[Guild] A minimum of %d players are needed to participate in a guild war."; "[Guild] A minimum of %d players are needed to participate in a guild war."; -"<> ڶ ϴ."; +"[Guild] The guild does not have enough points to participate in a guild war."; "[Guild] The guild does not have enough points to participate in a guild war."; -"<> Ͽ ϴ."; +"[Guild] The guild does not have enough members to participate in a guild war."; "[Guild] The guild does not have enough members to participate in a guild war."; -" 20 ϴ ڵ ȣ ϴ."; +"Your level has to be higher than 20 to register a cell phone number."; "Your level has to be higher than 20 to register a cell phone number."; -" ڰ ʽϴ"; +"You do not have the emperor qualification."; "You do not have the emperor qualification."; -"%s ģ ź ߽ϴ."; +"%s declined the invitation."; "%s declined the invitation."; -"̹ Ƽ Ƿ Խû ϴ."; +"You cannot accept the invitation because you are already in the group."; "You cannot accept the invitation because you are already in the group."; -"ָ 밡 Դϴ"; +"Only the emperor can use this."; "Only the emperor can use this."; -"%d ʰ Ÿ Դϴ."; +"Cooldown time for approximately %d seconds"; "Cooldown time for approximately %d seconds"; -" մϴ. : %lu ʿݾ : %lu"; +"Lack of Taxes. Current Capital : %u Missing Capital : %u"; "Lack of Taxes. Current Capital : %u Missing Capital : %u"; -": warpto "; +"Command: warpto "; "Command: warpto "; -"Ÿ Դ ̵Ҽ ϴ"; +"You cannot be warped to an unknown player."; "You cannot be warped to an unknown player."; -"ش %d äο ֽϴ. ( ä %d)"; +"Adding player %d into the channel. (Present channel %d)"; "Adding player %d into the channel. (Present channel %d)"; -"%s Է ̵մϴ"; +"Warp to player %s."; "Warp to player %s."; -"Ÿ ȯ Ҽ ϴ"; +"You cannot call unknown players."; "You cannot call unknown players."; -"<> ߿ ɿ ϴ."; +"[Guild] There are no experience points for hunting during a guild war."; "[Guild] There are no experience points for hunting during a guild war."; -" ູ %s HP,SP äϴ."; +"When the Blessing of the Emperor is used %s the HP and SP are restored again."; "When the Blessing of the Emperor is used %s the HP and SP are restored again."; -" "; +"My information about the emperor"; "My information about the emperor"; -"[%s] : %s ݾ %lld "; +"[%sMonarch] : %s Yang owned %lld"; "[%sMonarch] : %s Yang owned %lld"; -"[%s] : %s "; +"[%sMonarch] : %s"; "[%sMonarch] : %s"; -" "; +"Information about the emperor"; "Information about the emperor"; -"ָ Ҽ ִ Դϴ"; +"Only an emperor can use this."; "Only an emperor can use this."; -"1-50 ġ ּ"; +"Choose a number between 1 and 50."; "Choose a number between 1 and 50."; -"ȯҼ Դϴ. ȯ ʹ Ȩ ϼ"; +"The Monster cannot be called. Check the Mob Number."; "The Monster cannot be called. Check the Mob Number."; -"ִ +%d"; +"Hit Points +%d"; "Hit Points +%d"; -"ִ ŷ +%d"; +"Spell Points +%d"; "Spell Points +%d"; -" ູ Ͽϴ."; +"The Emperor Blessing is activated."; "The Emperor Blessing is activated."; -"ü +%d"; +"Endurance +%d"; "Endurance +%d"; -" +%d"; +"Intelligence +%d"; "Intelligence +%d"; -"ٷ +%d"; +"Strength +%d"; "Strength +%d"; -"ø +%d"; +"Dexterity +%d"; "Dexterity +%d"; -"ݼӵ +%d"; +"Attack Speed +%d"; "Attack Speed +%d"; -"̵ӵ %d"; +"Movement Speed %d"; "Movement Speed %d"; -"Ÿ -%d"; +"Cooldown Time -%d"; "Cooldown Time -%d"; -" ȸ +%d"; +"Energy Recovery +%d"; "Energy Recovery +%d"; -"ŷ ȸ +%d"; +"Spell Point Recovery +%d"; "Spell Point Recovery +%d"; -" %d"; +"Poison Attack %d"; "Poison Attack %d"; -" +%d"; +"Star +%d"; "Star +%d"; -"ο +%d"; +"Speed Reduction +%d"; "Speed Reduction +%d"; -"%d%% Ȯ ġŸ "; +"Critical Attack with a chance of %d%%"; "Critical Attack with a chance of %d%%"; -"%d%% Ȯ "; +"Chance of a Speared Attack of %d%%"; "Chance of a Speared Attack of %d%%"; -"ΰ Ÿġ +%d%%"; +"Player's Attack Power against Monsters +%d%%"; "Player's Attack Power against Monsters +%d%%"; -" Ÿġ +%d%%"; +"Horse's Attack Power against Monsters +%d%%"; "Horse's Attack Power against Monsters +%d%%"; -" Ÿġ +%d%%"; +"Attack Boost against Wonggui + %d%%"; "Attack Boost against Wonggui + %d%%"; -"б Ÿġ +%d%%"; +"Attack Boost against Milgyo + %d%%"; "Attack Boost against Milgyo + %d%%"; -"ü Ÿġ +%d%%"; +"Attack boost against zombies + %d%%"; "Attack boost against zombies + %d%%"; -"Ǹ Ÿġ +%d%%"; +"Attack boost against devils + %d%%"; "Attack boost against devils + %d%%"; -" %s 3а 10 %% ݷ ˴ϴ"; +"Due to Emperor Sa-Za-Hu, the player %s will receive an attack power increase of 10 %% for 3 minutes in this area."; "Due to Emperor Sa-Za-Hu, the player %s will receive an attack power increase of 10 %% for 3 minutes in this area."; -"Ÿġ %d%% "; +"Absorbing of Energy %d%% while attacking."; "Absorbing of Energy %d%% while attacking."; -"Ÿġ %d%% ŷ "; +"Absorption of Spell Points (SP) %d%% while attacking."; "Absorption of Spell Points (SP) %d%% while attacking."; -"%d%% Ȯ Ÿݽ ŷ Ҹ"; +"With a chance of %d%% Spell Points (SP) will be taken from the enemy."; "With a chance of %d%% Spell Points (SP) will be taken from the enemy."; -"%d%% Ȯ ؽ ŷ ȸ"; +"Absorbing of Spell Points (SP) with a chance of %d%%"; "Absorbing of Spell Points (SP) with a chance of %d%%"; -"Ÿݽ Ȯ %d%%"; +"%d%% Chance of blocking a close-combat attack"; "%d%% Chance of blocking a close-combat attack"; -"Ȱ ȸ Ȯ %d%%"; +"%d%% Chance of blocking a long range attack"; "%d%% Chance of blocking a long range attack"; -"Ѽհ %d%%"; +"One-Handed Sword defence %d%%"; "One-Handed Sword defence %d%%"; -"հ %d%%"; +"Two-Handed Sword Defence %d%%"; "Two-Handed Sword Defence %d%%"; -"μհ %d%%"; +"Two-Handed Sword Defence %d%%"; "Two-Handed Sword Defence %d%%"; -" %d%%"; +"Bell Defence %d%%"; "Bell Defence %d%%"; -" ݰ %s 3а 10 %% ˴ϴ"; +"By the Emperor Geum-Gang-Gwon the player %s gets 10 %% more armour for 3 minutes."; "By the Emperor Geum-Gang-Gwon the player %s gets 10 %% more armour for 3 minutes."; -"ä %d%%"; +"Fan Defence %d%%"; "Fan Defence %d%%"; -"Ȱ %d%%"; +"Distant Attack Resistance %d%%"; "Distant Attack Resistance %d%%"; -"ȭ %d%%"; +"Fire Resistance %d%%"; "Fire Resistance %d%%"; -" %d%%"; +"Lightning Resistance %d%%"; "Lightning Resistance %d%%"; -" %d%%"; +"Magic Resistance %d%%"; "Magic Resistance %d%%"; -"ٶ %d%%"; +"Wind Resistance %d%%"; "Wind Resistance %d%%"; -" Ÿġ ݻ Ȯ : %d%%"; +"Reflect Direct Hit: %d%%"; "Reflect Direct Hit: %d%%"; -" ǵ Ȯ %d%%"; +"Reflect Curse: %d%%"; "Reflect Curse: %d%%"; -" %d%%"; +"Poison Resistance %d%%"; "Poison Resistance %d%%"; -"%d%% Ȯ ġ ŷ ȸ"; +"Spell Points (SP) will be increased by %d%% if you win."; "Spell Points (SP) will be increased by %d%% if you win."; -"OX ̺Ʈ ̹ Դϴ(flag: %d)"; +"The event is already running. (Flag: %d)"; "The event is already running. (Flag: %d)"; -"%d%% Ȯ ġ ġ ߰ "; +"Experience increases by %d%% if you win against an opponent."; "Experience increases by %d%% if you win against an opponent."; -"%d%% Ȯ ġ 2 "; +"Increase of Yang up to %d%% if you win."; "Increase of Yang up to %d%% if you win."; -"%d%% Ȯ ġ 2 "; +"Increase of captured Items up to %d%% if you win."; "Increase of captured Items up to %d%% if you win."; -" %d%% "; +"Power increase of up to %d%% after taking the potion."; "Power increase of up to %d%% after taking the potion."; -"%d%% Ȯ ġ ȸ"; +"%d%% Chance of filling up Hit Points after a victory."; "%d%% Chance of filling up Hit Points after a victory."; -" %d%%"; +"No Dizziness %d%%"; "No Dizziness %d%%"; -" %d%%"; +"No Slowing Down %d%%"; "No Slowing Down %d%%"; -"Ѿ %d%%"; +"No falling down %d%%"; "No falling down %d%%"; -"ݷ +%d"; +"Attack Power + %d"; "Attack Power + %d"; -" +%d"; +"Armour + %d"; "Armour + %d"; -"OX ũƮ ε "; +"OX quiz script could not be loaded."; "OX quiz script could not be loaded."; -" ݷ +%d"; +"Magical Attack + %d"; "Magical Attack + %d"; -" +%d"; +"Magical Defence + %d"; "Magical Defence + %d"; -"ִ +%d"; +"Maximum Endurance + %d"; "Maximum Endurance + %d"; -"翡 +%d%%"; +"Strong against Warriors + %d%%"; "Strong against Warriors + %d%%"; -"ڰ +%d%%"; +"Strong against Ninjas + %d%%"; "Strong against Ninjas + %d%%"; -"󿡰 +%d%%"; +"Strong against Sura + %d%%"; "Strong against Sura + %d%%"; -"翡 +%d%%"; +"Strong against Shamans + %d%%"; "Strong against Shamans + %d%%"; -"Ϳ +%d%%"; +"Strength against monsters + %d%%"; "Strength against monsters + %d%%"; -"ݷ +%d%%"; +"Attack + %d%%"; "Attack + %d%%"; -" +%d%%"; +"Defence + %d%%"; "Defence + %d%%"; -"OX ũƮ ε "; +"OX quiz script has loaded."; "OX quiz script has loaded."; -"ġ %d%%"; +"Experience %d%%"; "Experience %d%%"; -" %.1f"; +"Chance to find an Item %. 1f"; "Chance to find an Item %. 1f"; -" %.1f"; +"Chance to find Yang %. 1f"; "Chance to find Yang %. 1f"; -"ִ +%d%%"; +"Maximum Energy +%d%%"; "Maximum Energy +%d%%"; -"ִ ŷ +%d%%"; +"Maximum Energy +%d%%"; "Maximum Energy +%d%%"; -"ų %d%%"; +"Skill Damage %d%%"; "Skill Damage %d%%"; -"Ÿ %d%%"; +"Hit Damage %d%%"; "Hit Damage %d%%"; -"ų %d%%"; +"Resistance against Skill Damage %d%%"; "Resistance against Skill Damage %d%%"; -"Ÿ %d%%"; +"Resistance against Hits %d%%"; "Resistance against Hits %d%%"; -"ݿ %d%% "; +"%d%% Resistance against Warrior Attacks"; "%d%% Resistance against Warrior Attacks"; -"ȳϼ. ƾ2 Դϴ."; +"Welcome to Metin2."; "Welcome to Metin2."; -"ڰݿ %d%% "; +"%d%% Resistance against Ninja Attacks"; "%d%% Resistance against Ninja Attacks"; -"ݿ %d%% "; +"%d%% Resistance against Sura Attacks"; "%d%% Resistance against Sura Attacks"; -"ݿ %d%% "; +"%d%% Resistance against Shaman Attacks"; "%d%% Resistance against Shaman Attacks"; -" ( : %d %d %d)"; +"(Procedure: %d y- %d m - %d d)"; "(Procedure: %d y- %d m - %d d)"; -"ä Դϴ."; +"Your chat is blocked."; "Your chat is blocked."; -"ġ ȸ Ҽ ֽϴ"; +"You need a higher level to be able to call."; "You need a higher level to be able to call."; -"ġ %d ̻ մϴ."; +"You need a minimum level of %d to be able to call."; "You need a minimum level of %d to be able to call."; -"Ƽ ƴմϴ."; +"You are not in this Group."; "You are not in this Group."; -"忡 ʾҽϴ."; +"You did not join this Guild."; "You did not join this Guild."; -" ޽ ߰ ź Դϴ."; +"The player has rejected your request to add him to your friend list."; "The player has rejected your request to add him to your friend list."; -"OX ̺Ʈ ۵Ǿϴ."; +"OX Event has started."; "OX Event has started."; -"<޽> ڴ ޽ ߰ ϴ."; +"[Friends] You cannot add a GM to your list."; "[Friends] You cannot add a GM to your list."; -"%s ӵ ʽϴ."; +"%s is not online."; "%s is not online."; -"ŷ %d ̳ â ϴ."; +"After a trade, you have to wait %d seconds before you can open a shop."; "After a trade, you have to wait %d seconds before you can open a shop."; -"â %d ̳ ŷ Ҽ ϴ."; +"You can trade again in %d seconds."; "You can trade again in %d seconds."; -"׼ 20 ʰϿ ŷ Ҽ ϴ.."; +"You have more than 2 Billion Yang. You cannot trade."; "You have more than 2 Billion Yang. You cannot trade."; -"ٸ ŷϰ λ ϴ."; +"You cannot open a private shop while another window is open."; "You cannot open a private shop while another window is open."; -" ѱݾ 20 ʰϿ ŷ Ҽ ϴ.."; +"The player has more than 2 Billion Yang. You cannot trade with him."; "The player has more than 2 Billion Yang. You cannot trade with him."; -"<â> ű ġԴϴ."; +"[Storeroom] No movement possible."; "[Storeroom] No movement possible."; -"<â> ϴ."; +"[Storeroom] The item cannot be stored."; "[Storeroom] The item cannot be stored."; -"<Ƽ> Ƽû ij͸ ã ϴ."; +"[Group] The player who invited you is not online."; "[Group] The player who invited you is not online."; -" Ͽ մϴ."; +"Uriel allowed to enter."; "Uriel allowed to enter."; -"<Ƽ> ֽϴ."; +"[Group] Only the group leader can change this."; "[Group] Only the group leader can change this."; -"<Ƽ> ¸ Ϸ Ƽ ƴմϴ."; +"[Group] The target is not a member of your group."; "[Group] The target is not a member of your group."; -"<Ƽ> ȿ Ƽ ߹ ϴ."; +"[Group] You cannot kick out a player while you are in a dungeon."; "[Group] You cannot kick out a player while you are in a dungeon."; -"<Ƽ> Ƽ ߹ ϴ."; +"[Group] You cannot kick out a player while you are in a dungeon."; "[Group] You cannot kick out a player while you are in a dungeon."; -"<Ƽ> Ƽ ߹ϼ̽ϴ."; +"[Group] You have been out kicked of the group."; "[Group] You have been out kicked of the group."; -"<Ƽ> Ƽ ϴ."; +"[Group] You cannot leave a group while you are in a dungeon."; "[Group] You cannot leave a group while you are in a dungeon."; -"<Ƽ> ٸ Ƽ Żų ϴ."; +"[Group] You cannot kick out group members."; "[Group] You cannot kick out group members."; -"<> ػ %d ̳ 带 ϴ."; +"[Guild] After disbanding a guild, you cannot create a new one for %d days."; "[Guild] After disbanding a guild, you cannot create a new one for %d days."; -"<> Ż %d ̳ 带 ϴ."; +"[Guild] After leaving a guild, you cannot create a new one for %d days."; "[Guild] After leaving a guild, you cannot create a new one for %d days."; -" ̸ Դϴ."; +"This guild name is invalid."; "This guild name is invalid."; -" Ź帳ϴ."; +"We request the participation of a lot of players."; "We request the participation of a lot of players."; -"<> [%s] 尡 Ǿϴ."; +"[Guild] [%s] guild has been created."; "[Guild] [%s] guild has been created."; -"<> Ͽϴ."; +"[Guild] Creation of the guild has failed."; "[Guild] Creation of the guild has failed."; -"<Ƽ> Ƽ Ƽ常 ֽϴ."; +"[Group] Only the group leader can use group skills."; "[Group] Only the group leader can use group skills."; -"<Ƽ> ȯϷ ã ϴ."; +"[Group] The target has not been found."; "[Group] The target has not been found."; -"<> ߸ ݾԴϴ."; +"[Guild] That is not the correct amount of Yang."; "[Guild] That is not the correct amount of Yang."; -"<> ִ մϴ."; +"[Guild] You do not have enough Yang."; "[Guild] You do not have enough Yang."; -"<> ׷ ã ϴ."; +"[Guild] The person you were searching for cannot be found."; "[Guild] The person you were searching for cannot be found."; -"<> 尡 ƴմϴ."; +"[Guild] This person is not in the same guild."; "[Guild] This person is not in the same guild."; -"<> Ż ų ϴ."; +"[Guild] You do not have the authority to kick out guild members."; "[Guild] You do not have the authority to kick out guild members."; -"<> %s Ż ׽ϴ."; +"[Guild] The guild member %s has been kicked out of the Guild."; "[Guild] The guild member %s has been kicked out of the Guild."; -"OX̺Ʈ ʾҰų, Դϴ.(flag: %d)"; +"OX The Event has not ended yet. An error has occurred. (flag: %d)"; "OX The Event has not ended yet. An error has occurred. (flag: %d)"; -"<> Ż ׽ϴ."; +"[Guild] You have kicked a guild member out."; "[Guild] You have kicked a guild member out."; -"<> ̸ ϴ."; +"[Guild] You do not have the authority to change your rank name."; "[Guild] You do not have the authority to change your rank name."; -"<> ̸ ϴ."; +"[Guild] The guild leader's rights cannot be changed."; "[Guild] The guild leader's rights cannot be changed."; -"<> ̸ Դϴ."; +"[Guild] This rank name is invalid."; "[Guild] This rank name is invalid."; -"<> ϴ."; +"[Guild] You do not have the authority to change your position."; "[Guild] You do not have the authority to change your position."; -"<> ϴ."; +"[Guild] The rights of the guild leader cannot be changed."; "[Guild] The rights of the guild leader cannot be changed."; -"<> %u ġ Ͽϴ."; +"[Guild] %u experience points used."; "[Guild] %u experience points used."; -"<> ġ ڿ Ͽϴ."; +"[Guild] Experience usage has failed."; "[Guild] Experience usage has failed."; -"<> մϴ."; +"[Guild] Insufficient Yang in the guild treasury."; "[Guild] Insufficient Yang in the guild treasury."; -"<> ŷ ȸ Ͽϴ."; +"[Guild] Dragon ghost was not restored."; "[Guild] Dragon ghost was not restored."; -" OX ̺Ʈ ٽ ϰڽϴ."; +"The OX Event will be restarted shortly."; "The OX Event will be restarted shortly."; -"<> ۼ ϴ."; +"[Guild] You do not have the authority to make an announcement."; "[Guild] You do not have the authority to make an announcement."; -"<> ϴ."; +"[Guild] You do not have the authority to change the position."; "[Guild] You do not have the authority to change the position."; -"<> ϴ."; +"[Guild] The guild leader's position cannot be changed."; "[Guild] The guild leader's position cannot be changed."; -"<> ϴ."; +"[Guild] You cannot make yourself guild leader."; "[Guild] You cannot make yourself guild leader."; -"<> 屺 ϴ."; +"[Guild] You do not have the authority to choose the guild leader."; "[Guild] You do not have the authority to choose the guild leader."; -"<> ̻ ϴ."; +"[Guild] You cannot choose any more guild leaders."; "[Guild] You cannot choose any more guild leaders."; -" dz ϴ."; +"You cannot trade this item."; "You cannot trade this item."; -"ҹ α׷ Ǿ ˴ϴ."; +"Illegal software has been detected. The game is being shut down."; "Illegal software has been detected. The game is being shut down."; -" 20 Ѿ ŷ ۼ ϴ."; +"You have more than 2 Billion Yang with you. You cannot trade."; "You have more than 2 Billion Yang with you. You cannot trade."; -"ݾ մϴ."; +"Invalid Yang."; "Invalid Yang."; -" ̺Ʈ е ̵ ǰڽϴ."; +"The present event is limited to one area."; "The present event is limited to one area."; -" 귿 ."; +"Start Item Roulette."; "Start Item Roulette."; -"Ӵ 귿 ."; +"Start Yang Roulette."; "Start Yang Roulette."; -" ¶ Դϴ. Ӹ ̿ϼ."; +"The player is online. Please use whisper to chat."; "The player is online. Please use whisper to chat."; -"ڵ ȣ ϵǾ ʽϴ."; +"The cell phone number is not registered."; "The cell phone number is not registered."; -" ޼ 20 ֽϴ."; +"You need to be at least on level 20 to be able to send text messages."; "You need to be at least on level 20 to be able to send text messages."; -" ޼ ۿ 2000 ʿ մϴ."; +"You need 2000 DT to send a text message."; "You need 2000 DT to send a text message."; -" ޼ ߽ϴ."; +"Your text message has been sent."; "Your text message has been sent."; -"%s %s %d%% ߽ϴ!"; +"%s of the Guild %s raised up to %d%% !"; "%s of the Guild %s raised up to %d%% !"; -"%s %s ƿԽϴ."; +"%s of the Guild %s normal again."; "%s of the Guild %s normal again."; -"%s %s %d%% ߽ϴ!"; +"%s: %s has increased by %d%%!"; "%s: %s has increased by %d%%!"; -"%s %s ƿԽϴ."; +"%s 's %s normal again."; "%s 's %s normal again."; -" õ ִ(%d) Ǿϴ."; +"Your mining points have reached their maximum. (%d)"; "Your mining points have reached their maximum. (%d)"; -"̰ ִ õ Ͽϴ."; +"Your mining points have reached their maximum level."; "Your mining points have reached their maximum level."; -"۸ ̷ ׷̵ ֽϴ."; +"You can get lumberjack Deokbae to upgrade your Pickaxe."; "You can get lumberjack Deokbae to upgrade your Pickaxe."; -" õ Ͽϴ! (%d/%d)"; +"Your Mining Points have increased! (%d/%d)"; "Your Mining Points have increased! (%d/%d)"; -"̸ ʾƼ Ķ ϴ."; +"You cannot mine without a Pick."; "You cannot mine without a Pick."; -"̻ ij ϴ."; +"Nothing to mine here."; "Nothing to mine here."; -"ä Ͽϴ."; +"The mining has been successful."; "The mining has been successful."; -"ä Ͽϴ."; +"The mining has failed."; "The mining has failed."; -"<޽> %s ģ ߰Ͽϴ."; +"[Friends] You have added %s as a friend."; "[Friends] You have added %s as a friend."; -" ̵ǰڽϴ."; +"The player will be teleported into the city shortly."; "The player will be teleported into the city shortly."; -"<޽> %s ޽ Ͽϴ."; +"[Friends] You have deleted %s from the list."; "[Friends] You have deleted %s from the list."; -" ġ ߻Ͽ ڵ õ˴ϴ."; +"A critical server error has occurred. The server will restart automatically."; "A critical server error has occurred. The server will restart automatically."; -"10 ڵ Ǹ,"; +"You will be disconnected automatically in 10 seconds."; "You will be disconnected automatically in 10 seconds."; -"5 Ŀ ϽǼ ֽϴ."; +"You can connect again after 5 minutes."; "You can connect again after 5 minutes."; -"(%s) 尡 Ǿϴ. [ӽ]"; +"(%s) guild has been created. [Temporary]"; "(%s) guild has been created. [Temporary]"; -" Դϴ"; +"This guild is at war."; "This guild is at war."; -"%s: ʴ Դϴ."; +"%s: This guild does not exist."; "%s: This guild does not exist."; -"׷ ̸ Ǵ ȣ 尡 ϴ."; +"A guild with this name or number does not exist."; "A guild with this name or number does not exist."; -" ʴ ǹԴϴ."; +"The building does not exist."; "The building does not exist."; -" ǹ ֽϴ."; +"This type of building can only be erected once."; "This type of building can only be erected once."; -"OX̺Ʈ ݾ ּ.(Flag: %d)"; +"Close the OX event card first. (Flag: %d)"; "Close the OX event card first. (Flag: %d)"; -"Ǽ ʿ ǹ ʽϴ."; +"The Main Building has to be erected first."; "The Main Building has to be erected first."; -"ǹ ̻ Ǽ ۾ ߽ϴ."; +"Building failed because of incorrect pricing."; "Building failed because of incorrect pricing."; -"Ǽ մϴ."; +"Your guild does not have enough Yang to erect this building."; "Your guild does not have enough Yang to erect this building."; -"簡 Ͽ Ǽ ϴ."; +"You do not have enough resources to build a building."; "You do not have enough resources to build a building."; -"ǹ ġԴϴ."; +"You cannot erect a building at this place."; "You cannot erect a building at this place."; -" ʴ ij Դϴ."; +"This character does not exist."; "This character does not exist."; -" "; +"Duel has not been successfully cancelled."; "Duel has not been successfully cancelled."; -" "; +"Duel cancelled successfully."; "Duel cancelled successfully."; -" Ǿϴ."; +"The duel has been successfully started."; "The duel has been successfully started."; -" ۿ ֽϴ."; +"There is a problem with initiating the duel."; "There is a problem with initiating the duel."; -" ߽ϴ."; +"No errors occurred."; "No errors occurred."; -"ڰ ϴ."; +"There are no combatants."; "There are no combatants."; -" Ʈ ϴ."; +"No status points left."; "No status points left."; -" Ʈ ϴ."; +"Remaining status points are too low."; "Remaining status points are too low."; -" ߸ ԷϿϴ."; +"You entered an incorrect value."; "You entered an incorrect value."; -"ɾ Ŀǵ尡 ߸ Ǿϴ."; +"Suborder or the Order is incorrect."; "Suborder or the Order is incorrect."; -"÷̾ %d ÷̾ %d ȥŵϴ.."; +"Broken contract between player %d and player %d."; "Broken contract between player %d and player %d."; -" ϴ. ݾ %d"; +"Turn the Roulette for %d Yang."; "Turn the Roulette for %d Yang."; -"۷αװ syslog ҽϴ"; +"The Item log placed into the syslog."; "The Item log placed into the syslog."; -" "; +"Information for the Kingdoms"; "Information for the Kingdoms"; -" %d %d %d %d"; +"Choose the Map Information of the Holy Land %d Entrance %d %d %d"; "Choose the Map Information of the Holy Land %d Entrance %d %d %d"; -" Ͽϴ."; +"An error has occurred."; "An error has occurred."; -"%s killcount %d mobkillcount %d bosskillcount %d Լ %d"; +"%s killcount %d mobkillcount %d bosskillcount %d Number Holy Land %d"; "%s killcount %d mobkillcount %d bosskillcount %d Number Holy Land %d"; -" Ÿ "; +"Information about the status of the kingdom battle"; "Information about the status of the kingdom battle"; -"Ʈ εϴ Դϴ. ø ٷ ֽʽÿ."; +"Your request is loading. Please wait."; "Your request is loading. Please wait."; -"ٸŷâ ¿ â ϴ."; +"You cannot open a Storeroom while another window is open."; "You cannot open a Storeroom while another window is open."; -"<â> â йȣ Ǿϴ."; +"[Storeroom] Storeroom password has been changed."; "[Storeroom] Storeroom password has been changed."; -"<â> йȣ ƲȽϴ."; +"[Storeroom] You have entered the wrong password."; "[Storeroom] You have entered the wrong password."; -"Ⱓ %d ˴ϴ."; +"Your playing time is going to run out in %d minutes."; "Your playing time is going to run out in %d minutes."; -" ǥϿϴ."; +"Regularly voted."; "Regularly voted."; -"̹ǥ "; +"Already voted."; "Already voted."; -"%s ⸶ Ͽϴ."; +"%s player already in the vote."; "%s player already in the vote."; -"OX̺Ʈ ʰų Դϴ.(Flag: %d)"; +"OX Event is over. No errors occurred. (Flag: %d)"; "OX Event is over. No errors occurred. (Flag: %d)"; -"⸶ Ҽ ϴ"; +"Cannot run for office."; "Cannot run for office."; -" %s %lu ֽϴ"; +"%s still has %u Yang available."; "%s still has %u Yang available."; -" %s %d ֽϴ"; +"%s still has %d Yang available."; "%s still has %d Yang available."; -" ϰų ü ȲԴϴ"; +"You do not have enough Yang."; "You do not have enough Yang."; -" %s ĺ Ͽϴ"; +"%s is deleted as an Emperor Candidate."; "%s is deleted as an Emperor Candidate."; -" %s ĺ ƴմϴ."; +"%s is not a candidate for the emperor elections."; "%s is not a candidate for the emperor elections."; -" %s ַ Ը ߽ϴ."; +"%s has been nominated as emperor."; "%s has been nominated as emperor."; -" %s ַ ԸҼ ϴ ."; +"%s cannot be nominated as emperor."; "%s cannot be nominated as emperor."; -" %s ָ Ͽϴ.."; +"The %s Emperor gets driven out."; "The %s Emperor gets driven out."; -" %s ָ Ҽ ϴ."; +"The %s Emperor cannot be driven out."; "The %s Emperor cannot be driven out."; -" ̻ OX̺Ʈ ڸ ʽϴ."; +"OX Event is not accepting any more participants."; "OX Event is not accepting any more participants."; -"ż"; +"Shinsoo Kingdom"; "Shinsoo Kingdom"; -"õ"; +"Chunjo Kingdom"; "Chunjo Kingdom"; -"뱹"; +"Jinno Kingdom"; "Jinno Kingdom"; -"ô õ Ͽϴ! (%d/%d)"; +"Your fishing points have increased! (%d/%d)"; "Your fishing points have increased! (%d/%d)"; -"ô밡 ִ õ Ͽϴ."; +"You have reached the maximum number of fishing points."; "You have reached the maximum number of fishing points."; -"θ ô ׷̵ ֽϴ."; +"Go to the Fisherman and get your Fishing Pole upgraded!"; "Go to the Fisherman and get your Fishing Pole upgraded!"; -"Ⱑ ̳ ԰ ΰ Ĩϴ."; +"You lost your bait to the fish."; "You lost your bait to the fish."; -"Ⱑ ϴ! (%s)"; +"You have caught a fish! (%s)"; "You have caught a fish! (%s)"; -"̹ ̴ %.2fcm"; +"The length of the captured fish is %.2fcm."; "The length of the captured fish is %.2fcm."; -"̺Ʈôؾ"; +"Fishing Event 'Great Zander'"; "Fishing Event 'Great Zander'"; -"OX̺Ʈ ο Ͽϴ."; +"OX The other event participants are being noted down."; "OX The other event participants are being noted down."; -"̺Ʈ׾"; +"Fishing Event 'Carp'"; "Fishing Event 'Carp'"; -"%s : %d "; +"%s: %d"; "%s: %d"; -"%d %d "; +"You have caught %d of %d ."; "You have caught %d of %d ."; -"Ⱑ ϴ."; +"The fish vanished in the depths of the water."; "The fish vanished in the depths of the water."; -" ӿ Խϴ."; +"There is a Clam inside the Fish."; "There is a Clam inside the Fish."; -" ӿ ̰ Խϴ."; +"There is a Worm inside the Fish."; "There is a Worm inside the Fish."; -"%s ϴ."; +"You are roasting %s over the fire."; "You are roasting %s over the fire."; -"20 ʰϿ ϴ"; +"You cannot trade because you are carrying more than 2 billion Yang."; "You cannot trade because you are carrying more than 2 billion Yang."; -"Ӿ  Ե ̸ ϴ."; +"You can't give your shop an invalid name."; "You can't give your shop an invalid name."; -"ȭ λ Ǹ ϴ."; +"You can't sell Item-Shop items in a private shop."; "You can't sell Item-Shop items in a private shop."; -"OX̺Ʈ ο ߽ϴ."; +"OX The other event participants have not been noted down."; "OX The other event participants have not been noted down."; -"ä ߴϿϴ."; +"Mining is finished."; "Mining is finished."; -"̸ ϼ."; +"You need a Pickaxe in order to extract ore!"; "You need a Pickaxe in order to extract ore!"; -"ô븦 ϼ."; +"Please choose a Fishing Pole."; "Please choose a Fishing Pole."; -"̳ ּ."; +"Place the Bait on the Hook first."; "Place the Bait on the Hook first."; -"ô밡 ƴ ø ϴ!"; +"You can't go fishing without a fishing pole!"; "You can't go fishing without a fishing pole!"; -"Ƽ ° ƴ϶ û ϴ."; +"[Group] You cannot make a request because the group leader is not online."; "[Group] You cannot make a request because the group leader is not online."; -"<Ƽ> ٸ Ƽ ̷ ϴ."; +"[Group] You cannot form a group with players from another kingdom."; "[Group] You cannot form a group with players from another kingdom."; -"<Ƽ> ȿ Ƽ ʴ븦 ϴ."; +"[Group] You cannot invite players while you are in a dungeon."; "[Group] You cannot invite players while you are in a dungeon."; -"<Ƽ> 忡 Ƽ ʴ븦 ϴ."; +"[Group] You cannot invite a player while you are in observer mode."; "[Group] You cannot invite a player while you are in observer mode."; -"<Ƽ> -30 ~ +30 ̳ 游 ʴ ֽϴ."; +"[Group] Only players with a level difference of -30 to +30 can be invited."; "[Group] Only players with a level difference of -30 to +30 can be invited."; -" ڼ : %d"; +"Number of other participants : %d"; "Number of other participants : %d"; -"<Ƽ> Ƽ ְ 30 ʴ ϴ."; +"[Group] You cannot invite this player, as their level is too low."; "[Group] You cannot invite this player, as their level is too low."; -"<Ƽ> Ƽ 30 ʴ ϴ."; +"[Group] You cannot invite this player, as their level is too high."; "[Group] You cannot invite this player, as their level is too high."; -"<Ƽ> ̻ Ƽ ʴ ϴ."; +"[Group] You cannot invite any more players into your group."; "[Group] You cannot invite any more players into your group."; -"%s Կ Ƽ û ߽ϴ."; +"You want to join %s's group."; "You want to join %s's group."; -" Ƽ ʽϴ."; +"This player is not in this group."; "This player is not in this group."; -"<Ƽ> Ƽ ο ʰϿ Ƽ ϴ."; +"[Group] You cannot join this group because it is already full."; "[Group] You cannot join this group because it is already full."; -"<Ƽ> Ƽ ʴ ִ ϴ."; +"[Group] You do not have the right to invite someone."; "[Group] You do not have the right to invite someone."; -"<Ƽ> %s Ƽ ź Դϴ."; +"[Group] %s has declined your group invitation."; "[Group] %s has declined your group invitation."; -"<Ƽ> ̹ %s Ƽ ֽϴ."; +"[Group] %s is already in the group."; "[Group] %s is already in the group."; -"<Ƽ> ȿ Ƽ ʴ뿡 ϴ."; +"[Group] You cannot accept an invitation into a dungeon."; "[Group] You cannot accept an invitation into a dungeon."; -"OX ̺Ʈ ġٽϴ."; +"OX Event is finishing."; "OX Event is finishing."; -"OX̺Ʈ ŵϴ."; +"OX Event is finishing."; "OX Event is finishing."; -"<Ƽ> Ƽ ʴ뿡 ϴ."; +"[Group] You cannot accept the invitation."; "[Group] You cannot accept the invitation."; -"<Ƽ> %s Ƽ ʴ븦 ϼ̽ϴ."; +"[Group] %s has declined your invitation."; "[Group] %s has declined your invitation."; -"<Ƽ> %s Ƽ ϼ̽ϴ."; +"[Group] %s has joined your group."; "[Group] %s has joined your group."; -"<Ƽ> %s Ƽ ϼ̽ϴ."; +"[Group] %s has joined your Group."; "[Group] %s has joined your Group."; -"ٸ ŷ(â,ȯ,) λ ϴ."; +"You can't use a private shop now."; "You can't use a private shop now."; -" ٸ ŷ ϰ ִ Դϴ."; +"This player is already trading with another player."; "This player is already trading with another player."; -"ƾ2ȣ: %s"; +"Metin2 Confirmation Number: %s"; "Metin2 Confirmation Number: %s"; -"ȣ ƲȽϴ. ٽ õϼ."; +"Your Confirmation Number is not correct. Please try again."; "Your Confirmation Number is not correct. Please try again."; -"ڵ ȣ Ǿϴ."; +"The mobile phone number is registered."; "The mobile phone number is registered."; -" ִ ϴ."; +"You cannot teleport to the player."; "You cannot teleport to the player."; -"OX ǰ Ͽϴ. ID: %d : %d"; +"OX The prize has been awarded. ID: %d Quantity: %d"; "OX The prize has been awarded. ID: %d Quantity: %d"; -" ¶ ° ƴմϴ."; +"This player is not online."; "This player is not online."; -" %d äο ֽϴ. ( ä %d)"; +"The player is playing on channel %d. (You are on channel %d.)"; "The player is playing on channel %d. (You are on channel %d.)"; -"â %d ̳ ٸ ̵Ҽ ϴ."; +"After opening the Storeroom, you cannot go anywhere else for %d seconds."; "After opening the Storeroom, you cannot go anywhere else for %d seconds."; -"ŷâ,â ¿ ٸ ̵, Ҽ ϴ"; +"You cannot go elsewhere for a period of time after the trade."; "You cannot go elsewhere for a period of time after the trade."; -"ŷ %d ̳ ٸ ̵ ϴ."; +"After trading you cannot go elsewhere for %d seconds."; "After trading you cannot go elsewhere for %d seconds."; -" 밡 մϴ."; +"The duel has finished, because your combatant vanished."; "The duel has finished, because your combatant vanished."; -" ϴ."; +"There is no limit for Potions."; "There is no limit for Potions."; -" %d մϴ."; +"You can use up to %d potions."; "You can use up to %d potions."; -"10ʵ ۵˴ϴ."; +"The fight will start in 10 seconds."; "The fight will start in 10 seconds."; -" ۵Ǿϴ."; +"The duel has begun."; "The duel has begun."; -""; +"TRUE"; "TRUE"; -" Ͽ մϴ."; +"The duel is being finished because there is a problem in the duel arena."; "The duel is being finished because there is a problem in the duel arena."; -" ð ʰ ߴմϴ."; +"The duel has finished because of a timeout."; "The duel has finished because of a timeout."; -"10ʵ ̵մϴ."; +"In 10 seconds you will be teleported into the city."; "In 10 seconds you will be teleported into the city."; -" Ͽ ߴմϴ."; +"The duel has been stopped because there is a problem in the arena."; "The duel has been stopped because there is a problem in the arena."; -" ij Ͽ մϴ."; +"Your combatant has got some problems. The duel is being cancelled."; "Your combatant has got some problems. The duel is being cancelled."; -" Ͽ մϴ."; +"The duel is being cancelled as there is a problem with the combatant."; "The duel is being cancelled as there is a problem with the combatant."; -"%s ÿ ¸Ͽϴ."; +"%s has won the duel."; "%s has won the duel."; -"%s ¸Ͽϴ."; +"%s has won."; "%s has won."; -"10ʵ ǵưϴ."; +"You will be teleported into the city in 10 seconds."; "You will be teleported into the city in 10 seconds."; -"10ʵ մϴ."; +"The next round will begin in 10 seconds."; "The next round will begin in 10 seconds."; -""; +"FALSE"; "FALSE"; -" ijͰ Ͽ մϴ."; +"The combatants have been separated. The duel has been stopped."; "The combatants have been separated. The duel has been stopped."; -" ӷ %d%% ߰ ̺Ʈ Դϴ."; +"The quota of the Item Drop is at the moment plus %d%%"; "The quota of the Item Drop is at the moment plus %d%%"; -" ӷ %d%% ߰ ̺Ʈ Դϴ."; +"The quota of the Yang Drop is at the moment plus %d%%"; "The quota of the Yang Drop is at the moment plus %d%%"; -"ڰ ӷ %d%% ߰ ̺Ʈ Դϴ."; +"The drop rate for Yang rain is currently %d%% higher."; "The drop rate for Yang rain is currently %d%% higher."; -"ġ %d%% ߰ ȹ ̺Ʈ Դϴ."; +"The experience bonus is currently an additional %d%%."; "The experience bonus is currently an additional %d%%."; -"Ŭ̾Ʈ Ʋ α׾ƿ ˴ϴ. ġ ϼ."; +"You do not have the correct client version. Please install the normal patch."; "You do not have the correct client version. Please install the normal patch."; -"ٸ ŷâ ¿ ŷ Ҽ ϴ."; +"You cannot trade in the shop while another window is open."; "You cannot trade in the shop while another window is open."; -" Ÿ ʹ ־ ϴ."; +"You are too far away from the shop to buy something."; "You are too far away from the shop to buy something."; -" Ÿ ʹ ־ ϴ."; +"You are too far away from the shop to sell something."; "You are too far away from the shop to sell something."; -"20 ʰϿ ǰ ȼ ϴ."; +"You cannot trade because you are carrying more than 2 billion Yang."; "You cannot trade because you are carrying more than 2 billion Yang."; -" : %d"; +"Total number of the Quiz: %d"; "Total number of the Quiz: %d"; -"Ǹűݾ %d %% Ե˴ϴ"; +"This sale will be taxed %d%%."; "This sale will be taxed %d%%."; -" ¿ Ż ϴ."; +"You cannot ride a Horse while you are transformed."; "You cannot ride a Horse while you are transformed."; -" ¿ Ż ϴ."; +"You cannot ride while you are wearing a Wedding Dress or a Tuxedo."; "You cannot ride while you are wearing a Wedding Dress or a Tuxedo."; -" ϰ ʽϴ."; +"You do not have a Horse."; "You do not have a Horse."; -" ׾ִ Դϴ."; +"Your Horse is dead."; "Your Horse is dead."; -" ׹̳ʰ Ͽ Ż ϴ."; +"Your Horse's endurance is too low."; "Your Horse's endurance is too low."; -" ȯ Ͽϴ."; +"Calling the Horse has failed."; "Calling the Horse has failed."; -" "; +"'s Horse"; "'s Horse"; -"ȥ ˴ϴ."; +"The wedding is finishing soon."; "The wedding is finishing soon."; -"ڵ Ե˴ϴ."; +"Will be left automatically."; "Will be left automatically."; -"̹ ϴ."; +"The war is already over."; "The war is already over."; -"10ʵ ϰڽϴ."; +"The result will follow in 10 seconds."; "The result will follow in 10 seconds."; -" ¿ ȯ ϴ."; +"You cannot trade while observing."; "You cannot trade while observing."; -"ٸ ŷâ ŷ Ҽ ϴ."; +"If the window is open, you cannot trade with others."; "If the window is open, you cannot trade with others."; -" ٸ ŷ̶ ŷ Ҽ ϴ."; +"The other person is currently busy so you cannot trade right now."; "The other person is currently busy so you cannot trade right now."; -" ȯ ź Դϴ."; +"The other person has cancelled the trade."; "The other person has cancelled the trade."; -" ϰų ڸ ϴ."; +"Not enough Yang or not enough space in the inventory."; "Not enough Yang or not enough space in the inventory."; -" ϰų ڸ ϴ."; +"The other person does not have enough Yang or does not have any space left in their inventory."; "The other person does not have enough Yang or does not have any space left in their inventory."; -" ǰ ϴ."; +"The other person has no space left in their inventory."; "The other person has no space left in their inventory."; -"%s ԰ ȯ Ǿϴ."; +"The trade with %s has been successful."; "The trade with %s has been successful."; -" ȣ ġ ʾҽϴ."; +"You did not lose any Experience because of the Blessing of the Dragon God."; "You did not lose any Experience because of the Blessing of the Dragon God."; -" ھ ż:%d õ:%d 뱹:%d"; +"Current score: Shinsoo %d, Chunjo %d, Jinno %d"; "Current score: Shinsoo %d, Chunjo %d, Jinno %d"; -""; +"The correct answer is:"; "The correct answer is:"; -" %s deadcount %d Empire %d killcount %d(Purpose %d) killmobcount %d, RegenFlag %d"; +"%s deadcount %d Empire %d killcount %d(Purpose %d) killmobcount %d, RegenFlag %d"; "%s deadcount %d Empire %d killcount %d(Purpose %d) killmobcount %d, RegenFlag %d"; -" : "; +"The devil of the hallowed place: [ENTER][ENTER]"; "The devil of the hallowed place: [ENTER][ENTER]"; -"༮ ̰ ڰ Ҿ. Ŷ~~[ENTER][ENTER] 10 Ŀ ̵ϰ ˴ϴ. "; +", you don't have any right to be here! The members of your kingdom will leave this hallowed ground in 10 seconds."; ", you don't have any right to be here! The members of your kingdom will leave this hallowed ground in 10 seconds."; -"Ÿ %s Ż Ͽϴ"; +"%s has been defeated and drops out of the Kingdom Battle."; "%s has been defeated and drops out of the Kingdom Battle."; -"Ÿ "; +"Number of Monsters in the Kingdom Battle:"; "Number of Monsters in the Kingdom Battle:"; -". ȣڸ ȴٸ ȴ.[ENTER][ENTER] "; +"If you defeat the Guard of the Holy Place, you will become the owner of it."; "If you defeat the Guard of the Holy Place, you will become the owner of it."; -" ȣ ʾҽϴ."; +"You did not drop any Item(s) as you are protected by the Dragon God."; "You did not drop any Item(s) as you are protected by the Dragon God."; -" ߰ %d"; +"Additional Stabbing Weapon Damage %d"; "Additional Stabbing Weapon Damage %d"; -"%s ! (%ld%%)"; +"%s block! (%d%%)"; "%s block! (%d%%)"; -"%s ȸ! (%ld%%)"; +"%s avoid! (%d%%)"; "%s avoid! (%d%%)"; -"O Դϴ"; +"Yes (O)"; "Yes (O)"; -"%s[%ld] ġ: %d %d"; +"%s[%d]'s Attack Position: %d %d"; "%s[%d]'s Attack Position: %d %d"; -"ɾ Էϼ."; +"Please enter the Order in full length."; "Please enter the Order in full length."; -"ź ¿ ϴ."; +"You cannot do this whilst sitting on a Horse."; "You cannot do this whilst sitting on a Horse."; -" ¿ ϴ."; +"You cannot do that while you are lying on the ground."; "You cannot do that while you are lying on the ground."; -"޼ӿ Կ?"; +"In my Dreams? What?"; "In my Dreams? What?"; -" Ͼ ."; +"Get up first."; "Get up first."; -"׷ ɾ ϴ"; +"This command does not exist."; "This command does not exist."; -"<Ƽ> Ƽ ػ Ǿϴ."; +"[Group] This group has been disbanded."; "[Group] This group has been disbanded."; -"<Ƽ> ȯ ϴ."; +"[Group] You cannot call the target."; "[Group] You cannot call the target."; -"<Ƽ> Ƽ ġ ȯ ϴ."; +"[Group] You cannot call group members over to your current position."; "[Group] You cannot call group members over to your current position."; -"X Դϴ"; +"No (X)"; "No (X)"; -"Ƽ ݺ ߰ ġ ʽ ޽ϴ."; +"Your group works well together, and group members near the group leader will receive an experience bonus."; "Your group works well together, and group members near the group leader will receive an experience bonus."; -""; +"Leader"; "Leader"; -""; +"Member"; "Member"; -"<> ϰ ϴ ġ ġ ϴ."; +"[Guild] Provided Experience is larger then left Experience."; "[Guild] Provided Experience is larger then left Experience."; -"<> Դϴ."; +"[Guild] This message cannot be deleted."; "[Guild] This message cannot be deleted."; -"<> ŷ մϴ. (%d, %d)"; +"[Guild] Not enough Dragon Ghost. (%d, %d)"; "[Guild] Not enough Dragon Ghost. (%d, %d)"; -"<> Ÿ ʾ ų ϴ."; +"[Guild] You cannot use the guild skills yet."; "[Guild] You cannot use the guild skills yet."; -"<> %d ų (%d, %d) to %lu"; +"[Guild] %d skill has been applied (%d, %d) to %u."; "[Guild] %d skill has been applied (%d, %d) to %u."; -"<> 밡 %d äο ֽϴ. ( ä %d)"; +"[Guild] This player is on channel %d. (Current channel: %d)"; "[Guild] This player is on channel %d. (Current channel: %d)"; -"<> 밡 ¶ ° ƴմϴ."; +"[Guild] This player is not online."; "[Guild] This player is not online."; -"5 Ʋ е ٱ ̵ Űڽϴ."; +"In 5 sec. everyone who gave an incorrect answer will be removed."; "In 5 sec. everyone who gave an incorrect answer will be removed."; -"<> ų ߿ ֽϴ."; +"[Guild] This guild skill can only be used during war."; "[Guild] This guild skill can only be used during war."; -"<> %lu ŷ ȸϿϴ."; +"[Guild] %u Dragon ghost points have been restored."; "[Guild] %u Dragon ghost points have been restored."; -"<> ݰ 常 ֽϴ."; +"[Guild] Only the guild leader can withdraw Yang."; "[Guild] Only the guild leader can withdraw Yang."; -"<> ʴ ź Դϴ."; +"[Guild] The player has declined the guild invitation."; "[Guild] The player has declined the guild invitation."; -"<> ʴ ϴ."; +"[Guild] You do not have the authority to invite someone to join the guild."; "[Guild] You do not have the authority to invite someone to join the guild."; -"<> ٸ 忡 ʴ ϴ."; +"[Guild] You cannot invite players from another kingdom into the guild."; "[Guild] You cannot invite players from another kingdom into the guild."; -"<> Ż %d 忡 ʴ ϴ."; +"[Guild] This player can be invited again after %d day(s)."; "[Guild] This player can be invited again after %d day(s)."; -"<> 带 ػ %d 忡 ʴ ϴ."; +"[Guild] After the rearrangement you can invite members again after %d days."; "[Guild] After the rearrangement you can invite members again after %d days."; -"<> ̹ ٸ 忡 ֽϴ."; +"[Guild] This person is already a member of another Guild."; "[Guild] This person is already a member of another Guild."; -"<> ִ ʰ߽ϴ."; +"[Guild] The maximum guild capacity has been reached."; "[Guild] The maximum guild capacity has been reached."; -" غּ."; +"Ready for the next question?"; "Ready for the next question?"; -" ųԴϴ."; +"You cannot train this skill."; "You cannot train this skill."; -" ̻ ϴ."; +"You cannot train this skill."; "You cannot train this skill."; -"׷ ųԴϴ."; +"You cannot train this skill up to Grand Master level."; "You cannot train this skill up to Grand Master level."; -"Ʈ ͵ ųԴϴ. ̻ ϴ."; +"You already are a Master of this skill. You cannot train this skill any further."; "You already are a Master of this skill. You cannot train this skill any further."; -" ų ׷ ̸ ʾҽϴ."; +"Your Skill is not high enough to become a Grand Master."; "Your Skill is not high enough to become a Grand Master."; -"ũ, Ⱑ ϰ ־! ̰ ȭԸΰ!? !"; +"That did not work. Damn!"; "That did not work. Damn!"; -" з ϴ. ٽ ֽñ ٶϴ."; +"Training has failed. Please try again later."; "Training has failed. Please try again later."; -" ̾!"; +"My body is full of energy!"; "My body is full of energy!"; -"߰ſ ġ ־! ̰, ̰!"; +"The training seems to be working already..."; "The training seems to be working already..."; -" ̽ϴ."; +"You successfully finished your training with the book."; "You successfully finished your training with the book."; -"ġ Ͽ å ϴ."; +"You cannot read this due to your lack of experience."; "You cannot read this due to your lack of experience."; -"Pregunta."; +"Question."; "Question."; -" ų å ̻ ϴ."; +"You cannot train this skill with a Book."; "You cannot train this skill with a Book."; -" ų å ̸ ʾҽϴ."; +"This skill's level is not high enough to be trained with a Book."; "This skill's level is not high enough to be trained with a Book."; -" ذ Ǿ ѵ ѵ.."; +"I'm making progress, but I still haven't understood everything."; "I'm making progress, but I still haven't understood everything."; -" ̴ ǰ... ϱⰡ ʹ .."; +"These instructions are difficult to understand. I have to carry on studying."; "These instructions are difficult to understand. I have to carry on studying."; -" ϴ ͸ ִ ̴.."; +"I understand this chapter. But I've got to carry on working hard."; "I understand this chapter. But I've got to carry on working hard."; -"å ̽ϴ."; +"You have successfully finished your training with the Book."; "You have successfully finished your training with the Book."; -"ȯ Ͽϴ."; +"Teleportation has failed."; "Teleportation has failed."; -" ϴ. ° ãư."; +"No Horse here. Ask the Stable Boy."; "No Horse here. Ask the Stable Boy."; -" ȯ ϼ."; +"Please use an item to call a Horse."; "Please use an item to call a Horse."; -"%s SPҸ: %d"; +"%s FP-Consumption: %d"; "%s FP-Consumption: %d"; -" O, Ʋ X ̵ּ"; +"If it's correct, then go to O. If it's wrong, go to X."; "If it's correct, then go to O. If it's wrong, go to X."; -" ̱߰. . ̴ ⸦ Ű."; +"I am burning inside, but it is calming down my body. My Chi has to stabilise."; "I am burning inside, but it is calming down my body. My Chi has to stabilise."; -"׷, õõ. õõ, ׷ !"; +"A little slow, but steady... Without stopping!"; "A little slow, but steady... Without stopping!"; -"׷, ̾. ü Ⱑ 游."; +"Yes, that feels great. My body is full of Chi."; "Yes, that feels great. My body is full of Chi."; -" о! ޿ ִ ſ ⸦ ⸸ ϸ,"; +"I have read it! Now the Chi will spread through my body."; "I have read it! Now the Chi will spread through my body."; -"װ ž!"; +"The training is completed."; "The training is completed."; -" å ̾! ̰ ־!"; +"I am on the last page of the book. The training is nearly finished!"; "I am on the last page of the book. The training is nearly finished!"; -" Ҿ! ݸ !"; +"Nearly finished! Just a little bit more to go!"; "Nearly finished! Just a little bit more to go!"; -"Ҿ! ݸ ̴!"; +"Eureka! I have nearly finished reading it!"; "Eureka! I have nearly finished reading it!"; -"å嵵 ʾұ."; +"Only a few more pages and then I'll have read everything."; "Only a few more pages and then I'll have read everything."; -" ȿ ."; +"I feel refreshed."; "I feel refreshed."; -"Դϴ!"; +"Correct!"; "Correct!"; -" ."; +"Now I understand it!"; "Now I understand it!"; -", ⼼ !"; +"Okay I have to stay concentrated!"; "Okay I have to stay concentrated!"; -"ƴ  о Ӹ ."; +"I keep reading the same line over and over again."; "I keep reading the same line over and over again."; -"ϱ Ⱦ."; +"I do not want to learn any more."; "I do not want to learn any more."; -"ŭ бⰡ ʱ. ص ư 뵵 ."; +"It is a lot more complicated and more difficult to understand than I thought."; "It is a lot more complicated and more difficult to understand than I thought."; -"̷ ΰ ȵȴٱ."; +"It's hard for me to concentrate. I should take a break."; "It's hard for me to concentrate. I should take a break."; -" ä Ǿϴ."; +"Your chat has been blocked by a GM."; "Your chat has been blocked by a GM."; -"ä ǮȽϴ."; +"Your chat block has been lifted."; "Your chat block has been lifted."; -"̹ â ֽϴ."; +"The Build window is already open."; "The Build window is already open."; -"ٸ ŷ(â,ȯ,) ϴ."; +"You cannot build something while another trade/storeroom window is open."; "You cannot build something while another trade/storeroom window is open."; -" ̻ ϴ."; +"No further improvements possible."; "No further improvements possible."; -"â ʽϴ"; +"The build window is not open."; "The build window is not open."; -" ᰡ մϴ"; +"You do not have the right material."; "You do not have the right material."; -"<> Ŀ ֽ̿ʽÿ"; +"[Guild] Please try again later."; "[Guild] Please try again later."; -"%d о Ϸ ֽϴ."; +"You have to read %d more skill books to improve this skill."; "You have to read %d more skill books to improve this skill."; -"<> Ŀ ֽ̿ʽÿ."; +"[Guild] Please try again later."; "[Guild] Please try again later."; -" ִ Դϴ."; +"You are only able to use this function while you are at the castle."; "You are only able to use this function while you are at the castle."; -"TEST : Ȳݵβ ȯǾϴ."; +"TEST: The Gold Bar has been paid back to your kingdom's safe."; "TEST: The Gold Bar has been paid back to your kingdom's safe."; -"TEST : : %d"; +"TEST: In your kingdom's safe there are: %d"; "TEST: In your kingdom's safe there are: %d"; -"TEST : Ȳݵβ ȯ ϴ."; +"TEST: You cannot pay the Gold Bar back into your kingdom's safe."; "TEST: You cannot pay the Gold Bar back into your kingdom's safe."; -"<> %d Ǿϴ"; +"[Guild] The guild has reached %d points."; "[Guild] The guild has reached %d points."; -" ϴ."; +"This item cannot be improved."; "This item cannot be improved."; -" ȸ 20 ⸸ մϴ"; +"The free weapon improvements can only be used on weapons up to level 20."; "The free weapon improvements can only be used on weapons up to level 20."; -" ʾ ϴ."; +"You cannot use this item because you do not fulfil all the requirements."; "You cannot use this item because you do not fulfil all the requirements."; -" ʾ ϴ."; +"You are not able to use that item because you do not have the right gender."; "You are not able to use that item because you do not have the right gender."; -": transfer "; +"Use: transfer "; "Use: transfer "; -"ָ Դϴ"; +"This function can only be used by the emperor."; "This function can only be used by the emperor."; -"ٸ ȯ ϴ."; +"You cannot recruit players from another kingdom."; "You cannot recruit players from another kingdom."; -"%s %d äο Դϴ. ( ä: %d)"; +"The player %s is on channel %d at the moment. (Your channel: %d)"; "The player %s is on channel %d at the moment. (Your channel: %d)"; -"%s ȯϿϴ."; +"You have recruited %s players."; "You have recruited %s players."; -"ԷϽ ̸ ڰ ϴ."; +"There is no user with this name."; "There is no user with this name."; -"ڽ ȯ ϴ."; +"You cannot recruit yourself."; "You cannot recruit yourself."; -" Ѻ ϴ."; +"Your level is too low to use this item."; "Your level is too low to use this item."; -"â,ŷâ ¿ Ҽ ϴ"; +"You cannot upgrade anything while another window is open."; "You cannot upgrade anything while another window is open."; -"%s ְ %s üǾϴ."; +"The emperor of %s has changed to %s."; "The emperor of %s has changed to %s."; -"%s ȭ ѷΰ Դϴ."; +"There are %s wars to inflame the bonfires."; "There are %s wars to inflame the bonfires."; -"%s ߽ϴ."; +"%s has successfully defended."; "%s has successfully defended."; -"ݺ %s 30а ȭ ıϿ ȹ ֽϴ."; +"30 minutes from now on the player %s can get a reward because he destroyed the bonfire."; "30 minutes from now on the player %s can get a reward because he destroyed the bonfire."; -"30 ߽ϴ.. ȭ ϴ."; +"30 minutes are over. The bonfires have disappeared."; "30 minutes are over. The bonfires have disappeared."; -"%s ˸ ȭ Ÿϴ."; +"A bonfire was inflamed at %s to warn because of a battle."; "A bonfire was inflamed at %s to warn because of a battle."; -"%s ȭ ı߽ϴ."; +"%s has destroyed the bonfire."; "%s has destroyed the bonfire."; -"%s Ͽ £ йϿϴ.."; +"%s lost the war as they have not been able to defend the castle."; "%s lost the war as they have not been able to defend the castle."; -"%s ȭ ıϿϴ."; +"%s has destroyed all the bonfires."; "%s has destroyed all the bonfires."; -" ֽϴ."; +"You can only open the shop if you take off your armour."; "You can only open the shop if you take off your armour."; -"%d ð %d %d äñ Դϴ"; +"%d hours %d minutes %d seconds left on your chat block"; "%d hours %d minutes %d seconds left on your chat block"; -"%d ð %d äñ Դϴ"; +"%d hours %d seconds left on your chat block"; "%d hours %d seconds left on your chat block"; -"%d %d äñ Դϴ"; +"%d minutes %d seconds left on your chat block"; "%d minutes %d seconds left on your chat block"; -" Ȯ"; +"Yang rain drop rate"; "Yang rain drop rate"; -" ϱ ᰡ մϴ."; +"Not the right material for an upgrade."; "Not the right material for an upgrade."; -""; +"All kingdoms"; "All kingdoms"; -" Ȯ"; +"Item drop rate in percent"; "Item drop rate in percent"; -" Ȯ"; +"Yang drop rate in percent"; "Yang drop rate in percent"; -"ġ "; +"Experience percentage"; "Experience percentage"; -"%d äñ Դϴ"; +"%d seconds left on your chat block"; "%d seconds left on your chat block"; -" ź ¿ ǥ ϴ."; +"You cannot express emotions whilst riding a horse."; "You cannot express emotions whilst riding a horse."; -" ź ǥ ϴ."; +"You cannot use emotions with a player who is riding on a Horse."; "You cannot use emotions with a player who is riding on a Horse."; -"<> ƴմϴ."; +"[Guild] The enemy's guild leader is offline."; "[Guild] The enemy's guild leader is offline."; -" ʾ ϴ."; +"[Guild] The enemy's guild leader is offline."; "[Guild] The enemy's guild leader is offline."; -"<> ̹ Դϴ."; +"[Guild] This guild is taking part in a battle at the moment."; "[Guild] This guild is taking part in a battle at the moment."; -"̹ Ż ̿Դϴ."; +"You're already riding. Get off first."; "You're already riding. Get off first."; -" ̻ ϴ."; +"You cannot upgrade items with this Scroll."; "You cannot upgrade items with this Scroll."; -" Ÿ Ϸ ѹ 밡մϴ."; +"You can only be rewarded once for the Demon Tower Quest."; "You can only be rewarded once for the Demon Tower Quest."; -"ȥ ⿡ Ͽϴ."; +"Dragon Stone has been removed."; "Dragon Stone has been removed."; -"ȭâ ¿ ű ϴ."; +"You cannot move the item within the refinement window."; "You cannot move the item within the refinement window."; -" ⿡ Ͽϴ."; +"Dragon Stone remaining duration has been extracted."; "Dragon Stone remaining duration has been extracted."; -" ⿡ Ͽϴ."; +"Remaining duration extraction failed."; "Remaining duration extraction failed."; -"ȥ ⿡ Ͽ %s ϴ."; +"Removal of Dragon Stone failed. But you have received the following: %s"; "Removal of Dragon Stone failed. But you have received the following: %s"; -"ȥ ⿡ Ͽϴ."; +"Removal of Dragon Stone failed."; "Removal of Dragon Stone failed."; -" ʿ ᰡ ƴմϴ."; +"This item is not required for improving the clarity level."; "This item is not required for improving the clarity level."; -"ȭ ʿ ᰡ ƴմϴ."; +"This item is not required for improving the clarity level."; "This item is not required for improving the clarity level."; -" ȥԴϴ."; +"This item cannot be advanced this way."; "This item cannot be advanced this way."; -" δ ϴ."; +"This item cannot be advanced this way."; "This item cannot be advanced this way."; -"ܰ ߽ϴ."; +"Improvement of the clarity level successful."; "Improvement of the clarity level successful."; -" ߽ϴ."; +"Refinement up one class failed."; "Refinement up one class failed."; -"ܰ ȥԴϴ."; +"This item is not required for refinement."; "This item is not required for refinement."; -" ߽ϴ."; +"Refinement up one class was successful."; "Refinement up one class was successful."; -"ܰ ߽ϴ."; +"Improvement of the clarity level failed."; "Improvement of the clarity level failed."; -"ܰ ʿ ᰡ ƴմϴ."; +"You do not own the materials required to strengthen the Dragon Stone."; "You do not own the materials required to strengthen the Dragon Stone."; -"ȭ ȥԴϴ."; +"This Dragon Stone cannot be used for strengthening."; "This Dragon Stone cannot be used for strengthening."; -"ȭ ߽ϴ."; +"Strengthening was successful."; "Strengthening was successful."; -"ȭ ߽ϴ."; +"Strengthening failed."; "Strengthening failed."; -"̹ ȥ ϰ ֽϴ."; +"You are already carrying a Dragon Stone of this type."; "You are already carrying a Dragon Stone of this type."; -" ȥ ϴ."; +"The Dragon Stone cannot be removed."; "The Dragon Stone cannot be removed."; -"̹ ϰ ֽϴ."; +"You have already equipped this kind of Dragon Stone."; "You have already equipped this kind of Dragon Stone."; -"κ Ȱȭ ."; +"Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy."; "Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy."; -" ȥ Ʈ Ϸϼž մϴ."; +"Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy."; "Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy."; -"Ʈ κ丮 ϸ ϴ."; +"You can only discard the belt when there are no longer any items in its inventory."; "You can only discard the belt when there are no longer any items in its inventory."; -"ູ ö ĥ ֽϴ."; +"You can combine the Blessing Scroll with the Magic Iron Ore."; "You can combine the Blessing Scroll with the Magic Iron Ore."; -" Ʈ κ丮 ű ϴ."; +"You cannot equip this item in your belt inventory."; "You cannot equip this item in your belt inventory."; -" ĥ ϴ."; +"[1106-??]No puedes unir esto."; "[1106-??]No puedes unir esto."; -"%d ϼ̽ϴ."; +"You have invested %d Yang."; "You have invested %d Yang."; -" ִ ƾ ϴ."; +"There is no Stone available to take out."; "There is no Stone available to take out."; -" ġ Դϴ."; +"You cannot store this location."; "You cannot store this location."; -"ǰ ϴ."; +"There isn't enough space in your inventory."; "There isn't enough space in your inventory."; -" ġ Ÿ ־ ȯ ϴ."; +"You cannot teleport to a safe position in a foreign Kingdom."; "You cannot teleport to a safe position in a foreign Kingdom."; -" ڶ ϴ."; +"You don't have enough HP."; "You don't have enough HP."; -" ŷ ڶ ϴ."; +"You don't have enough Spell Points (SP) to use this."; "You don't have enough Spell Points (SP) to use this."; -"%d ̵˴ϴ."; +"You'll reach your destination in %d seconds."; "You'll reach your destination in %d seconds."; -" Ѻ ϴ."; +"Your level is too low to use this item."; "Your level is too low to use this item."; -", 5ʵ Ҽ ϴ. "; +"You can only use a Moon Cake every 5 seconds."; "You can only use a Moon Cake every 5 seconds."; -" ߿ ̿ ǰԴϴ."; +"You cannot use this item in a duel."; "You cannot use this item in a duel."; -"%d ȹϼ̽ϴ."; +"You have won %d Yang."; "You have won %d Yang."; -"ں ǿ Դϴ."; +"You cannot build a campfire here."; "You cannot build a campfire here."; -" ӿ ں ǿ ϴ."; +"You cannot build a campfire under water."; "You cannot build a campfire under water."; -" ־ ʴ° . 踦 غ."; +"Closed. You should look for the key."; "Closed. You should look for the key."; -" ƴѰ ."; +"This item cannot be opened with a key."; "This item cannot be opened with a key."; -" ִ κ ȵǾϴ."; +"That's the right key."; "That's the right key."; -" %d ȹ߽ϴ."; +"You have received %d Yang."; "You have received %d Yang."; -"ڿ ź ɴϴ."; +"A mysterious light comes out of the box."; "A mysterious light comes out of the box."; -"%d ġ ȹ߽ϴ."; +"You have received %d experience points."; "You have received %d experience points."; -"ڿ Ͱ Ÿϴ!"; +"Look what came out of the box!"; "Look what came out of the box!"; -"<> ڶ ϴ."; +"[Guild] The guild level is too low."; "[Guild] The guild level is too low."; -"ڿ ⸦ ̸ ̴ ӵ ϴ!"; +"If you inhale the red smoke coming out of the box, your speed will increase!"; "If you inhale the red smoke coming out of the box, your speed will increase!"; -" ̻ Ӽ ߰ ϴ"; +"You cannot add more bonus."; "You cannot add more bonus."; -" Ӽ ߰ Ǿϴ"; +"New bonus added successfully."; "New bonus added successfully."; -" ų Ӽ ϴ"; +"You cannot change the bonuses."; "You cannot change the bonuses."; -"%s ʿմϴ."; +"%s needed."; "%s needed."; -" Դϴ."; +"OX-Question: "; "OX-Question: "; diff --git a/src/common/VnumHelper.h b/src/common/VnumHelper.h index c025f9d..82635e5 100644 --- a/src/common/VnumHelper.h +++ b/src/common/VnumHelper.h @@ -2,15 +2,15 @@ #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 5dbebc2..b269b37 100644 --- a/src/common/auction_table.h +++ b/src/common/auction_table.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/building.h b/src/common/building.h index 6fcd8d9..f495f87 100644 --- a/src/common/building.h +++ b/src/common/building.h @@ -41,8 +41,8 @@ namespace building int lNPCX; int lNPCY; - DWORD dwGroupVnum; // ׷ ϳ Ǽ - DWORD dwDependOnGroupVnum; // ־ϴ ׷ + DWORD dwGroupVnum; // 같은 그룹은 하나만 건설가능 + DWORD dwDependOnGroupVnum; // 지어져 있어야하는 그룹 } TObjectProto; typedef struct SObject diff --git a/src/common/item_length.h b/src/common/item_length.h index 7a2083d..279d74f 100644 --- a/src/common/item_length.h +++ b/src/common/item_length.h @@ -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 @@ -337,16 +337,16 @@ enum ELimitTypes // TODO: Remove this and re-check the validity of item_proto afterwards 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 8bd31a4..a22cea8 100644 --- a/src/common/length.h +++ b/src/common/length.h @@ -21,10 +21,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, @@ -78,19 +78,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 - | ̻ | + | 미사용 | +------------------------------------------------------+ ?? */ }; @@ -125,10 +125,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 // }; @@ -139,7 +139,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 @@ -161,7 +161,7 @@ enum EDirection DIR_MAX_NUM }; -#define ABILITY_MAX_LEVEL 10 /* ִ */ +#define ABILITY_MAX_LEVEL 10 /* 기술 최대 레벨 */ enum EAbilityDifficulty { @@ -174,9 +174,9 @@ enum EAbilityDifficulty enum EAbilityCategory { - CATEGORY_PHYSICAL, /* ü Ƽ */ - CATEGORY_MENTAL, /* Ƽ */ - CATEGORY_ATTRIBUTE, /* ɷ Ƽ */ + CATEGORY_PHYSICAL, /* 신체적 어빌리티 */ + CATEGORY_MENTAL, /* 정신적 어빌리티 */ + CATEGORY_ATTRIBUTE, /* 능력 어빌리티 */ CATEGORY_NUM_TYPES }; @@ -246,13 +246,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, @@ -395,38 +395,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, // @@ -578,7 +578,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, }; @@ -622,13 +622,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 }; @@ -658,10 +658,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 @@ -676,10 +676,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 { @@ -728,7 +728,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/tables.h b/src/common/tables.h index ce4e54b..e8edb72 100644 --- a/src/common/tables.h +++ b/src/common/tables.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 { @@ -99,22 +99,22 @@ enum HEADER_GD_LOGIN_BY_KEY = 101, 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, 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, @@ -126,7 +126,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, @@ -238,17 +238,17 @@ 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, @@ -343,7 +343,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]; @@ -550,9 +550,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 @@ -616,12 +616,12 @@ typedef struct SItemTable : public SEntityTable BYTE bSpecular; BYTE bGainSocketPct; - WORD sAddonType; // ⺻ Ӽ + WORD 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; @@ -659,7 +659,7 @@ typedef struct SPlayerLoadPacket { DWORD account_id; DWORD player_id; - BYTE account_index; /* account ġ */ + BYTE account_index; /* account 에서의 위치 */ } TPlayerLoadPacket; typedef struct SPlayerCreatePacket @@ -736,9 +736,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[MAP_ALLOW_MAX_LEN]; DWORD dwLoginCount; BYTE bAuthServer; @@ -908,8 +908,8 @@ typedef struct SPacketGuildWar LONG lInitialScore; } TPacketGuildWar; -// Game -> DB : ȭ -// DB -> Game : Ż +// Game -> DB : 상대적 변화값 +// DB -> Game : 토탈된 최종값 typedef struct SPacketGuildWarScore { DWORD dwGuildGainPoint; @@ -930,8 +930,8 @@ typedef struct SRefineTable //DWORD result_vnum; DWORD id; BYTE material_count; - DWORD cost; // ҿ - DWORD prob; // Ȯ + DWORD cost; // 소요 비용 + DWORD prob; // 확률 TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM]; } TRefineTable; @@ -1006,14 +1006,14 @@ typedef struct SPacketGDLoginByKey } TPacketGDLoginByKey; /** - * @version 05/06/08 Bang2ni - ӽð ߰ + * @version 05/06/08 Bang2ni - 지속시간 추가 */ typedef struct SPacketGiveGuildPriv { BYTE type; DWORD value; DWORD guild_id; - time_t duration_sec; ///< ӽð + time_t duration_sec; ///< 지속시간 } TPacketGiveGuildPriv; typedef struct SPacketGiveEmpirePriv { @@ -1048,7 +1048,7 @@ typedef struct SPacketDGChangeCharacterPriv } TPacketDGChangeCharacterPriv; /** - * @version 05/06/08 Bang2ni - ӽð ߰ + * @version 05/06/08 Bang2ni - 지속시간 추가 */ typedef struct SPacketDGChangeGuildPriv { @@ -1056,7 +1056,7 @@ typedef struct SPacketDGChangeGuildPriv DWORD value; DWORD guild_id; BYTE bLog; - time_t end_time_sec; ///< ӽð + time_t end_time_sec; ///< 지속시간 } TPacketDGChangeGuildPriv; typedef struct SPacketDGChangeEmpirePriv @@ -1208,27 +1208,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 @@ -1240,12 +1240,12 @@ typedef struct //ADMIN_MANAGER typedef struct TAdminInfo { - DWORD m_ID; //ID - char m_szAccount[32]; // - char m_szName[32]; //ij̸ - char m_szContactIP[16]; //پ - char m_szServerIP[16]; // - DWORD m_Authority; // + DWORD m_ID; //고유ID + char m_szAccount[32]; //계정 + char m_szName[32]; //캐릭터이름 + char m_szContactIP[16]; //접근아이피 + char m_szServerIP[16]; //서버아이피 + DWORD m_Authority; //권한 } tAdminInfo; //END_ADMIN_MANAGER @@ -1266,20 +1266,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; @@ -1331,14 +1331,14 @@ typedef struct tNeedLoginLogInfo DWORD dwPlayerID; } TPacketNeedLoginLogInfo; -// ˸ ׽Ʈ Ŷ +//독일 선물 알림 기능 테스트용 패킷 정보 typedef struct tItemAwardInformer { char login[LOGIN_MAX_LEN + 1]; - char command[20]; //ɾ - DWORD vnum; // + char command[20]; //명령어 + DWORD vnum; //아이템 } TPacketItemAwardInfromer; -// ˸ Ŷ +// 선물 알림 기능 삭제용 패킷 정보 typedef struct tDeleteAwardID { DWORD dwID; diff --git a/src/db/src/AuctionManager.cpp b/src/db/src/AuctionManager.cpp index a28bb3e..d06859a 100644 --- a/src/db/src/AuctionManager.cpp +++ b/src/db/src/AuctionManager.cpp @@ -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/src/AuctionManager.h b/src/db/src/AuctionManager.h index bb6c2c8..8155c63 100644 --- a/src/db/src/AuctionManager.h +++ b/src/db/src/AuctionManager.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/src/Cache.cpp b/src/db/src/Cache.cpp index 106afae..7a802c6 100644 --- a/src/db/src/Cache.cpp +++ b/src/db/src/Cache.cpp @@ -29,12 +29,12 @@ CItemCache::~CItemCache() { } -// ̰ ̻ѵ... -// Delete , Cache ؾ ϴ° ƴѰ??? -// ٵ Cache ϴ κ . -// ã ǰ? -// ̷ س, ð ... -// ̹ ε... Ȯλ?????? +// 이거 이상한데... +// Delete를 했으면, Cache도 해제해야 하는것 아닌가??? +// 근데 Cache를 해제하는 부분이 없어. +// 못 찾은 건가? +// 이렇게 해놓으면, 계속 시간이 될 때마다 아이템을 계속 지워... +// 이미 사라진 아이템인데... 확인사살?????? // fixme // by rtsummit void CItemCache::Delete() @@ -52,12 +52,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); @@ -186,7 +186,7 @@ CItemPriceListTableCache::CItemPriceListTableCache() void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList) { // - // ̹ ij̵ ۰ ߺ ã ߺ ʴ tmpvec ִ´. + // 이미 캐싱된 아이템과 중복된 아이템을 찾고 중복되지 않는 이전 정보는 tmpvec 에 넣는다. // std::vector tmpvec; @@ -202,7 +202,7 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList } // - // pUpdateList m_data ϰ tmpvec տ ŭ Ѵ. + // pUpdateList 를 m_data 에 복사하고 남은 공간을 tmpvec 의 앞에서 부터 남은 만큼 복사한다. // if (pUpdateList->byCount > SHOP_PRICELIST_MAX_NUM) @@ -215,7 +215,7 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList memcpy(m_data.aPriceInfo, pUpdateList->aPriceInfo, sizeof(TItemPriceInfo) * pUpdateList->byCount); - int nDeletedNum; // + int nDeletedNum; // 삭제된 가격정보의 갯수 if (pUpdateList->byCount < SHOP_PRICELIST_MAX_NUM) { @@ -244,14 +244,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/src/Cache.h b/src/db/src/Cache.h index 5347937..f2ba3bf 100644 --- a/src/db/src/Cache.h +++ b/src/db/src/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/src/ClientManager.cpp b/src/db/src/ClientManager.cpp index 8ed96d4..5e16127 100644 --- a/src/db/src/ClientManager.cpp +++ b/src/db/src/ClientManager.cpp @@ -246,7 +246,7 @@ bool CClientManager::Initialize() LoadEventFlag(); - // database character-set + // database character-set을 강제로 맞춤 if (g_stLocale == "big5" || g_stLocale == "sjis") CDBManager::instance().QueryLocaleSet(); @@ -259,7 +259,7 @@ void CClientManager::MainLoop() SPDLOG_DEBUG("ClientManager pointer is {}", (void*) this); - // η + // 메인루프 while (!m_bShutdowned) { while ((tmp = CDBManager::instance().PopResult())) @@ -273,7 +273,7 @@ void CClientManager::MainLoop() } // - // η ó + // 메인루프 종료처리 // SPDLOG_DEBUG("MainLoop exited, Starting cache flushing"); @@ -281,7 +281,7 @@ void CClientManager::MainLoop() itertype(m_map_playerCache) it = m_map_playerCache.begin(); - //÷̾ ̺ ij ÷ + //플레이어 테이블 캐쉬 플러쉬 while (it != m_map_playerCache.end()) { CPlayerTableCache * c = (it++)->second; @@ -293,7 +293,7 @@ void CClientManager::MainLoop() itertype(m_map_itemCache) it2 = m_map_itemCache.begin(); - // ÷ + //아이템 플러쉬 while (it2 != m_map_itemCache.end()) { CItemCache * c = (it2++)->second; @@ -305,7 +305,7 @@ void CClientManager::MainLoop() // MYSHOP_PRICE_LIST // - // λ Ʈ Flush + // 개인상점 아이템 가격 리스트 Flush // for (itertype(m_mapItemPriceListCache) itPriceList = m_mapItemPriceListCache.begin(); itPriceList != m_mapItemPriceListCache.end(); ++itPriceList) { @@ -325,7 +325,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; @@ -582,9 +582,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) { @@ -609,7 +609,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))) { @@ -675,8 +675,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg) } - // ־Ƿ â ִ ó - // ̱ â ƾ ȿ° + // 쿼리에 에러가 있었으므로 응답할 경우 창고가 비어있는 것 처럼 + // 보이기 때문에 창고가 아얘 안열리는게 나음 if (!msg->Get()->pSQLResult) { SPDLOG_ERROR("null safebox result"); @@ -785,8 +785,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) @@ -898,7 +898,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]; @@ -986,7 +986,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg) TItemPricelistReqInfo* pReqInfo = (TItemPricelistReqInfo*)static_cast(pMsg->pvUserData)->pvData; // - // DB ε Cache + // DB 에서 로드한 정보를 Cache 에 저장 // TItemPriceListTable table; @@ -1005,7 +1005,7 @@ void CClientManager::RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg) PutItemPriceListCache(&table); // - // ε ͸ Game server + // 로드한 데이터를 Game server 에 전송 // TPacketMyshopPricelistHeader header; @@ -1029,7 +1029,7 @@ void CClientManager::RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg) TItemPriceListTable* pUpdateTable = (TItemPriceListTable*)static_cast(pMsg->pvUserData)->pvData; // - // DB ε Cache + // DB 에서 로드한 정보를 Cache 에 저장 // TItemPriceListTable table; @@ -1091,18 +1091,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) @@ -1152,7 +1152,7 @@ void CClientManager::QUERY_SETUP(CPeer * peer, DWORD dwHandle, const char * c_pD peer->SetMaps(p->alMaps); // - //   ִ + // 어떤 맵이 어떤 서버에 있는지 보내기 // TMapLocation kMapLocations; @@ -1259,7 +1259,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 컨넥션 생성) // SPDLOG_DEBUG("SETUP: channel {} listen {} p2p {} count {}", peer->GetChannel(), p->wListenPort, p->wP2PPort, bMapCount); @@ -1275,7 +1275,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; @@ -1337,8 +1337,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) { @@ -1473,7 +1473,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) c = GetItemCache(pNew->id); - // + // 아이템 새로 생성 if (!c) { SPDLOG_TRACE("ITEM_CACHE: PutItemCache ==> New CItemCache id{} vnum{} new owner{}", pNew->id, pNew->vnum, pNew->owner); @@ -1481,15 +1481,15 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) c = new CItemCache; m_map_itemCache.insert(TItemCacheMap::value_type(pNew->id, c)); } - // + // 있을시 else { SPDLOG_TRACE("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()) @@ -1500,7 +1500,7 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) } } - // ο Ʈ + // 새로운 정보 업데이트 c->Put(pNew, bSkipQuery); TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner); @@ -1512,8 +1512,8 @@ void CClientManager::PutItemCache(TPlayerItem * pNew, bool bSkipQuery) } else { - // ڰ Ƿ ٷ ؾ SQL Ͽ - // Ƿ ٷ Ѵ. + // 현재 소유자가 없으므로 바로 저장해야 다음 접속이 올 때 SQL에 쿼리하여 + // 받을 수 있으므로 바로 저장한다. SPDLOG_TRACE("ITEM_CACHE: direct save {} id {}", c->Get()->owner, c->Get()->id); c->OnFlush(); @@ -1569,7 +1569,7 @@ void CClientManager::UpdatePlayerCache() c->Flush(); - // Item Cache Ʈ + // Item Cache도 업데이트 UpdateItemCacheSet(c->Get()->id); } else if (c->CheckFlushTimeout()) @@ -1595,7 +1595,7 @@ void CClientManager::UpdateItemCache() { CItemCache * c = (it++)->second; - // Flush Ѵ. + // 아이템은 Flush만 한다. if (c->CheckFlushTimeout()) { SPDLOG_TRACE("UpdateItemCache ==> Flush() vnum {} id owner {}", c->Get()->vnum, c->Get()->id, c->Get()->owner); @@ -1640,7 +1640,7 @@ void CClientManager::QUERY_ITEM_DESTROY(CPeer * pkPeer, const char * c_pData) SPDLOG_TRACE("HEADER_GD_ITEM_DESTROY: PID {} ID {}", dwPID, dwID); - if (dwPID == 0) // ƹ ٸ, 񵿱 + if (dwPID == 0) // 아무도 가진 사람이 없었다면, 비동기 쿼리 CDBManager::instance().AsyncQuery(szQuery); else CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, pkPeer->GetHandle(), NULL); @@ -1702,7 +1702,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) { @@ -2010,8 +2010,8 @@ void CClientManager::WeddingEnd(TPacketWeddingEnd * p) } // -// ijÿ ijø Ʈ ϰ ijÿ ٸ -// 켱 ͸ ε ڿ ijø Ʈ Ѵ. +// 캐시에 가격정보가 있으면 캐시를 업데이트 하고 캐시에 가격정보가 없다면 +// 우선 기존의 데이터를 로드한 뒤에 기존의 정보로 캐시를 만들고 새로 받은 가격정보를 업데이트 한다. // void CClientManager::MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket) { @@ -2052,7 +2052,7 @@ void CClientManager::MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* p } // MYSHOP_PRICE_LIST -// ijõ ijø о ٷ ϰ ijÿ DB Ѵ. +// 캐시된 가격정보가 있으면 캐시를 읽어 바로 전송하고 캐시에 정보가 없으면 DB 에 쿼리를 한다. // void CClientManager::MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID) { @@ -2425,15 +2425,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 @@ -2622,9 +2622,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; @@ -2737,7 +2737,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+"); @@ -2770,7 +2770,7 @@ int CClientManager::Process() ++thecore_heart->pulse; /* - //30и + //30분마다 변경 if (((thecore_pulse() % (60 * 30 * 10)) == 0)) { g_iPlayerCacheFlushSeconds = std::max(60, rand() % 180); @@ -2848,11 +2848,11 @@ int CClientManager::Process() m_iCacheFlushCount = 0; - //÷̾ ÷ + //플레이어 플러쉬 UpdatePlayerCache(); - // ÷ + //아이템 플러쉬 UpdateItemCache(); - //α׾ƿ ó- ij ÷ + //로그아웃시 처리- 캐쉬셋 플러쉬 UpdateLogoutPlayer(); // MYSHOP_PRICE_LIST @@ -2922,13 +2922,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(); } @@ -2942,7 +2942,7 @@ int CClientManager::Process() DWORD CClientManager::GetUserCount() { - // ܼ α īƮ .. --; + // 단순히 로그인 카운트를 센다.. --; return m_map_kLogonAccount.size(); } @@ -3002,7 +3002,7 @@ bool CClientManager::InitializeNowItemID() { DWORD dwMin, dwMax; - // ID ʱȭ Ѵ. + //아이템 ID를 초기화 한다. if (!CConfig::instance().GetTwoValue("ITEM_ID_RANGE", &dwMin, &dwMax)) { SPDLOG_ERROR("conf.txt: Cannot find ITEM_ID_RANGE [start_item_id] [end_item_id]"); @@ -3432,7 +3432,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'", @@ -3948,7 +3948,7 @@ void CClientManager::SendSpareItemIDRange(CPeer* peer) } // -// Login Key ʿ . +// Login Key만 맵에서 지운다. // void CClientManager::DeleteLoginKey(TPacketDC *data) { @@ -4061,7 +4061,7 @@ void CClientManager::EnrollInAuction (CPeer * peer, DWORD owner_id, AuctionEnrol SPDLOG_ERROR("Player id {} doesn't have item {}.", 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()); @@ -4080,7 +4080,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()) @@ -4133,7 +4133,7 @@ void CClientManager::EnrollInSale (CPeer * peer, DWORD owner_id, AuctionEnrollSa SPDLOG_ERROR("Player id {} doesn't have item {}.", 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()); @@ -4152,7 +4152,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()) @@ -4192,7 +4192,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()); @@ -4559,11 +4559,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) { @@ -4588,14 +4588,14 @@ void CClientManager::AuctionReBid (CPeer * peer, DWORD bidder_id, AuctionBidInfo { SPDLOG_DEBUG("ReBid Success. bidder_id item_id {} {}", 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; @@ -4630,14 +4630,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/src/ClientManager.h b/src/db/src/ClientManager.h index a6782d4..9cfe36a 100644 --- a/src/db/src/ClientManager.h +++ b/src/db/src/ClientManager.h @@ -48,10 +48,10 @@ class CClientManager : 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 @@ -77,7 +77,7 @@ class CClientManager : public singleton pAccountTable = NULL; player_id = dwPID; }; - //ϼɿ + //독일선물기능용 생성자 ClientHandleInfo(DWORD argHandle, DWORD dwPID, DWORD accountId) { dwHandle = argHandle; @@ -116,7 +116,7 @@ class CClientManager : public singleton void SetChinaEventServer(bool flag) { m_bChinaEventServer = flag; } bool IsChinaEventServer() { return m_bChinaEventServer; } - DWORD GetUserCount(); // ӵ Ѵ. + DWORD GetUserCount(); // 접속된 사용자 수를 리턴 한다. void SendAllGuildSkillRechargePacket(); void SendTime(); @@ -136,23 +136,23 @@ class CClientManager : 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 @@ -170,8 +170,8 @@ class CClientManager : public singleton void SendNotice(const char * c_pszFormat, ...); - std::string GetCommand(char* str); //ϼɿ ɾ Լ - void ItemAward(CPeer * peer, char* login); // + std::string GetCommand(char* str); //독일선물기능에서 명령어 얻는 함수 + void ItemAward(CPeer * peer, char* login); //독일 선물 기능 CPeer * AddPeer(bufferevent* bufev, sockaddr* addr); void RemovePeer(CPeer * pPeer); @@ -199,9 +199,9 @@ class CClientManager : 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(); @@ -260,20 +260,20 @@ class CClientManager : 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 @@ -343,7 +343,7 @@ class CClientManager : public singleton void SetEventFlag(TPacketSetEventFlag* p); void SendEventFlagsOnSetup(CPeer* peer); - // ȥ + // 결혼 void MarriageAdd(TPacketMarriageAdd * p); void MarriageUpdate(TPacketMarriageUpdate * p); void MarriageRemove(TPacketMarriageRemove * p); @@ -353,19 +353,19 @@ class CClientManager : 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); - /// Ʈ û Ŷ(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 @@ -399,7 +399,7 @@ class CClientManager : 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; @@ -429,14 +429,14 @@ class CClientManager : 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; @@ -474,7 +474,7 @@ class CClientManager : public singleton //BOOT_LOCALIZATION public: - /* ʱȭ + /* 로컬 정보 초기화 **/ bool InitializeLocalization(); diff --git a/src/db/src/ClientManagerBoot.cpp b/src/db/src/ClientManagerBoot.cpp index 3b410ae..f3488f6 100644 --- a/src/db/src/ClientManagerBoot.cpp +++ b/src/db/src/ClientManagerBoot.cpp @@ -171,42 +171,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')) { - SPDLOG_ERROR("mob_names.txt о ߽ϴ"); + SPDLOG_ERROR("mob_names.txt Failed to read the file"); isNameFile = false; } else { - nameData.Next(); //row . + nameData.Next(); //설명row 생략. while(nameData.Next()) { localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1); } @@ -215,35 +215,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')) { - SPDLOG_ERROR("׽Ʈ ϴ. ״ մϴ."); + SPDLOG_ERROR("No test file exists, proceed as is."); 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)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Mob proto table setup failed."); } test_map_mobTableByVnum.insert(std::map::value_type(test_mob_table->dwVnum, test_mob_table)); @@ -254,22 +254,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')) { - SPDLOG_ERROR("mob_proto.txt о ߽ϴ"); + SPDLOG_ERROR("mob_proto.txt Failed to read the file"); 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)); @@ -279,15 +279,15 @@ bool CClientManager::InitializeMobTable() addNumber++; } } - //data ٽ ùٷ ű.(ٽ о´;;) + //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("mob_proto.txt",'\t')) { - SPDLOG_ERROR("mob_proto.txt о ߽ϴ"); + SPDLOG_ERROR("mob_proto.txt Failed to read the file"); return false; } - data.Next(); // ( Į ϴ κ) - //2.2 ũ⿡ ° mob_table + data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) + //2.2 크기에 맞게 mob_table 생성 if (!m_vec_mobTable.empty()) { SPDLOG_DEBUG("RELOAD: mob_proto"); @@ -296,18 +296,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; @@ -378,13 +378,13 @@ bool CClientManager::InitializeMobTable() if (!Set_Proto_Mob_Table(mob_table, data, localMap)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Mob proto table setup failed."); } } - //¿ vnum ߰ + //셋에 vnum 추가 vnumSet.insert(mob_table->dwVnum); @@ -395,22 +395,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')) { - SPDLOG_ERROR("׽Ʈ ϴ. ״ մϴ."); + SPDLOG_ERROR("No test file exists, proceed as is."); 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()) { @@ -419,7 +419,7 @@ bool CClientManager::InitializeMobTable() if (!Set_Proto_Mob_Table(mob_table, test_data, localMap)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Mob proto table setup failed."); } SPDLOG_DEBUG("MOB #{:<5} {:24} {:24} level: {:<3} rank: {} empire: {}", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire); @@ -447,8 +447,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) @@ -487,7 +487,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]; @@ -560,7 +560,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); @@ -571,39 +571,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')) { - SPDLOG_ERROR("item_names.txt о ߽ϴ"); + SPDLOG_ERROR("item_names.txt Failed to read the file"); isNameFile = false; } else { nameData.Next(); @@ -614,32 +614,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')) { - SPDLOG_ERROR("item_proto_test.txt о ߽ϴ"); + SPDLOG_ERROR("item_proto_test.txt Failed to read the file"); //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)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Item proto table setup failed."); } test_map_itemTableByVnum.insert(std::map::value_type(test_item_table->dwVnum, test_item_table)); @@ -651,25 +651,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')) { - SPDLOG_ERROR("item_proto.txt о ߽ϴ"); + SPDLOG_ERROR("item_proto.txt Failed to read the file"); return false; } - data.Next(); // ( Į ϴ κ) + data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분) if (!m_vec_itemTable.empty()) { @@ -678,8 +678,8 @@ bool CClientManager::InitializeItemTable() m_map_itemTableByVnum.clear(); } - //===== ̺ =====// - // ߰Ǵ ľѴ. + //===== 아이템 테이블 생성 =====// + //새로 추가되는 갯수를 파악한다. int addNumber = 0; while(data.Next()) { int vnum = atoi(data.AsStringByIndex(0)); @@ -689,14 +689,14 @@ bool CClientManager::InitializeItemTable() addNumber++; } } - //data ٽ ùٷ ű.(ٽ о´;;) + //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;) data.Destroy(); if(!data.Load("item_proto.txt",'\t')) { - SPDLOG_ERROR("item_proto.txt о ߽ϴ"); + SPDLOG_ERROR("item_proto.txt Failed to read the file"); 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()); @@ -711,16 +711,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)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Item proto table setup failed."); } - } else { //$$$$$$$$$$$$$$$$$$$$$$$ ׽Ʈ ִ! + } else { //$$$$$$$$$$$$$$$$$$$$$$$ 테스트 아이템 정보가 있다! TItemTable *tempTable = it_map_itemTable->second; item_table->dwVnum = tempTable->dwVnum; @@ -777,19 +777,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')) { - SPDLOG_ERROR("item_proto_test.txt о ߽ϴ"); + SPDLOG_ERROR("item_proto_test.txt Failed to read the file"); //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()) { @@ -798,7 +798,7 @@ bool CClientManager::InitializeItemTable() if (!Set_Proto_Item_Table(item_table, test_data, localMap)) { - SPDLOG_ERROR(" ̺ ."); + SPDLOG_ERROR("Item proto table setup failed."); } diff --git a/src/db/src/ClientManagerGuild.cpp b/src/db/src/ClientManagerGuild.cpp index b706c60..47f1fe6 100644 --- a/src/db/src/ClientManagerGuild.cpp +++ b/src/db/src/ClientManagerGuild.cpp @@ -126,13 +126,13 @@ const char* __GetWarType(int n) switch (n) { case 0 : - return "п"; + return "\xEF\xBF\xBD\xD0\xBF\xEF\xBF\xBD"; // 패왕 case 1 : - return ""; + return "\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD"; // 맹장 case 2 : - return "ȣ"; + return "\xEF\xBF\xBD\xEF\xBF\xBD\xC8\xA3"; // 수호 default : - return " ȣ"; + return "\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\x20\xEF\xBF\xBD\xEF\xBF\xBD\xC8\xA3"; // 없는 번호 } } @@ -161,7 +161,7 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p) case GUILD_WAR_WAIT_START: SPDLOG_DEBUG("GuildWar: GUILD_WAR_WAIT_START type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); - case GUILD_WAR_RESERVE: // + case GUILD_WAR_RESERVE: // 길드전 예약 if (p->bWar != GUILD_WAR_WAIT_START) SPDLOG_DEBUG("GuildWar: GUILD_WAR_RESERVE type({}) guild({} - {})", __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: // 길드전을 시작 시킨다. (필드전은 바로 시작 됨) SPDLOG_DEBUG("GuildWar: GUILD_WAR_ON_WAR type({}) guild({} - {})", __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: // 길드전 정상 종료 SPDLOG_DEBUG("GuildWar: GUILD_WAR_OVER type({}) guild({} - {})", __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: // 길드전 비정상 종료 SPDLOG_DEBUG("GuildWar: GUILD_WAR_END type({}) guild({} - {})", __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 : SPDLOG_DEBUG("GuildWar: GUILD_WAR_CANCEL type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo); diff --git a/src/db/src/ClientManagerLogin.cpp b/src/db/src/ClientManagerLogin.cpp index 182d8d3..9db1aa1 100644 --- a/src/db/src/ClientManagerLogin.cpp +++ b/src/db/src/ClientManagerLogin.cpp @@ -229,7 +229,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)); @@ -353,7 +353,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg) if (info->account_index == 0) { - // ? + // 계정이 없네? if (msg->Get()->uiNumRows == 0) { SPDLOG_DEBUG("RESULT_LOGIN: no account"); @@ -395,14 +395,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)) { SPDLOG_DEBUG("RESULT_LOGIN: already logon {}", info->pAccountTable->login); diff --git a/src/db/src/ClientManagerPlayer.cpp b/src/db/src/ClientManagerPlayer.cpp index 74303ec..ff8a022 100644 --- a/src/db/src/ClientManagerPlayer.cpp +++ b/src/db/src/ClientManagerPlayer.cpp @@ -28,7 +28,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; @@ -155,7 +155,7 @@ size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * p pkTab->horse.sStamina, pkTab->horse_skill_point); - // Binary ٲٱ ӽ + // Binary 로 바꾸기 위한 임시 공간 char text[8192 + 1]; CDBManager::instance().EscapeString(text, pkTab->skills, sizeof(pkTab->skills)); @@ -204,7 +204,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad TPlayerTable * pTab; // - // ij͵ ijó + // 한 계정에 속한 모든 캐릭터들 캐쉬처리 // CLoginData * pLoginData = GetLoginDataByAID(packet->account_id); @@ -216,12 +216,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))) { @@ -260,13 +260,13 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad SPDLOG_DEBUG("[PLAYER_LOAD] ID {} pid {} gold {} ", 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) { @@ -281,7 +281,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이 없으면 삭제된 아이템이다. memcpy(&s_items[dwCount++], p, sizeof(TPlayerItem)); } @@ -307,7 +307,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 { @@ -341,7 +341,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad //return; } //---------------------------------- - // 2. DBCache : DB + // 2. 유저정보가 DBCache 에 없음 : DB에서 //---------------------------------- else { @@ -350,7 +350,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad char queryStr[QUERY_MAX_LEN]; //-------------------------------------------------------------- - // ij : DB + // 캐릭터 정보 얻어오기 : 무조건 DB에서 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT " @@ -366,7 +366,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 " @@ -375,15 +375,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", @@ -400,21 +400,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).c_str()); // command - if( !(strcmp(command,"GIFT") )) // command GIFT̸ + strcpy(command,GetCommand(cmdStr).c_str()); // 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)); } } @@ -435,7 +435,7 @@ std::string 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)); @@ -515,11 +515,11 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab) int max_point = pkTab->level - 9; int skill_point = - std::min(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP ַ - std::min(20, pkTab->skills[124].bLevel) + // SKILL_MINING ä - std::min(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON ȯ - std::min(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP - std::min(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE + std::min(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP 통솔력 + std::min(20, pkTab->skills[124].bLevel) + // SKILL_MINING 채광 + std::min(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON 말소환 + std::min(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP보강 + std::min(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE 관통저항 pkTab->sub_skill_point = max_point - skill_point; } @@ -559,13 +559,13 @@ void CClientManager::RESULT_COMPOSITE_PLAYER(CPeer * peer, SQLMsg * pMsg, DWORD { SPDLOG_DEBUG("QID_QUEST {}", 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 ) @@ -655,14 +655,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 @@ -674,7 +674,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를 넣는다. } } @@ -682,7 +682,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; @@ -778,7 +778,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC int queryLen; DWORD player_id; - // X ij . + // 한 계정에 X초 내로 캐릭터 생성을 할 수 없다. auto it = s_createTimeByAccountID.find(packet->account_id); if (it != s_createTimeByAccountID.end()) @@ -1007,7 +1007,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) { @@ -1058,14 +1058,14 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) return; } - // + // 삭제 성공 SPDLOG_DEBUG("PLAYER_DELETE SUCCESS {}", 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) @@ -1074,7 +1074,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) delete pkPlayerCache; } - // ۵ ij Ѵ. + // 아이템들을 캐쉬에서 삭제한다. TItemCacheSet * pSet = GetItemCacheSet(pi->player_id); if (pSet) @@ -1137,7 +1137,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg) } else { - // + // 삭제 실패 SPDLOG_DEBUG("PLAYER_DELETE FAIL NO ROW"); peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1); peer->EncodeBYTE(pi->account_index); @@ -1195,10 +1195,10 @@ void CClientManager::InsertLogoutPlayer(DWORD pid) { TLogoutPlayerMap::iterator it = m_map_logout.find(pid); - // ߰ + // 존재하지 않을경우 추가 if (it != m_map_logout.end()) { - // Ұ ð + // 존재할경우 시간만 갱신 SPDLOG_TRACE("LOGOUT: Update player time pid({})", pid); it->second->time = time(0); diff --git a/src/db/src/Config.cpp b/src/db/src/Config.cpp index 216f122..24ae9b3 100644 --- a/src/db/src/Config.cpp +++ b/src/db/src/Config.cpp @@ -67,7 +67,7 @@ bool CConfig::GetWord(FILE *fp, char *tar) if ((c == ' ' || c == '\t' || c == '\n')) { - // . + // 텝. tar[i] = '\0'; return true; } @@ -144,7 +144,7 @@ bool CConfig::LoadFile(const char* filename) } - // ݴ κ. + // 파일 닫는 부분. fclose(fp); return true; } diff --git a/src/db/src/CsvReader.cpp b/src/db/src/CsvReader.cpp index 6087c81..59cd7c6 100644 --- a/src/db/src/CsvReader.cpp +++ b/src/db/src/CsvReader.cpp @@ -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 /// 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/src/DBManager.h b/src/db/src/DBManager.h
index f9268f9..2ddeb88 100644
--- a/src/db/src/DBManager.h
+++ b/src/db/src/DBManager.h
@@ -2,9 +2,9 @@
 #ifndef __INC_METIN2_DB_DBMANAGER_H__
 #define __INC_METIN2_DB_DBMANAGER_H__
 
-//  Ŀؼ Ŭ ...   ؼ   ޾ƿ
-//  ϵ óѴ.
-//                             ڵ by  ķα׷ Ƴ~ = _=)b
+// 디비 커넥션 클래스의 목적은...  디비에 접속해서 쿼리보내고 결과 받아오는
+// 모든 일들을 처리한다.
+//                             코드 by 꼬붕 후로그래머 아노아~ = _=)b
 #include 
 
 #define SQL_SAFE_LENGTH(size)	(size * 2 + 1)
diff --git a/src/db/src/GuildManager.cpp b/src/db/src/GuildManager.cpp
index 75c08e1..5799b2f 100644
--- a/src/db/src/GuildManager.cpp
+++ b/src/db/src/GuildManager.cpp
@@ -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, int lWarPrice)
 {
@@ -571,7 +571,7 @@ void CGuildManager::RecvWarOver(DWORD dwGuildWinner, DWORD dwGuildLoser, bool bD
 void CGuildManager::RecvWarEnd(DWORD GID1, DWORD GID2)
 {
 	SPDLOG_DEBUG("GuildWar: RecvWarEnded : {} vs {}", 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)
 	SPDLOG_DEBUG("GuildManager::ChangeLadderPoint {} {}", GID, r.ladder_point);
 	SPDLOG_DEBUG("{}", 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[std::min(GUILD_MAX_LEVEL, k1.level)];
@@ -1026,7 +1026,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 	t.lPowerFrom = (int) polyPower.Eval();
 	SPDLOG_DEBUG("GuildWar: {} lvp {} rkp {} alv {} mc {} power {}", GID1, lvp, rkp, alv, mc, t.lPowerFrom);
 
-	// Ŀ 
+	// 파워 계산
 	TGuild & k2 = TouchGuild(GID2);
 
 	lvp = c_aiScoreByLevel[std::min(GUILD_MAX_LEVEL, k2.level)];
@@ -1042,7 +1042,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
 	t.lPowerTo = (int) polyPower.Eval();
 	SPDLOG_DEBUG("GuildWar: {} lvp {} rkp {} alv {} mc {} power {}", 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 = (int) polyHandicap.Eval();
 	SPDLOG_DEBUG("GuildWar: handicap {}", 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("The war between guild %s and guild %s will begin in approximately %d minutes!", 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("The war between guild %s and guild %s will begin in approximately %d minutes!", 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% 세금 공제 후 분배
 			SPDLOG_DEBUG("WAR_REWARD: {} {} ratio {}", it->first.c_str(), it->second.second, ratio);
 
 			DWORD dwGold = (DWORD) (dwTotalBet * ratio * 0.9);
diff --git a/src/db/src/GuildManager.h b/src/db/src/GuildManager.h
index 26227bc..0ca963e 100644
--- a/src/db/src/GuildManager.h
+++ b/src/db/src/GuildManager.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/src/ItemAwardManager.cpp b/src/db/src/ItemAwardManager.cpp
index 7012130..32a0d88 100644
--- a/src/db/src/ItemAwardManager.cpp
+++ b/src/db/src/ItemAwardManager.cpp
@@ -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).c_str());	// command 
+			strcpy(command,CClientManager::instance().GetCommand(cmdStr).c_str());	// command 얻기
 			//SPDLOG_ERROR("{},  {}",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/src/Main.cpp b/src/db/src/Main.cpp
index 6d9e53a..3fdf6d2 100644
--- a/src/db/src/Main.cpp
+++ b/src/db/src/Main.cpp
@@ -28,11 +28,11 @@ std::string g_stPlayerDBName = "";
 
 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;
 
 
@@ -116,13 +116,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/src/Marriage.cpp b/src/db/src/Marriage.cpp
index f42df95..b7e3a4e 100644
--- a/src/db/src/Marriage.cpp
+++ b/src/db/src/Marriage.cpp
@@ -253,7 +253,7 @@ namespace marriage
 
 	void CManager::OnSetup(CPeer* peer)
 	{
-		// ȥ  
+		// 결혼한 사람들 보내기
 		for (itertype(m_Marriages) it = m_Marriages.begin(); it != m_Marriages.end(); ++it)
 		{
 			TMarriage* pMarriage = *it;
@@ -280,7 +280,7 @@ namespace marriage
 			}
 		}
 
-		// ȥ 
+		// 결혼식 보내기
 		for (itertype(m_mapRunningWedding) it = m_mapRunningWedding.begin(); it != m_mapRunningWedding.end(); ++it)
 		{
 			const TWedding& t = it->second;
diff --git a/src/db/src/Marriage.h b/src/db/src/Marriage.h
index 6758c8a..149df9e 100644
--- a/src/db/src/Marriage.h
+++ b/src/db/src/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/src/Monarch.cpp b/src/db/src/Monarch.cpp
index 3c38fe7..5fe7ba5 100644
--- a/src/db/src/Monarch.cpp
+++ b/src/db/src/Monarch.cpp
@@ -233,7 +233,7 @@ bool CMonarch::SetMonarch(const char * name)
     }
     delete pMsg;
 
-	//db Է
+	//db에 입력
 	snprintf(szQuery, sizeof(szQuery),
 					"REPLACE INTO monarch (empire, name, windate, money) VALUES(%d, %d, now(), %ld)", Empire, p->pid[Empire], p->money[Empire]);
 
diff --git a/src/db/src/Peer.h b/src/db/src/Peer.h
index 46e1a87..dc2dc96 100644
--- a/src/db/src/Peer.h
+++ b/src/db/src/Peer.h
@@ -64,9 +64,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[MAP_ALLOW_MAX_LEN];	//   ϰ ִ°?
+	WORD	m_wListenPort;	// 게임서버가 클라이언트를 위해 listen 하는 포트
+	WORD	m_wP2PPort;	// 게임서버가 게임서버 P2P 접속을 위해 listen 하는 포트
+	LONG	m_alMaps[MAP_ALLOW_MAX_LEN];	// 어떤 맵을 관장하고 있는가?
 
 	TItemIDRangeTable m_itemRange;
 	TItemIDRangeTable m_itemSpareRange;
diff --git a/src/db/src/PrivManager.cpp b/src/db/src/PrivManager.cpp
index ede3c4e..ab1cb94 100644
--- a/src/db/src/PrivManager.cpp
+++ b/src/db/src/PrivManager.cpp
@@ -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/src/PrivManager.h b/src/db/src/PrivManager.h
index 9dd20df..95eb367 100644
--- a/src/db/src/PrivManager.h
+++ b/src/db/src/PrivManager.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/src/ProtoReader.cpp b/src/db/src/ProtoReader.cpp
index 21cdb22..f38a8f2 100644
--- a/src/db/src/ProtoReader.cpp
+++ b/src/db/src/ProtoReader.cpp
@@ -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)
 	{
 		SPDLOG_ERROR("SubType : Out of range!! (type_value: {}, count of registered subtype: {}", 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()) {
@@ -749,11 +749,11 @@ bool Set_Proto_Item_Table(TItemTable *itemTable, cCsvTable &csvTable,std::mapdwVnum = dataArray[0];
@@ -777,7 +777,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/src/ProtoReader.h b/src/db/src/ProtoReader.h
index 5505f73..260ccdb 100644
--- a/src/db/src/ProtoReader.h
+++ b/src/db/src/ProtoReader.h
@@ -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/src/QID.h b/src/db/src/QID.h
index b6d5339..f0c26dd 100644
--- a/src/db/src/QID.h
+++ b/src/db/src/QID.h
@@ -2,7 +2,7 @@
 #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
 {
@@ -28,10 +28,10 @@ enum QID
     QID_GUILD_RANKING,			// 19
 
 	// MYSHOP_PRICE_LIST
-    QID_ITEMPRICE_SAVE,			///< 20,    
-    QID_ITEMPRICE_DESTROY,		///< 21,    
-    QID_ITEMPRICE_LOAD_FOR_UPDATE,	///< 22,  Ʈ    ε 
-    QID_ITEMPRICE_LOAD,			///< 22,   ε 
+    QID_ITEMPRICE_SAVE,			///< 20, 아이템 가격정보 저장 쿼리
+    QID_ITEMPRICE_DESTROY,		///< 21, 아이템 가격정보 저장 쿼리
+    QID_ITEMPRICE_LOAD_FOR_UPDATE,	///< 22, 가격정보 업데이트를 위한 아이템 가격정보 로드 쿼리
+    QID_ITEMPRICE_LOAD,			///< 22, 아이템 가격정보 로드 쿼리
 	// END_OF_MYSHOP_PRICE_LIST
 };
 
diff --git a/src/db/src/grid.cpp b/src/db/src/grid.cpp
index 1487055..922c4ba 100644
--- a/src/db/src/grid.cpp
+++ b/src/db/src/grid.cpp
@@ -28,7 +28,7 @@ void CGrid::Clear()
 
 int CGrid::FindBlank(int w, int h)
 {
-	// ũⰡ  ũٸ Ȯ ʿ  ׳ 
+	// 크기가 더 크다면 확인할 필요 없이 그냥 리턴
 	if (w > m_iWidth || h > m_iHeight)
 		return -1;
 
@@ -86,7 +86,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/game/src/BattleArena.cpp b/src/game/src/BattleArena.cpp
index 397d0ed..2752239 100644
--- a/src/game/src/BattleArena.cpp
+++ b/src/game/src/BattleArena.cpp
@@ -102,14 +102,14 @@ EVENTFUNC(battle_arena_event)
 			case 0:
 				{
 					++pInfo->state;
-					BroadcastNotice(LC_TEXT("͵ ݱ 5 ҽϴ!!!"));
+					BroadcastNotice(LC_TEXT("Five minutes until the monsters attack!!!"));
 				}
 				return test_server ? PASSES_PER_SEC(60) : PASSES_PER_SEC(60*4);
 
 			case 1:
 				{
 					++pInfo->state;
-					BroadcastNotice(LC_TEXT("͵ ݱ 1 ҽϴ!!!"));
+					BroadcastNotice(LC_TEXT("One minute left until the monsters attack!!!"));
 				}
 				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("Monsters have started attacking your castle."));
 
 					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("Evil energy gathers at the center altar."), 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("The monsters are showing signs of retreating."), 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("The monsters began to retreat."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("After a while, you'll return to the village."), 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("The monster boss has appeared."), pInfo->nMapIndex, false);
+					SendNoticeMap(LC_TEXT("You have 30 minutes to defeat the boss."), 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("You have defeated the boss and all of his minions."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("After a while, you'll return to the village."), 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("The monsters have retreated."), pInfo->nMapIndex, false);
+						SendNoticeMap(LC_TEXT("After a while, you'll return to the village."), 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("Monsters are marching on %s's castle."), EMPIRE_NAME(m_nEmpire));
 	BroadcastNotice(szBuf);
-	BroadcastNotice(LC_TEXT("10    Դϴ."));
+	BroadcastNotice(LC_TEXT("We will attack the castle in 10 minutes."));
 
 	if (m_pEvent != NULL) {
 		event_cancel(&m_pEvent);
diff --git a/src/game/src/DragonLair.cpp b/src/game/src/DragonLair.cpp
index a847b8e..2769b1f 100644
--- a/src/game/src/DragonLair.cpp
+++ b/src/game/src/DragonLair.cpp
@@ -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("Dragon died in %d seconds."), pInfo->pLair->GetEstimatedTime());
 		SendNoticeMap(buf, pInfo->InstanceMapIndex, true);
 
 		pInfo->step++;
@@ -146,7 +146,7 @@ DWORD CDragonLair::GetEstimatedTime() const
 
 void CDragonLair::OnDragonDead(LPCHARACTER pDragon)
 {
-	SPDLOG_DEBUG("DragonLair:  ׾ȿ");
+	SPDLOG_DEBUG("DragonLair: Dragon is dead and stale");
 
 	LogManager::instance().DragonSlayLog(  GuildID_, pDragon->GetMobTable().dwVnum, StartTime_, get_global_time() );
 }
@@ -237,7 +237,7 @@ void CDragonLairManager::OnDragonDead(LPCHARACTER pDragon, DWORD KillerGuildID)
 
 	iter->second->OnDragonDead( pDragon );
 
-	// ֵ     ֱ
+	// 애들 다 집으로 보내고 맵 없애기
 
 	tag_DragonLair_Collapse_EventInfo* info;
 	info = AllocEventInfo();
diff --git a/src/game/src/DragonSoul.cpp b/src/game/src/DragonSoul.cpp
index 28eb300..6d3a249 100644
--- a/src/game/src/DragonSoul.cpp
+++ b/src/game/src/DragonSoul.cpp
@@ -31,7 +31,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();
@@ -67,11 +67,11 @@ bool MakeDistinctRandomNumberSet(std::list  prob_lst, OUT std::vectorGetApplyNumSettings(ds_type, grade_idx, basic_apply_num, add_min, add_max))
 	{
@@ -315,14 +315,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("The Dragon Stone cannot be removed."));
 		return false;
 	}
 
@@ -366,7 +366,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("Remaining duration extraction failed."));
 		return false;
 	}
 	else
@@ -392,12 +392,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("Dragon Stone remaining duration has been extracted."));
 		return true;
 	}
 }
 
-// Ư ȥ â    θ ϰ, н λ깰 ִ Լ.
+// 특정 용혼석을 장비창에서 제거할 때에 성공 여부를 결정하고, 실패시 부산물을 주는 함수.
 bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM pExtractor)
 {
 	if (NULL == ch || NULL == pItem)
@@ -406,13 +406,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("There isn't enough space in your inventory."));
 			return false;
 		}
 		else
@@ -430,14 +430,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);
@@ -454,7 +454,7 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 		bSuccess = fDice <= (fProb * (100 + iBonus) / 100.f);
 	}
 
-	// ij ȥ   ߰ Ȥ . λ깰 .
+	// 캐릭터의 용혼석 추출 및 추가 혹은 제거. 부산물 제공.
 	{
 		char buf[128];
 
@@ -469,7 +469,7 @@ bool DSManager::PullOut(LPCHARACTER ch, TItemPos DestCell, LPITEM& pItem, LPITEM
 				sprintf(buf, "dice(%d) prob(%d)", (int)fDice, (int)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("Dragon Stone has been removed."));
 			pItem->AddToCharacter(ch, DestCell);
 			return true;
 		}
@@ -490,12 +490,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("Removal of Dragon Stone failed. But you have received the following: %s"), pByProduct->GetName());
 				else
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Removal of Dragon Stone failed."));
 			}
 			else
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȥ ⿡ Ͽϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Removal of Dragon Stone failed."));
 		}
 	}
 
@@ -519,8 +519,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++)
 	{
@@ -529,10 +529,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("This item is not required for improving the clarity level."));
 				SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 
 				return false;
@@ -557,7 +557,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;
@@ -566,7 +566,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("This item cannot be advanced this way."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 
 			return false;
@@ -576,8 +576,8 @@ bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL
 	{
 		LPITEM pItem = *it;
 
-		// Ŭ ui   â ø   ұ ,
-		//  ˸ ó .
+		// 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
+		// 별도의 알림 처리는 안함.
 		if (pItem->IsEquipped())
 		{
 			return false;
@@ -585,14 +585,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("This item is not required for improving the clarity level."));
 			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)
 	{
 		SPDLOG_ERROR("Possiblity of invalid client. Name {}", ch->GetName());
@@ -603,7 +603,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("You do not have enough Yang to use this item."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -648,7 +648,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("Refinement up one class was successful."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return true;
 	}
@@ -657,7 +657,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("Refinement up one class failed."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return false;
 	}
@@ -679,18 +679,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("You do not own the materials required to strengthen the Dragon Stone."));
 				SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 				return false;
 			}
@@ -713,7 +713,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;
@@ -721,7 +721,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("This item is not required for refinement."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 			return false;
 		}
@@ -730,21 +730,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("You do not own the materials required to strengthen the Dragon Stone."));
 			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)
 	{
 		SPDLOG_ERROR("Possiblity of invalid client. Name {}", ch->GetName());
@@ -755,7 +755,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("You do not have enough Yang to use this item."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -800,7 +800,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("Improvement of the clarity level successful."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return true;
 	}
@@ -809,7 +809,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("Improvement of the clarity level failed."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
 		return false;
 	}
@@ -840,8 +840,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++)
 	{
@@ -863,15 +863,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)
@@ -892,7 +892,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("This item is not required for improving the clarity level."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
 			return false;
 		}
@@ -912,17 +912,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("This Dragon Stone cannot be used for strengthening."));
 			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("This Dragon Stone cannot be used for strengthening."));
 			SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
 			return false;
 		}
@@ -931,7 +931,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("This Dragon Stone cannot be used for strengthening."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
 
 		return false;
@@ -939,7 +939,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("You do not have enough Yang to use this item."));
 		SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
 		return false;
 	}
@@ -967,7 +967,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("Strengthening was successful."));
 		ch->AutoGiveItem(pResult, true);
 		bSubHeader = DS_SUB_HEADER_REFINE_SUCCEED;
 	}
@@ -988,10 +988,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("Strengthening failed."));
 		pDragonSoul->SetCount(pDragonSoul->GetCount() - 1);
 		pRefineStone->SetCount(pRefineStone->GetCount() - 1);
 		if (NULL != pResult)
@@ -1029,12 +1029,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;
@@ -1046,12 +1046,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/src/DragonSoul.h b/src/game/src/DragonSoul.h
index b7e5e35..44db655 100644
--- a/src/game/src/DragonSoul.h
+++ b/src/game/src/DragonSoul.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/src/MarkConvert.cpp b/src/game/src/MarkConvert.cpp
index 3ac11b0..06473b8 100644
--- a/src/game/src/MarkConvert.cpp
+++ b/src/game/src/MarkConvert.cpp
@@ -30,14 +30,14 @@ static Pixel * LoadOldGuildMarkImageFile()
 
 bool GuildMarkConvert(const std::vector & vecGuildID)
 {
-	//  
+	// 폴더 생성
 #ifndef __WIN32__
 	mkdir("mark", S_IRWXU);
 #else
 	_mkdir("mark");
 #endif
 
-	// ε  ֳ? 
+	// 인덱스 파일이 있나? 
 #ifndef __WIN32__
 	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 __WIN32__
 	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/src/MarkImage.cpp b/src/game/src/MarkImage.cpp
index fe493c6..0b53e97 100644
--- a/src/game/src/MarkImage.cpp
+++ b/src/game/src/MarkImage.cpp
@@ -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];
 	SPDLOG_INFO("GuildMarkImage::BuildAllBlocks");
diff --git a/src/game/src/MarkImage.h b/src/game/src/MarkImage.h
index c12b591..bb32da6 100644
--- a/src/game/src/MarkImage.h
+++ b/src/game/src/MarkImage.h
@@ -16,7 +16,7 @@ struct SGuildMark
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel m_apxBuf[SIZE];	//  ̹
+	Pixel m_apxBuf[SIZE];	// 실제 이미지
 
 	///////////////////////////////////////////////////////////////////////////////
 	void Clear();
@@ -38,11 +38,11 @@ struct SGuildMarkBlock
 	};
 
 	///////////////////////////////////////////////////////////////////////////////
-	Pixel	m_apxBuf[SIZE];	//  ̹
+	Pixel	m_apxBuf[SIZE];	// 실제 이미지
 
-	BYTE 	m_abCompBuf[MAX_COMP_SIZE];	//  
-	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/src/MarkManager.cpp b/src/game/src/MarkManager.cpp
index 70b9088..3faa160 100644
--- a/src/game/src/MarkManager.cpp
+++ b/src/game/src/MarkManager.cpp
@@ -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];
@@ -177,7 +177,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;
@@ -263,7 +263,7 @@ void CGuildMarkManager::GetDiffBlocks(DWORD imgIdx, const DWORD * crcList, std::
 {
 	mapDiffBlocks.clear();
 
-	// Ŭ̾Ʈ   ̹ û  .
+	// 클라이언트에서 서버에 없는 이미지를 요청할 수는 없다.
 	if (m_mapIdx_Image.end() == m_mapIdx_Image.find(imgIdx))
 	{
 		SPDLOG_ERROR("invalid idx {}", imgIdx);
@@ -290,7 +290,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))
 	{
 		SPDLOG_ERROR("invalid idx {}", imgIdx);
diff --git a/src/game/src/MarkManager.h b/src/game/src/MarkManager.h
index f8fa142..90df057 100644
--- a/src/game/src/MarkManager.h
+++ b/src/game/src/MarkManager.h
@@ -32,11 +32,11 @@ class CGuildMarkManager : public singleton
 		//
 		void SetMarkPathPrefix(const char * prefix);
 
-		bool LoadMarkIndex(); // ũ ε ҷ ( )
-		bool SaveMarkIndex(); // ũ ε ϱ
+		bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용)
+		bool SaveMarkIndex(); // 마크 인덱스 저장하기
 
-		void LoadMarkImages(); //  ũ ̹ ҷ
-		void SaveMarkImage(DWORD imgIdx); // ũ ̹ 
+		void LoadMarkImages(); // 모든 마크 이미지를 불러오기
+		void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장
 
 		bool GetMarkImageFilename(DWORD imgIdx, std::string & path) const;
 		bool AddMarkIDByGuildID(DWORD guildID, DWORD markID);
diff --git a/src/game/src/OXEvent.cpp b/src/game/src/OXEvent.cpp
index 3e0bf8c..a63e3ba 100644
--- a/src/game/src/OXEvent.cpp
+++ b/src/game/src/OXEvent.cpp
@@ -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("TRUE") : LC_TEXT("FALSE"));
 		}
 	}
 
-	pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  : %d"), c);	
+	pkChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Total number of the Quiz: %d"), c);	
 	return true;
 }
 
@@ -197,22 +197,22 @@ EVENTFUNC(oxevent_timer)
 	switch (flag)
 	{
 		case 0:
-			SendNoticeMap(LC_TEXT("10ʵ ϰڽϴ."), OXEVENT_MAP_INDEX, true);
+			SendNoticeMap(LC_TEXT("The result will follow in 10 seconds."), OXEVENT_MAP_INDEX, true);
 			flag++;
 			return PASSES_PER_SEC(10);
 			
 		case 1:
-			SendNoticeMap(LC_TEXT(""), OXEVENT_MAP_INDEX, true);
+			SendNoticeMap(LC_TEXT("The correct answer is:"), OXEVENT_MAP_INDEX, true);
 
 			if (info->answer == true)
 			{
 				COXEventManager::instance().CheckAnswer(true);
-				SendNoticeMap(LC_TEXT("O Դϴ"), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("Yes (O)"), OXEVENT_MAP_INDEX, true);
 			}
 			else
 			{
 				COXEventManager::instance().CheckAnswer(false);
-				SendNoticeMap(LC_TEXT("X Դϴ"), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("No (X)"), OXEVENT_MAP_INDEX, true);
 			}
 
 			if (LC_IsJapan())
@@ -221,7 +221,7 @@ EVENTFUNC(oxevent_timer)
 			}
 			else
 			{
-				SendNoticeMap(LC_TEXT("5  Ʋ е ٱ ̵ Űڽϴ."), OXEVENT_MAP_INDEX, true);
+				SendNoticeMap(LC_TEXT("In 5 sec. everyone who gave an incorrect answer will be removed."), 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("Ready for the next question?"), OXEVENT_MAP_INDEX, true);
 			flag = 0;
 			break;
 	}
@@ -247,9 +247,9 @@ bool COXEventManager::Quiz(unsigned char level, int timelimit)
 
 	int idx = Random::get(0, m_vec_quiz[level].size() - 1);
 
-	SendNoticeMap(LC_TEXT(" Դϴ."), OXEVENT_MAP_INDEX, true);
+	SendNoticeMap(LC_TEXT("OX-Question: "), 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("If it's correct, then go to O. If it's wrong, go to 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("Correct!"));
 				// pkChar->CreateFly(Random::get(FLY_FIREWORK1, FLY_FIREWORK6), pkChar);
 				char chatbuf[256];
 				int len = snprintf(chatbuf, sizeof(chatbuf), 
 						"%s %u %u", Random::get(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/src/OXEvent.h b/src/game/src/OXEvent.h
index c6d716e..a23b28f 100644
--- a/src/game/src/OXEvent.h
+++ b/src/game/src/OXEvent.h
@@ -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/src/PetSystem.cpp b/src/game/src/PetSystem.cpp
index f801850..278eaa5 100644
--- a/src/game/src/PetSystem.cpp
+++ b/src/game/src/PetSystem.cpp
@@ -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(Random::get(0, 359));        //   
+	//m_pkChar->SetRotation(Random::get(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 > Random::get(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/src/PetSystem.h b/src/game/src/PetSystem.h
index 6348403..eda5bdd 100644
--- a/src/game/src/PetSystem.h
+++ b/src/game/src/PetSystem.h
@@ -4,7 +4,7 @@
 
 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/src/SpeedServer.cpp b/src/game/src/SpeedServer.cpp
index bd8c503..962359b 100644
--- a/src/game/src/SpeedServer.cpp
+++ b/src/game/src/SpeedServer.cpp
@@ -3,7 +3,7 @@
 #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/src/SpeedServer.h b/src/game/src/SpeedServer.h
index f4f61e6..eee5a90 100644
--- a/src/game/src/SpeedServer.h
+++ b/src/game/src/SpeedServer.h
@@ -4,11 +4,11 @@
 #include 
 #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/src/TrafficProfiler.h b/src/game/src/TrafficProfiler.h
index 50aaf20..80aa37b 100644
--- a/src/game/src/TrafficProfiler.h
+++ b/src/game/src/TrafficProfiler.h
@@ -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/src/affect.h b/src/game/src/affect.h
index 90e610b..69cbefa 100644
--- a/src/game/src/affect.h
+++ b/src/game/src/affect.h
@@ -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/src/ani.cpp b/src/game/src/ani.cpp
index 7f2469d..d49599b 100644
--- a/src/game/src/ani.cpp
+++ b/src/game/src/ani.cpp
@@ -55,7 +55,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:
@@ -126,14 +126,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/src/arena.cpp b/src/game/src/arena.cpp
index 5e4d878..60f7e9a 100644
--- a/src/game/src/arena.cpp
+++ b/src/game/src/arena.cpp
@@ -233,17 +233,17 @@ EVENTFUNC(ready_to_start_event)
 
 		if (chA != NULL)
 		{
-			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has finished, because your combatant vanished."));
             SPDLOG_DEBUG("ARENA: Oppernent is disappered. MyPID({}) OppPID({})", pArena->GetPlayerAPID(), pArena->GetPlayerBPID());
 		}
 
 		if (chB != NULL)
 		{
-			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has finished, because your combatant vanished."));
             SPDLOG_DEBUG("ARENA: Oppernent is disappered. MyPID({}) OppPID({})", pArena->GetPlayerBPID(), pArena->GetPlayerAPID());
 		}
 
-		pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT(" 밡   մϴ."));
+		pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("The duel has finished, because your combatant vanished."));
 
 		pArena->EndDuel();
 		return 0;
@@ -260,20 +260,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("There is no limit for Potions."));
+					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is no limit for Potions."));
 				}
 				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("You can use up to %d potions."), chA->GetPotionLimit());
+					chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can use up to %d potions."), 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("The fight will start in 10 seconds."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The fight will start in 10 seconds."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The fight will start in 10 seconds."));
 
 				info->state++;
 				return PASSES_PER_SEC(10);
@@ -282,15 +282,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("The duel has begun."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has begun."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The duel has begun."));
 
 				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;
@@ -339,7 +339,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;
@@ -354,9 +354,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("The duel has begun."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has begun."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The duel has begun."));
 
 				pArena->ClearEvent();
 
@@ -366,9 +366,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("The duel is being finished because there is a problem in the duel arena."));
+				chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel is being finished because there is a problem in the duel arena."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The duel is being finished because there is a problem in the duel arena."));
 
                 SPDLOG_DEBUG("ARENA: Something wrong in event func. info->state({})", info->state);
 
@@ -407,17 +407,17 @@ EVENTFUNC(duel_time_out)
 	{
 		if (chA != NULL)
 		{
-			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has finished, because your combatant vanished."));
             SPDLOG_DEBUG("ARENA: Oppernent is disappered. MyPID({}) OppPID({})", pArena->GetPlayerAPID(), pArena->GetPlayerBPID());
 		}
 
 		if (chB != NULL)
 		{
-			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+			chB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The duel has finished, because your combatant vanished."));
             SPDLOG_DEBUG("ARENA: Oppernent is disappered. MyPID({}) OppPID({})", pArena->GetPlayerBPID(), pArena->GetPlayerAPID());
 		}
 
-		pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT(" 밡   մϴ."));
+		pArena->SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The duel has finished, because your combatant vanished."));
 
 		pArena->EndDuel();
 		return 0;
@@ -427,14 +427,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("The duel has finished because of a timeout."));
+				pArena->SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("In 10 seconds you will be teleported into the city."));
 
-				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ð ʰ  ߴմϴ."));
-				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10ʵ  ̵մϴ."));
+				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("The duel has finished because of a timeout."));
+				chA->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("In 10 seconds you will be teleported into the city."));
 
-				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT(" ð ʰ  ߴմϴ."));
-				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("10ʵ  ̵մϴ."));
+				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("The duel has finished because of a timeout."));
+				chB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("In 10 seconds you will be teleported into the city."));
 
 				TPacketGCDuelStart duelStart;
 				duelStart.header = HEADER_GC_DUEL_START;
@@ -678,7 +678,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;
 
@@ -728,20 +728,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("The duel has been stopped because there is a problem in the arena."));
 		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("Your combatant has got some problems. The duel is being cancelled."));
+		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("The duel is being cancelled as there is a problem with the combatant."));
 		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("Your combatant has got some problems. The duel is being cancelled."));
+		SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("The duel is being cancelled as there is a problem with the combatant."));
 		restart = false;
 	}
 	else if (pCharA != NULL && pCharB != NULL)
@@ -752,9 +752,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 has won the duel."), pCharA->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s has won the duel."), pCharA->GetName());
+				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s has won the duel."), pCharA->GetName());
 
                 SPDLOG_DEBUG("ARENA: Duel is end. Winner {}({}) Loser {}({})",
 						pCharA->GetName(), GetPlayerAPID(), pCharB->GetName(), GetPlayerBPID());
@@ -762,10 +762,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 has won."), 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 has won."), 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());
@@ -779,19 +779,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 has won the duel."), pCharB->GetName());
+				pCharB->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("%s has won the duel."), pCharB->GetName());
+				SendChatPacketToObserver(CHAT_TYPE_NOTICE, LC_TEXT("%s has won the duel."), pCharB->GetName());
 
                 SPDLOG_DEBUG("ARENA: Duel is end. Winner({}) Loser({})", GetPlayerBPID(), GetPlayerAPID());
 			}
 			else
 			{
 				restart = true;
-				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ¸Ͽϴ."), pCharB->GetName());
+				pCharA->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s has won."), 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 has won."), 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());
@@ -811,18 +811,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("You will be teleported into the city in 10 seconds."));
 
 		if (	pCharB != NULL)
-			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ǵưϴ."));
+			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You will be teleported into the city in 10 seconds."));
 
-		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10ʵ  ǵưϴ."));
+		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("You will be teleported into the city in 10 seconds."));
 
 		if (m_pEvent != NULL) {
 			event_cancel(&m_pEvent);
@@ -838,12 +838,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("The next round will begin in 10 seconds."));
 
 		if (pCharB != NULL)
-			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("10ʵ   մϴ."));
+			pCharB->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The next round will begin in 10 seconds."));
 
-		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("10ʵ   մϴ."));
+		SendChatPacketToObserver(CHAT_TYPE_INFO, LC_TEXT("The next round will begin in 10 seconds."));
 
 		if (m_pEvent != NULL) {
 			event_cancel(&m_pEvent);
@@ -949,7 +949,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("The combatants have been separated. The duel has been stopped."));
 
         SPDLOG_DEBUG("ARENA : Duel is end because of Opp({}) is disconnect. MyPID({})", GetPlayerAPID(), GetPlayerBPID());
 		EndDuel();
@@ -957,7 +957,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("The combatants have been separated. The duel has been stopped."));
 
         SPDLOG_DEBUG("ARENA : Duel is end because of Opp({}) is disconnect. MyPID({})", GetPlayerBPID(), GetPlayerAPID());
 		EndDuel();
diff --git a/src/game/src/auction_manager.cpp b/src/game/src/auction_manager.cpp
index 32833a8..03cbff7 100644
--- a/src/game/src/auction_manager.cpp
+++ b/src/game/src/auction_manager.cpp
@@ -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, "I can't register anything that's equipped.");
 		return;
 	}
 
 	if (GetAuctionItemInfo (item->GetID()))
 	{
 		SPDLOG_ERROR("Item {} is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "̹  ž. ü ?");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I'm already registered. What the heck?");
 		return;
 	}
 
 	if (item->GetWindow() == AUCTION)
 	{
 		SPDLOG_ERROR("Item {} is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "  ..");
+		ch->ChatPacket(CHAT_TYPE_INFO, "What the hell is this...");
 		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, "I can't register anything that's equipped.");
 		return;
 	}
 
 	if (GetSaleItemInfo (item->GetID()))
 	{
 		SPDLOG_ERROR("Item {} is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "̹  ž. ü ?");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I'm already registered. What the heck?");
 		return;
 	}
 
 	if (item->GetWindow() == AUCTION)
 	{
 		SPDLOG_ERROR("Item {} is already in auction.", item->GetID());
-		ch->ChatPacket(CHAT_TYPE_INFO, "  ..");
+		ch->ChatPacket(CHAT_TYPE_INFO, "What the hell is this...");
 		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, "Re-bid.");
 	}
 	if (ch->GetGold() < bid_price)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I don't have enough money");
 		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, "Improvisation");
 		return;
 	}
 
 	if (ch->GetGold() < item_info->get_impur_price())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I don't have enough money");
 		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, "Tight Spot");
 		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, "You're bidding.");
 		return;
 	}
 
 	if (ch->GetGold() + money < bid_price)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, " ");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I don't have enough money");
 		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, "You're bidding.");
 		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, "You're the highest bidder. I can't cancel.");
 		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, "You've registered for the auction.");
 				}
 				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, "Failed to register for the auction house.");
 				}
 				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, "You've signed up for a storefront.");
 				}
 				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, "Failed to enroll in a storefront.");
 				}
 				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, "Signed Up.");
 				}
 				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, "Failed to sign up.");
 				}
 				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, "You bid.");
 			}
 		}
 		break;
@@ -1254,7 +1254,7 @@ void AuctionManager::recv_result_auction (DWORD commander_id, TPacketDGResultAuc
 			memcpy (old_item_info, new_item_info, sizeof(TAuctionItemInfo));
 			if (ch != NULL)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, "ﱸ عȾ.");
+				ch->ChatPacket(CHAT_TYPE_INFO, "I improvised.");
 			}
 		}
 		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, "Imported.");
 				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, "Canceled.");
 			}
 		}
 		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/src/auction_manager.h b/src/game/src/auction_manager.h
index 598f3a8..73f710e 100644
--- a/src/game/src/auction_manager.h
+++ b/src/game/src/auction_manager.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/src/banword.cpp b/src/game/src/banword.cpp
index 816b7c1..5fb782a 100644
--- a/src/game/src/banword.cpp
+++ b/src/game/src/banword.cpp
@@ -3,7 +3,7 @@
 #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/src/battle.cpp b/src/game/src/battle.cpp
index f259e9e..5430d96 100644
--- a/src/game/src/battle.cpp
+++ b/src/game/src/battle.cpp
@@ -46,7 +46,7 @@ bool timed_event_cancel(LPCHARACTER ch)
 	}
 
 	/* RECALL_DELAY
-	      ȯ ̰  Ǿ   ּ 
+	   차후 전투로 인해 귀환부 딜레이가 취소 되어야 할 경우 주석 해제
 	   if (ch->m_pk_RecallEvent)
 	   {
 	   event_cancel(&ch->m_pkRecallEvent);
@@ -59,11 +59,11 @@ bool timed_event_cancel(LPCHARACTER ch)
 
 bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
 {
-	//  ׾ ߴѴ.
+	// 상대방이 죽었으면 중단한다.
 	if (victim->IsDead())
 		return false;
 
-	//  ߴ
+	// 안전지대면 중단
 	{
 		SECTREE	*sectree = NULL;
 
@@ -77,7 +77,7 @@ bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
 	}
 	
 
-	//  ׾ ߴѴ.
+	// 내가 죽었으면 중단한다.
 	if (ch->IsStun() || ch->IsDead())
 		return false;
 
@@ -119,7 +119,7 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	if (test_server&&ch->IsPC())
         SPDLOG_TRACE("battle_melee_attack : [{}] attack to [{}]", ch->GetName(), victim->GetName());
 
-	// Ÿ üũ
+	// 거리 체크
 	int distance = DISTANCE_APPROX(ch->GetX() - victim->GetX(), ch->GetY() - victim->GetY());
 
 	if (!victim->IsBuilding())
@@ -128,12 +128,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 = std::max(300, (int) (victim->GetMobAttackRange() * 1.15f));
 		}
@@ -147,10 +147,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("Action cancelled. You have entered a battle."));
 
 	if (timed_event_cancel(victim))
-		victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ǿ  Ǿϴ."));
+		victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Action cancelled. You have entered a battle."));
 
 	ch->SetPosition(POS_FIGHTING);
 	ch->SetVictim(victim);
@@ -161,7 +161,7 @@ int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
 	return battle_hit(ch, victim);
 }
 
-//  GET_BATTLE_VICTIM NULL  ̺Ʈ ĵ Ų.
+// 실제 GET_BATTLE_VICTIM을 NULL로 만들고 이벤트를 캔슬 시킨다.
 void battle_end_ex(LPCHARACTER ch)
 {
 	if (ch->IsPosition(POS_FIGHTING))
@@ -208,7 +208,7 @@ float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnor
 	int iARSrc;
 	int iERSrc;
 
-	if (LC_IsYMIR()) // õ
+	if (LC_IsYMIR()) // 천마
 	{
 		iARSrc = std::min(90, pkAttacker->GetPolymorphPoint(POINT_DX));
 		iERSrc = std::min(90, pkVictim->GetPolymorphPoint(POINT_DX));
@@ -238,11 +238,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);
@@ -327,9 +327,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))
@@ -553,7 +553,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);
@@ -613,7 +613,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 (Random::get(1, 100) <= pkAttacker->GetPoint(POINT_POISON_PCT))
@@ -637,7 +637,7 @@ int battle_hit(LPCHARACTER pkAttacker, LPCHARACTER pkVictim)
 
 	NormalAttackAffect(pkAttacker, pkVictim);
 
-	//  
+	// 데미지 계산
 	//iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST)) / 100;
 	LPITEM pkWeapon = pkAttacker->GetWear(WEAR_WEAPON);
 
@@ -670,7 +670,7 @@ int battle_hit(LPCHARACTER pkAttacker, LPCHARACTER pkVictim)
 		}
 
 
-	//  . (2011 2  հŹ̿Ը .)
+	//최종적인 데미지 보정. (2011년 2월 현재 대왕거미에게만 적용.)
 	float attMul = pkAttacker->GetAttMul();
 	float tempIDam = iDam;
 	iDam = attMul * tempIDam + 0.5f;
@@ -691,19 +691,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/src/battle.h b/src/game/src/battle.h
index abba2af..f265d39 100644
--- a/src/game/src/battle.h
+++ b/src/game/src/battle.h
@@ -3,7 +3,7 @@
 
 #include "char.h"
 
-enum EBattleTypes       //  
+enum EBattleTypes       // 상대방 기준
 {
 	BATTLE_NONE,
 	BATTLE_DAMAGE,
@@ -30,7 +30,7 @@ extern void	NormalAttackAffect(LPCHARACTER pkAttacker, LPCHARACTER pkVictim);
 
 extern int battle_hit(LPCHARACTER ch, LPCHARACTER victim);
 
-// Ư 
+// 특성 공격
 inline void AttackAffect(LPCHARACTER pkAttacker,
 		LPCHARACTER pkVictim,
 		BYTE att_point,
diff --git a/src/game/src/belt_inventory_helper.h b/src/game/src/belt_inventory_helper.h
index b3d8e20..5cacc58 100644
--- a/src/game/src/belt_inventory_helper.h
+++ b/src/game/src/belt_inventory_helper.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/src/blend_item.cpp b/src/game/src/blend_item.cpp
index d803ca5..71fe401 100644
--- a/src/game/src/blend_item.cpp
+++ b/src/game/src/blend_item.cpp
@@ -170,10 +170,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/src/buff_on_attributes.cpp b/src/game/src/buff_on_attributes.cpp
index 1a44446..4a91f8a 100644
--- a/src/game/src/buff_on_attributes.cpp
+++ b/src/game/src/buff_on_attributes.cpp
@@ -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/src/buff_on_attributes.h b/src/game/src/buff_on_attributes.h
index ab88060..7e1ddef 100644
--- a/src/game/src/buff_on_attributes.h
+++ b/src/game/src/buff_on_attributes.h
@@ -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/src/building.cpp b/src/game/src/building.cpp
index 509f518..9773964 100644
--- a/src/game/src/building.cpp
+++ b/src/game/src/building.cpp
@@ -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;
 
@@ -1098,7 +1098,7 @@ bool CLand::RequestCreateWall(int 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;
@@ -1107,7 +1107,7 @@ bool CLand::RequestCreateWall(int 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;
@@ -1116,7 +1116,7 @@ bool CLand::RequestCreateWall(int 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;
@@ -1125,7 +1125,7 @@ bool CLand::RequestCreateWall(int 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/src/castle.cpp b/src/game/src/castle.cpp
index 51d41fe..73fcfba 100644
--- a/src/game/src/castle.cpp
+++ b/src/game/src/castle.cpp
@@ -3,8 +3,8 @@
  * 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("There are %s wars to inflame the bonfires."),
 				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 has successfully defended."), 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("30 minutes from now on the player %s can get a reward because he destroyed the bonfire."), 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 minutes are over. The bonfires have disappeared."));
 			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;
 	int	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 = std::clamp(tower_count, MIN_CASTLE_TOWER, MAX_CASTLE_TOWER);	// 5 ~ 10
+	int	spawn_count = std::clamp(tower_count, MIN_CASTLE_TOWER, 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("A bonfire was inflamed at %s to warn because of a battle."), 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 has destroyed the bonfire."), 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 lost the war as they have not been able to defend the castle."), 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 has destroyed all the bonfires."), 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/src/castle.h b/src/game/src/castle.h
index b1439fd..58f2d82 100644
--- a/src/game/src/castle.h
+++ b/src/game/src/castle.h
@@ -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/src/char.cpp b/src/game/src/char.cpp
index afe96ac..1fd2070 100644
--- a/src/game/src/char.cpp
+++ b/src/game/src/char.cpp
@@ -460,7 +460,7 @@ void CHARACTER::Destroy()
 				party->Quit(GetVID());
 		}
 
-		SetParty(NULL); // ���ص� ������ �����ϰ�.
+		SetParty(NULL); // 안해도 되지만 안전하게.
 	}
 
 	if (m_pkMobInst)
@@ -554,20 +554,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("You can only open the shop if you take off your armour."));
 		return;
 	}
 
-	if (GetMyShop())	// �̹� ���� ���� ������ �ݴ´�.
+	if (GetMyShop())	// 이미 샵이 열려 있으면 닫는다.
 	{
 		CloseMyShop();
 		return;
 	}
 
-	// �������� ����Ʈ�� ������ ������ �� �� ����.
+	// 진행중인 퀘스트가 있으면 상점을 열 수 없다.
 	quest::PC * pPC = quest::CQuestManager::instance().GetPCForce(GetPlayerID());
 
-	// GetPCForce�� NULL�� �� �����Ƿ� ���� Ȯ������ ����
+	// GetPCForce는 NULL일 수 없으므로 따로 확인하지 않음
 	if (pPC->IsRunning())
 		return;
 
@@ -586,7 +586,7 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	if (GOLD_MAX <= nTotalMoney)
 	{
 		SPDLOG_ERROR("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id {} name {}", GetPlayerID(), GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20�� ���� �ʰ��Ͽ� ������ ������ �����ϴ�"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have more than 2 Billion Yang. You cannot trade."));
 		return;
 	}
 
@@ -602,13 +602,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("You can't give your shop an invalid name."));	
 			return;
 		}
 	}
 
 	// MYSHOP_PRICE_LIST
-	std::map itemkind;  // ������ ������ ����, first: vnum, second: ���� ���� ����
+	std::map itemkind;  // 아이템 종류별 가격, first: vnum, second: 단일 수량 가격
 	// END_OF_MYSHOP_PRICE_LIST	
 
 	std::set cont;
@@ -629,19 +629,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("You can't sell Item-Shop items in a private shop."));
 				return;
 			}
 
 			if (pkItem->IsEquipped() == true)
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������� �������� ���λ������� �Ǹ��� �� �����ϴ�."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Items that are equipped can't be sold in the private shop."));
 				return;
 			}
 
 			if (true == pkItem->isLocked())
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������� �������� ���λ������� �Ǹ��� �� �����ϴ�."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Items that are in use can't be sold in the private shop."));
 				return;
 			}
 
@@ -654,11 +654,11 @@ void CHARACTER::OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE
 	}
 
 	// MYSHOP_PRICE_LIST
-	// ������ ������ ���ҽ�Ų��. 
-	if (CountSpecifyItem(71049)) { // ��� �������� ������ �ʰ� ���������� �����Ѵ�.
+	// 보따리 개수를 감소시킨다. 
+	if (CountSpecifyItem(71049)) { // 비단 보따리는 없애지 않고 가격정보를 저장한다.
 
 		//
-		// ������ ���������� �����ϱ� ���� ������ �������� ��Ŷ�� ����� DB ij�ÿ� ������.
+		// 아이템 가격정보를 저장하기 위해 아이템 가격정보 패킷을 만들어 DB 캐시에 보낸다.
 		//
 		TPacketMyshopPricelistHeader header;
 		TItemPriceInfo info;
@@ -683,7 +683,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();
@@ -707,8 +707,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);
@@ -791,7 +791,7 @@ void CHARACTER::RestartAtSamePos()
 }
 
 
-// Entity�� ���� ��Ÿ���ٰ� ��Ŷ�� ������.
+// Entity에 내가 나타났다고 패킷을 보낸다.
 void CHARACTER::EncodeInsertPacket(LPENTITY entity)
 {
 
@@ -800,10 +800,10 @@ void CHARACTER::EncodeInsertPacket(LPENTITY entity)
 	if (!(d = entity->GetDesc()))
 		return;
 
-	// ����̸� ���� ���� �ڵ�
+	// 길드이름 버그 수정 코드
 	LPCHARACTER ch = (LPCHARACTER) entity;
 	ch->SendGuildName(GetGuild());
-	// ����̸� ���� ���� �ڵ�
+	// 길드이름 버그 수정 코드
 
 	TPacketGCCharacterAdd pack;
 
@@ -1092,14 +1092,14 @@ void CHARACTER::SetPosition(int pos)
 		{
 			case POS_FIGHTING:
 				if (!IsState(m_stateBattle))
-					MonsterLog("[BATTLE] �� ����");
+					MonsterLog("[BATTLE] Fighting state");
 
 				GotoState(m_stateBattle);
 				break;
 
 			default:
 				if (!IsState(m_stateIdle))
-					MonsterLog("[IDLE] ���� ����");
+					MonsterLog("[IDLE] Resting state");
 
 				GotoState(m_stateIdle);
 				break;
@@ -1259,7 +1259,7 @@ void CHARACTER::SaveReal()
 
 void CHARACTER::FlushDelayedSaveItem()
 {
-	// ���� �ȵ� ����ǰ�� ���� �����Ų��.
+	// 저장 안된 소지품을 전부 저장시킨다.
 	LPITEM item;
 
 	for (int i = 0; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i)
@@ -1324,7 +1324,7 @@ void CHARACTER::Disconnect(const char * c_pszReason)
 	if (GetParty())
 		GetParty()->Unlink(this);
 
-	// �׾��� �� ���Ӳ����� ����ġ �ٰ� �ϱ�
+	// 죽었을 때 접속끊으면 경험치 줄게 하기
 	if (IsStun() || IsDead())
 	{
 		DeathPenalty(0);
@@ -1342,7 +1342,7 @@ void CHARACTER::Disconnect(const char * c_pszReason)
 	SaveAffect();
 	m_bIsLoadedAffect = false;
 
-	m_bSkipSave = true; // �� ���Ŀ��� ���̻� �����ϸ� �ȵȴ�.
+	m_bSkipSave = true; // 이 이후에는 더이상 저장하면 안된다.
 
 	quest::CQuestManager::instance().DisconnectPC(this);
 
@@ -1767,7 +1767,7 @@ void CHARACTER::SetPlayerProto(const TPlayerTable * t)
 	SetSP(t->sp);
 	SetStamina(t->stamina);
 
-	//GM�϶� ��ȣ���  
+	//GM일때 보호모드  
 	if (!test_server)
 	{
 		if (GetGMLevel() > GM_LOW_WIZARD)
@@ -1798,7 +1798,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();
@@ -1885,9 +1885,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;
@@ -1962,7 +1962,7 @@ float CHARACTER::GetMobDamageMultiply() const
 	float fDamMultiply = GetMobTable().fDamMultiply;
 
 	if (IsBerserk())
-		fDamMultiply = fDamMultiply * 2.0f; // BALANCE: ����ȭ �� �ι�
+		fDamMultiply = fDamMultiply * 2.0f; // BALANCE: 광폭화 시 두배
 
 	return fDamMultiply;
 }
@@ -1995,7 +1995,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;
 }
@@ -2058,7 +2058,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;
@@ -2084,14 +2084,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)
@@ -2112,7 +2112,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;
 
@@ -2128,7 +2128,7 @@ void CHARACTER::ComputeBattlePoints()
 				}
 			}
 
-		// �� Ÿ�� ���� �� ������ ���� ���� ���º��� ������ ���� �������� ����
+		// 말 타고 있을 때 방어력이 말의 기준 방어력보다 낮으면 기준 방어력으로 설정
 		if( true == IsHorseRiding() )
 		{
 			if (iArmor < GetHorseArmor())
@@ -2229,7 +2229,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;
@@ -2245,7 +2245,7 @@ void CHARACTER::ComputePoints()
 			}
 		}
 
-		// �⺻ ����
+		// 기본 값들
 		SetPoint(POINT_MOV_SPEED,	100);
 		SetPoint(POINT_ATT_SPEED,	100);
 		PointChange(POINT_ATT_SPEED, GetPoint(POINT_PARTY_HASTE_BONUS));
@@ -2264,9 +2264,9 @@ void CHARACTER::ComputePoints()
 
 	if (IsPC())
 	{
-		// �� Ÿ�� ���� ���� �⺻ ������ ���� ���� ���Ⱥ��� ������ ���� �����.
-		// ���� ���� ���� ������ ���� �����̹Ƿ�, ����/������ ��ü ���� ����
-		// ��ä������ �� �ö󰡰� �� ���̴�.
+		// 말 타고 있을 때는 기본 스탯이 말의 기준 스탯보다 낮으면 높게 만든다.
+		// 따라서 말의 기준 스탯이 무사 기준이므로, 수라/무당은 전체 스탯 합이
+		// 대채적으로 더 올라가게 될 것이다.
 		if (GetMountVnum()) 
 		{
 			if (GetHorseST() > GetPoint(POINT_ST))
@@ -2286,17 +2286,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);
@@ -2315,10 +2315,10 @@ void CHARACTER::ComputePoints()
 		}
 	}
 
-	// ��ȥ�� �ý���
-	// ComputePoints������ �ɸ����� ��� �Ӽ����� �ʱ�ȭ�ϰ�,
-	// ������, ���� � ���õ� ��� �Ӽ����� �����ϱ� ������,
-	// ��ȥ�� �ý��۵� ActiveDeck�� �ִ� ��� ��ȥ���� �Ӽ����� �ٽ� ������Ѿ� �Ѵ�.
+	// 용혼석 시스템
+	// ComputePoints에서는 케릭터의 모든 속성값을 초기화하고,
+	// 아이템, 버프 등에 관련된 모든 속성값을 재계산하기 때문에,
+	// 용혼석 시스템도 ActiveDeck에 있는 모든 용혼석의 속성값을 다시 적용시켜야 한다.
 	if (DragonSoul_IsDeckActivated())
 	{
 		for (int i = WEAR_MAX_NUM + DS_SLOT_MAX * DragonSoul_GetActiveDeck(); 
@@ -2356,9 +2356,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;
@@ -2384,7 +2384,7 @@ EVENTFUNC(recovery_event)
 	if (!ch->IsPC())
 	{
 		//
-		// ���� ȸ��
+		// 몬스터 회복
 		//
 		if (ch->IsAffectFlag(AFF_POISON))
 			return PASSES_PER_SEC(std::max(1, ch->GetMobTable().bRegenCycle));
@@ -2442,23 +2442,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())
@@ -2489,7 +2489,7 @@ void CHARACTER::StartRecoveryEvent()
 	if (IsDead() || IsStun())
 		return;
 
-	if (IsNPC() && GetHP() >= GetMaxHP()) // ���ʹ� ü���� �� �������� ���� ���Ѵ�.
+	if (IsNPC() && GetHP() >= GetMaxHP()) // 몬스터는 체력이 다 차있으면 시작 안한다.
 		return;
 
 	char_event_info* info = AllocEventInfo();
@@ -2539,7 +2539,7 @@ void CHARACTER::SetRotation(float fRot)
 	m_pointsInstant.fRot = fRot;
 }
 
-// x, y �������� ���� ����.
+// x, y 방향으로 보고 선다.
 void CHARACTER::SetRotationToXY(int x, int y)
 {
 	SetRotation(GetDegreeFromPositionXY(GetX(), GetY(), x, y));
@@ -2555,10 +2555,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;
@@ -2566,7 +2566,7 @@ bool CHARACTER::CanMove() const
 	return true;
 }
 
-// ������ x, y ��ġ�� �̵� ��Ų��.
+// 무조건 x, y 위치로 이동 시킨다.
 bool CHARACTER::Sync(int x, int y)
 {
 	if (!GetSectree())
@@ -2595,7 +2595,7 @@ bool CHARACTER::Sync(int x, int y)
 
 	if (GetDungeon())
 	{
-		// ������ �̺�Ʈ �Ӽ� ��ȭ
+		// 던젼용 이벤트 속성 변화
 		int iLastEventAttr = m_iEventAttr;
 		m_iEventAttr = new_tree->GetEventAttribute(x, y);
 
@@ -2636,7 +2636,7 @@ bool CHARACTER::Sync(int x, int y)
 void CHARACTER::Stop()
 {
 	if (!IsState(m_stateIdle))
-		MonsterLog("[IDLE] ����");
+		MonsterLog("[IDLE] stop");
 
 	GotoState(m_stateIdle);
 
@@ -2646,8 +2646,8 @@ void CHARACTER::Stop()
 
 bool CHARACTER::Goto(int x, int y)
 {
-	// TODO �Ÿ�üũ �ʿ�
-	// ���� ��ġ�� �̵��� �ʿ� ���� (�ڵ� ����)
+	// TODO 거리체크 필요
+	// 같은 위치면 이동할 필요 없음 (자동 성공)
 	if (GetX() == x && GetY() == y)
 		return false;
 
@@ -2671,7 +2671,7 @@ bool CHARACTER::Goto(int x, int y)
 	
 	if (!IsState(m_stateMove))
 	{
-		MonsterLog("[MOVE] %s", GetVictim() ? "�������" : "�׳��̵�");
+		MonsterLog("[MOVE] %s", GetVictim() ? "tracking target" : "moving");
 
 		if (GetVictim())
 		{
@@ -2777,14 +2777,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(int x, int y)
 {
-	// ���� ��ġ�� �̵��� �ʿ� ���� (�ڵ� ����)
+	// 같은 위치면 이동할 필요 없음 (자동 성공)
 	if (GetX() == x && GetY() == y)
 		return true;
 
@@ -2946,7 +2946,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();
@@ -3012,7 +3012,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:
@@ -3020,7 +3020,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))
@@ -3039,7 +3039,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 					}
 				}
 
-				// exp�� 0 ���Ϸ� ���� �ʵ��� �Ѵ�
+				// exp가 0 이하로 가지 않도록 한다
 				if (amount < 0 && exp < -amount)
 				{
 					SPDLOG_DEBUG("{} AMOUNT < 0 {}, CUR EXP: {}", GetName(), -amount, exp);
@@ -3058,7 +3058,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;
@@ -3076,7 +3076,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)
 					{
 						SPDLOG_ERROR("{} LEVEL_STEP bigger than 4! ({})", GetName(), iLevStep);
@@ -3216,16 +3216,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;
@@ -3235,7 +3235,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 = std::min(3500, hp * GetPoint(POINT_MAX_HP_PCT) / 100);
 				add_hp += GetPoint(POINT_MAX_HP);
@@ -3252,7 +3252,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 = std::min(800, sp * GetPoint(POINT_MAX_SP_PCT) / 100);
 				add_sp += GetPoint(POINT_MAX_SP);
@@ -3294,7 +3294,7 @@ void CHARACTER::PointChange(BYTE type, int amount, bool bAmount, bool bBroadcast
 					return;
 				}
 
-				// û�ҳ⺸ȣ
+				// 청소년보호
 				if (LC_IsNewCIBN() && amount > 0)
 				{
 					if (IsOverTime(OT_NONE))
@@ -3357,12 +3357,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:
@@ -3383,11 +3383,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:
@@ -3402,10 +3402,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:
@@ -3629,7 +3629,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
@@ -3736,11 +3736,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;
 
@@ -3825,7 +3825,7 @@ void CHARACTER::MonsterLog(const char* format, ...)
 	else
 		len += len2;
 
-	// \0 ���� ����
+	// \0 문자 포함
 	++len;
 
 	va_end(args);
@@ -3889,7 +3889,7 @@ void CHARACTER::mining_cancel()
 	{
         SPDLOG_DEBUG("XXX MINING CANCEL");
 		event_cancel(&m_pkMiningEvent);
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä���� �ߴ��Ͽ����ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Mining is finished."));
 	}
 }
 
@@ -3911,13 +3911,13 @@ void CHARACTER::mining(LPCHARACTER chLoad)
 
 	if (!pick || pick->GetType() != ITEM_PICK)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("��̸� �����ϼ���."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need a Pickaxe in order to extract ore!"));
 		return;
 	}
 
-	int count = Random::get(5, 15); // ���� Ƚ��, �� ���۴� 2��
+	int count = Random::get(5, 15); // 동작 횟수, 한 동작당 2초
 
-	// � ������ ������
+	// 채광 동작을 보여줌
 	TPacketGCDigMotion p;
 	p.header = HEADER_GC_DIG_MOTION;
 	p.vid = GetVID();
@@ -3938,7 +3938,7 @@ void CHARACTER::fishing()
 		return;
 	}
 
-	// ���� �Ӽ����� ���ø� �õ��Ѵ�?
+	// 못감 속성에서 낚시를 시도한다?
 	{
 		LPSECTREE_MAP pkSectreeMap = SECTREE_MANAGER::instance().GetMap(GetMapIndex());
 
@@ -3950,23 +3950,23 @@ void CHARACTER::fishing()
 
 		if (IS_SET(dwAttr, ATTR_BLOCK))
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("���ø� �� �� �ִ� ���� �ƴմϴ�"));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This is not a place to fish"));
 			return;
 		}
 	}
 
 	LPITEM rod = GetWear(WEAR_WEAPON);
 
-	// ���ô� ����
+	// 낚시대 장착
 	if (!rod || rod->GetType() != ITEM_ROD)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("���ô븦 ���� �ϼ���."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please choose a Fishing Pole."));
 		return;
 	}
 
 	if (0 == rod->GetSocket(2))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("�̳��� ���� ���� �ּ���."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Place the Bait on the Hook first."));
 		return;
 	}
 
@@ -3992,7 +3992,7 @@ void CHARACTER::fishing_take()
 	}
 	else
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("���ô밡 �ƴ� �������� ���ø� �� �� �����ϴ�!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't go fishing without a fishing pole!"));
 	}
 
 	event_cancel(&m_pkFishingEvent);
@@ -4032,11 +4032,11 @@ void CHARACTER::SetNextStatePulse(int iNextPulse)
 	m_dwNextStatePulse = iNextPulse;
 
 	if (iNextPulse < 10)
-		MonsterLog("�������·ξ����");
+		MonsterLog("Go to the next state");
 }
 
 
-// ij���� �ν��Ͻ� ������Ʈ �Լ�.
+// 캐릭터 인스턴스 업데이트 함수.
 void CHARACTER::UpdateCharacter(DWORD dwPulse)
 {
 	CFSM::Update();
@@ -4075,7 +4075,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;
@@ -4116,7 +4116,7 @@ bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
 		if (m_pkChrSyncOwner)
 			SPDLOG_DEBUG("SyncRelease {} {} from {}", GetName(), (void*) this, m_pkChrSyncOwner->GetName());
 
-		// ����Ʈ���� �������� �ʴ��� �����ʹ� NULL�� ���õǾ�� �Ѵ�.
+		// 리스트에서 제거하지 않더라도 포인터는 NULL로 셋팅되어야 한다.
 		m_pkChrSyncOwner = NULL;
 	}
 	else
@@ -4124,12 +4124,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)
 		{
 			SPDLOG_DEBUG("SetSyncOwner distance over than 250 {} {}", GetName(), ch->GetName());
 
-			// SyncOwner�� ��� Owner�� ǥ���Ѵ�.
+			// SyncOwner일 경우 Owner로 표시한다.
 			if (m_pkChrSyncOwner == ch)
 				return true;
 
@@ -4147,7 +4147,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);
 
@@ -4157,9 +4157,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;
@@ -4175,7 +4175,7 @@ struct FuncClearSync
 	void operator () (LPCHARACTER ch)
 	{
 		assert(ch != NULL);
-		ch->SetSyncOwner(NULL, false);	// false �÷��׷� �ؾ� for_each �� ����� ����.
+		ch->SetSyncOwner(NULL, false);	// false 플래그로 해야 for_each 가 제대로 돈다.
 	}
 };
 
@@ -4183,7 +4183,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();
 }
@@ -4193,8 +4193,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;
 
@@ -4227,11 +4227,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 )
@@ -4269,7 +4269,7 @@ bool CHARACTER::RequestToParty(LPCHARACTER leader)
 
 	if (!leader)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("��Ƽ���� ���� ���°� �ƴ϶� ��û�� �� �� �����ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The request can't be made because the party leader isn't online."));
 		return false;
 	}
 
@@ -4290,38 +4290,38 @@ bool CHARACTER::RequestToParty(LPCHARACTER leader)
 			break;
 
 		case PERR_SERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� ������ ��Ƽ ���� ó���� �� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot make a request because the group leader is not online."));
 			return false;
 
 		case PERR_DIFFEMPIRE:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �ٸ� ������ ��Ƽ�� �̷� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot form a group with players from another kingdom."));
 			return false;
 
 		case PERR_DUNGEON:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� �ȿ����� ��Ƽ �ʴ븦 �� �� �����ϴ�.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite players while you are in a dungeon.")); 
 			return false;
 
 		case PERR_OBSERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� ��忡�� ��Ƽ �ʴ븦 �� �� �����ϴ�.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite a player while you are in observer mode.")); 
 			return false;
 
 		case PERR_LVBOUNDARY:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> -30 ~ +30 ���� �̳��� ���游 �ʴ��� �� �ֽ��ϴ�.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] Only players with a level difference of -30 to +30 can be invited.")); 
 			return false;
 
 		case PERR_LOWLEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� �ְ� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too low."));
 			return false;
 
 		case PERR_HILEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� ���� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too high.")); 
 			return false;
 
 		case PERR_ALREADYJOIN: 	
 			return false;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �� �̻� ��Ƽ���� �ʴ��� �� �����ϴ�.")); 
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite any more players into your group.")); 
 			return false;
 
 		default:
@@ -4337,7 +4337,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("You want to join %s's group."), leader->GetName());
 	return true;
 }
 
@@ -4391,7 +4391,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("This player is not in this group."));
 	else 
 	{
 		if (GetPlayerID() != GetParty()->GetLeaderPID())
@@ -4401,16 +4401,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("[Group] The server cannot execute this group request.")); break;
+			case PERR_DUNGEON:		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite players while you are in a dungeon.")); break;
+			case PERR_OBSERVER: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite a player while you are in observer mode.")); break;
+			case PERR_LVBOUNDARY:	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] Only players with a level difference of -30 to +30 can be invited.")); break;
+			case PERR_LOWLEVEL: 	member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too low.")); break;
+			case PERR_HILEVEL: 		member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too high.")); 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("[Group] You cannot invite any more players into your group."));
+									   member->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot join this group because it is already full."));
 									   break;
 								   }
 			default: SPDLOG_ERROR("Do not process party join error({})", (int) errcode);
@@ -4421,8 +4421,8 @@ void CHARACTER::AcceptToParty(LPCHARACTER member)
 }
 
 /**
- * ��Ƽ �ʴ� event callback �Լ�.
- * event �� �ߵ��ϸ� �ʴ� ������ ó���Ѵ�.
+ * 파티 초대 event callback 함수.
+ * event 가 발동하면 초대 거절로 처리한다.
  */
 EVENTFUNC(party_invite_event)
 {
@@ -4449,12 +4449,12 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 {
 	if (GetParty() && GetParty()->GetLeaderPID() != GetPlayerID())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ���� �ʴ��� �� �ִ� ������ �����ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You do not have the right to invite someone."));
 		return;
 	}
 	else if (pchInvitee->IsBlockMode(BLOCK_PARTY_INVITE))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> %s ���� ��Ƽ �ź� �����Դϴ�."), pchInvitee->GetName());
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] %s has declined your group invitation."), pchInvitee->GetName());
 		return;
 	}
 
@@ -4466,39 +4466,39 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 			break;
 
 		case PERR_SERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� ������ ��Ƽ ���� ó���� �� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The server cannot execute this group request."));
 			return;
 
 		case PERR_DIFFEMPIRE:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �ٸ� ������ ��Ƽ�� �̷� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot form a group with players from another kingdom."));
 			return;
 
 		case PERR_DUNGEON:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� �ȿ����� ��Ƽ �ʴ븦 �� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite players while you are in a dungeon."));
 			return;
 
 		case PERR_OBSERVER:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� ��忡�� ��Ƽ �ʴ븦 �� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite a player while you are in observer mode."));
 			return;
 
 		case PERR_LVBOUNDARY:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> -30 ~ +30 ���� �̳��� ���游 �ʴ��� �� �ֽ��ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] Only players with a level difference of -30 to +30 can be invited."));
 			return;
 
 		case PERR_LOWLEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� �ְ� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too low."));
 			return;
 
 		case PERR_HILEVEL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� ���� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too high."));
 			return;
 
 		case PERR_ALREADYJOIN:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �̹� %s���� ��Ƽ�� ���� �ֽ��ϴ�."), pchInvitee->GetName());
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] %s is already in the group."), pchInvitee->GetName());
 			return;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �� �̻� ��Ƽ���� �ʴ��� �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite any more players into your group."));
 			return;
 
 		default:
@@ -4510,7 +4510,7 @@ void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)
 		return;
 
 	//
-	// EventMap �� �̺�Ʈ �߰�
+	// EventMap 에 이벤트 추가
 	// 
 	TPartyJoinEventInfo* info = AllocEventInfo();
 
@@ -4520,7 +4520,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;
@@ -4544,7 +4544,7 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 
 	if (GetParty() && GetParty()->GetLeaderPID() != GetPlayerID())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ���� �ʴ��� �� �ִ� ������ �����ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You do not have the right to invite someone."));
 		return;
 	}
 
@@ -4556,36 +4556,36 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 			break;
 
 		case PERR_SERVER:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� ������ ��Ƽ ���� ó���� �� �� �����ϴ�."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The server cannot execute this group request."));
 			return;
 
 		case PERR_DUNGEON:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ���� �ȿ����� ��Ƽ �ʴ뿡 ���� �� �����ϴ�."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot accept an invitation into a dungeon."));
 			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("[Group] Only players with a level difference of -30 to +30 can be invited."));
 			return;
 
 		case PERR_LOWLEVEL:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� �ְ� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too low."));
 			return;
 
 		case PERR_HILEVEL:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� ���� ���� ���� 30������ ���� �ʴ��� �� �����ϴ�."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite this player, as their level is too high."));
 			return;
 
 		case PERR_ALREADYJOIN:
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ �ʴ뿡 ���� �� �����ϴ�."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot accept the invitation."));
 			return;
 
 		case PERR_PARTYISFULL:
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> �� �̻� ��Ƽ���� �ʴ��� �� �����ϴ�."));
-			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<��Ƽ> ��Ƽ�� �ο������� �ʰ��Ͽ� ��Ƽ�� ������ �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot invite any more players into your group."));
+			pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot join this group because it is already full."));
 			return;
 
 		default:
@@ -4594,7 +4594,7 @@ void CHARACTER::PartyInviteAccept(LPCHARACTER pchInvitee)
 	}
 
 	//
-	// ��Ƽ ���� ó��
+	// 파티 가입 처리
 	// 
 
 	if (GetParty())
@@ -4624,13 +4624,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("[Group] %s has declined your invitation."), 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("[Group] %s has joined your group."), GetName());
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] %s has joined your Group."), pLeader->GetName());
 
 	pLeader->GetParty()->Join(GetPlayerID());
 	pLeader->GetParty()->Link(this);
@@ -4807,9 +4807,9 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 	DWORD vid = GetVID();
 	SPDLOG_DEBUG("OnClick {}[vnum {} ServerUniqueID {}, pid {}] by {}", GetName(), GetRaceNum(), vid, GetPlayerID(), pkChrCauser->GetName());
 
-	// ������ �����·� ����Ʈ�� ������ �� ����.
+	// 상점을 연상태로 퀘스트를 진행할 수 없다.
 	{
-		// ��, �ڽ��� �ڽ��� ������ Ŭ���� �� �ִ�.
+		// 단, 자신은 자신의 상점을 클릭할 수 있다.
 		if (pkChrCauser->GetMyShop() && pkChrCauser != this) 
 		{
 			SPDLOG_ERROR("OnClick Fail ({}->{}) - pc has shop", pkChrCauser->GetName(), GetName());
@@ -4817,7 +4817,7 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 		}
 	}
 
-	// ��ȯ���϶� ����Ʈ�� ������ �� ����.
+	// 교환중일때 퀘스트를 진행할 수 없다.
 	{
 		if (pkChrCauser->GetExchange())
 		{
@@ -4828,37 +4828,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("You can't use a private shop now."));
 						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("You can't use a private shop now."));
 						return;
 					}
 
-					// Ŭ���� ����� ��ȯ/â��/�����̿����̶�� �Ұ�
+					// 클릭한 대상이 교환/창고/상점이용중이라면 불가
 					//if ((GetExchange() || IsOpenSafebox() || GetShopOwner()))
 					if ((GetExchange() || IsOpenSafebox() || IsCubeOpen()))
 					{
-						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������ �ٸ� �ŷ��� �ϰ� �ִ� ���Դϴ�."));
+						pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This player is already trading with another player."));
 						return;
 					}
 				}
@@ -4881,7 +4881,7 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 		}
 	}
 
-	// û�ҳ��� ����Ʈ ����
+	// 청소년은 퀘스트 못함
 	if (LC_IsNewCIBN())
 	{
 		if (pkChrCauser->IsOverTime(OT_3HOUR))
@@ -4905,12 +4905,12 @@ void CHARACTER::OnClick(LPCHARACTER pkChrCauser)
 	}
 
 
-	// NPC ���� ��� ���� : ���� ���� ��
+	// NPC 전용 기능 수행 : 상점 열기 등
 	if (!IsPC())
 	{
 		if (!m_triggerOnClick.pFunc)
 		{
-			// NPC Ʈ���� �ý��� �α� ����
+			// NPC 트리거 시스템 로그 보기
 			SPDLOG_ERROR("{}.OnClickFailure({}) : triggerOnClick.pFunc is EMPTY(pid={})",
 						pkChrCauser->GetName(),
 						GetName(),
@@ -4975,7 +4975,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();
@@ -5151,9 +5151,9 @@ void CHARACTER::ExitToSavedLocation()
 }
 
 // fixme 
-// ���ݱ��� privateMapIndex �� ���� �� �ε����� ������ üũ �ϴ� ���� �ܺο��� �ϰ�,
-// �ٸ��� warpset�� �ҷ��µ�
-// �̸� warpset ������ ����.
+// 지금까진 privateMapIndex 가 현재 맵 인덱스와 같은지 체크 하는 것을 외부에서 하고,
+// 다르면 warpset을 불렀는데
+// 이를 warpset 안으로 넣자.
 bool CHARACTER::WarpSet(int x, int y, int lPrivateMapIndex)
 {
 	if (!IsPC())
@@ -5249,7 +5249,7 @@ void CHARACTER::WarpEnd()
 
 	if (!map_allow_find(index))
 	{
-		// �� ������ ������ �� �����Ƿ� �����ϱ� �� ��ǥ�� �ǵ�����.
+		// 이 곳으로 워프할 수 없으므로 워프하기 전 좌표로 되돌리자.
 		SPDLOG_ERROR("location {} {} not allowed to login this server", m_posWarp.x, m_posWarp.y);
 		GetDesc()->SetPhase(PHASE_CLOSE);
 		return;
@@ -5303,7 +5303,7 @@ bool CHARACTER::Return()
 
 	SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
 
-    SPDLOG_TRACE("{} {} �����ϰ� ���ư���! {} {}", GetName(), (void*) this, x, y);
+    SPDLOG_TRACE("{} {} Give up and go home! {} {}", GetName(), (void*) this, x, y);
 
 	if (GetParty())
 		GetParty()->SendMessage(this, PM_RETURN, x, y);
@@ -5322,14 +5322,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;
@@ -5343,14 +5343,14 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 	int x = pkChr->GetX();
 	int 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;
@@ -5370,9 +5370,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()));
 
@@ -5404,7 +5404,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 		}
 	}
 
-	// ������ ��ġ�� �ٶ���� �Ѵ�.
+	// 가려는 위치를 바라봐야 한다.
 	SetRotationToXY(x, y);
 
 	float fDist = DISTANCE_SQRT(x - GetX(), y - GetY());
@@ -5416,7 +5416,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 
 	if (IsChangeAttackPosition(pkChr) && GetMobRank() < MOB_RANK_BOSS)
 	{
-		// ���� �ֺ� ������ ������ �̵�
+		// 상대방 주변 랜덤한 곳으로 이동
 		SetChangeAttackPositionTime();
 
 		int retry = 16;
@@ -5447,7 +5447,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 	}
 	else
 	{
-		// ���� ���󰡱�
+		// 직선 따라가기
 		float fDistToGo = fDist - fMinDistance;
 		GetDeltaByDegree(GetRotation(), fDistToGo, &fx, &fy);
 
@@ -5456,7 +5456,7 @@ bool CHARACTER::Follow(LPCHARACTER pkChr, float fMinDistance)
 	}
 
 	SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
-	//MonsterLog("�Ѿư���; %s", pkChr->GetName());
+	//MonsterLog("Chase; %s", pkChr->GetName());
 	return true;
 }
 
@@ -5479,12 +5479,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("[Storeroom] You have entered an incorrect password."));
 		return;
 	}
 	else if (m_pkSafebox)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â��> â�� �̹� �����ֽ��ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] The Storeroom is already open."));
 		return;
 	}
 
@@ -5492,12 +5492,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("[Storeroom] You have to wait 10 seconds before you can open the Storeroom again."));
 		return;
 	}
 	else if (GetDistanceFromSafeboxOpen() > 1000)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â��> �Ÿ��� �־ â�� �� �� �����ϴ�."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] You are too far away to open the storeroom."));
 		return;
 	}
 	else if (m_bOpeningSafebox)
@@ -5768,9 +5768,9 @@ void CHARACTER::SetNowWalking(bool bWalkFlag)
 		if (IsNPC())
 		{
 			if (m_bNowWalking)
-				MonsterLog("�ȴ´�");
+				MonsterLog("Walk");
 			else
-				MonsterLog("�ڴ�");
+				MonsterLog("Run");
 		}
 	}
 }
@@ -6110,11 +6110,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);
 
@@ -6178,7 +6178,7 @@ void CHARACTER::DetermineDropMetinStone()
 				else
 				{
 					iGradePct -= iLevelGradePortion;
-					m_dwDropMetinStone += 100; // �� +a -> +(a+1)�� �ɶ����� 100�� ����
+					m_dwDropMetinStone += 100; // 돌 +a -> +(a+1)이 될때마다 100씩 증가
 				}
 			}
 		}
@@ -6226,9 +6226,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);
@@ -6240,7 +6240,7 @@ void CHARACTER::MountVnum(DWORD vnum)
 	{
 		LPENTITY entity = (it++)->first;
 
-		//Mount�Ѵٰ� �ؼ� Client Side�� ��ü�� �������� �ʴ´�.
+		//Mount한다고 해서 Client Side의 객체를 삭제하진 않는다.
 		//EncodeRemovePacket(entity);
 		//if (!m_bIsObserver)
 		EncodeInsertPacket(entity);
@@ -6474,45 +6474,45 @@ bool CHARACTER::WarpToPID(DWORD dwPID)
 			}
 			else
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������ �ִ� ������ ������ �� �����ϴ�."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot teleport to the player."));
 				return false;
 			}
 		}
 		else
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������ �ִ� ������ ������ �� �����ϴ�."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot teleport to the player."));
 			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("This player is not online."));
 			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("The player is playing on channel %d. (You are on channel %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("You cannot teleport to the player."));
 			return false;
 		}
 		else
 		{
 			if (!CAN_ENTER_ZONE(this, pcci->lMapIndex))
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("������ �ִ� ������ ������ �� �����ϴ�."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot teleport to the player."));
 				return false;
 			}
 
@@ -6550,7 +6550,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;
@@ -6570,7 +6570,7 @@ void CHARACTER::PayRefineFee(int iTotalMoney)
 
 	if (pGuild)
 	{
-		// �ڱ� ����̸� iTotalMoney�� �̹� 10%�� ���ܵǾ��ִ�
+		// 자기 길드이면 iTotalMoney에 이미 10%가 제외되어있다
 		if (pGuild != GetGuild())
 		{
 			pGuild->RequestDepositMoney(this, iFee);
@@ -6582,7 +6582,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();
@@ -6590,24 +6590,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("After opening the Storeroom, you cannot go anywhere else for %d seconds."), 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("You cannot go elsewhere for a period of time after the trade."));
 
 			return true;
 		}
@@ -6617,18 +6617,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("You cannot go elsewhere for a period of time after the trade."));
 
 			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("After trading you cannot go elsewhere for %d seconds."), limittime );
 		return true;
 	}
 	//END_PREVENT_PORTAL_AFTER_EXCHANGE
@@ -6637,14 +6637,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("After trading you cannot go elsewhere for %d seconds."), 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("After a trade, you cannot use a scroll for another %d seconds."), limittime);
 		return true; 
 	}
 	//END_PREVENT_ITEM_COPY
@@ -7108,7 +7108,7 @@ BYTE CHARACTER::GetChatCounter() const
 	return m_bChatCounter;
 }
 
-// ���̳� �ٸ����� Ÿ�� �ֳ�?
+// 말이나 다른것을 타고 있나?
 bool CHARACTER::IsRiding() const
 {
 	return IsHorseRiding() || GetMountVnum();
@@ -7148,4 +7148,4 @@ DWORD CHARACTER::GetNextExp() const
 int	CHARACTER::GetSkillPowerByLevel(int level, bool bMob) const
 {
 	return CTableBySkill::instance().GetSkillPowerByLevelFromType(GetJob(), GetSkillGroup(), std::clamp(level, 0, SKILL_MAX_LEVEL), bMob);
-}
\ No newline at end of file
+}
diff --git a/src/game/src/char.h b/src/game/src/char.h
index 0450720..0b756bd 100644
--- a/src/game/src/char.h
+++ b/src/game/src/char.h
@@ -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,58 +234,57 @@ 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
 
 	// TODO: check if the PC_BANG_* bonuses can be safely removed
 	// 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
 };
@@ -354,7 +353,7 @@ struct DynamicCharacterPtr {
 	uint32_t id;
 };
 
-/* ϴ  */
+/* 저장하는 데이터 */
 typedef struct character_point
 {
 	int			points[POINT_MAX_NUM];
@@ -377,7 +376,7 @@ typedef struct character_point
 	BYTE			skill_group;
 } CHARACTER_POINT;
 
-/*  ʴ ij  */
+/* 저장되지 않는 캐릭터 데이터 */
 typedef struct character_point_instant
 {
 	int			points[POINT_MAX_NUM];
@@ -399,7 +398,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];
 
@@ -411,7 +410,7 @@ typedef struct character_point_instant
 
 	BYTE			gm_level;
 
-	BYTE			bBasePart;	//  ȣ
+	BYTE			bBasePart;	// 평상복 번호
 
 	int				iMaxStamina;
 
@@ -509,7 +508,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 {
 	protected:
 		//////////////////////////////////////////////////////////////////////////////////
-		// Entity 
+		// Entity 관련
 		virtual void	EncodeInsertPacket(LPENTITY entity);
 		virtual void	EncodeRemovePacket(LPENTITY entity);
 		//////////////////////////////////////////////////////////////////////////////////
@@ -519,7 +518,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;
@@ -589,13 +588,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;
@@ -636,7 +635,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);
 
@@ -719,14 +718,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(int lMapIndex, int x, int y, int z = INT_MAX, bool bShowSpawnMotion = false);
 
@@ -750,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;
@@ -805,15 +804,15 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void			SetNowWalking(bool bWalkFlag);	
 		void			ResetWalking()			{ SetNowWalking(m_bWalking); }
 
-		bool			Goto(int x, int y);	// ٷ ̵ Ű ʰ ǥ ġ BLENDING Ų.
+		bool			Goto(int x, int y);	// 바로 이동 시키지 않고 목표 위치로 BLENDING 시킨다.
 		void			Stop();
 
-		bool			CanMove() const;		// ̵  ִ°?
+		bool			CanMove() const;		// 이동할 수 있는가?
 
 		void			SyncPacket();
-		bool			Sync(int x, int y);	//   ޼ҵ ̵ Ѵ (  ǿ  ̵ Ұ )
-		bool			Move(int x, int y);	//  ˻ϰ Sync ޼ҵ带  ̵ Ѵ.
-		void			OnMove(bool bIsAttack = false);	// ϶ Ҹ. Move() ޼ҵ ̿ܿ Ҹ  ִ.
+		bool			Sync(int x, int y);	// 실제 이 메소드로 이동 한다 (각 종 조건에 의한 이동 불가가 없음)
+		bool			Move(int x, int y);	// 조건을 검사하고 Sync 메소드를 통해 이동 한다.
+		void			OnMove(bool bIsAttack = false);	// 움직일때 불린다. Move() 메소드 이외에서도 불릴 수 있다.
 		DWORD			GetMotionMode() const;
 		float			GetMoveMotionSpeed() const;
 		float			GetMoveSpeed() const;
@@ -824,7 +823,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;
@@ -851,7 +850,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;
@@ -874,7 +873,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);
@@ -903,7 +902,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;
@@ -929,25 +928,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);
 
@@ -960,45 +959,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);
 
@@ -1007,11 +1006,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;
@@ -1045,7 +1044,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; }
@@ -1060,14 +1059,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
@@ -1113,10 +1112,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);
@@ -1148,14 +1147,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;
@@ -1169,7 +1168,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
 
 		////////////////////////////////////////////////////////////////////////////////////////
@@ -1235,9 +1234,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();
@@ -1267,7 +1266,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		void				UpdateAlignment(int iAmount);
 		int					GetAlignment() const;
 
-		//ġ  
+		//선악치 얻기 
 		int					GetRealAlignment() const;
 		void				ShowAlignment(bool bShow);
 
@@ -1316,7 +1315,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;
 
@@ -1339,8 +1338,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
@@ -1398,7 +1397,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
@@ -1455,10 +1454,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();
@@ -1482,8 +1481,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);
@@ -1504,19 +1503,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; }
 
@@ -1534,7 +1533,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;
@@ -1568,7 +1567,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);
 
@@ -1630,7 +1629,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; }
 
@@ -1670,7 +1669,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:
@@ -1740,9 +1739,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
 
 		// NEW_HAIR_STYLE_ADD
@@ -1814,7 +1813,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
@@ -1864,9 +1863,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:
@@ -1942,7 +1941,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; }
@@ -1957,7 +1956,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 		bool IsPet() { return m_bIsPet; }
 #endif
 
-	//  .
+	//최종 데미지 보정.
 	private:
 		float m_fAttMul;
 		float m_fDamMul;
@@ -1970,7 +1969,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
 	private:
 		bool IsValidItemPosition(TItemPos Pos) const;
 
-		//   Ŷ ӽ 
+		//독일 선물 기능 패킷 임시 저장
 	private:
 		unsigned int itemAward_vnum = 0;
 		char		 itemAward_cmd[20] = "";
@@ -1984,10 +1983,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;
@@ -1998,17 +1997,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();
@@ -2016,8 +2015,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/src/char_affect.cpp b/src/game/src/char_affect.cpp
index 2beb8bd..ec775cc 100644
--- a/src/game/src/char_affect.cpp
+++ b/src/game/src/char_affect.cpp
@@ -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;
@@ -470,7 +470,7 @@ void CHARACTER::LoadAffect(DWORD dwCount, TPacketAffectElement * pElements)
 
 	for (DWORD i = 0; i < dwCount; ++i, ++pElements)
 	{
-		//  εʴ´.
+		// 무영진은 로드하지않는다.
 		if (pElements->dwType == SKILL_MUYEONG)
 			continue;
 
@@ -524,7 +524,7 @@ void CHARACTER::LoadAffect(DWORD dwCount, TPacketAffectElement * pElements)
 
 	m_bIsLoadedAffect = true;
 
-	// ȥ  ε  ʱȭ
+	// 용혼석 셋팅 로드 및 초기화
 	DragonSoul_Initialize();
 }
 
@@ -533,7 +533,7 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, int lApplyValue, DWORD dw
 	// CHAT_BLOCK
 	if (dwType == AFFECT_BLOCK_CHAT && lDuration > 1)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ä  Ǿϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your chat has been blocked by a GM."));
 	}
 	// END_OF_CHAT_BLOCK
 
@@ -562,10 +562,10 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, int lApplyValue, DWORD dw
 		}
 	}
 
-	// ̹ ִ ȿ   ó
+	// 이미 있는 효과를 덮어 쓰는 처리
 	if (pkAff && bOverride)
 	{
-		ComputeAffect(pkAff, false); // ϴ ȿ ϰ
+		ComputeAffect(pkAff, false); // 일단 효과를 삭제하고
 
 		if (GetDesc())
 			SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn);
@@ -573,9 +573,9 @@ bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, int lApplyValue, DWORD dw
 	else
 	{
 		//
-		//  带 ߰
+		// 새 에펙를 추가
 		//
-		// NOTE:   type ε  Ʈ   ִ.
+		// NOTE: 따라서 같은 type 으로도 여러 에펙트를 붙을 수 있다.
 		// 
 		pkAff = CAffect::Acquire();
 		m_list_pkAffect.push_back(pkAff);
@@ -677,15 +677,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();
@@ -713,7 +713,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("Your chat block has been lifted."));
 	}
 	// END_OF_CHAT_BLOCK
 
@@ -795,41 +795,41 @@ bool CHARACTER::IsGoodAffect(BYTE bAffectType) const
 void CHARACTER::RemoveBadAffect()
 {
 	SPDLOG_DEBUG("RemoveBadAffect {}", 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/src/char_battle.cpp b/src/game/src/char_battle.cpp
index 59de5aa..c91f6ac 100644
--- a/src/game/src/char_battle.cpp
+++ b/src/game/src/char_battle.cpp
@@ -147,7 +147,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);
@@ -162,11 +162,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;
@@ -213,7 +213,7 @@ bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
 	if (bType == 0)
 	{
 		//
-		// Ϲ 
+		// 일반 공격
 		//
 		switch (GetMobBattleType())
 		{
@@ -286,14 +286,14 @@ void CHARACTER::DeathPenalty(BYTE bTown)
 	if (GetLevel() < 10)
 	{
 		SPDLOG_DEBUG("NO_DEATH_PENALTY_LESS_LV10({})", GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not lose any Experience because of the Blessing of the Dragon God."));
 		return;
 	}
 
    	if (Random::get(0, 2))
 	{
 		SPDLOG_DEBUG("NO_DEATH_PENALTY_LUCK({})", GetName());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not lose any Experience because of the Blessing of the Dragon God."));
 		return;
 	}
 
@@ -302,22 +302,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))
 			{
 				SPDLOG_DEBUG("NO_DEATH_PENALTY_AFFECT({})", GetName());
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not lose any Experience because of the Blessing of the Dragon God."));
 				RemoveAffect(AFFECT_NO_DEATH_PENALTY);
 				return;
 			}
 		}
-		else if (!bTown) //   ڸ Ȱø  ȣ Ѵ. ( ͽô ġ гƼ )
+		else if (!bTown) // 국제 버전에서는 제자리 부활시만 용신의 가호를 사용한다. (마을 복귀시는 경험치 패널티 없음)
 		{
 			if (FindAffect(AFFECT_NO_DEATH_PENALTY))
 			{
 				SPDLOG_DEBUG("NO_DEATH_PENALTY_AFFECT({})", GetName());
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ ġ  ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not lose any Experience because of the Blessing of the Dragon God."));
 				RemoveAffect(AFFECT_NO_DEATH_PENALTY);
 				return;
 			}
@@ -411,7 +411,7 @@ void CHARACTER::Stun()
 
 	CloseMyShop();
 
-	event_cancel(&m_pkRecoveryEvent); // ȸ ̺Ʈ δ.
+	event_cancel(&m_pkRecoveryEvent); // 회복 이벤트를 죽인다.
 
 	TPacketGCStun pack;
 	pack.header	= HEADER_GC_STUN;
@@ -535,7 +535,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;
@@ -546,7 +546,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 	int iTotalGold = 0;
 	//
-	// ---------   Ȯ  ----------
+	// --------- 돈 드롭 확률 계산 ----------
 	//
 	int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;
 
@@ -580,35 +580,35 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 	int iGoldMultipler = GetGoldMultipler();
 
-	if (1 == Random::get(1, 50000)) // 1/50000 Ȯ  10
+	if (1 == Random::get(1, 50000)) // 1/50000 확률로 돈이 10배
 		iGoldMultipler *= 10;
-	else if (1 == Random::get(1, 10000)) // 1/10000 Ȯ  5
+	else if (1 == Random::get(1, 10000)) // 1/10000 확률로 돈이 5배
 		iGoldMultipler *= 5;
 
-	//  
+	// 개인 적용
 	if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
 		if (Random::get(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 == Random::get(1, iGold10DropPct))
-			iGoldMultipler *= 10; // 1% Ȯ  10
+			iGoldMultipler *= 10; // 1% 확률로 돈 10배
 
 		int iSplitCount = Random::get(25, 35);
 
@@ -627,7 +627,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 			SPDLOG_TRACE("Drop Moeny MobGoldAmountRate {} {}", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler);
             SPDLOG_TRACE("Drop Money gold {} GoldMin {} GoldMax {}", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
 
-			// NOTE:  ź  3  ó  
+			// NOTE: 돈 폭탄은 제 3의 손 처리를 하지 않음
 			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
 			{
 				pos.x = GetX() + ((Random::get(-14, 14) + Random::get(-14, 14)) * 23);
@@ -640,11 +640,11 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 			}
 		}
 	}
-	// 1% Ȯ  10  ߸. (10 )
+	// 1% 확률로 돈을 10개 떨어 뜨린다. (10배 드롭임)
 	else if (1 == Random::get(1, iGold10DropPct))
 	{
 		//
-		//  ź 
+		// 돈 폭탄식 드롭
 		//
 		for (int i = 0; i < 10; ++i)
 		{
@@ -657,7 +657,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 				continue;
 			}
 
-			// NOTE:  ź  3  ó  
+			// NOTE: 돈 폭탄은 제 3의 손 처리를 하지 않음
 			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
 			{
 				pos.x = GetX() + (Random::get(-7, 7) * 20);
@@ -673,7 +673,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 	else
 	{
 		//
-		// Ϲ   
+		// 일반적인 방식의 돈 드롭
 		//
 		int iGold = Random::get(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
 		iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
@@ -720,7 +720,7 @@ void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
 
 void CHARACTER::Reward(bool bItemDrop)
 {
-	if (GetRaceNum() == 5001) // ֱ   
+	if (GetRaceNum() == 5001) // 왜구는 돈을 무조건 드롭
 	{
 		PIXEL_POSITION pos;
 
@@ -807,7 +807,7 @@ void CHARACTER::Reward(bool bItemDrop)
 		return;
 
 	//
-	//  
+	// 돈 드롭
 	//
 	//PROF_UNIT pu2("r2");
     SPDLOG_TRACE("Drop money : Attacker {}", pkAttacker->GetName());
@@ -815,7 +815,7 @@ void CHARACTER::Reward(bool bItemDrop)
 	//pu2.Pop();
 
 	//
-	//  
+	// 아이템 드롭
 	//
 	//PROF_UNIT pu3("r3");
 	LPITEM item;
@@ -878,7 +878,7 @@ void CHARACTER::Reward(bool bItemDrop)
 
 			if (v.empty())
 			{
-				//  Ư      
+				// 데미지를 특별히 많이 준 사람이 없으니 소유권 없음
 				while (iItemIdx >= 0)
 				{
 					item = s_vec_item[iItemIdx--];
@@ -890,7 +890,7 @@ void CHARACTER::Reward(bool bItemDrop)
 					}
 
 					item->AddToGround(GetMapIndex(), pos);
-					// 10%     Ǿ
+					// 10% 이하 데미지 준 사람끼리는 소유권없음
 					//item->SetOwnership(pkAttacker);
 					item->StartDestroyEvent();
 
@@ -904,7 +904,7 @@ void CHARACTER::Reward(bool bItemDrop)
 			}
 			else
 			{
-				//       
+				// 데미지 많이 준 사람들 끼리만 소유권 나눠가짐
 				std::vector::iterator it = v.begin();
 
 				while (iItemIdx >= 0)
@@ -960,20 +960,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;
 
@@ -1204,7 +1204,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;
@@ -1304,7 +1304,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 
 				if (GetPoint(POINT_EMPIRE_POINT) < 10)
 				{
-					// TODO : Ա  ڵ带 ־ Ѵ.
+					// TODO : 입구로 날리는 코드를 넣어야 한다.
 				}
 
 				char buf[256];
@@ -1330,7 +1330,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 					}
 
 					if (Random::get(1, 100) < iNoPenaltyProb)
-						pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȣ   ʾҽϴ."));
+						pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not drop any Item(s) as you are protected by the Dragon God."));
 					else
 					{
 						if (g_iUseLocale && pkKiller->GetParty())
@@ -1371,7 +1371,7 @@ void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead)
 
 	ClearSync();
 
-	event_cancel(&m_pkStunEvent); //  ̺Ʈ δ.
+	event_cancel(&m_pkStunEvent); // 기절 이벤트는 죽인다.
 
 	if (IsPC())
 	{
@@ -1381,12 +1381,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
@@ -1413,7 +1413,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("[Guild] There are no experience points for hunting during a guild war."));
 				}
 			}
 		}
@@ -1438,10 +1438,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();
 
@@ -1450,11 +1450,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)
@@ -1578,12 +1578,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
@@ -1656,7 +1656,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))
@@ -1688,19 +1688,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())
@@ -1708,12 +1708,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 (Random::get(1, 100) <= iCriticalPct)
@@ -1729,7 +1729,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// 
+			// 관통공격
 			int iPenetratePct = pAttacker->GetPoint(POINT_PENETRATE_PCT);
 
 			if (!IsPC())
@@ -1751,16 +1751,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 (Random::get(1, 100) <= iPenetratePct)
@@ -1768,7 +1768,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("Additional Stabbing Weapon Damage %d"), GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100);
 
 					dam += GetPoint(POINT_DEF_GRADE) * (100 + GetPoint(POINT_DEF_BONUS)) / 100;
 
@@ -1781,19 +1781,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) && Random::get(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 Block! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Block! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
 				}
 
 				SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
@@ -1802,13 +1802,13 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 		else if (type == DAMAGE_TYPE_NORMAL_RANGE)
 		{
-			// Ÿ Ÿ    
+			// 원거리 평타의 경우 피할 수 있음
 			if (GetPoint(POINT_DODGE) && Random::get(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 Miss! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Miss! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
 				}
 
 				SendDamagePacket(pAttacker, 0, DAMAGE_DODGE);
@@ -1826,19 +1826,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);
 
@@ -1846,7 +1846,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ũƼ
+			// 크리티컬
 			int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);
 
 			if (!IsPC())
@@ -1854,7 +1854,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 
 			if (iCriticalPct)
 			{
-				//ũƼ   .
+				//크리티컬 저항 값 적용.
 				iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL);
 
 				if (Random::get(1, 100) <= iCriticalPct)
@@ -1865,7 +1865,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// 
+			// 관통공격
 			int iPenetratePct = pAttacker->GetPoint(POINT_PENETRATE_PCT);
 
 			if (!IsPC())
@@ -1886,7 +1886,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 			if (iPenetratePct)
 			{
 				
-				//Ÿ   .
+				//관통타격 저항 값 적용.
 				iPenetratePct -= GetPoint(POINT_RESIST_PENETRATE);
 
 				if (Random::get(1, 100) <= iPenetratePct)
@@ -1894,12 +1894,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("Additional Stabbing Weapon Damage %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;
@@ -1917,7 +1917,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// SP ƿ
+			// SP 스틸
 			if (pAttacker->GetPoint(POINT_STEAL_SP))
 			{
 				int pct = 1;
@@ -1944,7 +1944,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			//  ƿ
+			// 돈 스틸
 			if (pAttacker->GetPoint(POINT_STEAL_GOLD))
 			{
 				if (Random::get(1, 100) <= pAttacker->GetPoint(POINT_STEAL_GOLD))
@@ -1955,8 +1955,8 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ĥ  HPȸ
-			if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && Random::get(0, 4) > 0) // 80% Ȯ
+			// 칠 때마다 HP회복
+			if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률
 			{
 				int i = std::min(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;
 
@@ -1967,8 +1967,8 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			// ĥ  SPȸ
-			if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && Random::get(0, 4) > 0) // 80% Ȯ
+			// 칠 때마다 SP회복
+			if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && Random::get(0, 4) > 0) // 80% 확률
 			{
 				int i = std::min(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;
 
@@ -1979,7 +1979,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 				}
 			}
 
-			//   ش.
+			// 상대방의 마나를 없앤다.
 			if (pAttacker->GetPoint(POINT_MANA_BURN_PCT))
 			{
 				if (Random::get(1, 100) <= pAttacker->GetPoint(POINT_MANA_BURN_PCT))
@@ -1989,7 +1989,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	}
 
 	//
-	// Ÿ Ǵ ų  ʽ / 
+	// 평타 또는 스킬로 인한 보너스 피해/방어 계산
 	// 
 	switch (type)
 	{
@@ -2020,16 +2020,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);
@@ -2037,14 +2037,14 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 		else
 		{
-			// ŷ ڶ ǰ  ←??
+			// 정신력이 모자라서 피가 더 깍여야할??
 			PointChange(POINT_SP, -GetSP());
 			dam -= iSP * 100 / std::max(GetPoint(POINT_MANASHIELD), 1);
 		}
 	}
 
 	//
-	// ü   ( )
+	// 전체 방어력 상승 (몰 아이템)
 	// 
 	if (GetPoint(POINT_MALL_DEFBONUS) > 0)
 	{
@@ -2055,7 +2055,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	if (pAttacker)
 	{
 		//
-		// ü ݷ  ( )
+		// 전체 공격력 상승 (몰 아이템)
 		//
 		if (pAttacker->GetPoint(POINT_MALL_ATTBONUS) > 0)
 		{
@@ -2064,7 +2064,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		}
 
 		//
-		//   ʽ (ѱ õ  )
+		// 제국으로 인한 보너스 (한국 올드 버전만 적용)
 		//
 		int iEmpire = GetEmpire();
 		int lMapIndex = GetMapIndex();
@@ -2084,7 +2084,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;
@@ -2129,17 +2129,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;
 		}
 	}
@@ -2155,7 +2155,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 		else
 			SetLastAttacked(get_dword_time());
 
-		//   :  
+		// 몬스터 대사 : 맞을 때
 		MonsterChat(MONSTER_CHAT_ATTACKED);
 	}
 
@@ -2168,7 +2168,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	if (IsDead())
 		return true;
 
-	//    ʵ .
+	// 독 공격으로 죽지 않도록 함.
 	if (type == DAMAGE_TYPE_POISON)
 	{
 		if (GetHP() - dam <= 0)
@@ -2178,7 +2178,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
 	}
 
 	// ------------------------
-	//  ̾  
+	// 독일 프리미엄 모드 
 	// -----------------------
 	if (LC_IsGermany() && pAttacker && pAttacker->IsPC())
 	{
@@ -2186,7 +2186,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)
@@ -2196,7 +2196,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())
@@ -2225,7 +2225,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;
@@ -2260,12 +2260,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]attack location: %d %d"), pAttacker->GetName(), (DWORD) pAttacker->GetVID(), pAttacker->GetX(), pAttacker->GetY());
 		}
 	}
 
 	//
-	// !!!!!!!!!  HP ̴ κ !!!!!!!!!
+	// !!!!!!!!! 실제 HP를 줄이는 부분 !!!!!!!!!
 	//
 	if (!cannot_dead)
 	{
@@ -2292,7 +2292,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");
@@ -2317,40 +2317,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 (Random::get(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;
 
@@ -2374,16 +2374,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);
@@ -2394,12 +2394,12 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += (iExp * 50 / 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;
@@ -2410,12 +2410,12 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += iExp;
 		}
 
-		// ȥ ʽ
+		// 결혼 보너스
 		iExp += iExp * to->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_EXP_BONUS) / 100;
 	}
 	else
 	{
-		//  : ġ 
+		// 아이템 몰: 경험치 결제
 		if (to->GetPremiumRemainSeconds(PREMIUM_EXP) > 0)
 		{
 			iExp += (iExp * 20 / 100);
@@ -2426,7 +2426,7 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
 			iExp += (iExp * 20 / 100);
 		}
 
-		// ȥ ʽ
+		// 결혼 보너스
 		iExp += iExp * to->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_EXP_BONUS) / 100;
 	}
 
@@ -2447,10 +2447,10 @@ static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
         to->GetPoint(POINT_EXP)
     );
 
-	// ȹ  2005.04.21  85%
+	// 기획측 조정값 2005.04.21 현재 85%
 	iExp = iExp * CHARACTER_MANAGER::instance().GetMobExpRate(to) / 100;
 
-	// ġ ѹ ȹ淮 
+	// 경험치 한번 획득량 제한
 	iExp = std::min(to->GetNextExp() / 10, iExp);
 
 	if (test_server)
@@ -2466,10 +2466,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 || 
@@ -2588,7 +2588,7 @@ typedef struct SDamageInfo
 					pParty->ChatPacketToAllMember(CHAT_TYPE_INFO, "exp party bonus %d%%", pParty->GetExpBonusPercent());
 			}
 
-			// ġ ֱ (Ƽ ȹ ġ 5%   )
+			// 경험치 몰아주기 (파티가 획득한 경험치를 5% 빼서 먼저 줌)
 			if (pParty->GetExpCentralizeCharacter())
 			{
 				LPCHARACTER tch = pParty->GetExpCentralizeCharacter();
@@ -2627,7 +2627,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;
@@ -2637,7 +2637,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;
 
@@ -2684,10 +2684,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)	// 돌이 있을 경우 경험치의 반을 돌에게 넘긴다.
 	{
 		int iExp = iExpToDistribute >> 1;
 		m_pkChrStone->SetExp(m_pkChrStone->GetExp() + iExp);
@@ -2700,11 +2700,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;
@@ -2731,7 +2731,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 
 		di->Distribute(this, iExp);
 
-		// 100%  Ծ Ѵ.
+		// 100% 다 먹었으면 리턴한다.
 		if (fPercent == 1.0f)
 			return pkChrMostAttacked;
 
@@ -2739,7 +2739,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 	}
 
 	{
-		//  80% ġ йѴ.
+		// 남은 80%의 경험치를 분배한다.
 		TDamageInfoTable::iterator it;
 
 		for (it = damage_info_table.begin(); it != damage_info_table.end(); ++it)
@@ -2761,7 +2761,7 @@ LPCHARACTER CHARACTER::DistributeExp()
 	return pkChrMostAttacked;
 }
 
-// ȭ   
+// 화살 개수를 리턴해 줌
 int CHARACTER::GetArrowAndBow(LPITEM * ppkBow, LPITEM * ppkArrow, int iArrowCount/* = 1 */)
 {
 	LPITEM pkBow;
@@ -2833,7 +2833,7 @@ class CFuncShoot
 			if (!pkVictim)
 				return;
 
-			//  Ұ
+			// 공격 불가
 			if (!battle_is_attackable(m_me, pkVictim))
 				return;
 
@@ -2847,7 +2847,7 @@ class CFuncShoot
 
 			switch (m_bType)
 			{
-				case 0: // ϹȰ
+				case 0: // 일반활
 					{
 						int iDam = 0;
 
@@ -2881,7 +2881,7 @@ class CFuncShoot
 
 						NormalAttackAffect(m_me, pkVictim);
 
-						//  
+						// 데미지 계산
 						iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_BOW)) / 100;
 
 						m_me->OnMove(true);
@@ -2891,11 +2891,11 @@ class CFuncShoot
 							pkVictim->BeginFight(m_me);
 
 						pkVictim->Damage(m_me, iDam, DAMAGE_TYPE_NORMAL_RANGE);
-						// Ÿġ  
+						// 타격치 계산부 끝
 					}
 					break;
 
-				case 1: // Ϲ 
+				case 1: // 일반 마법
 					{
 						int iDam;
 
@@ -2906,7 +2906,7 @@ class CFuncShoot
 
 						NormalAttackAffect(m_me, pkVictim);
 
-						//  
+						// 데미지 계산
 						iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_MAGIC)) / 100;
 
 						m_me->OnMove(true);
@@ -2916,16 +2916,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))
 							{
@@ -3057,7 +3057,7 @@ class CFuncShoot
 						SPDLOG_DEBUG("{} - Skill {} -> {}", m_me->GetName(), m_bType, pkVictim->GetName());
 						m_me->ComputeSkill(m_bType, pkVictim);
 
-						// TODO     ϱ
+						// TODO 여러명에게 슉 슉 슉 하기
 					}
 					break;
 
@@ -3154,7 +3154,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;
@@ -3187,7 +3187,7 @@ void CHARACTER::SetVictim(LPCHARACTER pkVictim)
 	if (!pkVictim)
 	{
 		if (0 != (DWORD)m_kVIDVictim)
-			MonsterLog("  ");
+			MonsterLog("Disable the attack target");
 
 		m_kVIDVictim.Reset();
 		battle_end(this);
@@ -3195,7 +3195,7 @@ void CHARACTER::SetVictim(LPCHARACTER pkVictim)
 	else
 	{
 		if (m_kVIDVictim != pkVictim->GetVID())
-			MonsterLog("  : %s", pkVictim->GetName());
+			MonsterLog("Set the attack target: %s", pkVictim->GetName());
 
 		m_kVIDVictim = pkVictim->GetVID();
 		m_dwLastVictimSetTime = get_dword_time();
@@ -3207,7 +3207,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;
@@ -3360,7 +3360,7 @@ struct FuncAggregateMonster
 			if (ch->GetVictim())
 				return;
 
-			if (Random::get(1, 100) <= 50) // ӽ÷ 50% Ȯ  ´
+			if (Random::get(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);
@@ -3488,7 +3488,7 @@ void CHARACTER::PullMonster()
 
 void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int dam, CHARACTER::TBattleInfo & info)
 {
-	// Ư ŸԿ   ö󰣴
+	// 특정 공격타입에 따라 더 올라간다
 	switch (type)
 	{
 		case DAMAGE_TYPE_NORMAL_RANGE:
@@ -3507,7 +3507,7 @@ void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int d
 			break;
 	}
 
-	// ڰ    ʽ ش.
+	// 공격자가 현재 대상인 경우 보너스를 준다.
 	if (pAttacker == GetVictim())
 		dam = (int) (dam * 1.2f);
 
@@ -3520,7 +3520,7 @@ void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int d
 	{
 		LPPARTY pParty = GetParty();
 
-		//     ϴ
+		// 리더인 경우 영향력이 좀더 강하다
 		int iPartyAggroDist = dam;
 
 		if (pParty->GetLeaderPID() == GetVID())
@@ -3552,7 +3552,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())
@@ -3563,7 +3563,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/src/char_change_empire.cpp b/src/game/src/char_change_empire.cpp
index 59d25c1..1d9bd3a 100644
--- a/src/game/src/char_change_empire.cpp
+++ b/src/game/src/char_change_empire.cpp
@@ -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/src/char_dragonsoul.cpp b/src/game/src/char_dragonsoul.cpp
index 98de574..f76967c 100644
--- a/src/game/src/char_dragonsoul.cpp
+++ b/src/game/src/char_dragonsoul.cpp
@@ -5,14 +5,14 @@
 #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("Dragon Soul Alchemy is not active"));
 		return false;
 	}
 
@@ -142,4 +142,4 @@ bool CHARACTER::DragonSoul_RefineWindow_Close()
 bool CHARACTER::DragonSoul_RefineWindow_CanRefine()
 {
 	return NULL != m_pointsInstant.m_pDragonSoulRefineWindowOpener;
-}
\ No newline at end of file
+}
diff --git a/src/game/src/char_horse.cpp b/src/game/src/char_horse.cpp
index c7a1404..05317a7 100644
--- a/src/game/src/char_horse.cpp
+++ b/src/game/src/char_horse.cpp
@@ -17,22 +17,22 @@ bool CHARACTER::StartRiding()
 {
 	if (IsDead() == true)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿  Ż  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot ride a Horse while downed."));
 		return false;
 	}
 	
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿  Ż  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot ride a Horse while you are transformed."));
 		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("You cannot ride while you are wearing a Wedding Dress or a Tuxedo."));
 		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("You do not have a Horse."));
 		else if (GetHorseHealth() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׾ִ  Դϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your Horse is dead."));
 		else if (GetHorseStamina() <= 0)
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׹̳ʰ Ͽ  Ż  ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your Horse's endurance is too low."));
 
 		return false;
 	}
 
-	// ȯ  ְ
+	// 소환한 말 없애고
 	HorseSummon(false);
 
 	MountVnum(dwMountVnum);
@@ -78,7 +78,7 @@ bool CHARACTER::StopRiding()
 			DWORD dwOldVnum = GetMountVnum();
 			MountVnum(0);
 
-			// [NOTE]    ڱⰡ  ȯϵ 
+			// [NOTE] 말에서 내릴 땐 자기가 탔던걸 소환하도록 수정
 			HorseSummon(true, false, dwOldVnum);
 		}
 		else
@@ -139,14 +139,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;
 
@@ -177,16 +177,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("Calling the Horse has failed."));
 			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));
@@ -203,7 +203,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("'s Horse");
 		}
 
 		if (!m_chHorse->Show(GetMapIndex(), x, y, GetZ()))
@@ -239,7 +239,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);
@@ -310,7 +310,7 @@ void CHARACTER::SendHorseInfo()
 3: 70% < ~ <= 100%
 2: 30% < ~ <= 70%
 1:  0% < ~ <= 30%
-0: 
+0: 사망
 
 STM
 
@@ -343,8 +343,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;
@@ -366,7 +366,7 @@ bool CHARACTER::CanUseHorseSkill()
 			if (GetMountVnum() >= 20209 && GetMountVnum() <= 20212)
 				return true;
 
-			//󸶴 渶
+			//라마단 흑마
 			if (CMobVnumHelper::IsRamadanBlackHorse(GetMountVnum()))
 				return true;
 		}
diff --git a/src/game/src/char_item.cpp b/src/game/src/char_item.cpp
index d449dbd..3b149c8 100644
--- a/src/game/src/char_item.cpp
+++ b/src/game/src/char_item.cpp
@@ -76,7 +76,7 @@ struct FFindStone
 };
 
 
-//ȯ, ȯ, ȥ
+//귀환부, 귀환기억부, 결혼반지
 static bool IS_SUMMON_ITEM(int vnum)
 {
 	switch (vnum)
@@ -109,38 +109,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;
@@ -164,7 +164,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)
@@ -176,7 +176,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)
@@ -186,13 +186,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))
@@ -278,7 +278,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 		assert(!"GetOwner exist");
 		return;
 	}
-	// ⺻ κ丮
+	// 기본 인벤토리
 	switch(window_type)
 	{
 	case INVENTORY:
@@ -324,8 +324,8 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 						if (p >= INVENTORY_MAX_NUM)
 							continue;
 
-						// wCell + 1  ϴ   üũ  
-						//  óϱ 
+						// wCell + 1 로 하는 것은 빈곳을 체크할 때 같은
+						// 아이템은 예외처리하기 위함
 						m_pointsInstant.bItemGrid[p] = wCell + 1;
 					}
 				}
@@ -336,7 +336,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 			m_pointsInstant.pItems[wCell] = pItem;
 		}
 		break;
-	// ȥ κ丮
+	// 용혼석 인벤토리
 	case DRAGON_SOUL_INVENTORY:
 		{
 			LPITEM pOld = m_pointsInstant.pDSItems[wCell];
@@ -379,8 +379,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;
 					}
 				}
@@ -398,7 +398,7 @@ void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
 
 	if (GetDesc())
 	{
-		// Ȯ :   ÷  
+		// 확장 아이템: 서버에서 아이템 플래그 정보를 보낸다
 		if (pItem)
 		{
 			TPacketGCItemSet pack;
@@ -452,7 +452,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)
 	{
 		SPDLOG_ERROR("CHARACTER::GetWear: invalid wear cell {}", bCell);
@@ -464,7 +464,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)
 	{
 		SPDLOG_ERROR("CHARACTER::SetItem: invalid item cell {}", bCell);
@@ -475,7 +475,7 @@ void CHARACTER::SetWear(BYTE bCell, LPITEM item)
 
 	if (!item && bCell == WEAR_WEAPON)
 	{
-		// Ͱ    ̶ ȿ ־ Ѵ.
+		// 귀검 사용 시 벗는 것이라면 효과를 없애야 한다.
 		if (IsAffectFlag(AFF_GWIGUM))
 			RemoveAffect(SKILL_GWIGEOM);
 
@@ -523,8 +523,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())
@@ -584,7 +584,7 @@ bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) c
 					return false;
 			}
 
-			// ũⰡ 1̸ ĭ ϴ ̹Ƿ ׳ 
+			// 크기가 1이면 한칸을 차지하는 것이므로 그냥 리턴
 			if (1 == bSize)
 				return true;
 			else
@@ -618,8 +618,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])
@@ -650,7 +650,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("The free weapon improvements can only be used on weapons up to level 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("No further improvements possible."));
 		return false;
 	}
 
@@ -857,7 +857,7 @@ bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
 	if (!pProto)
 	{
 		SPDLOG_ERROR("DoRefine NOT GET ITEM PROTO {}", item->GetRefinedVnum());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 		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("Your level is too low to use this item."));
 						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("You do not have enough Yang to use this item."));
 		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("Not the right material for an upgrade."));
 				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
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			SPDLOG_ERROR("cannot create item {}", 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("No further improvements possible."));
 		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("You cannot upgrade items with this Scroll."));
 			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("This item cannot be absorbed."));
 			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("You can't improve with this item."));
 			return false;
 		}
 	}
@@ -1062,7 +1062,7 @@ bool CHARACTER::DoRefineWithScroll(LPITEM item)
 	if (!pProto)
 	{
 		SPDLOG_ERROR("DoRefineWithScroll NOT GET ITEM PROTO {}", item->GetRefinedVnum());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 		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("Your level is too low to use this item."));
 						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("You do not have enough Yang to use this item."));
 		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("Not the right material for an upgrade."));
 			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
 		{
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			SPDLOG_ERROR("cannot create item {}", 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
 		{
-			//    ->  з 
+			// 아이템 생성에 실패 -> 개량 실패로 간주
 			SPDLOG_ERROR("cannot create item {}", 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("You can only be rewarded once for the Demon Tower Quest."));
 		return false;
 	}
 	// END_OF_REFINE_COST
@@ -1286,7 +1286,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	if (p.result_vnum == 0)
 	{
 		SPDLOG_ERROR("RefineInformation p.result_vnum == 0");
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 		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("This item cannot be advanced this way."));
 			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("[1106-??]No puedes unir esto."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can combine the Blessing Scroll with the Magic Iron Ore."));
 				return false;
 			}
 		}
@@ -1316,7 +1316,7 @@ bool CHARACTER::RefineInformation(BYTE bCell, BYTE bType, int iAdditionalCell)
 	if (!prt)
 	{
 		SPDLOG_ERROR("RefineInformation NOT GET REFINE SET {}", item->GetRefineSet());
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 		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("The free weapon improvements can only be used on weapons up to level 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("There is no Stone available to take out."));
 			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("You cannot store this location."));
 		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("There isn't enough space in your inventory."));
 		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("Your level is too low to use this item."));
 				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("You cannot teleport to a safe position in a foreign Kingdom."));
 		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("You can only open the shop if you take off your armour."));
 			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("You don't have enough HP."));
 			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("You don't have enough Spell Points (SP) to use this."));
 		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("Your level is too low to use this item."));
 					return false;
 				}
 				break;
@@ -1698,17 +1698,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("You cannot use this item in a duel."));
 		return false;
 	}
 
-	//    ĺʹ  ʾƵ ð Ǵ  ó. 
+	// 아이템 최초 사용 이후부터는 사용하지 않아도 시간이 차감되는 방식 처리. 
 	if (-1 != iLimitRealtimeStartFirstUseFlagIndex)
 	{
-		//  ̶   δ Socket1  ǴѴ. (Socket1 Ƚ )
+		// 한 번이라도 사용한 아이템인지 여부는 Socket1을 보고 판단한다. (Socket1에 사용횟수 기록)
 		if (0 == item->GetSocket(1))
 		{
-			// 밡ɽð Default  Limit Value  ϵ, Socket0     ϵ Ѵ. ( )
+			// 사용가능시간은 Default 값으로 Limit Value 값을 사용하되, Socket0에 값이 있으면 그 값을 사용하도록 한다. (단위는 초)
 			int duration = (0 != item->GetSocket(0)) ? item->GetSocket(0) : item->GetProto()->aLimits[iLimitRealtimeStartFirstUseFlagIndex].lValue;
 
 			if (0 == duration)
@@ -1735,7 +1735,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("You cannot use this item in a duel."));
 					return false;
 				}
 			}
@@ -1762,13 +1762,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 				if (!tree)
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ں ǿ   Դϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot build a campfire here."));
 					return false;
 				}
 
 				if (tree->IsAttr((int)(GetX()+fx), (int)(GetY()+fy), ATTR_WATER))
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ ں ǿ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot build a campfire under water."));
 					return false;
 				}
 
@@ -1853,7 +1853,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)
@@ -1862,7 +1862,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     Դϴ"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't open a personal shop in this region"));
 											}
 										}
 										else
@@ -1889,8 +1889,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
@@ -1899,10 +1899,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())
@@ -1921,7 +1921,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("You cannot use this item in a duel."));
 					return false;
 				}
 
@@ -1933,7 +1933,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("Closed. You should look for the key."));
 			}
 			break;
 
@@ -1949,13 +1949,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("This item cannot be opened with a key."));
 					return false;
 				}
 
 				if (item->GetValue(0) == item2->GetValue(0))
 				{
-					//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("   ִ κ  ȵǾϴ."));
+					//ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("That's the right key."));
 					DWORD dwBoxVnum = item2->GetVnum();
 					std::vector  dwVnums;
 					std::vector  dwCounts;
@@ -1971,34 +1971,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("You have received %d Yang."), 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("A mysterious light comes out of the box."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have received %d experience points."), dwCounts[i]);
 									break;
 								case CSpecialItemGroup::MOB:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 									break;
 								case CSpecialItemGroup::SLOW:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the red smoke coming out of the box, your speed will increase!"));
 									break;
 								case CSpecialItemGroup::DRAIN_HP:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The box suddenly exploded! You have lost Hit Points (HP)."));
 									break;
 								case CSpecialItemGroup::POISON:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the green smoke that is coming out of the box, the poison will spread through your body!"));
 									break;
 								case CSpecialItemGroup::MOB_GROUP:
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 									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("Receive: %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("The box contains %s."), item_gets[i]->GetName());
 
 									}
 							}
@@ -2006,13 +2006,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 					}
 					else
 					{
-						ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("谡  ʴ  ."));
+						ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("This key does not seem to fit the lock."));
 						return false;
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("谡  ʴ  ."));
+					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("This key does not seem to fit the lock."));
 					return false;
 				}
 			}
@@ -2026,20 +2026,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, "Not available at level 15 and below.");
 						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("Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy."));
 						return false;
 					}
 				}
@@ -2052,41 +2052,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("You have received %d Yang."), 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("A mysterious light comes out of the box."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have received %d experience points."), dwCounts[i]);
 							break;
 						case CSpecialItemGroup::MOB:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 							break;
 						case CSpecialItemGroup::SLOW:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the red smoke coming out of the box, your speed will increase!"));
 							break;
 						case CSpecialItemGroup::DRAIN_HP:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The box suddenly exploded! You have lost Hit Points (HP)."));
 							break;
 						case CSpecialItemGroup::POISON:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the green smoke that is coming out of the box, the poison will spread through your body!"));
 							break;
 						case CSpecialItemGroup::MOB_GROUP:
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 							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("Receive: %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("The box contains %s."), item_gets[i]->GetName());
 							}
 						}
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ƹ͵   ϴ."));
+					ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("You have not received anything."));
 					return false;
 				}
 			}
@@ -2105,10 +2105,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("You have lowered your Skill Level."));
 				}
 				else
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ų    ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot lower your Skill Level."));
 			}
 			break;
 
@@ -2116,7 +2116,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			{
 				if (IsPolymorphed())
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't read while transformed."));
 					return false;
 				}
 
@@ -2128,7 +2128,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 				}
 				else
 				{
-					// ο ü value 0  ų ȣ Ƿ װ .
+					// 새로운 수련서는 value 0 에 스킬 번호가 있으므로 그것을 사용.
 					dwVnum = item->GetValue(0);
 				}
 
@@ -2148,7 +2148,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 					if (distribution_test_server)
 						iReadDelay /= 3;
 
-					//ѱ  쿡 ð 24ð 
+					//한국 본섭의 경우에는 시간을 24시간 고정
 					if (LC_IsKorea())
 						iReadDelay = 86400;
 
@@ -2173,7 +2173,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("This effect is already activated."));
 								return false;
 							}
 
@@ -2214,7 +2214,7 @@ 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("This effect is already activated."));
 							}
 							else
 							{
@@ -2230,7 +2230,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("You cannot use this in the duel arena."));
 									return false;
 								}
 
@@ -2244,14 +2244,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (m_nPotionLimit <= 0)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("That is over the limit."));
 												return false;
 											}
 										}
 										break;
 
 									default :
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this in the duel arena."));
 										return false;
 										break;
 								}
@@ -2259,7 +2259,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())
 								{
@@ -2269,7 +2269,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(1) != 0)	// SP 밪 ȸ
+							if (item->GetValue(1) != 0)	// SP 절대값 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -2279,7 +2279,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(3) != 0) // HP % ȸ
+							if (item->GetValue(3) != 0) // HP % 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -2289,7 +2289,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(4) != 0) // SP % ȸ
+							if (item->GetValue(4) != 0) // SP % 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -2304,7 +2304,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("Used Moon Cake or Seed."));
 									SetUseSeedOrMoonBottleTime();
 								}
 								if (GetDungeon())
@@ -2331,7 +2331,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("You cannot use this item in a duel."));
 						return false;
 					}
 				}
@@ -2347,7 +2347,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								return false;
 							}
-							// 켱 ȥ ؼ ϵ Ѵ.
+							// 우선 용혼석에 관해서만 하도록 한다.
 							if (pDestItem->IsDragonSoul())
 							{
 								int ret;
@@ -2371,7 +2371,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("Charged for %d seconds."), ret);
 									item->SetCount(item->GetCount() - 1);
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_SUCCESS", buf);
 									return true;
@@ -2387,7 +2387,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("Unable to charge."));
 									LogManager::instance().ItemLog(this, item, "DS_CHARGING_FAILED", buf);
 									return false;
 								}
@@ -2403,14 +2403,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("Charged for %d seconds."), 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);
@@ -2418,7 +2418,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								else
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Unable to charge."));
 									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;
@@ -2432,20 +2432,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("This effect is already activated."));
 										return false;
 									}
 									int time = item->GetValue(0);
@@ -2459,15 +2459,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 (단위 초)
 
 									*/
 									int time = item->GetValue(0);
@@ -2489,7 +2489,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("You cannot use this item in a duel."));
 												break;
 											}
 										}
@@ -2498,7 +2498,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("You cannot use this item in a duel."));
 												break;
 											}
 										}
@@ -2513,13 +2513,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("You cannot wear a Wedding Ring if you are not married."));
 								}
 								break;
 
-								//  
+								//기존 용기의 망토
 							case UNIQUE_ITEM_CAPE_OF_COURAGE:
-								//󸶴   
+								//라마단 보상용 용기의 망토
 							case 70057:
 							case REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE:
 								AggregateMonster();
@@ -2538,7 +2538,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							case 30094:
 							case 30095:
 							case 30096:
-								// ָӴ
+								// 복주머니
 								{
 									const int MAX_BAG_INFO = 26;
 									static struct LuckyBagInfo
@@ -2626,7 +2626,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (bi[i].vnum == 50300)
 									{
-										// ųü Ưϰ ش.
+										// 스킬수련서는 특수하게 준다.
 										GiveRandomSkillBook();
 									}
 									else if (bi[i].vnum == 1)
@@ -2641,7 +2641,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50004: // ̺Ʈ 
+							case 50004: // 이벤트용 감지기
 								{
 									if (item->GetSocket(0))
 									{
@@ -2649,7 +2649,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										// ó 
+										// 처음 사용시
 										int iMapIndex = GetMapIndex();
 
 										PIXEL_POSITION pos;
@@ -2662,7 +2662,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ̺Ʈ Ⱑ  ʴ° ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use the Event Detector from this position."));
 											return false;
 										}
 									}
@@ -2672,10 +2672,10 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (distance < 1000.0f)
 									{
-										// ߰!
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̺Ʈ Ⱑ źο   ϴ."));
+										// 발견!
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The Event Detector vanished in a mysterious light."));
 
-										// Ƚ  ִ  ٸ Ѵ.
+										// 사용횟수에 따라 주는 아이템을 다르게 한다.
 										struct TEventStoneInfo
 										{
 											DWORD dwVnum;
@@ -2774,7 +2774,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());
@@ -2794,7 +2794,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;
@@ -2820,11 +2820,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("The Event Detector has vanished."));
 										ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (DETECT_EVENT_STONE) 0");
 										AutoGiveItem(27002);
 										return true;
@@ -2840,7 +2840,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;
@@ -2860,8 +2860,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());
 
@@ -2905,12 +2905,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("⸦ ۿϿ Ǵ  ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You triggered the detector, but no stones were detected."));
 											}
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("⸦ ۿϿ Ǵ  ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You triggered the detector, but no stones were detected."));
 										}
 
 										if (item->GetSocket(0) >= 6)
@@ -2923,13 +2923,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 (Random::get(0, 1))
 								{
 								if (GetHP() > 100)
@@ -2942,12 +2942,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);
 
@@ -2955,7 +2955,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (r <= 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Խϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You find a simple Piece of Stone in the Clam."));
 										AutoGiveItem(27990);
 									}
 									else
@@ -2974,33 +2974,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("The Clam has vanished."));
 										}
 										else if (r <= prob_table[1])
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a White Pearl inside the Clam."));
 											AutoGiveItem(27992);
 										}
 										else if (r <= prob_table[2])
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ûְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a Blue Pearl inside the Clam."));
 											AutoGiveItem(27993);
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ְ Խϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a Blood-Red Pearl inside the Clam."));
 											AutoGiveItem(27994);
 										}
 									}
 								}
 								break;
 
-							case 71013: // 
+							case 71013: // 축제용폭죽
 								CreateFly(Random::get(FLY_FIREWORK1, FLY_FIREWORK6), this);
 								item->SetCount(item->GetCount() - 1);
 								break;
 
-							case 50100: // 
+							case 50100: // 폭죽
 							case 50101:
 							case 50102:
 							case 50103:
@@ -3011,7 +3011,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)
@@ -3020,7 +3020,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     Դϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't open a personal shop in this region"));
 									}
 								}
 								else
@@ -3034,13 +3034,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("You cannot change your status while you are transformed."));
 										return false;
 									}
 
@@ -3048,13 +3048,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("It isn't easy to understand this book."));
 										return false;
 									}
 
 									if (lv >= item->GetValue(1))
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å ƹ      ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This book will not help you."));
 										return false;
 									}
 
@@ -3070,31 +3070,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("You can't read while transformed."));
 										return false;
 										
 									}
 									if (GetSkillLevel(SKILL_COMBO) == 0 && GetLevel() < 30)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 30 DZ       ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need to have a minimum level of 30 to understand this book."));
 										return false;
 									}
 
 									if (GetSkillLevel(SKILL_COMBO) == 1 && GetLevel() < 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 50 DZ       ʽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need a minimum level of 50 to understand this book."));
 										return false;
 									}
 
 									if (GetSkillLevel(SKILL_COMBO) >= 2)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't train any more Combos."));
 										return false;
 									}
 
@@ -3111,13 +3111,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("You can't read while transformed."));
 										return false;
 										
 									}
@@ -3125,7 +3125,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									int iPct = std::clamp(item->GetValue(1), 0, 100);
 									if (GetSkillLevel(dwSkillVnum)>=20 || dwSkillVnum-SKILL_LANGUAGE1+1 == GetEmpire())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ϻϰ ˾Ƶ  ִ ̴."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You already understand this language."));
 										return false;
 									}
 
@@ -3141,11 +3141,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("You can't read while transformed."));
 										return false;
 										
 									}
@@ -3154,7 +3154,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum) >= 10)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 										return false;
 									}
 
@@ -3170,13 +3170,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("You cannot change your status while you are transformed."));
 										return false;
 									}
 									
@@ -3209,25 +3209,25 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetLevel() < iLevelLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å    ÷ մϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have to improve your Level to read this Book."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) >= 40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) < iSkillLevelLowLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" å ʹ  ϱⰡ ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("It isn't easy to understand this book."));
 										return false;
 									}
 
 									if (GetSkillLevel(dwSkillVnum) >= iSkillLevelHighLimit)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" åδ  ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train with this Book any more."));
 										return false;
 									}
 
@@ -3249,7 +3249,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't read while transformed."));
 										return false;
 										
 									}
@@ -3258,7 +3258,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum)>=40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 										return false;
 									}
 
@@ -3291,7 +3291,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't read while transformed."));
 										return false;
 										
 									}
@@ -3300,7 +3300,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetSkillLevel(dwSkillVnum)>=40)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 										return false;
 									}
 
@@ -3321,7 +3321,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								{
 									if (IsPolymorphed())
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߿ å  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't read while transformed."));
 										return false;
 										
 									}
@@ -3330,7 +3330,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (GetLevel() < 50)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¸ ų   ִ  ƴմϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need a minimum level of 50 to get riding training."));
 										return false;
 									}
 
@@ -3338,9 +3338,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("You have escaped the evil ghost curse with the help of an Exorcism Scroll."));
 										}
 										else
 										{
@@ -3353,14 +3353,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("You cannot read any more Riding Guides."));
 										return false;
 									}
 
 									if (Random::get(1, 100) <= iPct)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ ü о ¸ ų Ʈ ϴ."));
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ʈδ ¸ ų  ø  ֽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You read the Horse Riding Manual and received a Riding Point."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can use this point to improve your riding skill!"));
 										PointChange(POINT_HORSE_SKILL, 1);
 
 										int iReadDelay = Random::get(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
@@ -3371,15 +3371,15 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸ ü ؿ Ͽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You did not understand the riding guide."));
 									}
 
 									ITEM_MANAGER::instance().RemoveItem(item);
 								}
 								break;
 
-							case 70102: // 
-							case 70103: // 
+							case 70102: // 선두
+							case 70103: // 선두
 								{
 									if (GetAlignment() >= 0)
 										return false;
@@ -3393,13 +3393,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("Your mind is clear. You can concentrate really well now."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your rank has increased by %d points."), delta/10);
 									}
 								}
 								break;
 
-							case 71107: // õ
+							case 71107: // 천도복숭아
 								{
 									int val = item->GetValue(0);
 									int interval = item->GetValue(1);
@@ -3410,18 +3410,18 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									{
 										if (test_server == false)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not yet available."));
 											return false;
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׽Ʈ  ð "));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Passed the test server timeout"));
 										}
 									}
 									
 									if (GetAlignment() == 200000)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ  ̻ ø  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can no longer raise your rank points."));
 										return false;
 									}
 									
@@ -3437,8 +3437,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("Your mind is clear. You can concentrate really well now."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your rank has increased by %d points."), val);
 
 									char buf[256 + 1];
 									snprintf(buf, sizeof(buf), "%d %d", old_alignment, GetAlignment() / 10);
@@ -3446,7 +3446,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71109: // Ż
+							case 71109: // 탈석서
 							case 72719:
 								{
 									LPITEM item2;
@@ -3470,7 +3470,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("There are no stones to remove"));
 												return false;
 											}
 											break;
@@ -3497,7 +3497,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (socket.size() == 0)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There are no stones to remove"));
 										return false;
 									}
 
@@ -3517,17 +3517,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("You cannot dye or bleach your current hairstyle."));
 									}
 									// END_NEW_HAIR_STYLE_ADD
 									else
@@ -3555,7 +3555,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("You need to have reached level %d to be able to dye your hair again."), last_dye_level+3);
 											}
 										}
 									}
@@ -3575,7 +3575,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("You have received %d Yang."), dwCounts[i]);
 										}
 
 										item->SetCount(item->GetCount() - 1);
@@ -3596,8 +3596,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("This item can only be opened by the another gender."));
 										return false;
 									}
 
@@ -3620,8 +3620,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("This item can only be opened by the another gender."));
 										return false;
 									}
 
@@ -3631,7 +3631,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 50011: // 
+							case 50011: // 월광보합
 								{
 									DWORD dwBoxVnum = 50011;
 									std::vector  dwVnums;
@@ -3653,41 +3653,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("You have received %d Yang."), 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("A mysterious light comes out of the box."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have received %d experience points."), dwCounts[i]);
 												break;
 
 											case CSpecialItemGroup::MOB:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 												break;
 
 											case CSpecialItemGroup::SLOW:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸ ̴ ӵ ϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the red smoke coming out of the box, your speed will increase!"));
 												break;
 
 											case CSpecialItemGroup::DRAIN_HP:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ڱ Ͽϴ!  ߽ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The box suddenly exploded! You have lost Hit Points (HP)."));
 												break;
 
 											case CSpecialItemGroup::POISON:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ   ⸦ ̸  ¸ ϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("If you inhale the green smoke that is coming out of the box, the poison will spread through your body!"));
 												break;
 
 											case CSpecialItemGroup::MOB_GROUP:
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڿ Ͱ Ÿϴ!"));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Look what came out of the box!"));
 												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("Receive: %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("The box contains %s."), item_gets[i]->GetName());
 												}
 												break;
 											}
@@ -3695,7 +3695,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("ƹ͵   ϴ."));
+										ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("You have not received anything."));
 										return false;
 									}
 								}
@@ -3712,7 +3712,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);
 								}
@@ -3722,12 +3722,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("You cannot use this item in a duel."));
 										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);
 								}
@@ -3748,16 +3748,16 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								item->SetCount(item->GetCount()-1);
 								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("You have received %d Yang."), iGold);
 									PointChange(POINT_GOLD, iGold);
 								}
 								break;
 
-								// ǥ 
+								//군주의 증표 
 							case 70021:
 								{
 									int HealPrice = quest::CQuestManager::instance().GetEventFlag("MonarchHealGold");
@@ -3767,10 +3767,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("When the Blessing of the Emperor is used %s the HP and SP are restored again."), EMPIRE_NAME(GetEmpire()));
 										SendNoticeMap(szNotice, GetMapIndex(), false);
 										
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ູ Ͽϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The Emperor Blessing is activated."));
 									}
 								}
 								break;
@@ -3780,7 +3780,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71092 : //  ü ӽ
+							case 71092 : // 변신 해체부 임시
 								{
 									if (m_pkChrTarget != NULL)
 									{
@@ -3801,9 +3801,9 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 								break;
 
-							case 71051 : // 簡
+							case 71051 : // 진재가
 								{
-									// , ̰, Ʈ 簡 
+									// 유럽, 싱가폴, 베트남 진재가 사용금지
 									if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam())
 										return false;
 
@@ -3817,13 +3817,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the upgrade of this item."));
 										return false;
 									}
 
 									if (item2->AddRareAttribute() == true)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ӽ ߰ Ǿϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("New bonus added successfully."));
 
 										int iAddedIdx = item2->GetRareAttrCount() + 4;
 										char buf[21];
@@ -3843,14 +3843,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ̻   Ӽ ߰  ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot add more bonus."));
 									}
 								}
 								break;
 
-							case 71052 : // 
+							case 71052 : // 진재경
 								{
-									// , ̰, Ʈ 簡 
+									// 유럽, 싱가폴, 베트남 진재가 사용금지
 									if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam())
 										return false;
 
@@ -3864,7 +3864,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the upgrade of this item."));
 										return false;
 									}
 
@@ -3878,7 +3878,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų Ӽ ϴ"));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the bonuses."));
 									}
 								}
 								break;
@@ -3891,8 +3891,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: 
@@ -3902,7 +3902,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("You cannot use this in the duel arena."));
 										return false;
 									}
 
@@ -3945,7 +3945,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 										if (-1 == pos)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǰ   ϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There isn't enough space in your inventory."));
 											break;
 										}
 
@@ -4055,7 +4055,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("Not yet available."));
 										return false;
 									}
 
@@ -4074,7 +4074,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("You cannot use this in the duel arena."));
 									return false;
 								}
 
@@ -4088,21 +4088,21 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										{
 											if (m_nPotionLimit <= 0)
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("That is over the limit."));
 												return false;
 											}
 										}
 										break;
 
 									default :
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this in the duel arena."));
 										return false;
 								}
 							}
 
 							bool used = false;
 
-							if (item->GetValue(0) != 0) // HP 밪 ȸ
+							if (item->GetValue(0) != 0) // HP 절대값 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -4112,7 +4112,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(1) != 0)	// SP 밪 ȸ
+							if (item->GetValue(1) != 0)	// SP 절대값 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -4122,7 +4122,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(3) != 0) // HP % ȸ
+							if (item->GetValue(3) != 0) // HP % 회복
 							{
 								if (GetHP() < GetMaxHP())
 								{
@@ -4132,7 +4132,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								}
 							}
 
-							if (item->GetValue(4) != 0) // SP % ȸ
+							if (item->GetValue(4) != 0) // SP % 회복
 							{
 								if (GetSP() < GetMaxSP())
 								{
@@ -4147,7 +4147,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("Used Moon Cake or Seed."));
 									SetUseSeedOrMoonBottleTime();
 								}
 								if (GetDungeon())
@@ -4170,7 +4170,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("You cannot use this in the duel arena."));
 								return false;
 							}
 						
@@ -4186,14 +4186,14 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									{
 										if (m_nPotionLimit <= 0)
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ѷ ʰϿϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("That is over the limit."));
 											return false;
 										}
 									}
 									break;
 
 								default :
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this in the duel arena."));
 									return false;
 							}
 						}
@@ -4314,22 +4314,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("You cannot use this from your current position."));
 								return false;
 							}
 
 							if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̿   ǰԴϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this item in a duel."));
 								return false;
 							}
 
 							if (m_pkWarpEvent)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̵ غ Ǿ ȯθ Ҽ ϴ"));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are ready to warp, so you cannot use the Scroll of the Location."));
 								return false;
 							}
 
@@ -4340,7 +4340,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)
 								{
@@ -4366,18 +4366,18 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 								else
 								{
 									if (test_server)
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ġ "));	
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are being brought back to the place of origin."));	
 
 									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 cannot be used in a dungeon."),
 												item->GetName(), "");
 										return false;
 									}
@@ -4408,21 +4408,21 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							if (item2->IsExchanging())
 								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 Spirit Stones cannot be improved with this item"));
 								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("Spirit Stones cannot be improved with this item"));
 								}
 							}
 							else
@@ -4452,12 +4452,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("You cannot change the upgrade of this item."));
 								return false;
 							}
 
@@ -4477,7 +4477,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("There aren't any Pieces of Broken Stone available for removal."));
 											return false;
 										}
 
@@ -4509,21 +4509,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("You cannot change the upgrade of this item."));
 										return false;
 									}
 
 									if (item2->GetAttributeCount() == 0)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ӽ ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is no upgrade that you can change."));
 										return false;
 									}
 
 									if (GM_PLAYER == GetGMLevel() && false == test_server)
 									{
 										//
-										// Event Flag     Ӽ   ð   ð 귶 ˻ϰ
-										// ð  귶ٸ  Ӽ濡  ð  ش.
+										// Event Flag 를 통해 이전에 아이템 속성 변경을 한 시간으로 부터 충분한 시간이 흘렀는지 검사하고
+										// 시간이 충분히 흘렀다면 현재 속성변경에 대한 시간을 설정해 준다.
 										//
 
 										DWORD dwChangeItemAttrCycle = quest::CQuestManager::instance().GetEventFlag(msc_szChangeItemAttrCycleFlag);
@@ -4540,7 +4540,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("You can only do this %d minutes after an upgrade. (%d minutes left)"),
 														dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin));
 												return false;
 											}
@@ -4570,8 +4570,8 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 									else
 									{
-										//  Ưó
-										//  簡 ߰ ȵɰŶ Ͽ ϵ ڵ.
+										// 연재경 특수처리
+										// 절대로 연재가 추가 안될거라 하여 하드 코딩함.
 										if (item->GetVnum() == 71151 || item->GetVnum() == 76023)
 										{
 											if ((item2->GetType() == ITEM_WEAPON)
@@ -4588,20 +4588,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												}
 												if (false == bCanUse)
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ұմϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The item is of too high level and cannot be used with this."));
 													break;
 												}
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʿ  մϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Only available for weapons and armor."));
 												break;
 											}
 										}
 										item2->ChangeAttribute();
 									}
 
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ Ͽϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have changed the upgrade."));
 									{
 										char buf[21];
 										snprintf(buf, sizeof(buf), "%u", item2->GetID());
@@ -4614,14 +4614,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("You cannot change the upgrade of this item."));
 										return false;
 									}
 
 									if (item2->GetAttributeCount() < 4)
 									{
-										// 簡 Ưó
-										//  簡 ߰ ȵɰŶ Ͽ ϵ ڵ.
+										// 연재가 특수처리
+										// 절대로 연재가 추가 안될거라 하여 하드 코딩함.
 										if (item->GetVnum() == 71152 || item->GetVnum() == 76024)
 										{
 											if ((item2->GetType() == ITEM_WEAPON)
@@ -4638,13 +4638,13 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												}
 												if (false == bCanUse)
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ұմϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The item is of too high level and cannot be used with this."));
 													break;
 												}
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʿ  մϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Only available for weapons and armor."));
 												break;
 											}
 										}
@@ -4654,7 +4654,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (Random::get(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
 										{
 											item2->AddAttribute();
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Upgrade successfully added."));
 
 											int iAddedIdx = item2->GetAttributeCount() - 1;
 											LogManager::instance().ItemLog(
@@ -4669,7 +4669,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No upgrade added."));
 											LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE_FAIL", buf);
 										}
 
@@ -4677,20 +4677,20 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̻   ̿Ͽ Ӽ ߰  ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You must use the Blessing Marble in order to add another bonus to this item."));
 									}
 									break;
 
 								case USE_ADD_ATTRIBUTE2 :
-									// ູ  
-									// 簡񼭸  Ӽ 4 ߰ Ų ۿ ؼ ϳ Ӽ  ٿش.
+									// 축복의 구슬 
+									// 재가비서를 통해 속성을 4개 추가 시킨 아이템에 대해서 하나의 속성을 더 붙여준다.
 									if (item2->GetAttributeSetIndex() == -1)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ    Դϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the upgrade of this item."));
 										return false;
 									}
 
-									// Ӽ ̹ 4 ߰ Ǿ  Ӽ ߰ ϴ.
+									// 속성이 이미 4개 추가 되었을 때만 속성을 추가 가능하다.
 									if (item2->GetAttributeCount() == 4)
 									{
 										char buf[21];
@@ -4699,7 +4699,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										if (Random::get(1, 100) <= aiItemAttributeAddPercent[item2->GetAttributeCount()])
 										{
 											item2->AddAttribute();
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Upgrade successfully added."));
 
 											int iAddedIdx = item2->GetAttributeCount() - 1;
 											LogManager::instance().ItemLog(
@@ -4714,7 +4714,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ӽ ߰ Ͽϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No upgrade added."));
 											LogManager::instance().ItemLog(this, item, "ADD_ATTRIBUTE2_FAIL", buf);
 										}
 
@@ -4722,11 +4722,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("This item can no longer be improved. The maximum number of bonuses has been reached."));
 									}
 									else if (item2->GetAttributeCount() < 4)
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" 簡񼭸 ̿Ͽ Ӽ ߰ ּ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only use the Blessing Marble with an item which already has 4 bonuses."));
 									}
 									else
 									{
@@ -4747,12 +4747,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 												if (Random::get(1, 100) <= 50)
 												{
 													item2->SetAccessorySocketMaxGrade(item2->GetAccessorySocketMaxGrade() + 1);
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߰Ǿϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Socket successfully added."));
 													LogManager::instance().ItemLog(this, item, "ADD_SOCKET_SUCCESS", buf);
 												}
 												else
 												{
-													ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߰ Ͽϴ."));
+													ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No socket added."));
 													LogManager::instance().ItemLog(this, item, "ADD_SOCKET_FAIL", buf);
 												}
 
@@ -4760,12 +4760,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׼ ̻  ߰  ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No additional sockets could be added to this item."));
 											}
 										}
 										else
 										{
-											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ߰   Դϴ."));
+											ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot add a socket to this item."));
 										}
 									}
 									break;
@@ -4782,12 +4782,12 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 											if (Random::get(1, 100) <= aiAccessorySocketPutPct[item2->GetAccessorySocketGrade()])
 											{
 												item2->SetAccessorySocketGrade(item2->GetAccessorySocketGrade() + 1);
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͽϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Arming successful."));
 												LogManager::instance().ItemLog(this, item, "PUT_SOCKET_SUCCESS", buf);
 											}
 											else
 											{
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͽϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Arming has failed."));
 												LogManager::instance().ItemLog(this, item, "PUT_SOCKET_FAIL", buf);
 											}
 
@@ -4796,19 +4796,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("You have to add a socket first. Use a diamond in order to do this."));
 											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("There are no sockets for gemstones in this item."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have to add a socket if you want to use a Diamond."));
 											}
 											else
-												ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ׼ ̻    ϴ."));
+												ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No more gems can be added to this item."));
 										}
 									}
 									else
 									{
-										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("These items cannot be used together."));
 									}
 									break;
 							}
@@ -4825,7 +4825,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (m_pkFishingEvent)
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߿ ̳ Ƴ  ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the Bait whilst fishing."));
 								return false;
 							}
 
@@ -4836,11 +4836,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("You are exchanging the current Bait for %s."), item->GetName());
 							}
 							else
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ô뿡 %s ̳ ϴ."), item->GetName());
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You attached %s to the hook as bait."), item->GetName());
 							}
 
 							weapon->SetSocket(2, item->GetValue(0));
@@ -4857,7 +4857,7 @@ 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("This effect is already activated."));
 							}
 							else
 							{
@@ -4872,7 +4872,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 						item->SetCount(item->GetCount() - 1);
 						break;
 
-					//   ų  ó	
+					// 물약 제조 스킬용 레시피 처리	
 					case USE_RECIPE :
 						{
 							LPITEM pSource1 = FindSpecifyItem(item->GetValue(1));
@@ -4885,7 +4885,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource1 == NULL)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ᰡ մϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are missing some ingredients to make the potion."));
 									return false;
 								}
 							}
@@ -4894,7 +4894,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 							{
 								if (pSource2 == NULL)
 								{
-									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ᰡ մϴ."));
+									ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are missing some ingredients to make the potion."));
 									return false;
 								}
 							}
@@ -4903,7 +4903,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("You do not have enough material (%s)."), pSource1->GetName());
 									return false;
 								}
 
@@ -4914,7 +4914,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("You do not have enough material (%s)."), pSource2->GetName());
 									return false;
 								}
 
@@ -4925,7 +4925,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("You do not have enough empty bottles."));
 								return false;
 							}
 
@@ -4933,7 +4933,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 
 							if (Random::get(1, 100) > item->GetValue(5))
 							{
-								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ߽ϴ."));
+								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The potion production has failed."));
 								return false;
 							}
 
@@ -4973,7 +4973,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("You cannot attach several stones of the same type."));
 						return false;
 					}
 				}
@@ -4982,7 +4982,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("This Spirit Stone cannot be attached to this type of item."));
 						return false;
 					}
 				}
@@ -4990,28 +4990,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("You cannot attach this Spirit Stone to a weapon."));
 						return false;
 					}
 				}
 				else
 				{
-					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ִ  ϴ."));
+					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No slot free."));
 					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 (Random::get(1, 100) <= 30)
 						{
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ƾ  Ͽϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have attached the Spirit Stone successfully."));
 							item2->SetSocket(i, item->GetVnum());
 						}
 						else
 						{
-							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ƾ  Ͽϴ."));
+							ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The Spirit Stone broke while being attached."));
 							item2->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
 						}
 
@@ -5021,7 +5021,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("No slot free."));
 			}
 			break;
 
@@ -5040,7 +5040,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
 			break;
 
 		case ITEM_BLEND:
-			// ο ʵ
+			// 새로운 약초들
 			SPDLOG_DEBUG("ITEM_BLEND!!");
 			if (Blend_Item_find(item->GetVnum()))
 			{
@@ -5056,13 +5056,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("This effect is already activated."));
 				}
 				else
 				{
 					if (FindAffect(AFFECT_EXP_BONUS_EURO_FREE, POINT_RESIST_MAGIC))
 					{
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ ȿ ɷ ֽϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This effect is already activated."));
 					}
 					else
 					{
@@ -5134,7 +5134,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 	if (!item->CanUsedBy(this))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this item because you do not fulfil all the requirements."));
 		return false;
 	}
 
@@ -5143,7 +5143,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("You are not able to use that item because you do not have the right gender."));
 		return false;
 	}
 
@@ -5152,43 +5152,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("This function is not available right now."));
 			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("You cannot use a Scroll of the Location whilst taking part in a kingdom battle."));
 			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("After opening the Storeroom you cannot use a Scroll of the Location for %d seconds."), 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("You cannot use a Scroll of the Location while another window is open."));
 			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("After a trade, you cannot use a scroll for another %d seconds."), g_nPortalLimitTime);
 				return false;
 			}
 		}
@@ -5199,7 +5199,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("After opening a storeroom you cannot use a Scroll of the Location for another %d seconds."), g_nPortalLimitTime);
 				return false;
 			}
 			
@@ -5207,7 +5207,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 		//END_PREVENT_ITEM_COPY
 		
 
-		//ȯ Ÿüũ
+		//귀환부 거리체크
 		if (item->GetVnum() != 70302)
 		{
 			PIXEL_POSITION posWarp;
@@ -5217,13 +5217,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);
@@ -5244,7 +5244,7 @@ bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell)
 
 			if (nDistant > nDist)
 			{
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̵ Ǿ ġ ʹ  ȯθ Ҽ ϴ."));				
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use the Scroll of the Location because the distance is too small."));				
 				if (test_server)
 					ChatPacket(CHAT_TYPE_INFO, "PossibleDistant %f nNowDist %f", nDistant,nDist); 
 				return false;
@@ -5252,29 +5252,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("After a trade you cannot use a Scroll of the Location for %d seconds."), 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("You cannot open the Storeroom if another window is already open."));
 			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();
@@ -5288,7 +5288,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);
 		}
@@ -5310,7 +5310,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("You cannot move the item within the refinement window."));
 		return false;
 	}
 
@@ -5331,14 +5331,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("You cannot drop this item."));
 		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;
 
@@ -5377,12 +5377,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("The dropped item will vanish in 5 minutes."));
 		pkItemToDrop->StartDestroyEvent();
 
 		ITEM_MANAGER::instance().FlushDelayedSave(pkItemToDrop);
@@ -5408,7 +5408,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("You can't drop gold yet."));
 			return false;
 		}
 	}
@@ -5426,11 +5426,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)
@@ -5438,19 +5438,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("The dropped item will vanish in %d minutes."), 150/60);
 			}
 			else
 			{
 				item->StartDestroyEvent(60);
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  %d  ϴ."), 1);
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The dropped item will vanish in %d minutes."), 1);
 			}
 		}
 
@@ -5491,26 +5491,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("You cannot move the item within the refinement window."));
 		return false;
 	}
 
-	// ȹ û Ʈ κ丮 Ư Ÿ ۸   ִ.
+	// 기획자의 요청으로 벨트 인벤토리에는 특정 타입의 아이템만 넣을 수 있다.
 	if (DestCell.IsBeltInventoryPosition() && false == CBeltInventoryHelper::CanMoveIntoBeltInventory(item))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ κ丮 ű  ϴ."));			
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot equip this item in your belt inventory."));			
 		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("You have already equipped this kind of Dragon Stone."));
 			
 			return false;
 		}
@@ -5536,7 +5536,7 @@ bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
 					return false;
 			}
 		}
-		// ȥ ƴ  ȥ κ   .
+		// 용혼석이 아닌 아이템은 용혼석 인벤에 들어갈 수 없다.
 		else if (DRAGON_SOUL_INVENTORY == DestCell.window_type)
 			return false;
 
@@ -5544,7 +5544,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))
@@ -5663,7 +5663,7 @@ namespace NPartyPickupDistribute
 				{
 					ch->PointChange(POINT_GOLD, iMoney, true);
 
-					if (iMoney > 1000) // õ ̻ Ѵ.
+					if (iMoney > 1000) // 천원 이상만 기록한다.
 						LogManager::instance().CharLog(ch, iMoney, "GET_GOLD", "");
 				}
 		}
@@ -5681,7 +5681,7 @@ void CHARACTER::GiveGold(int iAmount)
 	{
 		LPPARTY pParty = GetParty();
 
-		// Ƽ ִ   .
+		// 파티가 있는 경우 나누어 가진다.
 		DWORD dwTotal = iAmount;
 		DWORD dwMyAmount = dwTotal;
 
@@ -5700,18 +5700,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)
@@ -5719,7 +5719,7 @@ void CHARACTER::GiveGold(int iAmount)
 		}
 		else
 		{
-			if (iAmount > 1000) // õ ̻ Ѵ.
+			if (iAmount > 1000) // 천원 이상만 기록한다.
 				LogManager::instance().CharLog(this, iAmount, "GET_GOLD", "");
 		}
 	}
@@ -5739,7 +5739,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 	{
 		if (item->IsOwnership(this))
 		{
-			//   ϴ  ũ
+			// 만약 주으려 하는 아이템이 엘크라면
 			if (item->GetType() == ITEM_ELK)
 			{
 				GiveGold(item->GetCount());
@@ -5749,7 +5749,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 
 				Save();
 			}
-			//  ̶
+			// 평범한 아이템이라면
 			else
 			{
 				if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
@@ -5781,7 +5781,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 received"), item2->GetName());
 								M2_DESTROY_ITEM(item);
 								if (item2->GetType() == ITEM_QUEST)
 									quest::CQuestManager::instance().PickupItem (GetPlayerID(), item2);
@@ -5799,7 +5799,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 					if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
 					{
 						SPDLOG_DEBUG("No empty ds inventory pid {} size {}d itemid {}", GetPlayerID(), item->GetSize(), item->GetID());
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have too many items in your inventory."));
 						return false;
 					}
 				}
@@ -5808,7 +5808,7 @@ bool CHARACTER::PickupItem(DWORD dwVID)
 					if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
 					{
 						SPDLOG_DEBUG("No empty inventory pid {} size {}d itemid {}", GetPlayerID(), item->GetSize(), item->GetID());
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ϰ ִ  ʹ ϴ."));
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have too many items in your inventory."));
 						return false;
 					}
 				}
@@ -5823,7 +5823,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 received"), item->GetName());
 
 				if (item->GetType() == ITEM_QUEST)
 					quest::CQuestManager::instance().PickupItem (GetPlayerID(), item);
@@ -5834,7 +5834,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);
@@ -5851,7 +5851,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("You have too many items in your inventory."));
 						return false;
 					}
 				}
@@ -5864,7 +5864,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("You have too many items in your inventory."));
 						return false;
 					}
 				}
@@ -5882,11 +5882,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 received"), 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 receives %s."), GetName(), item->GetName());
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Item Trade: %s, %s"), owner->GetName(), item->GetName());
 			}
 
 			if (item->GetType() == ITEM_QUEST)
@@ -5906,23 +5906,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);
@@ -5943,21 +5943,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();
@@ -6012,7 +6012,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)
 {
@@ -6030,50 +6030,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("You can't wear this while on horseback."));
 		return false;
 	}
 
 	if (iWearCell != WEAR_ARROW && IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change the equipped item while you are transformed."));
 		return false;
 	}
 
 	if (FN_check_item_sex(this, item) == false)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʾ     ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are not able to use that item because you do not have the right gender."));
 		return false;
 	}
 
-	//ű Ż    뿩 üũ
+	//신규 탈것 사용시 기존 말 사용여부 체크
 	if(item->IsRideItem() && IsRiding())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ż ̿Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You're already riding. Get off first."));
 		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("You have to stand still to equip the item."));
 		return false;
 	}
 
-	// ȥ Ư ó
+	// 용혼석 특수 처리
 	if (item->IsDragonSoul())
 	{
-		//  Ÿ ȥ ̹  ִٸ   .
-		// ȥ swap ϸ ȵ.
+		// 같은 타입의 용혼석이 이미 들어가 있다면 착용할 수 없다.
+		// 용혼석은 swap을 지원하면 안됨.
 		if(GetInventoryItem(INVENTORY_MAX_NUM + iWearCell))
 		{
-			ChatPacket(CHAT_TYPE_INFO, "̹   ȥ ϰ ֽϴ.");
+			ChatPacket(CHAT_TYPE_INFO, "You are already carrying a Dragon Stone of this type.");
 			return false;
 		}
 		
@@ -6082,13 +6082,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;
 
@@ -6110,13 +6110,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에 값이 있으면 그 값을 사용하도록 한다. (단위는 초)
 				int duration = (0 != item->GetSocket(0)) ? item->GetSocket(0) : item->GetProto()->aLimits[item->GetProto()->cLimitRealTimeFirstUseIndex].lValue;
 
 				if (0 == duration)
@@ -6134,27 +6134,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())
 		{
@@ -6304,7 +6304,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;
@@ -6332,7 +6332,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());
@@ -6358,7 +6358,7 @@ void CHARACTER::RemoveSpecifyItem(DWORD vnum, DWORD count)
 		}
 	}
 
-	// ó ϴ.
+	// 예외처리가 약하다.
 	if (count)
 		SPDLOG_WARN("CHARACTER::RemoveSpecifyItem cannot remove enough item vnum {}, still remain {}", vnum, count);
 }
@@ -6392,7 +6392,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());
@@ -6508,7 +6508,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 received"), item->GetName());
 
 					return item;
 				}
@@ -6560,7 +6560,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 received"), item->GetName());
 
 		if (item->IsDragonSoul())
 			item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
@@ -6585,9 +6585,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
@@ -6699,12 +6699,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("Monkey Herbs cannot be fed to living horses. It is used to revive dead horses."));
 					return false;
 				}
 				return true;
@@ -6713,7 +6713,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("You cannot feed a dead Horse."));
 					return false;
 				}
 				return true;
@@ -6726,12 +6726,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("Monkey Herbs cannot be fed to living horses. It is used to revive dead horses."));
 					return false;
 				}
 				return true;
@@ -6740,7 +6740,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("You cannot feed a dead Horse."));
 					return false;
 				}
 				return true;
@@ -6753,12 +6753,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("Monkey Herbs cannot be fed to living horses. It is used to revive dead horses."));
 					return false;
 				}
 				return true;
@@ -6767,7 +6767,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("You cannot feed a dead Horse."));
 					return false;
 				}
 				return true;
@@ -6817,7 +6817,7 @@ void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
 			}
 			else
 			{
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 			}
 			break;
 			// END_OF_DEVILTOWER_NPC
@@ -6834,7 +6834,7 @@ void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
 			}
 			else
 			{
-				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ϴ."));
+				from->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This item cannot be improved."));
 			}
 			break;
 
@@ -6853,14 +6853,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("You fed the Horse with Herbs."));
 			}
 			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("You have fed the Horse."));
 				item->SetCount(item->GetCount()-1);
 				EffectPacket(SE_HPUP_RED);
 			}
@@ -6890,7 +6890,7 @@ bool CHARACTER::IsEquipUniqueItem(DWORD dwItemVnum) const
 			return true;
 	}
 
-	//   (ߺ)  üũѴ.
+	// 언어반지인 경우 언어반지(견본) 인지도 체크한다.
 	if (dwItemVnum == UNIQUE_ITEM_RING_OF_LANGUAGE)
 		return IsEquipUniqueItem(UNIQUE_ITEM_RING_OF_LANGUAGE_SAMPLE);
 
@@ -7051,8 +7051,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("Your level is too low to wear this Hairstyle."));
 		return false;
 	}
 
@@ -7061,7 +7061,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 :
@@ -7083,7 +7083,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("You already have this Hairstyle."));
 		return true;
 	}
 
@@ -7100,13 +7100,13 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 {
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have already transformed."));
 		return false;
 	}
 
 	if (true == IsRiding())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а   Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't transform while riding a horse."));
 		return false;
 	}
 
@@ -7114,7 +7114,7 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 	if (dwVnum == 0)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߸ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("That's the wrong trading item."));
 		item->SetCount(item->GetCount()-1);
 		return false;
 	}
@@ -7123,7 +7123,7 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 	if (pMob == NULL)
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("߸ а Դϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("That's the wrong trading item."));
 		item->SetCount(item->GetCount()-1);
 		return false;
 	}
@@ -7136,14 +7136,14 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 		case 70107 :
 		case 71093 :
 			{
-				// а ó
+				// 둔갑구 처리
 				SPDLOG_DEBUG("USE_POLYMORPH_BALL PID({}) vnum({})", GetPlayerID(), dwVnum);
 
-				//   üũ
+				// 레벨 제한 체크
 				int iPolymorphLevelLimit = std::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("You cannot transform into a monster who has a higher level than you."));
 					return false;
 				}
 
@@ -7170,11 +7170,11 @@ bool CHARACTER::ItemProcess_Polymorph(LPITEM item)
 
 		case 50322:
 			{
-				// 
+				// 보류
 
-				// а ó
-				// 0                1           2   
-				// а  ȣ           а 
+				// 둔갑서 처리
+				// 소켓0                소켓1           소켓2   
+				// 둔갑할 몬스터 번호   수련정도        둔갑서 레벨
 				SPDLOG_DEBUG("USE_POLYMORPH_BOOK: {}({}) vnum({})", GetName(), GetPlayerID(), dwVnum);
 
 				if (CPolymorphUtils::instance().PolymorphCharacter(this, item, pMob) == true)
@@ -7292,8 +7292,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);
@@ -7365,7 +7365,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)); \
@@ -7373,7 +7373,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();
@@ -7411,7 +7411,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("Your level is too low to equip this item."));
 					return false;
 				}
 				break;
@@ -7419,7 +7419,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("You are not strong enough to equip yourself with this item."));
 					return false;
 				}
 				break;
@@ -7427,7 +7427,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("Your intelligence is too low to equip yourself with this item."));
 					return false;
 				}
 				break;
@@ -7435,7 +7435,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("Your dexterity is too low to equip yourself with this item."));
 					return false;
 				}
 				break;
@@ -7443,7 +7443,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("Your vitality is too low to equip yourself with this item."));
 					return false;
 				}
 				break;
@@ -7455,14 +7455,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("You cannot equip this item twice."));
 			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("You cannot use this item because you are not married."));
 			return false;
 		}
 
@@ -7471,18 +7471,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), "You can only discard the belt when there are no longer any items in its inventory.");
 
-	//     
+	// 영원히 해제할 수 없는 아이템
 	if (IS_SET(item->GetFlag(), ITEM_FLAG_IRREMOVABLE))
 		return false;
 
-	//  unequip κ丮 ű   ڸ ִ  Ȯ
+	// 아이템 unequip시 인벤토리로 옮길 때 빈 자리가 있는 지 확인
 	{
 		int pos = -1;
 
@@ -7491,7 +7491,7 @@ bool CHARACTER::CanUnequipNow(const LPITEM item, const TItemPos& srcCell, const
 		else
 			pos = GetEmptyInventory(item->GetSize());
 
-		VERIFY_MSG( -1 == pos, "ǰ   ϴ." );
+		VERIFY_MSG( -1 == pos, "There isn't enough space in your inventory." );
 	}
 
 
diff --git a/src/game/src/char_manager.cpp b/src/game/src/char_manager.cpp
index 0b9d688..7724f2f 100644
--- a/src/game/src/char_manager.cpp
+++ b/src/game/src/char_manager.cpp
@@ -114,7 +114,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())
@@ -230,7 +230,7 @@ LPCHARACTER CHARACTER_MANAGER::FindPC(const char * name)
 
 LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, int lMapIndex)
 {
-	// ֱ    ְ
+	// 왜구 스폰할지말지를 결정할 수 있게함
 	{
 		if (dwVnum == 5001 && !quest::CQuestManager::instance().GetEventFlag("japan_regen"))
 		{
@@ -239,7 +239,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, int lMapInde
 		}
 	}
 
-	// ¸     ְ 
+	// 해태를 스폰할지 말지를 결정할 수 있게 함
 	{
 		if (dwVnum == 5002 && !quest::CQuestManager::instance().GetEventFlag("newyear_mob"))
 		{
@@ -248,7 +248,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, int lMapInde
 		}
 	}
 
-	//  ̺Ʈ 
+	// 광복절 이벤트 
 	{
 		if (dwVnum == 5004 && !quest::CQuestManager::instance().GetEventFlag("independence_day"))
 		{
@@ -448,7 +448,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnMobRange(DWORD dwVnum, int lMapIndex, int sx
 	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;
@@ -512,7 +512,7 @@ bool CHARACTER_MANAGER::SpawnMoveGroup(DWORD dwVnum, int lMapIndex, int sx, int
 
 		if (!tch)
 		{
-			if (i == 0)	//  Ͱ  쿡 ׳ 
+			if (i == 0)	// 못만든 몬스터가 대장일 경우에는 그냥 실패
 				return false;
 
 			continue;
@@ -596,7 +596,7 @@ LPCHARACTER CHARACTER_MANAGER::SpawnGroup(DWORD dwVnum, int lMapIndex, int sx, i
 
 		if (!tch)
 		{
-			if (i == 0)	//  Ͱ  쿡 ׳ 
+			if (i == 0)	// 못만든 몬스터가 대장일 경우에는 그냥 실패
 				return NULL;
 
 			continue;
@@ -652,11 +652,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());
 #ifdef __GNUC__
@@ -680,7 +680,7 @@ void CHARACTER_MANAGER::Update(int iPulse)
 //		for_each_pc(bind2nd(mem_fun(&CHARACTER::UpdateCharacter), iPulse));
 	}
 
-	//  Ʈ
+	// 몬스터 업데이트
 	{
 		if (!m_set_pkChrState.empty())
 		{
@@ -695,7 +695,7 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		}
 	}
 
-	// Ÿ  Ʈ
+	// 산타 따로 업데이트
 	{
 		CharacterVectorInteractor i;
 
@@ -706,7 +706,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)
@@ -715,11 +715,11 @@ void CHARACTER_MANAGER::Update(int iPulse)
 		m_map_dwMobKillCount.clear();
 	}
 
-	// ׽Ʈ  60ʸ ij  
+	// 테스트 서버에서는 60초마다 캐릭터 개수를 센다
 	if (test_server && 0 == (iPulse % PASSES_PER_SEC(60)))
 		SPDLOG_TRACE("CHARACTER COUNT vid {} pid {}", m_map_pkChrByVID.size(), m_map_pkChrByPID.size());
 
-	//  DestroyCharacter ϱ
+	// 지연된 DestroyCharacter 하기
 	FlushPendingDestroy();
 }
 
@@ -835,7 +835,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()) // 등록된 번호 이면
 	{
         SPDLOG_TRACE("RegisterRaceNumMap {} {}", ch->GetName(), dwVnum);
 		m_map_pkChrByRaceNum[dwVnum].insert(ch);
@@ -859,7 +859,7 @@ bool CHARACTER_MANAGER::GetCharactersByRaceNum(DWORD dwRaceNum, CharacterVectorI
 	if (it == m_map_pkChrByRaceNum.end())
 		return false;
 
-	// ̳ 
+	// 컨테이너 복사
 	i = it->second;
 	return true;
 }
@@ -1056,8 +1056,8 @@ void CHARACTER_MANAGER::SendScriptToMap(int lMapIndex, const std::string & s)
 
 bool CHARACTER_MANAGER::BeginPendingDestroy()
 {
-	// Begin  Ŀ Begin  ϴ 쿡 Flush  ʴ   
-	// ̹ ۵Ǿ false  ó
+	// Begin 이 후에 Begin을 또 하는 경우에 Flush 하지 않는 기능 지원을 위해
+	// 이미 시작되어있으면 false 리턴 처리
 	if (m_bUsePendingDestroy)
 		return false;
 
@@ -1069,7 +1069,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/src/char_manager.h b/src/game/src/char_manager.h
index 7b1fc0b..517ad28 100644
--- a/src/game/src/char_manager.h
+++ b/src/game/src/char_manager.h
@@ -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/src/char_quickslot.cpp b/src/game/src/char_quickslot.cpp
index 884cd3b..a9c087d 100644
--- a/src/game/src/char_quickslot.cpp
+++ b/src/game/src/char_quickslot.cpp
@@ -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/src/char_resist.cpp b/src/game/src/char_resist.cpp
index 115daee..4eb411e 100644
--- a/src/game/src/char_resist.cpp
+++ b/src/game/src/char_resist.cpp
@@ -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/src/char_skill.cpp b/src/game/src/char_skill.cpp
index c2fb144..bdbdcf5 100644
--- a/src/game/src/char_skill.cpp
+++ b/src/game/src/char_skill.cpp
@@ -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)
 	{
 		SPDLOG_DEBUG("cooltime is not over delta {}", dwNextSkillUsableTime - dwCur);
@@ -267,7 +267,7 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 
 	if (!IsLearnableSkill(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ųԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 		return false;
 	}
 
@@ -280,9 +280,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("You have escaped the evil ghost curse with the help of an Exorcism Scroll."));
 	}
 	else 	    
 	{
@@ -293,19 +293,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("You cannot train this skill up to Grand Master level."));
 		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("You already are a Master of this skill. You cannot train this skill any further."));
 		else
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų  ׷     ̸ ʾҽϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your Skill is not high enough to become a Grand Master."));
 		return false;
 	}
 
@@ -316,7 +316,7 @@ bool CHARACTER::LearnGrandMasterSkill(DWORD dwSkillVnum)
 		strTrainSkill = os.str();
 	}
 
-	// ⼭ Ȯ մϴ.
+	// 여기서 확률을 계산합니다.
 	BYTE bLastLevel = GetSkillLevel(dwSkillVnum);
 
 	int idx = std::min(9, GetSkillLevel(dwSkillVnum) - 30);
@@ -386,15 +386,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("That did not work. Damn!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Training has failed. Please try again later."));
 		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("My body is full of energy!"));
+	ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("The training seems to be working already..."));
+	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You successfully finished your training with the book."));
 	LogManager::instance().CharLog(this, dwSkillVnum, "GM_READ_SUCCESS", "");
 	return true;
 }
@@ -421,7 +421,7 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 	if (!IsLearnableSkill(dwSkillVnum))
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ųԴϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot train this skill."));
 		return false;
 	}
 
@@ -433,20 +433,20 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 		if ( GetExp() < need_exp )
 		{
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ġ Ͽ å   ϴ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot read this due to your lack of experience."));
 			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("You cannot train this skill with a Book."));
 			else
-				ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ų  å   ̸ ʾҽϴ."));
+				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This skill's level is not high enough to be trained with a Book."));
 			return false;
 		}
 	}
@@ -457,9 +457,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("You have escaped the evil ghost curse with the help of an Exorcism Scroll."));
 			}
 			else 	    
 			{
@@ -469,7 +469,7 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 		}
 	}
 
-	// ⼭ Ȯ մϴ.
+	// 여기서 확률을 계산합니다.
 	BYTE bLastLevel = GetSkillLevel(dwSkillVnum);
 
 	if (bProb != 0)
@@ -527,13 +527,13 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 
 				if (Random::get(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("You have successfully finished your training with the Book."));
 						LogManager::instance().CharLog(this, dwSkillVnum, "READ_SUCCESS", "");
 						return true;
 					}
@@ -544,27 +544,27 @@ bool CHARACTER::LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb)
 						switch (Random::get(1, 3))
 						{
 							case 1:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("    ذ Ǿ  ѵ ѵ.."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("I'm making progress, but I still haven't understood everything."));
 								break;
 											
 							case 2:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("  ̴ ǰ...    ϱⰡ ʹ .."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("These instructions are difficult to understand. I have to carry on studying."));
 								break;
 
 							case 3:
 							default:
-								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT(" ϴ   ͸   ִ  ̴.."));
+								ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("I understand this chapter. But I've got to carry on working hard."));
 								break;
 						}
 
-						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d   о  Ϸ   ֽϴ."), need_bookcount - read_count);
+						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have to read %d more skill books to improve this skill."), need_bookcount - read_count);
 						return true;
 					}
 				}
 			}
 			else
 			{
-				//  Ʈ  ε 
+				// 사용자의 퀘스트 정보 로드 실패
 			}
 		}
 		// INTERNATIONAL_VERSION
@@ -602,15 +602,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("My body is full of energy!"));
+		ChatPacket(CHAT_TYPE_TALKING, LC_TEXT("The training seems to be working already..."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully finished your training with the Book."));
 		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("That did not work. Damn!"));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Training has failed. Please try again later."));
 		LogManager::instance().CharLog(this, dwSkillVnum, "READ_FAIL", "");
 	}
 
@@ -694,7 +694,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 
 	if (IsPolymorphed())
 	{
-		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your status while you are transformed."));
 		return;
 	}
 
@@ -721,7 +721,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 	if (!IsLearnableSkill(dwVnum))
 		return;
 
-	// ׷ ʹ Ʈθ డ
+	// 그랜드 마스터는 퀘스트로만 수행가능
 	if (pkSk->dwType != 0)
 	{
 		switch (GetSkillMasterType(pkSk->dwVnum))
@@ -738,7 +738,7 @@ void CHARACTER::SkillLevelUp(DWORD dwVnum, BYTE bMethod)
 
 	if (bMethod == SKILL_UP_BY_POINT)
 	{
-		// Ͱ ƴ ¿ ð
+		// 마스터가 아닌 상태에서만 수련가능
 		if (GetSkillMasterType(pkSk->dwVnum) != SKILL_NORMAL)
 			return;
 
@@ -747,7 +747,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;
 	}
@@ -801,11 +801,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)
@@ -863,7 +863,7 @@ void CHARACTER::ResetSkill()
 	if (NULL == m_pSkillLevels)
 		return;
 
-	//  ų ½Ű ʴ´
+	// 보조 스킬은 리셋시키지 않는다
 	std::vector > vec;
 	size_t count = sizeof(s_adwSubSkillVnums) / sizeof(s_adwSubSkillVnums[0]);
 
@@ -994,7 +994,7 @@ EVENTFUNC(ChainLightningEvent)
 
 	SPDLOG_DEBUG("chainlighting event {}", pkChr->GetName());
 
-	if (pkChrVictim->GetParty()) // Ƽ 
+	if (pkChrVictim->GetParty()) // 파티 먼저
 	{
 		pkTarget = pkChrVictim->GetParty()->GetNextOwnership(NULL, pkChrVictim->GetX(), pkChrVictim->GetY());
 		if (pkTarget == pkChrVictim || !Random::get(0, 2) || pkChr->GetChainLightingExcept().find(pkTarget) != pkChr->GetChainLightingExcept().end())
@@ -1090,7 +1090,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)
 				{
@@ -1159,7 +1159,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();
@@ -1178,7 +1178,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, "Not working, check the skill formula");
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		iAmount = -iAmount;
@@ -1241,11 +1241,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)
@@ -1268,7 +1268,7 @@ struct FuncSplashDamage
 
 							case WEAPON_TWO_HANDED:
 								iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_TWOHAND)) / 100;
-								// հ Ƽ 10%
+								// 양손검 페널티 10%
 								//iDam = iDam * 95 / 100;
 
 								break;
@@ -1293,8 +1293,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;
@@ -1302,8 +1302,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;
@@ -1314,13 +1314,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())
 		{
@@ -1627,7 +1627,7 @@ EVENTFUNC(skill_gwihwan_event)
 	{
 		PIXEL_POSITION pos;
 
-		// 
+		// 성공
 		if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(ch->GetMapIndex(), ch->GetEmpire(), pos))
 		{
 			SPDLOG_DEBUG("Recall: {} {} {} -> {} {}", ch->GetName(), ch->GetX(), ch->GetY(), pos.x, pos.y);
@@ -1641,8 +1641,8 @@ EVENTFUNC(skill_gwihwan_event)
 	}
 	else
 	{
-		//
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯ Ͽϴ."));
+		//실패
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Teleportation has failed."));
 	}
 	return 0;
 }
@@ -1666,11 +1666,11 @@ int CHARACTER::ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTar
     SPDLOG_TRACE("ComputeSkillAtPosition {} vnum {} x {} y {} level {}",
             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;
 
@@ -1754,7 +1754,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, "Not working, check the skill formula");
 	}
 
 	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_REMOVE_BAD_AFFECT))
@@ -1769,7 +1769,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;
 
@@ -1794,7 +1794,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)
 					{
 						return BATTLE_NONE;
@@ -1884,7 +1884,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,
@@ -1939,13 +1939,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;
 
@@ -1967,7 +1967,7 @@ int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel
 		return BATTLE_NONE;
 	
 
-	// 濡   ƴϸ   Ѵ.
+	// 상대방에게 쓰는 것이 아니면 나에게 써야 한다.
 	if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
 		pkVictim = this;
 
@@ -2093,7 +2093,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, "Not working, check the skill formula");
 	}
 	// END_OF_ADD_GRANDMASTER_SKILL
 
@@ -2135,7 +2135,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;
@@ -2248,7 +2248,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)
@@ -2421,14 +2421,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("No Horse here. Ask the Stable Boy."));
 		else
-			ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȯ  ϼ."));
+			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please use an item to call a Horse."));
 
 		return true;
 	}
 
-	//  Ÿ ų    ¶ return false
+	// 말을 타고있지만 스킬은 사용할 수 없는 상태라면 return false
 	if (false == bCanUseHorseSkill && true == IsRiding())
 		return false;
 
@@ -2474,7 +2474,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;
@@ -2492,7 +2492,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;
@@ -2506,7 +2506,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;
@@ -2560,7 +2560,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 FP-Consumption: %d"), pkSk->szName, iNeededSP);
 
 		PointChange(POINT_SP, -iNeededSP);
 	}
@@ -2570,7 +2570,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;
 	}
 
@@ -2643,7 +2643,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;
@@ -2745,41 +2745,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("I am burning inside, but it is calming down my body. My Chi has to stabilise."));
 	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("A little slow, but steady... Without stopping!"));
+	else if (ms < 10 * 60) // 10분
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Yes, that feels great. My body is full of Chi."));
+	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("I have read it! Now the Chi will spread through my body."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("The training is completed."));
 	}
-	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("I am on the last page of the book. The training is nearly finished!"));
+	else if (ms < 2 * 3600) // 2시간
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Nearly finished! Just a little bit more to go!"));
 	else if (ms < 3 * 3600)
-		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Ҿ! ݸ   ̴!"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Eureka! I have nearly finished reading it!"));
 	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("Only a few more pages and then I'll have read everything."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("I feel refreshed."));
 	}
 	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("Now I understand it!"));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("Okay I have to stay concentrated!"));
 	}
 	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("I keep reading the same line over and over again."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("I do not want to learn any more."));
 	}
 	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("It is a lot more complicated and more difficult to understand than I thought."));
+		ChatPacket(CHAT_TYPE_TALKING, "%s", LC_TEXT("It's hard for me to concentrate. I should take a break."));
 	}
 	/*
 	   str = "30%";
@@ -3138,10 +3138,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
@@ -3150,9 +3150,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
@@ -3160,9 +3160,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
@@ -3171,14 +3171,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
@@ -3187,9 +3187,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
@@ -3197,9 +3197,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
@@ -3208,14 +3208,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
@@ -3224,9 +3224,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
@@ -3234,9 +3234,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
@@ -3245,14 +3245,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
@@ -3261,9 +3261,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
@@ -3271,9 +3271,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
@@ -3282,23 +3282,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
@@ -3313,13 +3313,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)
@@ -3473,7 +3473,7 @@ bool CHARACTER::CanUseSkill(DWORD dwSkillVnum) const
 	
 	if (true == IsRiding())
 	{
-		//Ʈ Ż ޸ ų 밡
+		//마운트 탈것중 고급말만 스킬 사용가능
 		if(GetMountVnum())
 		{
 			if( GetMountVnum() < 20209 && GetMountVnum() > 20212)
diff --git a/src/game/src/char_state.cpp b/src/game/src/char_state.cpp
index 9e7becb..38e8310 100644
--- a/src/game/src/char_state.cpp
+++ b/src/game/src/char_state.cpp
@@ -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("The guild %s's flag has been stolen by player %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(Random::get(0, 359));        //   
+			SetRotation(Random::get(0, 359));        // 방향은 랜덤으로 설정
 
 			float fx, fy;
 			float fDist = Random::get(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 int c_lWarpMapIndexs[WARP_MAP_INDEX_NUM] = {61, 62, 63, 64};
 				*/
-				// ż ؿ
+				// 신선자 노해용
 				const int WARP_MAP_INDEX_NUM = 7;
 				static const int c_lWarpMapIndexs[WARP_MAP_INDEX_NUM] = { 61, 62, 63, 64, 3, 23, 43 };
 				int 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 (!Random::get(0, 6))
 			{
-				SetRotation(Random::get(0, 359));        //   
+				SetRotation(Random::get(0, 359));        // 방향은 랜덤으로 설정
 
 				float fx, fy;
 				float fDist = Random::get(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, Random::get(150, 400)))
 			{
-				MonsterLog("[IDLE] κ ʹ ָ ! Ѵ.");
+				MonsterLog("[IDLE] You're too far from the leader! Return to the leader.");
 				return;
 			}
 		}
 	}
 
 	//
-	// ׳ Դٸ ٸ Ѵ.
+	// 그냥 왔다리 갔다리 한다.
 	//
 	if (!no_wander && !IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_NOMOVE))
 	{
 		if (!Random::get(0, 6))
 		{
-			SetRotation(Random::get(0, 359));        //   
+			SetRotation(Random::get(0, 359));        // 방향은 랜덤으로 설정
 
 			float fx, fy;
 			float fDist = Random::get(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 (Random::get(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 && Random::get(1, 20) == 1 && get_dword_time() - m_pkMobInst->m_dwLastWarpTime > 1000)
 			{
-				//  ׽Ʈ
+				// 워프 테스트
 				float fx, fy;
 				GetDeltaByDegree(victim->GetRotation(), 400, &fx, &fy);
 				int new_x = victim->GetX() + (int)fx;
@@ -864,7 +864,7 @@ void CHARACTER::StateMove()
 				return;
 			}
 
-			// TODO ȯ ؼ  ٺ !
+			// TODO 방향전환을 해서 덜 바보가 되자!
 			if (Random::get(0, 3) == 0)
 			{
 				if (__CHARACTER_GotoNearTarget(this, victim))
@@ -877,7 +877,7 @@ void CHARACTER::StateMove()
 	{
 		if (IsPC())
 		{
-			SPDLOG_DEBUG(" {} {} {}", GetName(), x, y);
+			SPDLOG_DEBUG("Arrival {} {} {}", 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] Now that you're nearby, start attacking %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] No target, let's take a break");
 
 				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("Summon Subordinate Monsters!");
+			// 모자라는 녀석을 불러내 채웁시다.
 			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("Give up because the target is far away");
 		SetVictim(NULL);
 
-		// ȣ (, Ƽ) ֺ .
+		// 보호할 것(돌, 파티장) 주변으로 간다.
 		if (pkChrProtege)
 			if (DISTANCE_APPROX(GetX() - pkChrProtege->GetX(), GetY() - pkChrProtege->GetY()) > 1000)
 				Follow(pkChrProtege, Random::get(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 = std::max(1, (passes_per_sec * (dwDuration - (dwCurTime - m_dwLastAttackTime)) / 1000));
 		return;
@@ -1084,7 +1084,7 @@ void CHARACTER::StateBattle()
 				SetGodSpeed(true);
 
 	//
-	//  ų ó
+	// 몹 스킬 처리
 	//
 	if (HasMobSkill())
 	{
@@ -1109,11 +1109,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);
@@ -1152,7 +1152,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 has captured the flag of %s!"), pMap->GetGuild(idx)->GetName(), f.m_pkChrFind->GetName());
 	pMap->Notice(buf);
 }
 
@@ -1166,15 +1166,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;
@@ -1183,7 +1183,7 @@ void CHARACTER::StateHorse()
 
 	LPCHARACTER victim = GetRider();
 
-	// ! ƴ //    ȯڰ   Ŭ 
+	// ! 아님 // 대상이 없는 경우 소환자가 직접 나를 클리어할 것임
 	if (!victim)
 	{
 		M2_DESTROY_CHARACTER(this);
@@ -1197,7 +1197,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, Random::get(MIN_APPROACH, MAX_APPROACH));
 
@@ -1208,14 +1208,14 @@ void CHARACTER::StateHorse()
 		// wondering-.-
 		m_dwLastAttackTime = get_dword_time() + Random::get(5000, 12000);
 
-		SetRotation(Random::get(0, 359));        //   
+		SetRotation(Random::get(0, 359));        // 방향은 랜덤으로 설정
 
 		float fx, fy;
 		float fDist = Random::get(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/src/cmd.cpp b/src/game/src/cmd.cpp
index 0b25b1c..fe35b87 100644
--- a/src/game/src/cmd.cpp
+++ b/src/game/src/cmd.cpp
@@ -162,7 +162,7 @@ ACMD(do_add_socket);
 
 ACMD(do_inputall)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ɾ  Էϼ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please enter the Order in full length."));
 }
 
 ACMD(do_show_arena_list);
@@ -182,7 +182,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);
@@ -191,7 +191,7 @@ ACMD(do_monarch_tax);
 ACMD(do_monarch_mob);
 ACMD(do_monarch_notice);
 
-//  
+//군주 관리 기능
 ACMD(do_rmcandidacy);
 ACMD(do_setmonarch);
 ACMD(do_rmmonarch);
@@ -199,10 +199,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);
@@ -230,7 +230,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);
@@ -250,21 +250,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);
@@ -272,7 +272,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	},
@@ -293,7 +293,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	},
@@ -391,8 +391,9 @@ 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	},
+	// TODO: these can probably be removed
+	{ "\xB7\xCE\xB1\xD7\xB8\xA6\xBA\xB8\xBF\xA9\xC1\xE0",	do_detaillog,		0,			POS_DEAD,	GM_LOW_WIZARD	},
+	{ "\xB8\xF3\xBD\xBA\xC5\xCD\xBA\xB8\xBF\xA9\xC1\xE0",	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	},
@@ -528,7 +529,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		},
+	{ "\xC1\xD6\xBB\xE7\xC0\xA7",				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		},
@@ -538,7 +539,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	},
@@ -578,7 +579,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)
@@ -601,7 +602,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)
@@ -636,7 +637,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;
@@ -653,7 +654,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))
@@ -665,24 +666,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("You cannot do this whilst sitting on a Horse."));
 				break;
 
 			case POS_DEAD:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ¿   ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot do that while you are lying on the ground."));
 				break;
 
 			case POS_SLEEPING:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("޼ӿ Կ?"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("In my Dreams? What?"));
 				break;
 
 			case POS_RESTING:
 			case POS_SITTING:
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ͼ ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Get up first."));
 				break;
 				/*
 				   case POS_FIGHTING:
-				   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ɰ   Դϴ.  ϼ."));
+				   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You're in a fight for your life. Stay focused."));
 				   break;
 				 */
 			default:
@@ -695,17 +696,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("This command does not exist."));
 		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("This command does not exist."));
 		return;
 	}
 
-	if (strncmp("phase", cmd_info[icmd].command, 5) != 0) //  ɾ ó 
+	if (strncmp("phase", cmd_info[icmd].command, 5) != 0) // 히든 명령어 처리 
 		SPDLOG_DEBUG("COMMAND: {}: {}", ch->GetName(), cmd_info[icmd].command);
 
 	((*cmd_info[icmd].command_pointer) (ch, line, icmd, cmd_info[icmd].subcmd));
diff --git a/src/game/src/cmd.h b/src/game/src/cmd.h
index 562c35e..0305ebc 100644
--- a/src/game/src/cmd.h
+++ b/src/game/src/cmd.h
@@ -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/src/cmd_emotion.cpp b/src/game/src/cmd_emotion.cpp
index 958c60e..1fc9f04 100644
--- a/src/game/src/cmd_emotion.cpp
+++ b/src/game/src/cmd_emotion.cpp
@@ -23,65 +23,65 @@ struct emotion_type_s
 	int	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 },
+	{ "\xC5\xB0\xBD\xBA",	"french_kiss",	NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		2.0f },
+	{ "\xBB\xC7\xBB\xC7",	"kiss",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		1.5f },
+	{ "\xB5\xFB\xB1\xCD",	"slap",		NEED_PC | SELF_DISARM,				1.5f },
+	{ "\xB9\xDA\xBC\xF6",	"clap",		0,						1.0f },
+	{ "\xBF\xCD",		"cheer1",	0,						1.0f },
+	{ "\xB8\xB8\xBC\xBC",	"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 },
+	{ "\xB4\xED\xBD\xBA\1",	"dance1",	0,						1.0f },
+	{ "\xB4\xED\xBD\xBA\2",	"dance2",	0,						1.0f },
+	{ "\xB4\xED\xBD\xBA\3",	"dance3",	0,						1.0f },
+	{ "\xB4\xED\xBD\xBA\4",	"dance4",	0,						1.0f },
+	{ "\xB4\xED\xBD\xBA\5",	"dance5",	0,						1.0f },
+	{ "\xB4\xED\xBD\xBA\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	},
+	{ "\xC3\xE0\xC7\xCF",	"congratulation",	0,				1.0f	},
+	{ "\xBF\xEB\xBC\xAD",	"forgive",			0,				1.0f	},
+	{ "\xC8\xAD\xB3\xB2",	"angry",			0,				1.0f	},
+	{ "\xC0\xAF\xC8\xA4",	"attractive",		0,				1.0f	},
+	{ "\xBD\xBD\xC7\xC4",	"sad",				0,				1.0f	},
+	{ "\xBA\xEA\xB2\xF4",	"shy",				0,				1.0f	},
+	{ "\xC0\xC0\xBF\xF8",	"cheerup",			0,				1.0f	},
+	{ "\xC1\xFA\xC5\xF5",	"banter",			0,				1.0f	},
+	{ "\xB1\xE2\xBB\xDD",	"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 },
+	//{ "\xC5\xB0\xBD\xBA",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_FRENCH_KISS,	 1.0f },
+	{ "\xBB\xC7\xBB\xC7",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_KISS,		 1.0f },
+	{ "\xB2\xB8\xBE\xC8\xB1\xE2",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_SHORT_HUG,	 1.0f },
+	{ "\xC6\xF7\xBF\xCB",		NEED_PC | OTHER_SEX_ONLY | BOTH_DISARM,		MOTION_ACTION_LONG_HUG,		 1.0f },
+	{ "\xBE\xEE\xB1\xFA\xB5\xBF\xB9\xAB",	NEED_PC | SELF_DISARM,				MOTION_ACTION_PUT_ARMS_SHOULDER, 0.0f },
+	{ "\xC6\xC8\xC2\xAF",		NEED_PC	| WOMAN_ONLY | SELF_DISARM,		MOTION_ACTION_FOLD_ARM,		 0.0f },
+	{ "\xB5\xFB\xB1\xCD",		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 },
+	{ "\xC8\xD6\xC6\xC4\xB6\xF7",		0,						MOTION_ACTION_CHEER_01,		 0.0f },
+	{ "\xB8\xB8\xBC\xBC",		0,						MOTION_ACTION_CHEER_02,		 0.0f },
+	{ "\xB9\xDA\xBC\xF6",		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 },
+	{ "\xC8\xA3\xC8\xA3",		0,						MOTION_ACTION_LAUGH_01,		 0.0f },
+	{ "\xC5\xB1\xC5\xB1",		0,						MOTION_ACTION_LAUGH_02,		 0.0f },
+	{ "\xBF\xEC\xC7\xCF\xC7\xCF",		0,						MOTION_ACTION_LAUGH_03,		 0.0f },
 
-	{ "",		0,						MOTION_ACTION_CRY_01,		 0.0f },
-	{ "",		0,						MOTION_ACTION_CRY_02,		 0.0f },
+	{ "\xBE\xFB\xBE\xFB",		0,						MOTION_ACTION_CRY_01,		 0.0f },
+	{ "\xC8\xE6\xC8\xE6",		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 },
+	{ "\xC0\xCE\xBB\xE7",		0,						MOTION_ACTION_GREETING_01,	0.0f },
+	{ "\xB9\xD9\xC0\xCC",		0,						MOTION_ACTION_GREETING_02,	0.0f },
+	{ "\xC1\xA4\xC1\xDF\xC0\xCE\xBB\xE7",	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 },
+	{ "\xBA\xF1\xB3\xAD",		0,						MOTION_ACTION_INSULT_01,	0.0f },
+	{ "\xB8\xF0\xBF\xE5",		SELF_DISARM,					MOTION_ACTION_INSULT_02,	0.0f },
+	{ "\xBF\xEC\xC0\xA1",		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 },
+	{ "\xB0\xBC\xBF\xEC\xB6\xD7",		0,						MOTION_ACTION_ETC_01,		0.0f },
+	{ "\xB2\xF4\xB4\xF6\xB2\xF4\xB4\xF6",	0,						MOTION_ACTION_ETC_02,		0.0f },
+	{ "\xB5\xB5\xB8\xAE\xB5\xB5\xB8\xAE",	0,						MOTION_ACTION_ETC_03,		0.0f },
+	{ "\xB1\xDC\xC0\xFB\xB1\xDC\xC0\xFB",	0,						MOTION_ACTION_ETC_04,		0.0f },
+	{ "\xC6\xA1",		0,						MOTION_ACTION_ETC_05,		0.0f },
+	{ "\xBB\xD7",		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("You cannot use this in the duel arena."));
 		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("You cannot express emotions whilst riding a horse."));
 			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("You can do this when you wear an Emotion Mask."));
 		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("Only women can do this."));
 		return;
 	}
 
@@ -172,7 +172,7 @@ ACMD(do_emotion)
 	{
 		if (!victim)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("׷  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This person does not exist."));
 			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("You cannot use emotions with a player who is riding on a Horse."));
 			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("You are too near."));
 			return;
 		}
 
 		if (distance > 500)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ʹ ָ ֽϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are too far away."));
 			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("This action can only be done with another gender."));
 				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("You need your fellow player's approval for this."));
 						return;
 					}
 				}
 				else
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ൿ ȣ Ͽ  մϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need your fellow player's approval for this."));
 					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/src/cmd_general.cpp b/src/game/src/cmd_general.cpp
index 1cc6ca1..da851b0 100644
--- a/src/game/src/cmd_general.cpp
+++ b/src/game/src/cmd_general.cpp
@@ -46,16 +46,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("You're already riding. Get off first."));
 			return;
 		}
 
 		if (ch->GetHorse() == NULL)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please call your Horse first."));
 			return;
 		}
 
@@ -72,30 +72,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("You have sent your horse away."));
 	}
 	else if (ch->IsHorseRiding() == true)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have to get off your Horse."));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please call your Horse first."));
 	}
 }
 
 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("Please call your Horse first."));
 		else
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ź ¿ ̸   ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot feed your Horse whilst sitting on it."));
 		return;
 	}
 
@@ -105,12 +105,12 @@ 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("You have fed the Horse with %s%s."), 
 				ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName, "");
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  ʿմϴ"), ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You need %s."), ITEM_MANAGER::instance().GetTable(dwFood)->szLocaleName);
 	}
 }
 
@@ -209,7 +209,7 @@ EVENTFUNC(shutdown_event)
 	else
 	{
 		char buf[64];
-		snprintf(buf, sizeof(buf), LC_TEXT("˴ٿ %d ҽϴ."), *pSec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d seconds until Exit."), *pSec);
 		SendNotice(buf);
 
 		--*pSec;
@@ -228,7 +228,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("The game will be closed in %d seconds."), iSec);
 
 	SendNotice(buf);
 
@@ -317,7 +317,7 @@ EVENTFUNC(timed_event)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d ҽϴ."), info->left_second);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d seconds until Exit."), info->left_second);
 		--info->left_second;
 	}
 
@@ -329,7 +329,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("Your logout has been cancelled."));
 	   event_cancel(&ch->m_pkRecallEvent);
 	   return;
 	   }
@@ -337,7 +337,7 @@ ACMD(do_cmd)
 
 	if (ch->m_pkTimedEvent)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Ǿϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your logout has been cancelled."));
 		event_cancel(&ch->m_pkTimedEvent);
 		return;
 	}
@@ -345,15 +345,15 @@ ACMD(do_cmd)
 	switch (subcmd)
 	{
 		case SCMD_LOGOUT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("α ȭ  ϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Back to login window. Please wait."));
 			break;
 
 		case SCMD_QUIT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  մϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have been disconnected from the server. Please wait."));
 			break;
 
 		case SCMD_PHASE_SELECT:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ij͸ ȯ մϴ. ø ٸ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You are changing character. Please wait."));
 			break;
 	}
 
@@ -397,7 +397,7 @@ ACMD(do_mount)
 	   char			arg1[256];
 	   struct action_mount_param	param;
 
-	// ̹ Ÿ 
+	// 이미 타고 있으면
 	if (ch->GetMountingChr())
 	{
 	char arg2[256];
@@ -415,7 +415,7 @@ ACMD(do_mount)
 
 	if (distance > 600.0f)
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Get a little closer and get off."));
 	return;
 	}
 
@@ -432,7 +432,7 @@ ACMD(do_mount)
 
 	if (!tch->IsNPC() || !tch->IsMountable())
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ű⿡ Ż  ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't ride there."));
 	return;
 	}
 
@@ -440,7 +440,7 @@ ACMD(do_mount)
 
 	if (distance > 600.0f)
 	{
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("    Ÿ."));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Get a little closer and ride."));
 	return;
 	}
 
@@ -488,41 +488,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("A new start is not possible at the moment. Please wait %d seconds."), 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("A new start is not possible at the moment. Please wait %d seconds."), 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("A new start is not possible at the moment. Please wait %d seconds."), 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("You cannot restart in the city yet. Wait another %d seconds."), iTimeToDead - 173);
 			return;
 		}
 	}
@@ -535,7 +535,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)
@@ -552,12 +552,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("The waiting time has expired. You will be revived in the city."));
 					ch->WarpSet(EMPIRE_START_X(ch->GetEmpire()), EMPIRE_START_Y(ch->GetEmpire()));
 				}
 				else
@@ -658,7 +658,7 @@ ACMD(do_stat_minus)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your status while you are transformed."));
 		return;
 	}
 
@@ -725,7 +725,7 @@ ACMD(do_stat)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your status while you are transformed."));
 		return;
 	}
 
@@ -770,7 +770,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("You cannot use this in the duel arena."));
 		return;
 	}
 
@@ -789,7 +789,7 @@ ACMD(do_pvp)
 
 	if (pkVictim->GetArena() != NULL)
 	{
-		pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" Դϴ."));
+		pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This player is currently fighting."));
 		return;
 	}
 
@@ -806,7 +806,7 @@ ACMD(do_guildskillup)
 
 	if (!ch->GetGuild())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 忡  ʽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] It does not belong to the guild."));
 		return;
 	}
 
@@ -820,7 +820,7 @@ ACMD(do_guildskillup)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ų    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You do not have the authority to change the level of the guild skills."));
 	}
 }
 
@@ -867,7 +867,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)
 {
@@ -875,7 +875,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)
 {
@@ -893,13 +893,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("[Storeroom] You have entered an incorrect password."));
 		return;
 	}
 
 	if (!*arg2 || strlen(arg2)>6)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] You have entered an incorrect password."));
 		return;
 	}
 
@@ -912,7 +912,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("[Storeroom] The password must be alphanumeric."));
 				return;
 			}
 		}
@@ -934,7 +934,7 @@ ACMD(do_mall_password)
 
 	if (!*arg1 || strlen(arg1) > 6)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ߸ ȣ Էϼ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] You have entered an incorrect password."));
 		return;
 	}
 
@@ -942,13 +942,13 @@ ACMD(do_mall_password)
 
 	if (ch->GetMall())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> â ̹ ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] The Storeroom is already open."));
 		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("[Storeroom] You have to wait 10 seconds before you can open the Storeroom again."));
 		return;
 	}
 
@@ -979,13 +979,13 @@ ACMD(do_ungroup)
 
 	if (!CPartyManager::instance().IsEnablePCParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The server cannot execute this group request."));
 		return;
 	}
 
 	if (ch->GetDungeon())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot leave a group while you are in a dungeon."));
 		return;
 	}
 
@@ -998,7 +998,7 @@ ACMD(do_ungroup)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You have left the group."));
 		//pParty->SendPartyRemoveOneToAll(ch);
 		pParty->Quit(ch->GetPlayerID());
 		//pParty->SendPartyRemoveAllToOne(ch);
@@ -1028,20 +1028,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("[Guild] Your guild is already participating in another war."));
 		return;
 	}
 
-	//Ķ͸ ι 
+	//파라메터를 두배로 나누고
 	char arg1[256], arg2[256];
 	int type = GUILD_WAR_TYPE_FIELD;
 	two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
@@ -1057,33 +1057,33 @@ ACMD(do_war)
 			type = GUILD_WAR_TYPE_FIELD;
 	}
 
-	//  ̵ µ
+	//길드의 마스터 아이디를 얻어온뒤
 	DWORD gm_pid = g->GetMasterPID();
 
-	// üũ( 常 )
+	//마스터인지 체크(길전은 길드장만이 가능)
 	if (gm_pid != ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] No one is entitled to a guild war."));
 		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("[Guild] No guild with this name exists."));
 		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("[Guild] This guild is already participating in another war."));
 					return;
 				}
 
@@ -1091,13 +1091,13 @@ ACMD(do_war)
 
 				if (g->GetGuildMoney() < iWarPrice)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  Ͽ    ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] Not enough Yang to participate in a guild war."));
 					return;
 				}
 
 				if (opp_g->GetGuildMoney() < iWarPrice)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    Ͽ    ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The guild does not have enough Yang to participate in a guild war."));
 					return;
 				}
 			}
@@ -1105,7 +1105,7 @@ ACMD(do_war)
 
 		case GUILD_WAR_SEND_DECLARE:
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹   Դϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This guild is already participating in a war."));
 				return;
 			}
 			break;
@@ -1114,7 +1114,7 @@ ACMD(do_war)
 			{
 				if (opp_g->UnderAnyWar())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  尡 ̹   Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This guild is already participating in another war."));
 					g->RequestRefuseWar(opp_g->GetID());
 					return;
 				}
@@ -1123,7 +1123,7 @@ ACMD(do_war)
 
 		case GUILD_WAR_RESERVE:
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹    Դϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This Guild is already scheduled for another war."));
 				return;
 			}
 			break;
@@ -1132,22 +1132,22 @@ ACMD(do_war)
 			return;
 
 		default:
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̹   Դϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This guild is taking part in a battle at the moment."));
 			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("[Guild] The guild level is too low."));
 			SPDLOG_DEBUG("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("[Guild] A minimum of %d players are needed to participate in a guild war."), GUILD_WAR_MIN_MEMBER_COUNT);
 			SPDLOG_DEBUG("GuildWar.StartError.NEED_MINIMUM_MEMBER[{}]", (int) GUILD_WAR_MIN_MEMBER_COUNT);
 		}
 		else
@@ -1157,13 +1157,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("[Guild] The guild does not have enough points to participate in a guild war."));
 		else if (opp_g->GetMemberCount() < GUILD_WAR_MIN_MEMBER_COUNT)
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     Ͽ    ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The guild does not have enough members to participate in a guild war."));
 		return;
 	}
 
@@ -1177,7 +1177,7 @@ ACMD(do_war)
 		if (pCCI != NULL)
 			break;
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The enemy's guild leader is offline."));
 		g->RequestRefuseWar(opp_g->GetID());
 		return;
 
@@ -1193,7 +1193,7 @@ ACMD(do_war)
 		if (pCCI != NULL)
 			break;
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The enemy's guild leader is offline."));
 		g->RequestRefuseWar(opp_g->GetID());
 		return;
 
@@ -1218,7 +1218,7 @@ ACMD(do_nowar)
 
 	if (gm_pid != ch->GetPlayerID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] No one is entitled to a guild war."));
 		return;
 	}
 
@@ -1226,7 +1226,7 @@ ACMD(do_nowar)
 
 	if (!opp_g)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷ 尡 ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] No guild with this name exists."));
 		return;
 	}
 
@@ -1267,7 +1267,7 @@ ACMD(do_messenger_auth)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this in the duel arena."));
 		return;
 	}
 
@@ -1284,7 +1284,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 declined the invitation."), ch->GetName());
 	}
 
 	MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, answer == 'y' ? false : true); // DENY
@@ -1317,7 +1317,7 @@ ACMD(do_unmount)
 	}
 	else
 	{
-		ch->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("κ丮     ϴ."));
+		ch->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("There isn't enough space in your inventory."));
 	}
 
 }
@@ -1371,7 +1371,7 @@ ACMD(do_view_equip)
 
 		   if (ch->GetSP() < iSPCost)
 		   {
-		   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ŷ Ͽ ٸ     ϴ."));
+		   ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't see other people's equipment due to lack of mental acuity."));
 		   return;
 		   }
 		   ch->PointChange(POINT_SP, -iSPCost);
@@ -1384,13 +1384,13 @@ ACMD(do_party_request)
 {
 	if (ch->GetArena())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("忡 Ͻ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use this in the duel arena."));
 		return;
 	}
 
 	if (ch->GetParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ Ƽ  Ƿ Խû   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot accept the invitation because you are already in the group."));
 		return;
 	}
 
@@ -1448,25 +1448,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("This function can only be used by the emperor."));
 		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("Cooldown time for approximately %d seconds"), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, WarpPrice);
 		return;	
 	}
 
@@ -1477,7 +1477,7 @@ ACMD(do_monarch_warpto)
 
 	if (!*arg1)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(": warpto "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Command: warpto "));
 		return;
 	}
 
@@ -1491,18 +1491,18 @@ ACMD(do_monarch_warpto)
 		{
 			if (pkCCI->bEmpire != ch->GetEmpire())
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("You cannot be warped to an unknown player."));
 				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("Adding player %d into the channel. (Present channel %d)"), pkCCI->bChannel, g_bChannel);
 				return;
 			}
 			if (!IsMonarchWarpZone(pkCCI->lMapIndex))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 				return;
 			}
 
@@ -1513,13 +1513,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("Warp to player %s."), arg1);
 				ch->WarpSet(pos.x, pos.y);
 				
-				//  谨	
+				//군주 돈 삭감	
 				CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-				//Ÿ ʱȭ 
+				//쿨타임 초기화 
 				ch->SetMC(CHARACTER::MI_WARP);
 			}
 		}
@@ -1534,26 +1534,26 @@ ACMD(do_monarch_warpto)
 	{
 		if (tch->GetEmpire() != ch->GetEmpire())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot be warped to an unknown player."));
 			return;
 		}
 		if (!IsMonarchWarpZone(tch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 			return;
 		}
 		x = tch->GetX();
 		y = tch->GetY();
 	}
 
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), arg1);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Warp to player %s."), arg1);
 	ch->WarpSet(x, y);
 	ch->Stop();
 
-	//  谨	
+	//군주 돈 삭감	
 	CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-	//Ÿ ʱȭ 
+	//쿨타임 초기화 
 	ch->SetMC(CHARACTER::MI_WARP);
 }
 
@@ -1567,31 +1567,31 @@ ACMD(do_monarch_transfer)
 
 	if (!*arg1)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(": transfer "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Use: transfer "));
 		return;
 	}
 	
 	if (!CMonarch::instance().IsMonarch(ch->GetPlayerID(), ch->GetEmpire()))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This function can only be used by the emperor."));
 		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("Cooldown time for approximately %d seconds"), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, WarpPrice);
 		return;	
 	}
 
@@ -1606,22 +1606,22 @@ ACMD(do_monarch_transfer)
 		{
 			if (pkCCI->bEmpire != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 				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("The player %s is on channel %d at the moment. (Your channel: %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("Unable to navigate to the region."));
 				return;
 			}
 			if (!IsMonarchWarpZone(ch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 				return;
 			}
 
@@ -1633,16 +1633,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("You have recruited %s players."), 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("There is no user with this name."));
 		}
 
 		return;
@@ -1651,32 +1651,32 @@ ACMD(do_monarch_transfer)
 
 	if (ch == tch)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit yourself."));
 		return;
 	}
 
 	if (tch->GetEmpire() != ch->GetEmpire())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 		return;
 	}
 	if (!IsMonarchWarpZone(tch->GetMapIndex()))
 	{
-		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 		return;
 	}
 	if (!IsMonarchWarpZone(ch->GetMapIndex()))
 	{
-		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+		ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 		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);
 }
 
@@ -1684,24 +1684,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("My information about the emperor"));
 		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("[%sMonarch] : %s Yang owned %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("[%sMonarch] : %s"), EMPIRE_NAME(n), p->name[n]);
 				
 		}
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Information about the emperor"));
 		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("[%sMonarch] : %s"), EMPIRE_NAME(n), p->name[n]);
 				
 		}
 	}
@@ -1766,60 +1766,60 @@ ACMD(do_monarch_tax)
 		return;
 	}
 
-	//  ˻	
+	// 군주 검사	
 	if (!ch->IsMonarch())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ Ҽ ִ Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Only an emperor can use this."));
 		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("Choose a number between 1 and 50."));
 
 	quest::CQuestManager::instance().SetEventFlag("trade_tax", tax); 
 
-	// ֿ ޼ ϳ
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d % Ǿϴ"));
+	// 군주에게 메세지 하나
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Taxes are set to %d%%."));
 
-	//  
+	// 공지 
 	char szMsg[1024];	
 
-	snprintf(szMsg, sizeof(szMsg), "   %d %%  Ǿϴ", tax);
+	snprintf(szMsg, sizeof(szMsg), "In the name of the monarch, the tax has been changed to %d %%", tax);
 	BroadcastNotice(szMsg);
 
-	snprintf(szMsg, sizeof(szMsg), "δ ŷ ݾ %d %%   Ե˴ϴ.", tax);
+	snprintf(szMsg, sizeof(szMsg), "Going forward, %d %% of the transaction amount will go to the Treasury.", 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,
 };
 
@@ -1832,7 +1832,7 @@ ACMD(do_monarch_mob)
 
 	if (!ch->IsMonarch())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ Ҽ ִ Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Only an emperor can use this."));
 		return;
 	}
 	
@@ -1849,26 +1849,26 @@ ACMD(do_monarch_mob)
 	{
 		if (mapEmpire != pcEmpire && mapEmpire != 0)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڱ 信   ִ Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This feature is only available in your home territory"));
 			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("Cooldown time for approximately %d seconds"), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, SummonPrice);
 		return;	
 	}
 
@@ -1892,14 +1892,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("The Monster cannot be called. Check the Mob Number."));
 		return;
 	}
 
@@ -1915,10 +1915,10 @@ ACMD(do_monarch_mob)
 
 	if (tch)
 	{
-		//   谨	
+		// 군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(SummonPrice, ch->GetEmpire(), ch);
 
-		// Ÿ ʱȭ 
+		// 쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_SUMMON); 
 	}
 }
@@ -1927,90 +1927,90 @@ 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("Hit Points +%d");
+		case POINT_MAX_SP:	return LC_TEXT("Spell Points +%d");
+		case POINT_HT:		return LC_TEXT("Endurance +%d");
+		case POINT_IQ:		return LC_TEXT("Intelligence +%d");
+		case POINT_ST:		return LC_TEXT("Strength +%d");
+		case POINT_DX:		return LC_TEXT("Dexterity +%d");
+		case POINT_ATT_SPEED:	return LC_TEXT("Attack Speed +%d");
+		case POINT_MOV_SPEED:	return LC_TEXT("Movement Speed %d");
+		case POINT_CASTING_SPEED:	return LC_TEXT("Cooldown Time -%d");
+		case POINT_HP_REGEN:	return LC_TEXT("Energy Recovery +%d");
+		case POINT_SP_REGEN:	return LC_TEXT("Spell Point Recovery +%d");
+		case POINT_POISON_PCT:	return LC_TEXT("Poison Attack %d");
+		case POINT_STUN_PCT:	return LC_TEXT("Star +%d");
+		case POINT_SLOW_PCT:	return LC_TEXT("Speed Reduction +%d");
+		case POINT_CRITICAL_PCT:	return LC_TEXT("Critical Attack with a chance of %d%%");
+		case POINT_RESIST_CRITICAL:	return LC_TEXT("Reduced Critical Chance %d%%");
+		case POINT_PENETRATE_PCT:	return LC_TEXT("Chance of a Speared Attack of %d%%");
+		case POINT_RESIST_PENETRATE: return LC_TEXT("Reduced Speared Chance %d%%");
+		case POINT_ATTBONUS_HUMAN:	return LC_TEXT("Player's Attack Power against Monsters +%d%%");
+		case POINT_ATTBONUS_ANIMAL:	return LC_TEXT("Horse's Attack Power against Monsters +%d%%");
+		case POINT_ATTBONUS_ORC:	return LC_TEXT("Attack Boost against Wonggui + %d%%");
+		case POINT_ATTBONUS_MILGYO:	return LC_TEXT("Attack Boost against Milgyo + %d%%");
+		case POINT_ATTBONUS_UNDEAD:	return LC_TEXT("Attack boost against zombies + %d%%");
+		case POINT_ATTBONUS_DEVIL:	return LC_TEXT("Attack boost against devils + %d%%");
+		case POINT_STEAL_HP:		return LC_TEXT("Absorbing of Energy %d%% while attacking.");
+		case POINT_STEAL_SP:		return LC_TEXT("Absorption of Spell Points (SP) %d%% while attacking.");
+		case POINT_MANA_BURN_PCT:	return LC_TEXT("With a chance of %d%% Spell Points (SP) will be taken from the enemy.");
+		case POINT_DAMAGE_SP_RECOVER:	return LC_TEXT("Absorbing of Spell Points (SP) with a chance of %d%%");
+		case POINT_BLOCK:			return LC_TEXT("%d%% Chance of blocking a close-combat attack");
+		case POINT_DODGE:			return LC_TEXT("%d%% Chance of blocking a long range attack");
+		case POINT_RESIST_SWORD:	return LC_TEXT("One-Handed Sword defence %d%%");
+		case POINT_RESIST_TWOHAND:	return LC_TEXT("Two-Handed Sword Defence %d%%");
+		case POINT_RESIST_DAGGER:	return LC_TEXT("Two-Handed Sword Defence %d%%");
+		case POINT_RESIST_BELL:		return LC_TEXT("Bell Defence %d%%");
+		case POINT_RESIST_FAN:		return LC_TEXT("Fan Defence %d%%");
+		case POINT_RESIST_BOW:		return LC_TEXT("Distant Attack Resistance %d%%");
+		case POINT_RESIST_FIRE:		return LC_TEXT("Fire Resistance %d%%");
+		case POINT_RESIST_ELEC:		return LC_TEXT("Lightning Resistance %d%%");
+		case POINT_RESIST_MAGIC:	return LC_TEXT("Magic Resistance %d%%");
+		case POINT_RESIST_WIND:		return LC_TEXT("Wind Resistance %d%%");
+		case POINT_RESIST_ICE:		return LC_TEXT("Ice Resistance %d%%");
+		case POINT_RESIST_EARTH:	return LC_TEXT("Earth Resistance %d%%");
+		case POINT_RESIST_DARK:		return LC_TEXT("Darkness Resistance %d%%");
+		case POINT_REFLECT_MELEE:	return LC_TEXT("Reflect Direct Hit: %d%%");
+		case POINT_REFLECT_CURSE:	return LC_TEXT("Reflect Curse: %d%%");
+		case POINT_POISON_REDUCE:	return LC_TEXT("Poison Resistance %d%%");
+		case POINT_KILL_SP_RECOVER:	return LC_TEXT("Spell Points (SP) will be increased by %d%% if you win.");
+		case POINT_EXP_DOUBLE_BONUS:	return LC_TEXT("Experience increases by %d%% if you win against an opponent.");
+		case POINT_GOLD_DOUBLE_BONUS:	return LC_TEXT("Increase of Yang up to %d%% if you win.");
+		case POINT_ITEM_DROP_BONUS:	return LC_TEXT("Increase of captured Items up to %d%% if you win.");
+		case POINT_POTION_BONUS:	return LC_TEXT("Power increase of up to %d%% after taking the potion.");
+		case POINT_KILL_HP_RECOVERY:	return LC_TEXT("%d%% Chance of filling up Hit Points after a victory.");
+//		case POINT_IMMUNE_STUN:	return LC_TEXT("No Dizziness %d%%");
+//		case POINT_IMMUNE_SLOW:	return LC_TEXT("No Slowing Down %d%%");
+//		case POINT_IMMUNE_FALL:	return LC_TEXT("No falling down %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("Attack Power + %d");
+		case POINT_DEF_GRADE_BONUS:	return LC_TEXT("Armour + %d");
+		case POINT_MAGIC_ATT_GRADE:	return LC_TEXT("Magical Attack + %d");
+		case POINT_MAGIC_DEF_GRADE:	return LC_TEXT("Magical Defence + %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("Maximum Endurance + %d");
+		case POINT_ATTBONUS_WARRIOR:	return LC_TEXT("Strong against Warriors + %d%%");
+		case POINT_ATTBONUS_ASSASSIN:	return LC_TEXT("Strong against Ninjas + %d%%");
+		case POINT_ATTBONUS_SURA:		return LC_TEXT("Strong against Sura + %d%%");
+		case POINT_ATTBONUS_SHAMAN:		return LC_TEXT("Strong against Shamans + %d%%");
+		case POINT_ATTBONUS_MONSTER:	return LC_TEXT("Strength against monsters + %d%%");
+		case POINT_MALL_ATTBONUS:		return LC_TEXT("Attack + %d%%");
+		case POINT_MALL_DEFBONUS:		return LC_TEXT("Defence + %d%%");
+		case POINT_MALL_EXPBONUS:		return LC_TEXT("Experience %d%%");
+		case POINT_MALL_ITEMBONUS:		return LC_TEXT("Chance to find an Item %. 1f");
+		case POINT_MALL_GOLDBONUS:		return LC_TEXT("Chance to find Yang %. 1f");
+		case POINT_MAX_HP_PCT:			return LC_TEXT("Maximum Energy +%d%%");
+		case POINT_MAX_SP_PCT:			return LC_TEXT("Maximum Energy +%d%%");
+		case POINT_SKILL_DAMAGE_BONUS:	return LC_TEXT("Skill Damage %d%%");
+		case POINT_NORMAL_HIT_DAMAGE_BONUS:	return LC_TEXT("Hit Damage %d%%");
+		case POINT_SKILL_DEFEND_BONUS:		return LC_TEXT("Resistance against Skill Damage %d%%");
+		case POINT_NORMAL_HIT_DEFEND_BONUS:	return LC_TEXT("Resistance against Hits %d%%");
 //		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%% Resistance against Warrior Attacks");
+		case POINT_RESIST_ASSASSIN:	return LC_TEXT("%d%% Resistance against Ninja Attacks");
+		case POINT_RESIST_SURA:		return LC_TEXT("%d%% Resistance against Sura Attacks");
+		case POINT_RESIST_SHAMAN:	return LC_TEXT("%d%% Resistance against Shaman Attacks");
 		default:					return NULL;
 	}
 }
@@ -2048,7 +2048,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("(Procedure: %d y- %d m - %d d)"), year, mon, day);
 
 	return true;
 }
@@ -2183,11 +2183,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")
@@ -2276,7 +2276,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");
@@ -2352,7 +2352,7 @@ ACMD(do_in_game_mall)
 	}
 }
 
-// ֻ
+// 주사위
 ACMD(do_dice) 
 {
 	char arg1[256], arg2[256];
@@ -2377,9 +2377,9 @@ ACMD(do_dice)
 	int n = Random::get(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 rolled the dice and came up with %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("You rolled the dice and came up with %d. (%d-%d)"), n, start, end);
 }
 
 ACMD(do_click_mall)
@@ -2393,7 +2393,7 @@ ACMD(do_ride)
     if (ch->IsDead() || ch->IsStun())
 	return;
 
-    // 
+    // 내리기
     {
 	if (ch->IsHorseRiding())
 	{
@@ -2410,7 +2410,7 @@ ACMD(do_ride)
 	}
     }
 
-    // Ÿ
+    // 타기
     {
 	if (ch->GetHorse() != NULL)
 	{
@@ -2425,7 +2425,7 @@ ACMD(do_ride)
 	    if (NULL == item)
 		continue;
 
-	    // ũ Ż 
+	    // 유니크 탈것 아이템
 		if (item->IsRideItem())
 		{
 			if (NULL==ch->GetWear(WEAR_UNIQUE1) || NULL==ch->GetWear(WEAR_UNIQUE2))
@@ -2437,20 +2437,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:	// 사자왕이용권
 		    SPDLOG_TRACE("[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) )	{
 			SPDLOG_TRACE("[DO_RIDE] USE QUEST ITEM");
 			ch->UseItem(TItemPos (INVENTORY, i));
@@ -2460,8 +2460,8 @@ ACMD(do_ride)
     }
 
 
-    // Ÿų   
-    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ȯּ."));
+    // 타거나 내릴 수 없을때
+    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Please call your Horse first."));
 }
 
 #ifdef __AUCTION__
@@ -2531,7 +2531,7 @@ ACMD(do_enroll_sale)
 }
 
 // temp_auction
-// packet ϰ ϰ, ̰ ؾѴ.
+// packet으로 통신하게 하고, 이건 삭제해야한다.
 ACMD(do_get_auction_list)
 {
 	char arg1[256];
diff --git a/src/game/src/cmd_gm.cpp b/src/game/src/cmd_gm.cpp
index d78d061..0a8ba5c 100644
--- a/src/game/src/cmd_gm.cpp
+++ b/src/game/src/cmd_gm.cpp
@@ -261,44 +261,44 @@ bool CHARACTER_GoToName(LPCHARACTER ch, BYTE empire, int mapIndex, const char* g
 
 /*
    = {
-   { "A1|",		0, 1,  4693, 9642 },
-   { "A3|ھ",		0, 3,  3608, 8776 },
+   { "A1|\xBF\xB5\xBE\xC8\xC0\xBE\xBC\xBA",		0, 1,  4693, 9642 },
+   { "A3|\xC0\xDA\xBE\xE7\xC7\xF6",		0, 3,  3608, 8776 },
 
-   { "B1|",		0, 21,  557, 1579 },
-   { "B3|",		0, 23, 1385, 2349 },
+   { "B1|\xC1\xB6\xBE\xC8\xC0\xBE\xBC\xBA",		0, 21,  557, 1579 },
+   { "B3|\xBA\xB9\xC1\xA4\xC7\xF6",		0, 23, 1385, 2349 },
 
-   { "C1|",		0, 41, 9696, 2784 },
-   { "C3|ڶ",		0, 43, 8731, 2426 },
+   { "C1|\xC6\xF2\xB9\xAB\xC0\xBE\xBC\xBA",		0, 41, 9696, 2784 },
+   { "C3|\xB9\xDA\xB6\xF3\xC7\xF6",		0, 43, 8731, 2426 },
 
 // Snow
-{ "Snow|ѻ",		1, 61, 4342, 2906 },
-{ "Snow|ѻ",		2, 61, 3752, 1749 },
-{ "Snow|ѻ",		3, 61, 4918, 1736 },
+{ "Snow|\xBC\xAD\xC7\xD1\xBB\xEA",		1, 61, 4342, 2906 },
+{ "Snow|\xBC\xAD\xC7\xD1\xBB\xEA",		2, 61, 3752, 1749 },
+{ "Snow|\xBC\xAD\xC7\xD1\xBB\xEA",		3, 61, 4918, 1736 },
 
 // Flame
-{ "Flame|ȭ|ȭ",	1, 62, 5994, 7563 },
-{ "Flame|ȭ|ȭ",	2, 62, 5978, 6222 },
-{ "Flame|ȭ|ȭ",	3, 62, 7307, 6898 },
+{ "Flame|\xB5\xB5\xBF\xB0\xC8\xAD\xC1\xF6|\xC8\xAD\xBF\xB0",	1, 62, 5994, 7563 },
+{ "Flame|\xB5\xB5\xBF\xB0\xC8\xAD\xC1\xF6|\xC8\xAD\xBF\xB0",	2, 62, 5978, 6222 },
+{ "Flame|\xB5\xB5\xBF\xB0\xC8\xAD\xC1\xF6|\xC8\xAD\xBF\xB0",	3, 62, 7307, 6898 },
 
 // Desert
-{ "Desert|縷|縷",	1, 63, 2178, 6272 },
-{ "Desert|縷|縷",	2, 63, 2219, 5027 },
-{ "Desert|縷|縷",	3, 63, 3440, 5025 },
+{ "Desert|\xBF\xB5\xBA\xF1\xBB\xE7\xB8\xB7|\xBB\xE7\xB8\xB7",	1, 63, 2178, 6272 },
+{ "Desert|\xBF\xB5\xBA\xF1\xBB\xE7\xB8\xB7|\xBB\xE7\xB8\xB7",	2, 63, 2219, 5027 },
+{ "Desert|\xBF\xB5\xBA\xF1\xBB\xE7\xB8\xB7|\xBB\xE7\xB8\xB7",	3, 63, 3440, 5025 },
 
 // Threeway
-{ "Three|·",		1, 64, 4021, 6739 },
-{ "Three|·",		2, 64, 2704, 7399 },
-{ "Three|·",		3, 64, 3213, 8080 },
+{ "Three|\xBD\xC2\xB7\xE6\xB0\xEE",		1, 64, 4021, 6739 },
+{ "Three|\xBD\xC2\xB7\xE6\xB0\xEE",		2, 64, 2704, 7399 },
+{ "Three|\xBD\xC2\xB7\xE6\xB0\xEE",		3, 64, 3213, 8080 },
 
-// б
-{ "Milgyo|б",	1, 65, 5536, 1436 },
-{ "Milgyo|б",	2, 65, 5536, 1436 },
-{ "Milgyo|б",	3, 65, 5536, 1436 },
+// 밀교사원
+{ "Milgyo|\xB9\xD0\xB1\xB3\xBB\xE7\xBF\xF8",	1, 65, 5536, 1436 },
+{ "Milgyo|\xB9\xD0\xB1\xB3\xBB\xE7\xBF\xF8",	2, 65, 5536, 1436 },
+{ "Milgyo|\xB9\xD0\xB1\xB3\xBB\xE7\xBF\xF8",	3, 65, 5536, 1436 },
 
-// ŸԱ
-{ "ŸԱ",		1, 65, 5905, 1108 },
-{ "ŸԱ",		2, 65, 5905, 1108 },
-{ "ŸԱ",		3, 65, 5905, 1108 },
+// 사귀타워입구
+{ "\xBB\xE7\xB1\xCD\xC5\xB8\xBF\xF6\xC0\xD4\xB1\xB8",		1, 65, 5905, 1108 },
+{ "\xBB\xE7\xB1\xCD\xC5\xB8\xBF\xF6\xC0\xD4\xB1\xB8",		2, 65, 5905, 1108 },
+{ "\xBB\xE7\xB1\xCD\xC5\xB8\xBF\xF6\xC0\xD4\xB1\xB8",		3, 65, 5905, 1108 },
 
 { NULL,			0,  0,    0,    0 },
 };
@@ -500,7 +500,7 @@ ACMD(do_item)
 				M2_DESTROY_ITEM(item);
 				if (!ch->DragonSoul_IsQualified())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, "κ Ȱȭ  .");
+					ch->ChatPacket(CHAT_TYPE_INFO, "Before you open the Cor Draconis, you have to complete the Dragon Stone quest and activate the Dragon Stone Alchemy.");
 				}
 				else
 					ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
@@ -841,7 +841,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;
 
 		SPDLOG_DEBUG("PURGE: {} {}", pkChr->GetName(), iDist);
@@ -1215,7 +1215,7 @@ ACMD(do_monarch_notice)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This function can only be used by the emperor."));
 	}
 }
 
@@ -1555,12 +1555,12 @@ ACMD(do_makeguild)
 
 	if (!check_name(cp.name))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   ̸ Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This guild name is invalid."));
 		return;
 	}
 
 	gm.CreateGuild(cp);
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) 尡 Ǿϴ. [ӽ]"), cp.name);
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("(%s) guild has been created. [Temporary]"), cp.name);
 }
 
 ACMD(do_deleteguild)
@@ -1765,7 +1765,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);
@@ -1812,25 +1812,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);
 }
@@ -2069,7 +2069,7 @@ ACMD(do_reload)
 				break;
 				//END_RELOAD_ADMIN
 			case 'c':	// cube
-				//  μ Ѵ.
+				// 로컬 프로세스만 갱산한다.
 				Cube_init ();
 				break;
 		}
@@ -2110,7 +2110,7 @@ ACMD(do_level)
 
 ACMD(do_gwlist)
 {
-	ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   Դϴ"));
+	ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("This guild is at war."));
 	CGuildManager::instance().ShowGuildWarList(ch);
 }
 
@@ -2168,7 +2168,7 @@ ACMD(do_guild_state)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s:  ʴ  Դϴ."), arg1);
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s: This guild does not exist."), arg1);
 	}
 }
 
@@ -2190,7 +2190,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())
@@ -2472,7 +2472,7 @@ ACMD(do_priv_empire)
 	if (duration < 0)
 		goto USAGE;
 
-	// ð  
+	// 시간 단위로 변경
 	duration = duration * (60*60);
 
 	SPDLOG_DEBUG("_give_empire_privileage(empire={}, type={}, value={}, duration={}) by command",
@@ -2576,10 +2576,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("This command does not exist."));
 		return;
 	}
 
@@ -2642,10 +2642,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("This command does not exist."));
 		return;
 	}
 
@@ -2667,8 +2667,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, "The time is incorrectly formatted. Please specify it with an h, m, or s.");
+			ch->ChatPacket(CHAT_TYPE_INFO, "Example) 10s, 10m, 1m 30s");
 		}
 		return;
 	}
@@ -2721,8 +2721,8 @@ ACMD(do_build)
 
 	CLand * pkLand = CManager::instance().FindLand(ch->GetMapIndex(), ch->GetX(), ch->GetY());
 
-	// NOTE:  üũ Ŭ̾Ʈ  Բ ϱ    
-	//       ޼  ʰ  Ѵ.
+	// NOTE: 조건 체크들은 클라이언트와 서버가 함께 하기 때문에 문제가 있을 때는
+	//       메세지를 전송하지 않고 에러를 출력한다.
 	if (!pkLand)
 	{
 		SPDLOG_ERROR("{} trying to build on not buildable area.", ch->GetName());
@@ -2735,17 +2735,17 @@ ACMD(do_build)
 		return;
 	}
 
-	// Ǽ  üũ
+	// 건설 권한 체크
 	if (GMLevel == GM_PLAYER)
 	{
-		// ÷̾      Ȯؾ Ѵ.
+		// 플레이어가 집을 지을 때는 땅이 내껀지 확인해야 한다.
 		if ((!ch->GetGuild() || ch->GetGuild()->GetID() != pkLand->GetOwner()))
 		{
 			SPDLOG_ERROR("{} trying to build on not owned land.", ch->GetName());
 			return;
 		}
 
-		//  渶ΰ?
+		// 내가 길마인가?
 		if (ch->GetGuild()->GetMasterPID() != ch->GetPlayerID())
 		{
 			SPDLOG_ERROR("{} trying to build while not the guild master.", ch->GetName());
@@ -2776,7 +2776,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("The building does not exist."));
 					return;
 				}
 
@@ -2786,21 +2786,21 @@ ACMD(do_build)
 				{
 					if (pkLand->FindObjectByGroup(t->dwGroupVnum))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("     ǹ  ֽϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This type of building can only be erected once."));
 						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("The Main Building has to be erected first."));
 							return;
 						}
 					}
@@ -2808,21 +2808,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("Building failed because of incorrect pricing."));
 						return;
 					}
 
 					if (ch->GetGold() < (int)t->dwPrice)
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ǽ  մϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your guild does not have enough Yang to erect this building."));
 						return;
 					}
 
-					//    üũ
+					// 아이템 자재 개수 체크
 
 					int i;
 					for (i = 0; i < OBJECT_MATERIAL_MAX_NUM; ++i)
@@ -2835,7 +2835,7 @@ ACMD(do_build)
 
 						if ((int) dwItemCount > ch->CountSpecifyItem(dwItemVnum))
 						{
-							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("簡 Ͽ Ǽ  ϴ."));
+							ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You do not have enough resources to build a building."));
 							return;
 						}
 					}
@@ -2844,11 +2844,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, "Rotating buildings is not yet available");
 				   return;
 				   }
 				 */
@@ -2869,17 +2869,17 @@ ACMD(do_build)
 				if (!isSuccess)
 				{
 					if (test_server)
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ǹ    ġԴϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot erect a building at this place."));
 					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)
@@ -2958,8 +2958,8 @@ ACMD(do_build)
 			break;
 
 		case 'W' :
-			//  
-			// build (w)all ȣ ũ 빮 빮 빮 빮
+			// 담장 세우기
+			// build (w)all 담장번호 담장크기 대문동 대문서 대문남 대문북
 
 			if (GMLevel >  GM_PLAYER) 
 			{
@@ -2993,8 +2993,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));
@@ -3051,7 +3051,7 @@ ACMD(do_horse_level)
 
 	if (NULL == victim)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ʴ ij Դϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This character does not exist."));
 		return;
 	}
 
@@ -3235,17 +3235,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("This character does not exist."));
 		return;
 	}
 
 	if (CArenaManager::instance().EndDuel(pChar->GetPlayerID()) == false)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Duel has not been successfully cancelled."));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("   "));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Duel cancelled successfully."));
 	}
 }
 
@@ -3268,7 +3268,7 @@ ACMD(do_duel)
 
 	if (!str_to_number(minute, szMinute))
 	{
-		// ijٴ ⺻ 10.
+		// 캐나다는 기본 10분.
 		if (LC_IsCanada() == true)
 		{
 			minute = 10;
@@ -3301,7 +3301,7 @@ ACMD(do_duel)
 			}
 			else
 			{
-				pChar1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+				pChar1->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You have left the group."));
 				pParty->Quit(pChar1->GetPlayerID());
 			}
 		}
@@ -3315,23 +3315,23 @@ ACMD(do_duel)
 			}
 			else
 			{
-				pChar2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ ̽ϴ."));
+				pChar2->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You have left the group."));
 				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("The duel has been successfully started."));
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ۿ  ֽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a problem with initiating the duel."));
 		}
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڰ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There are no combatants."));
 	}
 }
 
@@ -3346,7 +3346,7 @@ ACMD(do_stat_plus_amount)
 
 	if (ch->IsPolymorphed())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your status while you are transformed."));
 		return;
 	}
 
@@ -3354,7 +3354,7 @@ ACMD(do_stat_plus_amount)
 
 	if (nRemainPoint <= 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No status points left."));
 		return;
 	}
 
@@ -3363,40 +3363,40 @@ ACMD(do_stat_plus_amount)
 
 	if (nRemainPoint < nPoint)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Remaining status points are too low."));
 		return;
 	}
 
 	if (nPoint < 0)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ߸ ԷϿϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You entered an incorrect value."));
 		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);
@@ -3404,7 +3404,7 @@ ACMD(do_stat_plus_amount)
 			break;
 
 		default :
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ɾ  Ŀǵ尡 ߸ Ǿϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Suborder or the Order is incorrect."));
 			return;
 			break;
 	}
@@ -3437,7 +3437,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("Broken contract between player %d and player %d."), pids.pid1, pids.pid2);
 	db_clientdesc->DBPacket(HEADER_GD_BREAK_MARRIAGE, 0, &pids, sizeof(pids));
 }
 
@@ -3471,8 +3471,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("Information for the Kingdoms"));
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Choose the Map Information of the Holy Land %d Entrance %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)
@@ -3495,7 +3495,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("Information about the status of the kingdom battle"));
 	ch->ChatPacket(CHAT_TYPE_INFO, "Deadcount %d",
 			CThreeWayWar::instance().GetReviveTokenForPlayer(ch->GetPlayerID()));
 }
@@ -3577,7 +3577,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, "Treasury: %d Yang", NationMoney);
 }
 
 ACMD(do_reset_subskill)
@@ -3856,13 +3856,13 @@ ACMD(do_set_stat)
 	{
 		if (tch->IsPolymorphed())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а ߿ ɷ ø  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot change your status while you are transformed."));
 			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("Suborder or the Order is incorrect."));
 			return;
 		}
 		int nRemainPoint = tch->GetPoint(POINT_STAT);
@@ -3916,7 +3916,7 @@ ACMD(do_set_stat)
 
 		if (nRemainPoint < nChangeAmount)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  Ʈ ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Remaining status points are too low."));
 			return;
 		}
 
@@ -4153,8 +4153,8 @@ ACMD (do_attr_full_set)
 	case JOB_SURA:
 	case JOB_SHAMAN:
 		{
-			//   .
-			// ̰͸  ־ ӽ÷    ̷ Ӽ .
+			// 무사 몸빵 셋팅.
+			// 이것만 나와 있어서 임시로 모든 직군 다 이런 속성 따름.
 			item = ch->GetWear(WEAR_HEAD);
 			if (item != NULL)
 			{
@@ -4261,7 +4261,7 @@ ACMD (do_use_item)
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, "    .");
+		ch->ChatPacket(CHAT_TYPE_INFO, "I can't wear it because I don't have the item.");
 	}
 }
 
diff --git a/src/game/src/cmd_oxevent.cpp b/src/game/src/cmd_oxevent.cpp
index 77797e1..992f930 100644
--- a/src/game/src/cmd_oxevent.cpp
+++ b/src/game/src/cmd_oxevent.cpp
@@ -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 The other event participants are being noted down."));
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX̺Ʈ  ο  ߽ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("OX The other event participants have not been noted down."));
 	}
 }
 
 ACMD(do_oxevent_get_attender)
 {
-	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("  ڼ : %d"), COXEventManager::instance().GetAttenderCount());
+	ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Number of other participants : %d"), COXEventManager::instance().GetAttenderCount());
 }
 
diff --git a/src/game/src/config.cpp b/src/game/src/config.cpp
index 59334a1..eacad23 100644
--- a/src/game/src/config.cpp
+++ b/src/game/src/config.cpp
@@ -38,7 +38,7 @@ WORD	teen_port	= 0;
 
 BYTE	g_bChannel = 0;
 int		passes_per_sec = 25;
-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;
@@ -100,17 +100,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;
 
@@ -119,8 +119,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;        // 중립지대에 입장하면 안내메세지를 알려줌
 
 int gPlayerMaxLevel = 99;
 
@@ -316,7 +316,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)
@@ -337,9 +337,9 @@ void config_init(const string& st_localeServiceName)
 	*log_db = '\0';
 
 
-	// DB  ϱؼ ٸ ð Ǿ
-	// DB о    ٸ  ѾѴ.
-	//  ϰõ ʱȭ ƾ  ϱ .
+	// DB에서 로케일정보를 세팅하기위해서는 다른 세팅값보다 선행되어서
+	// DB정보만 읽어와 로케일 세팅을 한후 다른 세팅을 적용시켜야한다.
+	// 이유는 로케일관련된 초기화 루틴이 곳곳에 존재하기 때문.
 
 	bool isCommonSQL = false;	
 	bool isPlayerSQL = false;
@@ -475,7 +475,7 @@ void config_init(const string& st_localeServiceName)
 		}
     }
 
-	//ó   .
+	//처리가 끝났으니 파일을 닫자.
 	fclose(fpOnlyForDB);
 
 	// CONFIG_SQL_INFO_ERROR
@@ -501,7 +501,7 @@ void config_init(const string& st_localeServiceName)
 		exit(EXIT_FAILURE);
 	}
 
-	// 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())
@@ -512,8 +512,8 @@ void config_init(const string& st_localeServiceName)
 
 	SPDLOG_INFO("CommonSQL connected");
 
-	//    
-	// <>   ǹ(WHERE)  . (ٸ    ֽϴ)
+	// 로케일 정보를 가져오자 
+	// <경고> 쿼리문에 절대 조건문(WHERE) 달지 마세요. (다른 지역에서 문제가 생길수 있습니다)
 	{
 		char szQuery[512];
 		snprintf(szQuery, sizeof(szQuery), "SELECT mKey, mValue FROM locale");
@@ -530,7 +530,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)
@@ -542,15 +542,15 @@ void config_init(const string& st_localeServiceName)
 		}
 	}
 
-	//   COMMON SQL ش.
-	//  g_stLocale  LocaleService_Init() ο õȴ.
+	// 로케일 정보를 COMMON SQL에 세팅해준다.
+	// 참고로 g_stLocale 정보는 LocaleService_Init() 내부에서 세팅된다.
 	SPDLOG_INFO("Setting DB to locale {}", 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())
@@ -561,9 +561,9 @@ void config_init(const string& st_localeServiceName)
 
 	SPDLOG_INFO("PlayerSQL connected");
 
-	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())
@@ -578,8 +578,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'");
@@ -619,13 +619,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);
@@ -995,7 +995,7 @@ void config_init(const string& st_localeServiceName)
 		TOKEN("spam_block_reload_cycle")
 		{
 			str_to_number(g_uiSpamReloadCycle, value_string);
-			g_uiSpamReloadCycle = std::max(60, g_uiSpamReloadCycle); // ּ 1
+			g_uiSpamReloadCycle = std::max(60, g_uiSpamReloadCycle); // 최소 1분
 		}
 
 		TOKEN("check_multihack")
@@ -1205,7 +1205,7 @@ void CheckClientVersion()
 		//if (0 != g_stClientVersion.compare(d->GetClientVersion()) )
 		if (version > date)
 		{
-			d->GetCharacter()->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+			d->GetCharacter()->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("You do not have the correct client version. Please install the normal patch."));
 			d->DelayedDisconnect(10);
 		}
 	}
diff --git a/src/game/src/config.h b/src/game/src/config.h
index 37dfecb..0853a37 100644
--- a/src/game/src/config.h
+++ b/src/game/src/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;
 
@@ -98,8 +98,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/src/constants.cpp b/src/game/src/constants.cpp
index da892bd..d2c4e96 100644
--- a/src/game/src/constants.cpp
+++ b/src/game/src/constants.cpp
@@ -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] =
 {
@@ -899,16 +899,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
@@ -1077,19 +1077,19 @@ const SStoneDropInfo aStoneDrop[STONE_INFO_MAX_NUM] =
 
 const char * c_apszEmpireNames[EMPIRE_MAX_NUM] =
 {
-	"",
-	"ż",
-	"õ",
-	"뱹"
+	"All kingdoms",
+	"Shinsoo Kingdom",
+	"Chunjo Kingdom",
+	"Jinno Kingdom"
 };
 
 const char * c_apszPrivNames[MAX_PRIV_NUM] =
 {
 	"",
-	"  Ȯ",
-	"  Ȯ",
-	"   Ȯ",
-	"ġ ",
+	"Item drop rate in percent",
+	"Yang drop rate in percent",
+	"Yang rain drop rate",
+	"Experience percentage",
 };
 
 const int aiPolymorphPowerByLevel[SKILL_MAX_LEVEL + 1] =
@@ -1154,28 +1154,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
@@ -1275,10 +1275,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/src/constants.h b/src/game/src/constants.h
index 0cb11d2..d3bf88f 100644
--- a/src/game/src/constants.h
+++ b/src/game/src/constants.h
@@ -13,7 +13,7 @@ enum EMonsterChatState
 
 typedef struct SMobRankStat
 {
-	int iGoldPercent;   //   Ȯ
+	int iGoldPercent;   // 돈이 나올 확률
 } TMobRankStat;
 
 typedef struct SMobStat
@@ -124,7 +124,7 @@ extern const int		aiMobResistsApplyIdx[MOB_RESISTS_MAX_NUM];
 
 extern const int		aSkillAttackAffectProbByRank[MOB_RANK_MAX_NUM];
 
-extern const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL]; // 1
+extern const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL]; // 1개까지
 extern const int aiItemMagicAttributePercentLow[ITEM_ATTRIBUTE_MAX_LEVEL];
 
 extern const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM];
diff --git a/src/game/src/cube.cpp b/src/game/src/cube.cpp
index 3205df8..ed27bd8 100644
--- a/src/game/src/cube.cpp
+++ b/src/game/src/cube.cpp
@@ -37,11 +37,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;
@@ -53,12 +53,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
@@ -75,13 +75,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
 {
@@ -92,7 +92,7 @@ public:
 /*--------------------------------------------------------*/
 /*                  STATIC FUNCTIONS                      */ 
 /*--------------------------------------------------------*/
- // ʿ   ִ°?
+ // 필요한 아이템 개수를 가지고있는가?
 static bool FN_check_item_count (LPITEM *items, DWORD item_vnum, int need_count)
 {
 	int	count = 0;
@@ -111,7 +111,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;
@@ -170,7 +170,7 @@ static bool FN_check_valid_npc( WORD vnum )
 	return false;
 }
 
-// ť굥Ÿ ùٸ ʱȭ Ǿ üũѴ.
+// 큐브데이타가 올바르게 초기화 되었는지 체크한다.
 static bool FN_check_cube_data (CUBE_DATA *cube_data)
 {
 	DWORD	i = 0;
@@ -204,10 +204,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;
@@ -235,7 +235,7 @@ bool CUBE_DATA::can_make_item (LPITEM *items, WORD npc_vnum)
 	return true;
 }
 
-// ť긦     
+// 큐브를 돌렸을때 나오는 아이템의 종류를 결정함
 CUBE_VALUE* CUBE_DATA::reward_value ()
 {
 	int		end_index		= 0;
@@ -248,7 +248,7 @@ CUBE_VALUE* CUBE_DATA::reward_value ()
 	return &this->reward[reward_index];
 }
 
-// ť꿡 ִ Ḧ 
+// 큐브에 들어있는 재료를 지운다
 void CUBE_DATA::remove_material (LPCHARACTER ch)
 {
 	DWORD	i, end_index;
@@ -281,7 +281,7 @@ void Cube_clean_item (LPCHARACTER ch)
 	}
 }
 
-// ťâ 
+// 큐브창 열기
 void Cube_open (LPCHARACTER ch)
 {
 	if (false == s_isInitializedCubeMaterialInformation)
@@ -308,12 +308,12 @@ void Cube_open (LPCHARACTER ch)
 
 	if (ch->IsCubeOpen())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̹ â ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The Build window is already open."));
 		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("You cannot build something while another trade/storeroom window is open."));
 		return;
 	}
 
@@ -331,7 +331,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);
@@ -426,7 +426,7 @@ bool Cube_load (const char *file)
 		}
 		else TOKEN("gold")
 		{
-			//  ʿ ݾ
+			// 제조에 필요한 금액
 			cube_data->gold = value1;
 		}
 		else TOKEN("end")
@@ -504,10 +504,10 @@ static bool FN_update_cube_status(LPCHARACTER ch)
 // return new item
 bool Cube_make (LPCHARACTER ch)
 {
-	// ־  ʿϴ  ã´. (ť굥Ÿ Ī)
-	// ť Ÿ ִٸ  Ḧ üũѴ.
-	// ο  .
-	// ο  
+	// 주어진 아이템을 필요로하는 조합을 찾는다. (큐브데이타로 칭함)
+	// 큐브 데이타가 있다면 아이템의 재료를 체크한다.
+	// 새로운 아이템을 만든다.
+	// 새로운 아이템 지급
 
 	LPCHARACTER	npc;
 	int			percent_number = 0;
@@ -517,7 +517,7 @@ bool Cube_make (LPCHARACTER ch)
 
 	if (!(ch)->IsCubeOpen())
 	{
-		(ch)->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("â  ʽϴ"));
+		(ch)->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The build window is not open."));
 		return false;
 	}
 
@@ -532,29 +532,29 @@ bool Cube_make (LPCHARACTER ch)
 
 	if (NULL == cube_proto)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ᰡ մϴ"));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You do not have the right material."));
 		return false;
 	}
 
 	if (ch->GetGold() < cube_proto->gold)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ϰų  ڸ ϴ."));	//  ؽƮ ̹ θ ̴°Ŷ ߰ ʿ 
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not enough Yang or not enough space in the inventory."));	// 이 텍스트는 이미 널리 쓰이는거라 추가번역 필요 없음
 		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 = Random::get(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);
 
@@ -564,8 +564,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("Manufacturing failed."));	// 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);
@@ -576,7 +576,7 @@ bool Cube_make (LPCHARACTER ch)
 }
 
 
-// ť꿡 ִ ۵ ǥ
+// 큐브에 있는 아이템들을 표시
 void Cube_show_list (LPCHARACTER ch)
 {
 	LPITEM	*cube_item;
@@ -597,13 +597,13 @@ void Cube_show_list (LPCHARACTER ch)
 }
 
 
-// κ丮 ִ  ť꿡 
+// 인벤토리에 있는 아이템을 큐브에 등록
 void Cube_add_item (LPCHARACTER ch, int cube_index, int inven_index)
 {
-	//  ִ°?
-	// ť곻 ڸ ã
-	// ť꼼
-	// ޽ 
+	// 아이템이 있는가?
+	// 큐브내의 빈자리 찾기
+	// 큐브세팅
+	// 메시지 전송
 	LPITEM	item;
 	LPITEM	*cube_item;
 
@@ -620,7 +620,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;
@@ -664,14 +664,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;
@@ -705,7 +705,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;
@@ -717,13 +717,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)
@@ -735,7 +735,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];
@@ -750,7 +750,7 @@ void Cube_MakeCubeInformationText()
 					infoText.push_back('&');
 			}
 
-			// ߺ ʴ Ϲ 鵵  
+			// 중복되지 않는 일반 재료들도 포맷 생성
 			for (TCubeValueVector::iterator iter = materialInfo.material.begin(); materialInfo.material.end() != iter; ++iter)
 			{
 				char tempBuffer[128];
@@ -760,7 +760,7 @@ void Cube_MakeCubeInformationText()
 
 			infoText.erase(infoText.size() - 1);
 
-			//   尡 ʿϴٸ  ߰
+			// 만들 때 골드가 필요하다면 골드정보 추가
 			if (0 < materialInfo.gold)
 			{
 				char temp[128];
@@ -779,7 +779,7 @@ bool Cube_InformationInitialize()
 
 		const std::vector& rewards = cubeData->reward;
 
-		// ϵڵ 
+		// 하드코딩 ㅈㅅ
 		if (1 != rewards.size())
 		{
 			SPDLOG_ERROR("[CubeInfo] WARNING! Does not support multiple rewards (count: {})", rewards.size());
@@ -807,13 +807,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)
@@ -828,8 +828,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);
@@ -845,7 +845,7 @@ bool Cube_InformationInitialize()
 
 								//currentMaterialIter = materialInfo.material.erase(currentMaterialIter);
 
-								// TODO: ߺǴ    ̻ ؾ   
+								// TODO: 중복되는 아이템 두 개 이상 검출해야 될 수도 있음
 								break;
 							}
 						} // for currentMaterialIter
@@ -865,7 +865,7 @@ bool Cube_InformationInitialize()
 	return true;
 }
 
-// Ŭ̾Ʈ  :  NPC   ִ ۵ () û
+// 클라이언트에서 서버로 : 현재 NPC가 만들 수 있는 아이템들의 정보(목록)를 요청
 void Cube_request_result_list(LPCHARACTER ch)
 {
 	RETURN_IF_CUBE_IS_NOT_OPENED(ch);
@@ -879,7 +879,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();
@@ -898,7 +898,7 @@ void Cube_request_result_list(LPCHARACTER ch)
 
 		resultText.erase(resultText.size() - 1);
 
-		// ä Ŷ Ѱ踦 Ѿ  ... ȹ е  ش޶ ûϰų, ߿ ٸ  ٲٰų...
+		// 채팅 패킷의 한계를 넘어가면 에러 남김... 기획자 분들 께 조정해달라고 요청하거나, 나중에 다른 방식으로 바꾸거나...
 		if (resultText.size() - 20 >= CHAT_MAX_LEN)
 		{
 			SPDLOG_ERROR("[CubeInfo] Too long cube result list text. (NPC: {}, length: {})", npcVNUM, resultText.size());
@@ -908,7 +908,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/src/cube.h b/src/game/src/cube.h
index dffa9c4..c2db176 100644
--- a/src/game/src/cube.h
+++ b/src/game/src/cube.h
@@ -2,7 +2,7 @@
  * 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/src/db.cpp b/src/game/src/db.cpp
index fb6de80..e039e49 100644
--- a/src/game/src/db.cpp
+++ b/src/game/src/db.cpp
@@ -268,7 +268,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 					M2_DELETE(pinfo);
 					break;
 				}
-
+				// Change Location
 				d->SetLogin(pinfo->login);
 
 				SPDLOG_DEBUG("QID_AUTH_LOGIN: START {} {}", qi->dwIdent, (void*) get_pointer(d));
@@ -394,7 +394,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 
 					if (true == LC_IsBrazil())
 					{
-						nPasswordDiff = 0; //   йȣ üũ  ʴ´.
+						nPasswordDiff = 0; // 브라질 버전에서는 비밀번호 체크를 하지 않는다.
 					}
 
 					if (nPasswordDiff)
@@ -425,7 +425,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");
@@ -493,7 +493,7 @@ void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
 						if (pkItem)
 						{
 							SPDLOG_DEBUG("GIVE LOTTO SUCCESS TO {} (pid {})", ch->GetName(), qi->dwIdent);
-							//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ȹ: %s"), pkItem->GetName());
+							//ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s received"), pkItem->GetName());
 
 							pkItem->SetSocket(0, pMsg->Get()->uiInsertID);
 							pkItem->SetSocket(1, pdw[2]);
@@ -657,7 +657,7 @@ enum EAccountQID
 	QID_SPAM_DB,
 };
 
-// 10и ε
+// 10분마다 리로드
 static LPEVENT s_pkReloadSpamEvent = NULL;
 
 EVENTINFO(reload_spam_event_info)
diff --git a/src/game/src/db.h b/src/game/src/db.h
index ecc888a..ef1655c 100644
--- a/src/game/src/db.h
+++ b/src/game/src/db.h
@@ -82,8 +82,8 @@ class DBManager : public singleton
 		DWORD			CountQueryResult()	{ return m_sql.CountResult(); }
 		void			ResetQueryResult()	{ m_sql.ResetQueryFinished(); }
 
-		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/src/desc.cpp b/src/game/src/desc.cpp
index b49ad94..5dabf35 100644
--- a/src/game/src/desc.cpp
+++ b/src/game/src/desc.cpp
@@ -316,12 +316,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;
@@ -367,7 +367,7 @@ void DESC::SetPhase(int _phase)
 	switch (m_iPhase)
 	{
 		case PHASE_CLOSE:
-			// ޽ ijʹ Ǹ鼭 
+			// 메신저가 캐릭터단위가 되면서 삭제
 			//MessengerManager::instance().Logout(GetAccountTable().login);
 			m_pInputProcessor = &m_inputClose;
 			break;
@@ -377,8 +377,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:
 			m_pInputProcessor = &m_inputLogin;
@@ -550,7 +550,7 @@ void DESC::DisconnectOfSameLogin()
 		if (m_pkDisconnectEvent)
 			return;
 
-		GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ ǻͿ α Ͽ   մϴ."));
+		GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Someone has logged into your account. You will be disconnected from the server."));
 		DelayedDisconnect(5);
 	}
 	else
diff --git a/src/game/src/desc.h b/src/game/src/desc.h
index b8379e6..612538c 100644
--- a/src/game/src/desc.h
+++ b/src/game/src/desc.h
@@ -47,14 +47,14 @@ class CLoginKey
 };
 
 
-// sequence  ã Ÿ
+// sequence 버그 찾기용 데이타
 struct seq_t
 {
 	BYTE	hdr;
 	BYTE	seq;
 };
 typedef std::vector	seq_vector_t;
-// sequence  ã Ÿ
+// sequence 버그 찾기용 데이타
 
 extern void DescReadHandler(bufferevent *bev, void *ctx);
 extern void DescWriteHandler(bufferevent *bev, void *ctx);
@@ -109,7 +109,7 @@ class DESC
 
 		bool			IsPhase(int phase) const	{ return m_iPhase == phase ? true : false; }
 
-		// ڵ彦ũ (ð ȭ)
+		// 핸드쉐이크 (시간 동기화)
 		void			StartHandshake(DWORD _dw);
 		void			SendHandshake(DWORD dwCurTime, LONG lNewDelta);
 		bool			HandshakeProcess(DWORD dwTime, LONG lDelta, bool bInfiniteRetry=false);
@@ -118,7 +118,7 @@ class DESC
 		DWORD			GetHandshake() const	{ return m_dwHandshake; }
 		DWORD			GetClientTime();
 
-		// 
+		// 제국
 		BYTE			GetEmpire();
 
 		// for p2p
@@ -127,7 +127,7 @@ class DESC
 		void			DisconnectOfSameLogin();
 
 		void			SetAdminMode();
-		bool			IsAdminMode();		// Handshake    ֳ?
+		bool			IsAdminMode();		// Handshake 에서 어드민 명령을 쓸수있나?
 
 		void			SetPong(bool b);
 		bool			IsPong();
@@ -197,7 +197,7 @@ class DESC
 		WORD			m_wP2PPort;
 		BYTE			m_bP2PChannel;
 
-		bool			m_bAdminMode; // Handshake    ֳ?
+		bool			m_bAdminMode; // Handshake 에서 어드민 명령을 쓸수있나?
 		bool			m_bPong;
 
 		int			m_iCurrentSequence;
@@ -248,7 +248,7 @@ class DESC
 
 		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/src/desc_client.cpp b/src/game/src/desc_client.cpp
index 77eb3a7..cbb76be 100644
--- a/src/game/src/desc_client.cpp
+++ b/src/game/src/desc_client.cpp
@@ -96,7 +96,7 @@ bool CLIENT_DESC::Connect(int iPhaseWhenSucceed)
 	if (iPhaseWhenSucceed != 0)
 		m_iPhaseWhenSucceed = iPhaseWhenSucceed;
 
-	if (get_global_time() - m_LastTryToConnectTime < 3)	// 3
+	if (get_global_time() - m_LastTryToConnectTime < 3)	// 3초
 		return false;
 
 	m_LastTryToConnectTime = get_global_time();
@@ -219,7 +219,7 @@ void CLIENT_DESC::SetPhase(int iPhase)
 
 					SPDLOG_DEBUG("DB_SETUP current user {} size {}", p.dwLoginCount, buf.size());
 
-					// Ƽ ó  ְ .
+					// 파티를 처리할 수 있게 됨.
 					CPartyManager::instance().EnablePCParty();
 					//CPartyManager::instance().SendPartyToDB();
 				}
@@ -300,7 +300,7 @@ void CLIENT_DESC::Update(DWORD t)
 void CLIENT_DESC::UpdateChannelStatus(DWORD t, bool fForce)
 {
 	enum {
-		CHANNELSTATUS_UPDATE_PERIOD = 5*60*1000,	// 5и
+		CHANNELSTATUS_UPDATE_PERIOD = 5*60*1000,	// 5분마다
 	};
 	if (fForce || m_tLastChannelStatusUpdateTime+CHANNELSTATUS_UPDATE_PERIOD < t) {
 		int iTotal; 
diff --git a/src/game/src/desc_manager.cpp b/src/game/src/desc_manager.cpp
index 30d11bb..ff91c05 100644
--- a/src/game/src/desc_manager.cpp
+++ b/src/game/src/desc_manager.cpp
@@ -53,7 +53,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;
 }
@@ -146,7 +146,7 @@ RETRY:
 
 LPDESC DESC_MANAGER::AcceptDesc(evconnlistener* listener, evutil_socket_t fd, sockaddr* address)
 {
-	if (!IsValidIP(admin_ip, GetSocketHost(address).c_str())) // admin_ip  ϵ IP  ִ   ֹ ʴ´.
+	if (!IsValidIP(admin_ip, GetSocketHost(address).c_str())) // admin_ip 에 등록된 IP 는 최대 사용자 수에 구애받지 않는다.
 	{
 		if (m_iSocketsConnected >= MAX_ALLOW_USER)
 		{
diff --git a/src/game/src/dragon_soul_table.cpp b/src/game/src/dragon_soul_table.cpp
index e9909e3..2fd7510 100644
--- a/src/game/src/dragon_soul_table.cpp
+++ b/src/game/src/dragon_soul_table.cpp
@@ -172,7 +172,7 @@ bool DragonSoulTable::ReadBasicApplys()
 		TVecApplys vecApplys;
 		int n = pChild->GetRowCount();
 		
-		// BasicApply Group Key 1 .
+		// BasicApply Group은 Key가 1부터 시작함.
 		for (int j = 1; j <= n; j++)
 		{
 			std::stringstream ss;
@@ -655,7 +655,7 @@ bool DragonSoulTable::GetWeight(BYTE ds_type, BYTE grade_idx, BYTE step_index, B
 			return true;
 		}
 	}
-	// default group 캽.
+	// default group을 살펴봄.
 	pDragonSoulGroup = m_pWeightTableNode->GetChildNode("default");
 	if (NULL != pDragonSoulGroup)
 	{
diff --git a/src/game/src/dungeon.cpp b/src/game/src/dungeon.cpp
index 00e2a79..c98c806 100644
--- a/src/game/src/dungeon.cpp
+++ b/src/game/src/dungeon.cpp
@@ -1122,7 +1122,7 @@ struct FExitDungeonToStartPosition
 			{
 				PIXEL_POSITION posWarp;
 
-				//   ε ִ  ƴ϶ ϴ  ε ִ´.
+				// 현재 맵 인덱스를 넣는 것이 아니라 시작하는 맵 인덱스를 넣는다.
 				if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(g_start_map[ch->GetEmpire()], ch->GetEmpire(), posWarp))
 					ch->WarpSet(posWarp.x, posWarp.y);
 				else
@@ -1272,7 +1272,7 @@ void CDungeon::JumpToEliminateLocation()
 	}
 	else
 	{
-		// Ϲ  
+		// 일반 맵으로 워프
 		LPSECTREE_MAP pMap = SECTREE_MANAGER::instance().GetMap(m_lMapIndex);
 
 		if (!pMap)
diff --git a/src/game/src/dungeon.h b/src/game/src/dungeon.h
index 4743c6a..6bf90cd 100644
--- a/src/game/src/dungeon.h
+++ b/src/game/src/dungeon.h
@@ -38,8 +38,8 @@ class CDungeon
 
 	void	IncMonster() { m_iMonsterCount++; SPDLOG_DEBUG("MonsterCount {}", 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 (int 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;
 	int		m_lWarpMapIndex;
 	int		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/src/empire_text_convert.cpp b/src/game/src/empire_text_convert.cpp
index e629fe8..fd7178c 100644
--- a/src/game/src/empire_text_convert.cpp
+++ b/src/game/src/empire_text_convert.cpp
@@ -56,7 +56,7 @@ void ConvertEmpireText(DWORD dwEmpireID, char* szText, size_t len, int iPct)
 			{
 				if (g_iUseLocale)
 				{
-					static char s_cChinaTable[][3] = {"","","","","" };
+					static char s_cChinaTable[][3] = {"\xA1\xF2","\xA3\xA3","\xA3\xA4","\xA1\xF9","\xA1\xF0" };
 					int n = Random::get(0, 4);
 					pbText[0] = s_cChinaTable[n][0];
 					pbText[1] = s_cChinaTable[n][1];
diff --git a/src/game/src/entity.cpp b/src/game/src/entity.cpp
index 75af760..0e874e0 100644
--- a/src/game/src/entity.cpp
+++ b/src/game/src/entity.cpp
@@ -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/src/entity.h b/src/game/src/entity.h
index a314f1e..eca7644 100644
--- a/src/game/src/entity.h
+++ b/src/game/src/entity.h
@@ -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/src/entity_view.cpp b/src/game/src/entity_view.cpp
index 2e3a0fa..d366b57 100644
--- a/src/game/src/entity_view.cpp
+++ b/src/game/src/entity_view.cpp
@@ -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/src/event.cpp b/src/game/src/event.cpp
index 880b4d5..9b08dd2 100644
--- a/src/game/src/event.cpp
+++ b/src/game/src/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, int 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, int 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, int when)
 	}
 }
 
-/* ̺Ʈ  ð  ̺Ʈ Ѵ */
+/* 이벤트를 실행할 시간에 도달한 이벤트들을 실행한다 */
 int event_process(int pulse)
 {
 	int	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;
 
@@ -155,7 +155,7 @@ int event_process(int pulse)
 	return num_events;
 }
 
-/* ̺Ʈ ð pulse   ش */
+/* 이벤트가 수행시간을 pulse 단위로 리턴해 준다 */
 int event_processing_time(LPEVENT event)
 {
 	int start_time;
@@ -167,7 +167,7 @@ int event_processing_time(LPEVENT event)
 	return (thecore_heart->pulse - start_time);
 }
 
-/* ̺Ʈ  ð pulse   ش */
+/* 이벤트가 남은 시간을 pulse 단위로 리턴해 준다 */
 int event_time(LPEVENT event)
 {
 	int when;
@@ -179,7 +179,7 @@ int event_time(LPEVENT event)
 	return (when - thecore_heart->pulse);
 }
 
-/*  ̺Ʈ Ѵ */
+/* 모든 이벤트를 제거한다 */
 void event_destroy(void)
 {
 	TQueueElement * pElem;
diff --git a/src/game/src/event.h b/src/game/src/event.h
index ee1abcf..32b8025 100644
--- a/src/game/src/event.h
+++ b/src/game/src/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, int when);
-extern void		event_cancel(LPEVENT * event);			// ̺Ʈ 
-extern int		event_processing_time(LPEVENT event);	//  ð 
-extern int		event_time(LPEVENT event);			//  ð 
-extern void		event_reset_time(LPEVENT event, int when);	//  ð  
+extern void		event_cancel(LPEVENT * event);			// 이벤트 취소
+extern int		event_processing_time(LPEVENT event);	// 수행 시간 리턴
+extern int		event_time(LPEVENT event);			// 남은 시간 리턴
+extern void		event_reset_time(LPEVENT event, int when);	// 실행 시간 재 설정
 extern void		event_set_verbose(int level);
 
 extern event_info_data* FindEventInfo(DWORD dwID);
diff --git a/src/game/src/event_queue.cpp b/src/game/src/event_queue.cpp
index e0f88eb..2f7a391 100644
--- a/src/game/src/event_queue.cpp
+++ b/src/game/src/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/src/exchange.cpp b/src/game/src/exchange.cpp
index f0d1e18..9095d41 100644
--- a/src/game/src/exchange.cpp
+++ b/src/game/src/exchange.cpp
@@ -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("You cannot trade while observing."));
 		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("If the window is open, you cannot trade with others." ) );
 		return false;
 	}
 
 	if ( victim->IsOpenSafebox() || victim->GetShopOwner() || victim->GetMyShop() || victim->IsCubeOpen() )
 	{
-		ChatPacket( CHAT_TYPE_INFO, LC_TEXT(" ٸ ŷ̶ ŷ Ҽ ϴ." ) );
+		ChatPacket( CHAT_TYPE_INFO, LC_TEXT("The other person is currently busy so you cannot trade right now." ) );
 		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("The other person has cancelled the trade."));
 		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("You cannot trade this item."));
 		return false;
 	}
 
@@ -163,7 +163,7 @@ bool CExchange::AddItem(TItemPos item_pos, BYTE display_pos)
 		return false;
 	}
 
-	// ̹ ȯâ ߰ ΰ?
+	// 이미 교환창에 추가된 아이템인가?
 	if (item->IsExchanging())
 	{
 		SPDLOG_DEBUG("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(int 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(int 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)
@@ -411,7 +411,7 @@ bool CExchange::CheckSpace()
 	return true;
 }
 
-// ȯ  (۰    ű)
+// 교환 끝 (아이템과 돈 등을 실제로 옮긴다)
 bool CExchange::Done()
 {
 	int		empty_pos, i;
@@ -487,7 +487,7 @@ bool CExchange::Done()
 	return true;
 }
 
-// ȯ 
+// 교환을 동의
 bool CExchange::Accept(bool bAccept)
 {
 	if (m_bAccept == bAccept)
@@ -495,7 +495,7 @@ bool CExchange::Accept(bool bAccept)
 
 	m_bAccept = bAccept;
 
-	//    Ƿ ȯ 
+	// 둘 다 동의 했으므로 교환 성립
 	if (m_bAccept && GetCompany()->m_bAccept)
 	{
 		int	iItemCount;
@@ -507,36 +507,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("Not enough Yang or not enough space in the inventory."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The other person does not have enough Yang or does not have any space left in their inventory."));
 			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("The other person has no space left in their inventory."));
+			victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There isn't enough space in your inventory."));
 			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("Not enough Yang or not enough space in the inventory."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The other person does not have enough Yang or does not have any space left in their inventory."));
 			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("The other person has no space left in their inventory."));
+			GetOwner()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There isn't enough space in your inventory."));
 			goto EXCHANGE_END;
 		}
 
@@ -550,17 +550,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("The trade with %s has been successful."), victim->GetName());
+				victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The trade with %s has been successful."), GetOwner()->GetName());
 				// END_OF_INTERNATIONAL_VERSION
 			}
 		}
@@ -571,14 +571,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/src/exchange.h b/src/game/src/exchange.h
index 9f6e02b..bf9c13c 100644
--- a/src/game/src/exchange.h
+++ b/src/game/src/exchange.h
@@ -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/src/file_loader.cpp b/src/game/src/file_loader.cpp
index 0e51cda..17fdde0 100644
--- a/src/game/src/file_loader.cpp
+++ b/src/game/src/file_loader.cpp
@@ -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/src/fishing.cpp b/src/game/src/fishing.cpp
index 4ae91b1..da7dd92 100644
--- a/src/game/src/fishing.cpp
+++ b/src/game/src/fishing.cpp
@@ -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,           }, 
+	   { "\xB2\xCE",		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,           }, 
+	   { "\xB1\xDD\xB9\xDD\xC1\xF6",	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}, 
+	   { "\xC7\xC7\xB6\xF3\xB9\xCC",	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},
+	   { "\xBA\xD8\xBE\xEE",	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},
+	   { "\xBD\xEE\xB0\xA1\xB8\xAE",	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},
+	   { "\xBF\xF9\xC3\xB4\xBA\xD8\xBE\xEE",	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},
+	   { "\xC0\xD7\xBE\xEE",	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},
+	   { "\xBF\xAC\xBE\xEE",	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},
+	   { "\xC7\xE2\xBE\xEE",	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},
+	   { "\xBC\xDB\xBE\xEE",	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},
+	   { "\xB9\xCE\xB9\xB0\xC0\xE5\xBE\xEE",	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},
+	   { "\xB9\xAB\xC1\xF6\xB0\xB3\xBC\xDB\xBE\xEE",	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},
+	   { "\xB0\xAD\xBC\xDB\xBE\xEE",	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},
+	   { "\xB7\xAF\xB5\xE5",	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},
+	   { "\xC6\xDB\xC4\xA1",	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},
+	   { "\xC5\xD9\xC4\xA1",	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},
+	   { "\xB8\xDE\xB1\xE2",	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},
+	   { "\xB9\xCC\xB2\xD9\xB6\xF3\xC1\xF6",	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},
+	   { "\xB9\xE9\xB7\xC3",	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},
+	   { "\xC0\xBA\xBE\xEE",	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},
+	   { "\xBA\xF9\xBE\xEE",	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},
+	   { "\xBD\xAC\xB8\xAE",	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},
+	   { "\xBA\xF1\xB4\xC3\xC0\xD7\xBE\xEE",	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},
+	   { "\xC8\xB2\xB1\xDD\xBA\xD8\xBE\xEE",	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,           },
+	   { "\xC5\xBB\xBB\xF6\xBE\xE0",     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,           },
+	   { "\xBF\xB0\xBB\xF6\xBE\xE0(\xC8\xF2\xBB\xF6)",  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,           },
+	   { "\xBF\xB0\xBB\xF6\xBE\xE0(\xB1\xDD\xBB\xF6)",  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,           },
+	   { "\xBF\xB0\xBB\xF6\xBE\xE0(\xBB\xA1\xB0\xA3\xBB\xF6)",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,           },
+	   { "\xBF\xB0\xBB\xF6\xBE\xE0(\xB0\xA5\xBB\xF6)",  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,           },
+	   { "\xBF\xB0\xBB\xF6\xBE\xE0(\xB0\xCB\xC0\xBA\xBB\xF6)",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,           },
+	   { "\xC0\xBA\xB5\xD0\xC0\xDA\xC0\xC7 \xB8\xC1\xC5\xE4", 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,           },
+	   { "\xC7\xE0\xBF\xEE\xC0\xC7 \xB9\xDD\xC1\xF6",   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,           },
+	   { "\xBC\xB1\xBF\xD5\xC0\xC7 \xC1\xF5\xC7\xA5",   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,           },
+	   { "\xBC\xB1\xBF\xD5\xC0\xC7 \xC0\xE5\xB0\xA9",   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,           },
+	   { "\xB1\xDD\xB5\xA2\xBE\xEE\xB8\xAE",	   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, } },
+	{ "\xC0\xBA\xBF\xAD\xBC\xE8",	   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, } },
+	{ "\xB1\xDD\xBF\xAD\xBC\xE8",	   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)
 		{
 			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) && Random::get(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("Your fishing points have increased! (%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("You have reached the maximum number of fishing points."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Go to the Fisherman and get your Fishing Pole upgraded!"));
 			}
 		}
 	}
-	// ̳ 
+	// 미끼를 뺀다
 	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)	// 고기가 걸린 상태면..
 	{
 		int ms = (int) ((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("You lost your bait to the fish."));
 				{
 					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("You have caught a fish! (%s)"), fish_info[info->fish_id].name);
 				if (item_vnum)
 				{
 					FishingSuccess(ch);
@@ -647,7 +647,7 @@ 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("The length of the captured fish is %.2fcm."), item->GetSocket(0)/100.f);
 						}
 					}
 
@@ -691,7 +691,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("You lost your bait to the fish."));
 		FishingFail(ch);
 	}
 	else
@@ -729,16 +729,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("You have caught %d of %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;
@@ -749,12 +749,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
@@ -768,7 +768,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("The fish vanished in the depths of the water."));
 				break;
 
 			case USED_SHELLFISH:	// 1
@@ -777,12 +777,12 @@ void UseFish(LPCHARACTER ch, LPITEM item)
 					if ( Random::get(0, 2) != 2 ) return;
 				}
 
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ  Խϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a Clam inside the Fish."));
 				ch->AutoGiveItem(SHELLFISH_VNUM);
 				break;
 
 			case USED_EARTHWARM:	// 4
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" ӿ ̰ Խϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("There is a Worm inside the Fish."));
 				ch->AutoGiveItem(EARTHWORM_VNUM);
 				break;
 
@@ -813,7 +813,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("You are roasting %s over the fire."), item->GetName());
 	item->SetCount(0);
 	ch->AutoGiveItem(fish_info[idx].grill_vnum, count);
 }
@@ -858,14 +858,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
@@ -876,14 +876,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/src/gm.cpp b/src/game/src/gm.cpp
index dea53b2..68d0499 100644
--- a/src/game/src/gm.cpp
+++ b/src/game/src/gm.cpp
@@ -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/src/group_text_parse_tree.cpp b/src/game/src/group_text_parse_tree.cpp
index c55da8d..36c9a52 100644
--- a/src/game/src/group_text_parse_tree.cpp
+++ b/src/game/src/group_text_parse_tree.cpp
@@ -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/src/group_text_parse_tree.h b/src/game/src/group_text_parse_tree.h
index f12413b..206a8be 100644
--- a/src/game/src/group_text_parse_tree.h
+++ b/src/game/src/group_text_parse_tree.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/src/guild.cpp b/src/game/src/guild.cpp
index a0eed4a..854dca5 100644
--- a/src/game/src/guild.cpp
+++ b/src/game/src/guild.cpp
@@ -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("Leader"), 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("Member"), 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
 
@@ -560,7 +560,7 @@ void CGuild::LoadGuildMemberData(SQLMsg* pmsg)
 void CGuild::LoadGuildGradeData(SQLMsg* pmsg)
 {
 	/*
-    // 15 ƴ ɼ 
+    // 15개 아닐 가능성 존재
 	if (pmsg->Get()->iNumRows != 15)
 	{
 		SPDLOG_ERROR("Query failed: getting guild grade data. GuildID({})", GetID());
@@ -698,7 +698,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));
@@ -920,7 +920,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("[Guild] Provided Experience is larger then left Experience."));
 		return false;
 	}
 
@@ -1031,7 +1031,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("[Guild] This message cannot be deleted."));
 	else
 		RefreshCommentForce(ch->GetPlayerID());
 
@@ -1084,7 +1084,7 @@ void CGuild::RefreshCommentForce(DWORD player_id)
         d->RawPacket(szName, sizeof(szName));
 
 		if (i == pmsg->Get()->uiNumRows - 1)
-			d->Packet(szContent, sizeof(szContent)); //  ̸ 
+			d->Packet(szContent, sizeof(szContent)); // 마지막 줄이면 보내기
 		else
             d->RawPacket(szContent, sizeof(szContent));
 	}
@@ -1263,7 +1263,7 @@ void CGuild::UseSkill(DWORD dwVnum, LPCHARACTER ch, DWORD pid)
 
 	if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
 	{
-		// ̹ ɷ Ƿ  .
+		// 이미 걸려 있으므로 사용하지 않음.
 		if (ch->FindAffect(pkSk->dwVnum))
 			return;
 
@@ -1282,7 +1282,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("[Guild] Not enough Dragon Ghost. (%d, %d)"), GetSP(), iNeededSP);
 		return;
 	}
 
@@ -1291,7 +1291,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("[Guild] You cannot use the guild skills yet."));
 		return;
 	}
 
@@ -1310,12 +1310,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("[Guild] %d skill used (%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());
@@ -1323,15 +1323,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("[Guild] This player is on channel %d. (Current channel: %d)"), pcci->bChannel, g_bChannel);
 					}
 					else
 					{
@@ -1344,7 +1344,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("[Guild] This player is not online."));
 			}
 			break;
 
@@ -1358,13 +1358,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("[Guild] Only guild leaders can use guild skills."));
 				  return;
 				  }*/
 
 				if (!UnderAnyWar())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ų  ߿   ֽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This guild skill can only be used during war."));
 					return;
 				}
 
@@ -1731,7 +1731,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("[Guild] %u Dragon ghost points have been restored."), iSP);
 	}
 	return true;
 }
@@ -1805,7 +1805,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("[Guild] Please try again later."));
 		return;
 	}
 
@@ -1832,19 +1832,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("[Guild] Please try again later."));
 		return;
 	}
 
 	if (ch->GetPlayerID() != GetMasterPID())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ݰ 常   ֽϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] Only the guild leader can withdraw Yang."));
 		return;
 	}
 
 	if (m_data.gold < iGold)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ִ  մϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You do not have enough Yang."));
 		return;
 	}
 
@@ -1897,11 +1897,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 )
@@ -1911,8 +1911,8 @@ EVENTINFO(TInviteGuildEventInfo)
 };
 
 /**
- *  ʴ event callback Լ.
- * event  ߵϸ ʴ  óѴ.
+ * 길드 초대 event callback 함수.
+ * event 가 발동하면 초대 거절로 처리한다.
  */
 EVENTFUNC( GuildInviteEvent )
 {
@@ -1939,7 +1939,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("[Guild] The other person is unable to accept the invitation."));
 	    return;
 	}
 
@@ -1949,17 +1949,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("[Guild] The player has declined the guild invitation.") );
 		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("[Guild] You do not have the authority to invite someone to join the guild.") );
 		return;
 	} 
 	else if ( pchInvitee->GetEmpire() != pchInviter->GetEmpire() ) 
 	{
-		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("<> ٸ   忡 ʴ  ϴ.") );
+		pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("[Guild] You cannot invite players from another kingdom into the guild.") );
 		return;
 	}
 
@@ -1969,18 +1969,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("[Guild] This player can be invited again after %d day(s)."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_withdraw_delay" ) );
 						return;
 		case GERR_COMMISSIONPENALTY:
 						pchInviter->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> 带 ػ  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("[Guild] After the rearrangement you can invite members again after %d days."), 
 								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("[Guild] This person is already a member of another Guild.")); return;
+		case GERR_GUILDISFULL:	pchInviter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The maximum guild capacity has been reached.")); return;
+		case GERR_GUILD_IS_IN_WAR : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("[Guild] Your guild is currently at war.") ); return;
+		case GERR_INVITE_LIMIT : pchInviter->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("[Guild] You are currently closed to new signups.") ); return;
 
 		default: SPDLOG_ERROR("ignore guild join error({})", (int) errcode ); return;
 	}
@@ -1989,7 +1989,7 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )
 		return;
 
 	//
-	// ̺Ʈ 
+	// 이벤트 생성
 	// 
 	TInviteGuildEventInfo* pInfo = AllocEventInfo();
 	pInfo->dwInviteePID = pchInvitee->GetPlayerID();
@@ -1998,7 +1998,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();
@@ -2034,18 +2034,18 @@ void CGuild::InviteAccept( LPCHARACTER pchInvitee )
 		case GERR_NONE: break;
 		case GERR_WITHDRAWPENALTY:
 						pchInvitee->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> Ż  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("[Guild] This player can be invited again after %d day(s)."), 
 								quest::CQuestManager::instance().GetEventFlag( "guild_withdraw_delay" ) );
 						return;
 		case GERR_COMMISSIONPENALTY:
 						pchInvitee->ChatPacket( CHAT_TYPE_INFO, 
-								LC_TEXT("<> 带 ػ  %d    忡 ʴ  ϴ."), 
+								LC_TEXT("[Guild] After the rearrangement you can invite members again after %d days."), 
 								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("[Guild] This person is already a member of another Guild.")); return;
+		case GERR_GUILDISFULL:	pchInvitee->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The maximum guild capacity has been reached.")); return;
+		case GERR_GUILD_IS_IN_WAR : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("[Guild] Your guild is currently at war.") ); return;
+		case GERR_INVITE_LIMIT : pchInvitee->ChatPacket( CHAT_TYPE_INFO, LC_TEXT("[Guild] You are currently closed to new signups.") ); return;
 
 		default: SPDLOG_ERROR("ignore guild join error({})", (int) errcode); return;
 	}
diff --git a/src/game/src/guild.h b/src/game/src/guild.h
index b9e0aa9..7f17d81 100644
--- a/src/game/src/guild.h
+++ b/src/game/src/guild.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/src/guild_manager.cpp b/src/game/src/guild_manager.cpp
index 5768cd8..8145d09 100644
--- a/src/game/src/guild_manager.cpp
+++ b/src/game/src/guild_manager.cpp
@@ -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("[Guild] This guild name is invalid."));
 		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("[Guild] This guild name is already taken."));
 			return 0;
 		}
 	}
 	else
 	{
-		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> 带   ϴ."));
+		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You cannot found a guild."));
 		return 0;
 	}
 
@@ -504,7 +504,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.
@@ -541,7 +541,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("The guild %s has declared war on %s!"), TouchGuild(guild_id1)->GetName(), TouchGuild(guild_id2)->GetName());
 			SendNotice(buf);
 		}
 	}
@@ -555,7 +555,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("[Guild] %s has refused the Guild war."), g1->GetName());
 	}
 
 	if ( g1 != NULL )
@@ -579,7 +579,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("The guild war between %s and %s will start in a few seconds!"), g1->GetName(), g2->GetName());
 		SendNotice(buf);
 	}
 }
@@ -627,7 +627,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("The guild war between %s and %s has begun!"), g1->GetName(), g2->GetName());
 	SendNotice(buf);
 
 	if (guild_id1 > guild_id2)
@@ -645,17 +645,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("The guild war between %s and %s has ended in a draw."), 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 has won the guild war against %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 has won the guild war against %s."), g2->GetName(), g1->GetName());
 			}
 		}
 
@@ -739,7 +739,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("[Guild] The guild war has been cancelled."));
 	}
 
 	if (g2)
@@ -747,13 +747,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("[Guild] The guild war has been cancelled."));
 	}
 
 	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("The guild war between %s and %s has been cancelled."), g1->GetName(), g2->GetName());
 		SendNotice(buf);
 	}
 }
@@ -952,7 +952,7 @@ void CGuildManager::ChangeMaster(DWORD dwGID)
 		iter->second->Load(dwGID);
 	}
 
-	// Ʈ  ֱ
+	// 업데이트된 정보 보내주기
 	DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::SendGuildDataUpdateToAllMember), iter->second), 
 			"SELECT 1");
 
diff --git a/src/game/src/guild_war.cpp b/src/game/src/guild_war.cpp
index f8b5486..a7ffcf3 100644
--- a/src/game/src/guild_war.cpp
+++ b/src/game/src/guild_war.cpp
@@ -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("[Guild] There are no experience points for hunting during a guild war."));
 
 		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("[Guild] The enemy's guild leader is offline."));
 			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("[Guild] The enemy's guild leader is offline."));
 					return;
 				}
 
@@ -379,7 +379,7 @@ void CGuild::RequestDeclareWar(DWORD dwOppGID, BYTE type)
 			break;
 		case GUILD_WAR_SEND_DECLARE:
 			{
-				NotifyGuildMaster(LC_TEXT("̹   Դϴ."));
+				NotifyGuildMaster(LC_TEXT("[Guild] This guild is already participating in a war."));
 			}
 			break;
 		default:
@@ -441,14 +441,14 @@ void CGuild::StartWar(DWORD dwOppGID)
 
 bool CGuild::WaitStartWar(DWORD dwOppGID)
 {
-	//ڱڽ̸ 
+	//자기자신이면 
 	if (dwOppGID == GetID())
 	{
 		SPDLOG_ERROR("GuildWar.WaitStartWar.DECLARE_WAR_SELF id({} -> {})", 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)
 	{
 		SPDLOG_DEBUG("GuildWar.WaitStartWar.FIELD_TYPE id({} -> {})", GetID(), dwOppGID);
 		return true;
 	}		
 
-	//    Ȯ
+	// 전쟁 서버 인지 확인
 	SPDLOG_DEBUG("GuildWar.WaitStartWar.CheckWarServer id({} -> {}), type({}), map({})",
 			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)
 
 	SPDLOG_DEBUG("GuildWar.WaitStartWar.CreateMap id({} vs {}), type({}), map({}) -> map_inst({})", 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("The war is already over."));
 		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("[Guild] The guild has reached %d points."), point);
 		for (itertype(m_memberOnline) it = m_memberOnline.begin(); it!=m_memberOnline.end();++it)
 		{
 			LPCHARACTER ch = (*it);
diff --git a/src/game/src/horse_rider.cpp b/src/game/src/horse_rider.cpp
index aa3a6c5..3eabab6 100644
--- a/src/game/src/horse_rider.cpp
+++ b/src/game/src/horse_rider.cpp
@@ -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/src/horse_rider.h b/src/game/src/horse_rider.h
index da29bb7..5f0f67f 100644
--- a/src/game/src/horse_rider.h
+++ b/src/game/src/horse_rider.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/src/input.cpp b/src/game/src/input.cpp
index e15e821..9fbf462 100644
--- a/src/game/src/input.cpp
+++ b/src/game/src/input.cpp
@@ -72,7 +72,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))
 		{
@@ -249,7 +249,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)
@@ -257,7 +257,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;
 
 		if (*(c_pSep - 1) == '\r')
@@ -356,7 +356,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()));
@@ -371,7 +371,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);
@@ -514,7 +514,7 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 					std::string strPrivEmpire;
 					is >> strPrivEmpire >> empire >> type >> value >> duration;
 
-					// ִġ 10
+					// 최대치 10배
 					value = std::clamp(value, 0, 1000);
 					stResult = "PRIV_EMPIRE FAIL";
 
@@ -529,7 +529,7 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 						{
 							stResult = "PRIV_EMPIRE SUCCEED";
 
-							// ð  
+							// 시간 단위로 변경
 							duration = duration * (60 * 60);
 
 							SPDLOG_DEBUG("_give_empire_privileage(empire={}, type={}, value={}, duration={}) by web",
@@ -550,13 +550,13 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 	{
 		if (!guild_mark_server)
 		{
-			// ! - ũ  ƴѵ ũ ûϷ?
+			// 끊어버려! - 마크 서버가 아닌데 마크를 요청하려고?
 			SPDLOG_ERROR("Guild Mark login requested but i'm not a mark server!");
 			d->SetPhase(PHASE_CLOSE);
 			return 0;
 		}
 
-		//   --;
+		// 무조건 인증 --;
 		SPDLOG_DEBUG("MARK_SERVER: Login");
 		d->SetPhase(PHASE_LOGIN);
 		return 0;
diff --git a/src/game/src/input.h b/src/game/src/input.h
index 38a7608..8f6a237 100644
--- a/src/game/src/input.h
+++ b/src/game/src/input.h
@@ -177,7 +177,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);
@@ -264,10 +264,10 @@ protected:
 	void		UpdateMonarchInfo(TMonarchInfo* 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
@@ -277,7 +277,7 @@ protected:
 	//END_RELOAD_ADMIN
 
 	void		DetailLog(const TPacketNeedLoginLogInfo* info);
-	//    ׽Ʈ
+	// 독일 선물 기능 테스트
 	void		ItemAwardInformer(TPacketItemAwardInfromer* data);
 
 	void		RespondChannelStatus(LPDESC desc, const char* pcData);
diff --git a/src/game/src/input_auth.cpp b/src/game/src/input_auth.cpp
index aa7b5b7..31f7509 100644
--- a/src/game/src/input_auth.cpp
+++ b/src/game/src/input_auth.cpp
@@ -23,11 +23,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)
@@ -111,7 +111,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));
 
diff --git a/src/game/src/input_db.cpp b/src/game/src/input_db.cpp
index b56184d..70e4e33 100644
--- a/src/game/src/input_db.cpp
+++ b/src/game/src/input_db.cpp
@@ -133,7 +133,7 @@ void CInputDB::LoginSuccess(DWORD dwHandle, const char *data)
 		return;
 	}
 
-	if (strcmp(pTab->status, "OK")) // OK ƴϸ
+	if (strcmp(pTab->status, "OK")) // OK가 아니면
 	{
 		SPDLOG_DEBUG("CInputDB::LoginSuccess - status[{}] is not OK [{}]", pTab->status, pTab->login);
 
@@ -156,7 +156,7 @@ void CInputDB::LoginSuccess(DWORD dwHandle, const char *data)
 
 	d->BindAccountTable(pTab);
 
-	if (!bFound) // ijͰ    .. -_-
+	if (!bFound) // 캐릭터가 없으면 랜덤한 제국으로 보낸다.. -_-
 	{
 		TPacketGCEmpire pe;
 		pe.bHeader = HEADER_GC_EMPIRE;
@@ -229,7 +229,7 @@ void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data)
 
 	d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
 
-	// ⺻  ȯθ 
+	// 기본 무기와 귀환부를 지급
 	TPlayerItem t;
 	memset(&t, 0, sizeof(t));
 
@@ -239,10 +239,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
 		{
@@ -345,7 +345,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);
@@ -359,11 +359,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()))
 	{
@@ -472,11 +472,11 @@ void CInputDB::Boot(const char* data)
 {
 	signal_timer_disable();
 
-	// Ŷ  üũ
+	// 패킷 사이즈 체크
 	DWORD dwPacketSize = decode_4bytes(data);
 	data += 4;
 
-	// Ŷ  üũ
+	// 패킷 버전 체크
 	BYTE bVersion = decode_byte(data);
 	data += 1;
 
@@ -795,7 +795,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 );
@@ -1142,7 +1142,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("You cannot open a Storeroom while another window is open." ) );
 		d->GetCharacter()->CancelSafeboxLoad();
 		return;
 	}
@@ -1155,7 +1155,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)));
@@ -1175,7 +1175,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)
 {
@@ -1203,11 +1203,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("[Storeroom] Storeroom password has been changed."));
 	}
 	else
 	{
-		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>  йȣ ƲȽϴ."));
+		d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] You have entered the wrong password."));
 	}
 }
 
@@ -1235,7 +1235,7 @@ void CInputDB::LoginAlready(LPDESC d, const char * c_pData)
 	if (!d)
 		return;
 
-	// INTERNATIONAL_VERSION ̹ ̸  
+	// INTERNATIONAL_VERSION 이미 접속중이면 접속 끊음
 	{ 
 		TPacketDGLoginAlready * p = (TPacketDGLoginAlready *) c_pData;
 
@@ -1715,11 +1715,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);
@@ -1747,7 +1747,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)
 {
@@ -1947,7 +1947,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)
 {
@@ -2269,7 +2269,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;
@@ -2349,7 +2349,7 @@ void CInputDB::AddMonarchMoney(LPDESC d, const char * data )
 	if (ch)
 	{
 		if (Random::get(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("There is currently %u Yang in the %s treasury"), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
 	}
 }
 	
@@ -2369,7 +2369,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 still has %d Yang available."), EMPIRE_NAME(Empire), CMonarch::instance().GetMoney(Empire));
 	}
 }
 
@@ -2390,14 +2390,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("You do not have enough Yang."));
 	}
 }
 
 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("The emperor of %s has changed to %s."), EMPIRE_NAME(info->bEmpire), info->szName);
 	SendNotice(notice);
 }
 
@@ -2427,7 +2427,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;
@@ -2436,12 +2436,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 호출
 			}
 		}
 	}
@@ -2464,4 +2464,4 @@ void CInputDB::RespondChannelStatus(LPDESC desc, const char* pcData)
 	BYTE bSuccess = 1;
 	desc->Packet(&bSuccess, sizeof(bSuccess));
 	desc->SetChannelStatusRequested(false);
-}
\ No newline at end of file
+}
diff --git a/src/game/src/input_login.cpp b/src/game/src/input_login.cpp
index 1e83a73..f6b9ad3 100644
--- a/src/game/src/input_login.cpp
+++ b/src/game/src/input_login.cpp
@@ -44,22 +44,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("The quota of the Item Drop is at the moment plus %d%%"), item_drop_bonus);
 	}
 	if (gold_drop_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT(" ӷ %d%% ߰ ̺Ʈ Դϴ."), gold_drop_bonus);
+				LC_TEXT("The quota of the Yang Drop is at the moment plus %d%%"), gold_drop_bonus);
 	}
 	if (gold10_drop_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT("ڰ ӷ %d%% ߰ ̺Ʈ Դϴ."), gold10_drop_bonus);
+				LC_TEXT("The drop rate for Yang rain is currently %d%% higher."), gold10_drop_bonus);
 	}
 	if (exp_bonus)
 	{
 		ch->ChatPacket(CHAT_TYPE_NOTICE, 
-				LC_TEXT("ġ %d%% ߰ ȹ ̺Ʈ Դϴ."), exp_bonus);
+				LC_TEXT("The experience bonus is currently an additional %d%%."), exp_bonus);
 	}
 }
 
@@ -67,13 +67,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;
 	}
 
@@ -358,7 +358,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)
@@ -382,7 +382,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;
 
@@ -428,7 +428,7 @@ void CInputLogin::CharacterCreate(LPDESC d, const char * data)
 		return;
 	}
 
-	//    ̸̰ų, ߸ ̸  
+	// 사용할 수 없는 이름이거나, 잘못된 평상복이면 생설 실패
 	if (!check_name(pinfo->name) || pinfo->shape > 1)
 	{
 		if (LC_IsCanada() == true)
@@ -558,7 +558,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);
@@ -566,8 +566,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 호출
 	
 	SPDLOG_DEBUG("ENTERGAME: {} {}x{}x{} {} map_index {}",
 			ch->GetName(), ch->GetX(), ch->GetY(), ch->GetZ(), d->GetHostName(), ch->GetMapIndex());
@@ -577,10 +577,10 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 		ch->EnterHorse();
 	}
 
-	// ÷̽ð ڵ 
+	// 플레이시간 레코딩 시작
 	ch->ResetPlayTime();
 
-	// ڵ  ̺Ʈ ߰
+	// 자동 저장 이벤트 추가
 	ch->StartSaveEvent();
 	ch->StartRecoveryEvent();
 	ch->StartCheckSpeedHackEvent();
@@ -638,7 +638,7 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 				//if (0 != g_stClientVersion.compare(d->GetClientVersion()))
 				if (version > date)
 				{
-					ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+					ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("You do not have the correct client version. Please install the normal patch."));
 					d->DelayedDisconnect(10);
 					LogManager::instance().HackLog("VERSION_CONFLICT", ch);
 
@@ -734,10 +734,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()));
 		}
@@ -752,8 +752,8 @@ void CInputLogin::Entergame(LPDESC d, const char * data)
 		}
 	}
 
-	// ûҳ ȣ
-	if (g_TeenDesc) // RawPacket  
+	// 청소년 보호
+	if (g_TeenDesc) // RawPacket 사용 금지
 	{
 		TPacketGTLogin p;
 
@@ -773,14 +773,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("There may be forced matches on this map."));
+			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("If you do not agree to these terms,"));
+			ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("please return to your home province."));
 		}
 	}
 }
@@ -833,13 +833,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))
 		{
@@ -955,7 +955,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/src/input_main.cpp b/src/game/src/input_main.cpp
index dd137e6..62f48bc 100644
--- a/src/game/src/input_main.cpp
+++ b/src/game/src/input_main.cpp
@@ -45,14 +45,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("Your chat is blocked."));
 		return;
 	}
 
@@ -65,13 +65,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 hours %d minutes %d seconds left on your chat block"), 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 hours %d seconds left on your chat block"), 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 minutes %d seconds left on your chat block"), min, sec);
 	else
-		snprintf(buf, sizeof(buf), LC_TEXT("%d   äñ Դϴ"), sec);
+		snprintf(buf, sizeof(buf), LC_TEXT("%d seconds left on your chat block"), sec);
 
 	ch->ChatPacket(CHAT_TYPE_INFO, buf);
 }
@@ -181,7 +181,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;
@@ -191,7 +191,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;
@@ -229,12 +229,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;
 	
@@ -295,7 +295,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("Your chat is blocked."));
 		return (iExtraLen);
 	}
 
@@ -419,18 +419,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)/*변환확률*/);
 							}
 						}
 
@@ -445,16 +445,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("You can't use a private shop now."), pTable->szLocaleName);
 						else
-							len = snprintf(buf, sizeof(buf), LC_TEXT("%s ʿմϴ."), pTable->szLocaleName);
+							len = snprintf(buf, sizeof(buf), LC_TEXT("%s needed."), pTable->szLocaleName);
 						
 
 						if (len < 0 || len >= (int) sizeof(buf))
 							len = sizeof(buf) - 1;
 
-						++len;  // \0  
+						++len;  // \0 문자 포함
 
 						TPacketGCWhisper pack;
 
@@ -470,7 +470,7 @@ int CInputMain::Whisper(LPCHARACTER ch, const char * data, size_t uiBytes)
 					}
 				}
 
-				//    Ƿ ̸ Ǯش.
+				// 릴래이 상태일 수 있으므로 릴래이를 풀어준다.
 				pkDesc->SetRelay("");
 				return (iExtraLen);
 			}
@@ -487,8 +487,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));
@@ -563,7 +563,7 @@ struct FEmpireChatPacket
 		}
 		else
 		{
-			//  ų ٸ Ź ؾմϴ
+			// 사람마다 스킬레벨이 다르니 매번 해야합니다
 			strlcpy(converted_msg, orig_msg, sizeof(converted_msg));
 
 			ConvertEmpireText(bEmpire, converted_msg + namelen, sizeof(converted_msg) - namelen, 10 + 2 * d->GetCharacter()->GetSkillPower(SKILL_LANGUAGE1 + bEmpire - 1));
@@ -595,17 +595,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)
@@ -673,7 +673,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)
@@ -710,10 +710,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("You can't use a private shop now."), pTable->szLocaleName);
 			else
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ʿմϴ."), pTable->szLocaleName);
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s needed."), pTable->szLocaleName);
 						
 		}
 
@@ -726,7 +726,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("You need a minimum level of %d to be able to call."), SHOUT_LIMIT_LEVEL);
 			return (iExtraLen);
 		}
 
@@ -789,7 +789,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("You are not in this Group."));
 				else
 				{
 					TEMP_BUFFER tbuf;
@@ -806,7 +806,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("You did not join this Guild."));
 				else
 					ch->GetGuild()->Chat(chatbuf);
 			}
@@ -843,7 +843,7 @@ void CInputMain::ItemDrop(LPCHARACTER ch, const char * data)
 	if (!ch)
 		return;
 
-	// ũ 0 ũ ũ   ̴.
+	// 엘크가 0보다 크면 엘크를 버리는 것 이다.
 	if (pinfo->gold > 0)
 		ch->DropGold(pinfo->gold);
 	else
@@ -859,7 +859,7 @@ void CInputMain::ItemDrop2(LPCHARACTER ch, const char * data)
 
 	TPacketCGItemDrop2 * pinfo = (TPacketCGItemDrop2 *) data;
 
-	// ũ 0 ũ ũ   ̴.
+	// 엘크가 0보다 크면 엘크를 버리는 것 이다.
 	
 	if (!ch)
 		return;
@@ -930,7 +930,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("The player has rejected your request to add him to your friend list."));
 					return sizeof(TPacketCGMessengerAddByVID);
 				}
 
@@ -941,11 +941,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("[Friends] You cannot add a GM to your list."));
 					return sizeof(TPacketCGMessengerAddByVID);
 				}
 
-				if (ch->GetDesc() == d) // ڽ ߰  .
+				if (ch->GetDesc() == d) // 자신은 추가할 수 없다.
 					return sizeof(TPacketCGMessengerAddByVID);
 
 				MessengerManager::instance().RequestToAdd(ch, ch_companion);
@@ -963,26 +963,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("[Friends] You cannot add a GM to your list."));
 					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 is not online."), 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("The player has rejected your request to add him to your friend list."));
 					}
 					else
 					{
-						// ޽ ijʹ Ǹ鼭 
+						// 메신저가 캐릭터단위가 되면서 변경
 						MessengerManager::instance().RequestToAdd(ch, tch);
 						//MessengerManager::instance().AddToList(ch->GetName(), tch->GetName());
 					}
@@ -1097,7 +1097,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("After a trade, you have to wait %d seconds before you can open a shop."), g_nPortalLimitTime);
 			return;
 		}
 
@@ -1111,7 +1111,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("After a trade, you have to wait %d seconds before you can open a shop."), g_nPortalLimitTime);
 		return;
 	}
 
@@ -1127,14 +1127,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("You can trade again in %d seconds."), 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));
@@ -1143,7 +1143,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("You can trade again in %d seconds."), g_nPortalLimitTime);
 
 
 						if (test_server)
@@ -1153,7 +1153,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("You have more than 2 Billion Yang. You cannot trade."));
 
 						SPDLOG_ERROR("[OVERFLOG_GOLD] START ({}) id {} name {} ", ch->GetGold(), ch->GetPlayerID(), ch->GetName());
 						return;
@@ -1171,7 +1171,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("You cannot open a private shop while another window is open."));
 						return;
 					}
 
@@ -1203,7 +1203,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("The player has more than 2 Billion Yang. You cannot trade with him."));
 
 					SPDLOG_ERROR("[OVERFLOW_GOLD] ELK_ADD ({}) id {} name {} ",
 							ch->GetExchange()->GetCompany()->GetOwner()->GetGold(),
@@ -1268,7 +1268,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 )
 	{
@@ -1299,17 +1299,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
 		/*SPDLOG_DEBUG("COMBO_TEST_LOG: {} arg:{} interval:{} valid:{} atkspd:{} riding:{}",
@@ -1324,18 +1324,18 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
     SPDLOG_DEBUG("COMBO: {} arg:{} seq:{} delta:{} checkspeedhack:{}",
 			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;
 
 			//SPDLOG_WARN("COMBO_HACK: 2 {} arg:{} interval:{} valid:{} atkspd:{} riding:{}",
@@ -1357,13 +1357,13 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 	{
 		int idx = std::min(2, ch->GetComboIndex());
 
-		if (ch->GetComboSequence() > 5) //  6޺ ̻ .
+		if (ch->GetComboSequence() > 5) // 현재 6콤보 이상은 없다.
 		{
 			HackScalar = 1;
 			ch->SetValidComboInterval(300);
 			SPDLOG_WARN("COMBO_HACK: 5 {} combo_seq:{}", ch->GetName(), ch->GetComboSequence());
 		}
-		// ڰ ּ ޺ ó
+		// 자객 쌍수 콤보 예외처리
 		else if (bArg == 21 &&
 				 idx == 2 &&
 				 ch->GetComboSequence() == 5 &&
@@ -1398,7 +1398,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);
@@ -1411,13 +1411,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;
 
             //SPDLOG_WARN("COMBO_HACK: 6 {} arg:{} interval:{} valid:{} atkspd:{}",
@@ -1440,8 +1440,8 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 				SPDLOG_ERROR("cannot find motion by race {}", 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);
@@ -1458,32 +1458,32 @@ bool CheckComboHack(LPCHARACTER ch, BYTE bArg, DWORD dwTime, bool CheckSpeedHack
 		}
 		else
 		{
-			//  ȵǴ ޺ Դ Ŀ ɼ?
+			// 말이 안되는 콤보가 왔다 해커일 가능성?
 			//if (ch->GetDesc()->DelayedDisconnect(Random::get(2, 9)))
 			//{
 			//	LogManager::instance().HackLog("Hacker", ch);
 			//	SPDLOG_WARN("HACKER: {} arg {}", ch->GetName(), bArg);
 			//}
 
-			//  ڵ ,  Ǫ ߿  ϸ,
-			//   νϴ 찡 ִ.
+			// 위 코드로 인해, 폴리모프를 푸는 중에 공격 하면,
+			// 가끔 핵으로 인식하는 경우가 있다.
 
-			// ڼ ,
-			//  poly 0 ó,
-			// Ŭ󿡼  Ŷ ޱ ,  . <- ,  ¿ .
+			// 자세히 말혀면,
+			// 서버에서 poly 0를 처리했지만,
+			// 클라에서 그 패킷을 받기 전에, 몹을 공격. <- 즉, 몹인 상태에서 공격.
 			//
-			// ׷ Ŭ󿡼   · ߴٴ Ŀǵ带  (arg == 13)
+			// 그러면 클라에서는 서버에 몹 상태로 공격했다는 커맨드를 보내고 (arg == 13)
 			//
-			//  race ΰε ´  ̴!  Ͽ üũ ߴ.
+			// 서버에서는 race는 인간인데 공격형태는 몹인 놈이다! 라고 하여 핵체크를 했다.
 
-			//   Ͽ   Ŭ̾Ʈ Ǵؼ   ƴ϶,
-			//  Ǵؾ  ε...  ̷ س...
+			// 사실 공격 패턴에 대한 것은 클라이언트에서 판단해서 보낼 것이 아니라,
+			// 서버에서 판단해야 할 것인데... 왜 이렇게 해놨을까...
 			// by rtsummit
 		}
 	}
 	else
 	{
-		//  ȵǴ ޺ Դ Ŀ ɼ?
+		// 말이 안되는 콤보가 왔다 해커일 가능성?
 		if (ch->GetDesc()->DelayedDisconnect(Random::get(2, 9)))
 		{
 			LogManager::instance().HackLog("Hacker", ch);
@@ -1496,7 +1496,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);
 
@@ -1531,9 +1531,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);
 
@@ -1544,7 +1544,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); // 부정확할 수 있음
 			}
 
 			SPDLOG_WARN("MOVE: {} trying to move too far (dist: {:.1f}m) Riding({})", ch->GetName(), fDist, ch->IsRiding());
@@ -1555,10 +1555,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)
@@ -1568,13 +1568,13 @@ void CInputMain::Move(LPCHARACTER ch, const char * data)
 
 			iDelta = (int) (dwCurTime - pinfo->dwTime);
 
-			// ð ʰ԰. ϴ α׸ صд. ¥ ̷   üũؾ. TODO
+			// 시간이 늦게간다. 일단 로그만 해둔다. 진짜 이런 사람들이 많은지 체크해야함. TODO
 			if (iDelta >= 30000)
 			{
 				SPDLOG_WARN("SPEEDHACK: slow timer name {} delta {}", ch->GetName(), iDelta);
 				ch->GetDesc()->DelayedDisconnect(3);
 			}
-			// 1ʿ 20msec  °  Ѵ.
+			// 1초에 20msec 빨리 가는거 까지는 이해한다.
 			else if (iDelta < -(iServerDelta / 50))
 			{
 				SPDLOG_WARN("SPEEDHACK: DETECTED! {} (delta {} {})", ch->GetName(), iDelta, iServerDelta);
@@ -1583,11 +1583,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); // 콤보 체크
 		}
 	}
 
@@ -1596,7 +1596,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);
@@ -1635,7 +1635,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);
@@ -1657,13 +1657,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(Random::get(15, 30)))
 			LogManager::instance().HackLog("Debugger", ch);
 
 	}
-	else if (pinfo->dwTime == 10653971) // Softice ߰
+	else if (pinfo->dwTime == 10653971) // Softice 발견
 	{
 		if (ch->GetDesc()->DelayedDisconnect(Random::get(15, 30)))
 			LogManager::instance().HackLog("Softice", ch);
@@ -1839,20 +1839,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);
@@ -1877,11 +1877,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);
@@ -1968,11 +1968,11 @@ void CInputMain::ScriptAnswer(LPCHARACTER ch, const void* c_pData)
 	TPacketCGScriptAnswer * p = (TPacketCGScriptAnswer *) c_pData;
     SPDLOG_DEBUG("QUEST ScriptAnswer pid {} answer {}", 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);
 	}
@@ -2052,31 +2052,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("[Storeroom] The item cannot be stored."));
 	    return;
 	}
 
 	if (!pkSafebox->IsEmpty(p->bSafePos, pkItem->GetSize()))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â> ű   ġԴϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] No movement possible."));
 		return;
 	}
 
 	if (pkItem->GetVnum() == UNIQUE_ITEM_SAFEBOX_EXPAND)
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] The item cannot be stored."));
 		return;
 	}
 
 	if( IS_SET(pkItem->GetAntiFlag(), ITEM_ANTIFLAG_SAFEBOX) )
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] The item cannot be stored."));
 		return;
 	}
 
 	if (true == pkItem->isLocked())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<â>     ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Storeroom] The item cannot be stored."));
 		return;
 	}
 
@@ -2115,9 +2115,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)
@@ -2127,7 +2127,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("[Storeroom] No movement possible."));
 			return;
 		}
 		
@@ -2137,7 +2137,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("[Storeroom] No movement possible."));
 				return ;
 			}
 			DestPos = TItemPos (DRAGON_SOUL_INVENTORY, iCell);
@@ -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("[Storeroom] No movement possible."));
 			return;
 		}
 
@@ -2163,7 +2163,7 @@ void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMal
 				SPDLOG_ERROR("pkItem->GetProto() == NULL (id : {})",pkItem->GetID());
 				return ;
 			}
-			// 100% Ȯ Ӽ پ ϴµ  پִٸ  . ...............
+			// 100% 확률로 속성이 붙어야 하는데 안 붙어있다면 새로 붙힌다. ...............
 			if (100 == pkItem->GetProto()->bAlterToMagicItemPct && 0 == pkItem->GetAttributeCount())
 			{
 				pkItem->AlterToMagicItem();
@@ -2203,7 +2203,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("You cannot use this in the duel arena."));
 		return;
 	}
 
@@ -2224,7 +2224,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("You cannot use this in the duel arena."));
 		return;
 	}
 
@@ -2232,10 +2232,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("[Group] The player who invited you is not online."));
 	else if (!p->accept)
 		pInviter->PartyInviteDeny(ch->GetPlayerID());
 	else
@@ -2247,7 +2247,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("[Group] The server cannot execute this group request."));
 		return;
 	}
 
@@ -2258,13 +2258,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("[Group] Only the group leader can change this."));
 		return;
 	}
 
 	if (!ch->GetParty()->IsMember(p->pid))
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ¸ Ϸ  Ƽ ƴմϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The target is not a member of your group."));
 		return;
 	}
 
@@ -2292,7 +2292,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("[Group] Failed to set the role..")); */
 			break;
 
 		default:
@@ -2305,19 +2305,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("You cannot use this in the duel arena."));
 		return;
 	}
 
 	if (!CPartyManager::instance().IsEnablePCParty())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>   Ƽ  ó   ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The server cannot execute this group request."));
 		return;
 	}
 
 	if (ch->GetDungeon())
 	{
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȿ Ƽ ߹  ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot kick out a player while you are in a dungeon."));
 		return;
 	}
 
@@ -2331,7 +2331,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("[Group] You cannot kick out a player while you are in a dungeon."));
 		}
 		else
 		{
@@ -2347,7 +2347,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("[Group] You have been out kicked of the group."));
 					//pParty->Unlink(B);
 					//CPartyManager::instance().SetPartyMember(B->GetPlayerID(), NULL);
 				}
@@ -2362,7 +2362,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("[Group] You cannot leave a group while you are in a dungeon."));
 			}
 			else
 			{
@@ -2373,7 +2373,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("[Group] You have left the group."));
 					//pParty->SendPartyRemoveOneToAll(ch);
 					pParty->Quit(ch->GetPlayerID());
 					//pParty->SendPartyRemoveAllToOne(ch);
@@ -2383,7 +2383,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("[Group] You cannot kick out group members."));
 		}
 	}
 }
@@ -2398,7 +2398,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("[Guild] After disbanding a guild, you cannot create a new one for %d days."), 
 				quest::CQuestManager::instance().GetEventFlag("guild_disband_delay"));
 		return;
 	}
@@ -2406,7 +2406,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("[Guild] After leaving a guild, you cannot create a new one for %d days."), 
 				quest::CQuestManager::instance().GetEventFlag("guild_withdraw_delay"));
 		return;
 	}
@@ -2424,7 +2424,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("This guild name is invalid."));
 		return;
 	}
 
@@ -2432,7 +2432,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("[Guild] [%s] guild has been created."), cp.name);
 
 		int GuildCreateFee;
 
@@ -2457,7 +2457,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("[Guild] Creation of the guild has failed."));
 }
 
 void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData)
@@ -2468,7 +2468,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("[Group] Only the group leader can use group skills."));
 		return;
 	}
 
@@ -2483,7 +2483,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("[Group] The target has not been found."));
 			}
 			break;
 	}
@@ -2545,7 +2545,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("[Guild] It does not belong to the guild."));
 			return SubPacketLen;
 		}
 	}
@@ -2554,20 +2554,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 = std::min(*reinterpret_cast(c_pData), __deposit_limit());
 
 				if (gold < 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߸ ݾԴϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] That is not the correct amount of Yang."));
 					return SubPacketLen;
 				}
 
 				if (ch->GetGold() < gold)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>  ִ  մϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You do not have enough Yang."));
 					return SubPacketLen;
 				}
 
@@ -2577,14 +2577,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 = std::min(*reinterpret_cast(c_pData), 500000);
 
 				if (gold < 0)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ߸ ݾԴϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] That is not the correct amount of Yang."));
 					return SubPacketLen;
 				}
 
@@ -2599,7 +2599,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (!newmember)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷  ã  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The person you were searching for cannot be found."));
 					return SubPacketLen;
 				}
 
@@ -2610,7 +2610,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("[Guild] This character can't join yet"));
 						return SubPacketLen;
 					}
 				}
@@ -2623,7 +2623,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("[Guild] You cannot remove a guild member during a guild war."));
 					return SubPacketLen;
 				}
 
@@ -2639,13 +2639,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("[Guild] This person is not in the same guild."));
 						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("[Guild] You do not have the authority to kick out guild members."));
 						return SubPacketLen;
 					}
 
@@ -2661,14 +2661,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("[Guild] You do not have the authority to kick out guild members."));
 						return SubPacketLen;
 					}
 
 					if (pGuild->RequestRemoveMember(pid))
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   Ż ׽ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You have kicked a guild member out."));
 					else
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ׷  ã  ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The person you were searching for cannot be found."));
 				}
 			}
 			return SubPacketLen;
@@ -2685,15 +2685,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("[Guild] You do not have the authority to change your rank name."));
 				}
 				else if (*c_pData == GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>   ̸   ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The guild leader's rights cannot be changed."));
 				}
 				else if (!check_name(gradename))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>    ̸ Դϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] This rank name is invalid."));
 				}
 				else
 				{
@@ -2711,11 +2711,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("[Guild] You do not have the authority to change your position."));
 				}
 				else if (*c_pData == GUILD_LEADER_GRADE)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The rights of the guild leader cannot be changed."));
 				}
 				else
 				{
@@ -2730,7 +2730,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("[Guild] Your guild is already the highest level."));
 				}
 				else
 				{
@@ -2739,11 +2739,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("[Guild] %u experience points used."), offer);
 					}
 					else
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ġ ڿ Ͽϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] Experience usage has failed."));
 					}
 				}
 			}
@@ -2756,13 +2756,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("[Guild] Insufficient Yang in the guild treasury."));
 					return SubPacketLen;
 				}
 
 				if (!pGuild->ChargeSP(ch, offer))
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ŷ ȸ Ͽϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] Dragon ghost was not restored."));
 				}
 			}
 			return SubPacketLen;
@@ -2773,7 +2773,7 @@ int CInputMain::Guild(LPCHARACTER ch, const char * data, size_t uiBytes)
 
 				if (length > GUILD_COMMENT_MAX_LEN)
 				{
-					// ߸ .. .
+					// 잘못된 길이.. 끊어주자.
 					SPDLOG_ERROR("POST_COMMENT: {} comment too long (length: {})", ch->GetName(), length);
 					ch->GetDesc()->SetPhase(PHASE_CLOSE);
 					return -1;
@@ -2789,7 +2789,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("[Guild] You do not have the authority to make an announcement."));
 				}
 				else
 				{
@@ -2822,11 +2822,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("[Guild] You do not have the authority to change the position."));
 				else if (ch->GetPlayerID() == pid)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] The guild leader's position cannot be changed."));
 				else if (grade == 1)
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<>     ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You cannot make yourself guild leader."));
 				else
 					pGuild->ChangeMemberGrade(pid, grade);
 			}
@@ -2851,13 +2851,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("[Guild] You do not have the authority to choose the guild leader."));
 				}
 				else
 				{
 					if (!pGuild->ChangeMemberGeneral(pid, is_general))
 					{
-						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<> ̻    ϴ."));
+						ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Guild] You cannot choose any more guild leaders."));
 					}
 				}
 			}
@@ -2901,7 +2901,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("You cannot trade this item."));
 }
 
 int CInputMain::MyShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes)
@@ -2914,7 +2914,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("You have more than 2 Billion Yang with you. You cannot trade."));
         SPDLOG_DEBUG("MyShop ==> OverFlow Gold id {} name {} ", ch->GetPlayerID(), ch->GetName());
 		return (iExtraLen);
 	}
@@ -2924,7 +2924,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("You cannot open a private shop while another window is open."));
 		return (iExtraLen);
 	}
 
@@ -2939,7 +2939,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("You cannot upgrade anything while another window is open."));
 		ch->ClearRefineMode();
 		return;
 	}
@@ -2996,7 +2996,7 @@ void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
 				}
 				else
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, " Ÿ Ϸ  ѹ 밡մϴ.");
+					ch->ChatPacket(CHAT_TYPE_INFO, "You can only be rewarded once for the Demon Tower Quest.");
 				}
 			}
 		}
@@ -3060,7 +3060,7 @@ int CInputMain::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
 					//if (0 != g_stClientVersion.compare(d->GetClientVersion()))
 					if (version > date)
 					{
-						ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ̾Ʈ  Ʋ α׾ƿ ˴ϴ.  ġ  ϼ."));
+						ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("You do not have the correct client version. Please install the normal patch."));
 						d->DelayedDisconnect(10);
 						LogManager::instance().HackLog("VERSION_CONFLICT", d->GetAccountTable().login, ch->GetName(), d->GetHostName());
 					}
diff --git a/src/game/src/input_p2p.cpp b/src/game/src/input_p2p.cpp
index 15f0aeb..87c0225 100644
--- a/src/game/src/input_p2p.cpp
+++ b/src/game/src/input_p2p.cpp
@@ -65,7 +65,7 @@ int CInputP2P::Relay(LPDESC d, const char * c_pData, size_t uiBytes)
 	{
 		if (pkChr->IsBlockMode(BLOCK_WHISPER))
 		{
-			// ӼӸ ź ¿ ӼӸ ź.
+			// 귓속말 거부 상태에서 귓속말 거부.
 			return p->lSize;
 		}
 
@@ -73,12 +73,12 @@ int CInputP2P::Relay(LPDESC d, const char * c_pData, size_t uiBytes)
 		memcpy(buf, c_pbData, std::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))
@@ -336,7 +336,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/src/input_teen.cpp b/src/game/src/input_teen.cpp
index db8327b..ea4d8b5 100644
--- a/src/game/src/input_teen.cpp
+++ b/src/game/src/input_teen.cpp
@@ -95,32 +95,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("Your cumulative online time is already %d hours."), 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("Your cumulative online time has already reached %d hours,"), hour);
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Please disconnect as soon as possible and get some rest for your health."));
 				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("You have already entered game fatigue,"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("your in-game earnings are reduced to 50%% of normal."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("For your own health, please disconnect as soon as possible"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("and focus on resting and studying."));
 				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("You have already entered an unhealthy game time."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("For your health, please disconnect and rest as soon as possible,"));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("otherwise you may suffer health damage and your in-game numbers will be zeroed out."));
+				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("You will return to normal when your cumulative offline time reaches 5 hours."));
 				SET_OVER_TIME(ch, OT_5HOUR);
 			}
 			break;
@@ -133,9 +133,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("%dh"), hour);
 	else
-		snprintf(buf, buflen, LC_TEXT("%d"), min);
+		snprintf(buf, buflen, LC_TEXT("%dm"), min);
 }
 
 static void __proc_login_notice(char *login, int on_time, int off_time)
@@ -156,13 +156,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("Your cumulative offline time is %s."), off_time_string);
+		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Your cumulative online time is now zero. You are 100%% effective."));
 		return;
 	}
 	else
 	{
-		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("   ð %s̸,  ¶ ð %sԴϴ."),
+		ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Your cumulative offline time is %s, and your cumulative online time is %s."),
 				off_time_string, on_time_string);
 	}
 }
diff --git a/src/game/src/item.cpp b/src/game/src/item.cpp
index 2fc238d..b604459 100644
--- a/src/game/src/item.cpp
+++ b/src/game/src/item.cpp
@@ -294,7 +294,7 @@ LPITEM CItem::RemoveFromCharacter()
 
 	LPCHARACTER pOwner = m_pOwner;
 
-	if (m_bEquipped)	// Ǿ°?
+	if (m_bEquipped)	// 장착되었는가?
 	{
 		Unequip();
 		//pOwner->UpdatePacket();
@@ -318,7 +318,7 @@ LPITEM CItem::RemoveFromCharacter()
 			{
 				TItemPos cell(INVENTORY, m_wCell);
 
-				if (false == cell.IsDefaultInventoryPosition() && false == cell.IsBeltInventoryPosition()) // ƴϸ ǰ?
+				if (false == cell.IsDefaultInventoryPosition() && false == cell.IsBeltInventoryPosition()) // 아니면 소지품에?
 					SPDLOG_ERROR("CItem::RemoveFromCharacter: Invalid Item Position");
 				else
 				{
@@ -470,16 +470,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)
@@ -540,7 +540,7 @@ int CItem::FindEquipCell(LPCHARACTER ch, int iCandidateCell)
 			return WEAR_UNIQUE1;		
 	}
 
-	//  Ʈ   ° ѹ   ?E .
+	// 수집 퀘스트를 위한 아이템이 박히는곳으로 한번 박히면 절대 ?E수 없다.
 	else if (GetWearFlag() & WEARABLE_ABILITY)
 	{
 		if (!ch->GetWear(WEAR_ABILITY1))
@@ -587,12 +587,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;
@@ -651,12 +651,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()))
 	{
@@ -713,7 +713,7 @@ void CItem::ModifyPoints(bool bAdd)
 
 		case ITEM_ARMOR:
 			{
-				// ڽ body ԰ִٸ armor  Դ   ־  ָ  .
+				// 코스츔 body를 입고있다면 armor는 벗던 입던 상관 없이 비주얼에 영향을 주면 안 됨.
 				if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY))
 					break;
 
@@ -733,33 +733,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;
 				}
 
@@ -820,7 +820,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)
@@ -847,7 +847,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;
@@ -905,7 +905,7 @@ bool CItem::Unequip()
 		return false;
 	}
 
-	//ű   Ž ó
+	//신규 말 아이템 제거시 처리
 	if (IsRideItem())
 		ClearMountAttributeAndAffect();
 
@@ -1209,7 +1209,7 @@ void CItem::AlterToMagicItem()
 		}
 	}
 
-	// 100% Ȯ  Ӽ ϳ
+	// 100% 확률로 좋은 속성 하나
 	PutAttribute(aiItemMagicAttributePercentHigh);
 
 	if (Random::get(1, 100) <= iSecondPct)
@@ -1295,8 +1295,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);
@@ -1306,9 +1306,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 );
@@ -1327,7 +1327,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);
@@ -1419,7 +1419,7 @@ void CItem::StartUniqueExpireEvent()
 	if (m_pkUniqueExpireEvent)
 		return;
 
-	//Ⱓ   ð   ʴ´
+	//기간제 아이템일 경우 시간제 아이템은 동작하지 않는다
 	if (IsRealTimeItem())
 		return;
 
@@ -1442,14 +1442,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;
 
@@ -1458,7 +1458,7 @@ void CItem::StartTimerBasedOnWearExpireEvent()
 
 	int iSec = GetSocket(0);
 	
-	//  ð д  ...
+	// 남은 시간을 분단위로 끊기 위해...
 	if (0 != iSec)
 	{
 		iSec %= 60;
@@ -1477,7 +1477,7 @@ void CItem::StopUniqueExpireEvent()
 	if (!m_pkUniqueExpireEvent)
 		return;
 
-	if (GetValue(2) != 0) // ӽð ̿  UniqueExpireEvent ߴ  .
+	if (GetValue(2) != 0) // 게임시간제 이외의 아이템은 UniqueExpireEvent를 중단할 수 없다.
 		return;
 
 	// HARD CODING
@@ -1514,12 +1514,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) 
@@ -1544,7 +1544,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 Time remaining until socket drops from %d"), GetName(), time);
 }
 
 EVENTFUNC(accessory_socket_expire_event)
@@ -1664,7 +1664,7 @@ void CItem::ClearMountAttributeAndAffect()
 }
 
 // fixme
-// ̰  Ⱦ... ٵ Ȥó ; ܵ.
+// 이거 지금은 안쓴데... 근데 혹시나 싶어서 남겨둠.
 // by rtsummit
 bool CItem::IsNewMountItem()
 {
@@ -1692,7 +1692,7 @@ void CItem::AccessorySocketDegrade()
 
 		if (ch)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ִ  ϴ."), GetName());
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("A gem socketed in the %s has vanished."), GetName());
 		}
 
 		ModifyPoints(false);
@@ -1711,7 +1711,7 @@ void CItem::AccessorySocketDegrade()
 	}
 }
 
-// ring item   ִ θ üũؼ 
+// ring에 item을 박을 수 있는지 여부를 체크해서 리턴
 static const bool CanPutIntoRing(LPITEM ring, LPITEM item)
 {
 	const DWORD vnum = item->GetVnum();
@@ -1920,10 +1920,10 @@ int CItem::GetLevelLimit()
 
 bool CItem::OnAfterCreatedItem()
 {
-	//   ̶ ߴٸ,  Ŀ   ʾƵ ð Ǵ 
+	// 아이템을 한 번이라도 사용했다면, 그 이후엔 사용 중이지 않아도 시간이 차감되는 방식
 	if (-1 != this->GetProto()->cLimitRealTimeFirstUseIndex)
 	{
-		// Socket1   Ƚ ϵǾ ,  ̶   Ÿ̸Ӹ Ѵ.
+		// Socket1에 아이템의 사용 횟수가 기록되어 있으니, 한 번이라도 사용한 아이템은 타이머를 시작한다.
 		if (0 != GetSocket(1))
 		{
 			StartRealTimeExpireEvent();
@@ -1936,8 +1936,8 @@ bool CItem::OnAfterCreatedItem()
 
 #ifdef __AUCTION__
 
-// 
-// window  Ѵ.
+// 경매장
+// window를 경매장으로 한다.
 
 bool CItem::MoveToAuction()
 {
@@ -2004,7 +2004,7 @@ int CItem::GiveMoreTime_Per(float fPercent)
 			return given_time;
 		}
 	}
-	// 켱 ȥ ؼ ϵ Ѵ.
+	// 우선 용혼석에 관해서만 하도록 한다.
 	else
 		return 0;
 }
@@ -2028,7 +2028,7 @@ int CItem::GiveMoreTime_Fix(DWORD dwTime)
 			return dwTime;
 		}
 	}
-	// 켱 ȥ ؼ ϵ Ѵ.
+	// 우선 용혼석에 관해서만 하도록 한다.
 	else
 		return 0;
 }
@@ -2053,7 +2053,7 @@ int	CItem::GetDuration()
 
 bool CItem::IsSameSpecialGroup(const LPITEM item) const
 {
-	//  VNUM ٸ  ׷  
+	// 서로 VNUM이 같다면 같은 그룹인 것으로 간주
 	if (this->GetVnum() == item->GetVnum())
 		return true;
 
@@ -2061,4 +2061,4 @@ bool CItem::IsSameSpecialGroup(const LPITEM item) const
 		return true;
 
 	return false;
-}
\ No newline at end of file
+}
diff --git a/src/game/src/item.h b/src/game/src/item.h
index ed8b14a..7af3c45 100644
--- a/src/game/src/item.h
+++ b/src/game/src/item.h
@@ -58,10 +58,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;	}
@@ -101,7 +101,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 int *	GetSockets()		{ return &m_alSockets[0];	}
@@ -144,7 +144,7 @@ class CItem : public CEntity
 
 		DWORD		GetLastOwnerPID()	{ return m_dwLastOwnerPID; }
 
-		int		GetAttributeSetIndex(); // Ӽ ٴ°  迭  ε ϴ ش.
+		int		GetAttributeSetIndex(); // 속성 붙는것을 지정한 배열의 어느 인덱스를 사용하는지 돌려준다.
 		void		AlterToMagicItem();
 		void		AlterToSocketItem(int iSocketCount);
 
@@ -163,7 +163,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();
@@ -178,7 +178,7 @@ class CItem : public CEntity
 		bool	IsSameSpecialGroup(const LPITEM item) const;
 
 		// ACCESSORY_REFINE
-		// ׼    ߰
+		// 액세서리에 광산을 통해 소켓을 추가
 		bool		IsAccessoryForSocket();
 
 		int		GetAccessorySocketGrade();
@@ -191,7 +191,7 @@ class CItem : public CEntity
 
 		void		AccessorySocketDegrade();
 
-		// Ǽ縮  ۿ ۾ Ÿ̸ ư°( ,  )
+		// 악세사리 를 아이템에 밖았을때 타이머 돌아가는것( 구리, 등 )
 		void		StartAccessorySocketExpireEvent();
 		void		SetAccessorySocketExpireEvent(LPEVENT pkEvent);
 
@@ -225,7 +225,7 @@ class CItem : public CEntity
 
 	protected:
 		friend class CInputDB;
-		bool		OnAfterCreatedItem();			//     Բ  (ε)  Ҹ Լ.
+		bool		OnAfterCreatedItem();			// 서버상에 아이템이 모든 정보와 함께 완전히 생성(로드)된 후 불리우는 함수.
 
 	public:
 		bool		IsRideItem();
@@ -235,46 +235,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;		// 
-		int		m_lFlag;		// ߰ flag
-		DWORD		m_dwLastOwnerPID;	//   ־  PID
+		WORD		m_wCell;		// 위치
+		DWORD		m_dwCount;		// 개수
+		int		m_lFlag;		// 추가 flag
+		DWORD		m_dwLastOwnerPID;	// 마지막 가지고 있었던 사람의 PID
 
-		bool		m_bExchanging;	///<  ȯ  
+		bool		m_bExchanging;	///< 현재 교환중 상태 
 
-		int		m_alSockets[ITEM_SOCKET_MAX_NUM];	//  Ĺ
+		int		m_alSockets[ITEM_SOCKET_MAX_NUM];	// 아이템 소캣
 		TPlayerItemAttribute	m_aAttr[ITEM_ATTRIBUTE_MAX_NUM];
 
 		LPEVENT		m_pkDestroyEvent;
diff --git a/src/game/src/item_addon.cpp b/src/game/src/item_addon.cpp
index 5e66ff4..9dc5317 100644
--- a/src/game/src/item_addon.cpp
+++ b/src/game/src/item_addon.cpp
@@ -20,7 +20,7 @@ void CItemAddonManager::ApplyAddonTo(int iAddonType, LPITEM pItem)
 		return;
 	}
 
-	// TODO ϴ ϵڵ Ÿ ų ġ 游 츸 ްѴ.
+	// TODO 일단 하드코딩으로 평타 스킬 수치 변경만 경우만 적용받게한다.
 
 	int iSkillBonus = std::clamp((int) (Random::get>(0, 5) + 0.5f), -30, 30);
 	int iNormalHitBonus = 0;
diff --git a/src/game/src/item_attribute.cpp b/src/game/src/item_attribute.cpp
index 095b1cc..3b00128 100644
--- a/src/game/src/item_attribute.cpp
+++ b/src/game/src/item_attribute.cpp
@@ -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 = Random::get(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/src/item_manager.cpp b/src/game/src/item_manager.cpp
index 9c388ba..09912a4 100644
--- a/src/game/src/item_manager.cpp
+++ b/src/game/src/item_manager.cpp
@@ -80,7 +80,7 @@ bool ITEM_MANAGER::Initialize(TItemTable * table, int size)
 		if (m_vec_prototype[i].dwRefinedVnum)
 			m_map_ItemRefineFrom.insert(std::make_pair(m_vec_prototype[i].dwRefinedVnum, m_vec_prototype[i].dwVnum));
 
-		// NOTE : QUEST_GIVE ÷״ npc ̺Ʈ ߻.
+		// NOTE : QUEST_GIVE 플래그는 npc 이벤트로 발생.
 		if (m_vec_prototype[i].bType == ITEM_QUEST || IS_SET(m_vec_prototype[i].dwFlags, ITEM_FLAG_QUEST_USE | ITEM_FLAG_QUEST_USE_MULTIPLE))
 			quest::CQuestManager::instance().RegisterNPCVnum(m_vec_prototype[i].dwVnum);
 
@@ -155,7 +155,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 	{
 		if (vnum == 50300 && bTryMagic)
 		{
-			// ü  ȣ ٸ  ش.
+			// 수련서를 아이템 번호를 다르게 만들어 준다.
 			DWORD dwSkillVnum;
 
 			do
@@ -181,7 +181,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 
 	LPITEM item = NULL;
 
-	//id ˻ؼ Ѵٸ -- ! 
+	//id로 검사해서 존재한다면 -- 리턴! 
 	if (m_map_pkItemByID.find(id) != m_map_pkItemByID.end())
 	{
 		item = m_map_pkItemByID[id];
@@ -190,7 +190,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 		return NULL;
 	}
 
-	// ϳ Ҵϰ
+	//아이템 하나 할당하고
 #ifdef M2_USE_POOL
 	item = pool_.Construct();
 #else
@@ -199,15 +199,15 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 
 	bool bIsNewItem = (0 == id);
 
-	//ʱȭ ϰ. ̺ ϰ
+	//초기화 하고. 테이블 셋하고
 	item->Initialize();
 	item->SetProto(table);
 	item->SetMaskVnum(dwMaskVnum);
 
-	if (item->GetType() == ITEM_ELK) //  ID ʿ 嵵 ʿ.
+	if (item->GetType() == ITEM_ELK) // 돈은 ID가 필요없고 저장도 필요없다.
 		item->SetSkipSave(true);
 
-	// Unique ID 
+	// Unique ID를 세팅하자
 	else if (!bIsNewItem)
 	{
 		item->SetID(id);
@@ -217,16 +217,16 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 	{
 		item->SetID(GetNewID());
 
-		if (item->GetType() == ITEM_UNIQUE) // ũ  ÿ Ͽ ð Ѵ.
+		if (item->GetType() == ITEM_UNIQUE) // 유니크 아이템은 생성시에 소켓에 남은시간을 기록한다.
 		{
 			if (item->GetValue(2) == 0)
-				item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, item->GetValue(0)); //  ð ũ
+				item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, item->GetValue(0)); // 게임 시간 유니크
 			else
 			{
 				//int globalTime = get_global_time();
 				//int lastTime = item->GetValue(0);
 				//int endTime = get_global_time() + item->GetValue(0);
-				item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, get_global_time() + item->GetValue(0)); // ǽð ũ
+				item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, get_global_time() + item->GetValue(0)); // 실시간 유니크
 			}
 		}
 	}
@@ -255,9 +255,9 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 			break;
 	}
 
-	if (item->GetType() == ITEM_ELK) //  ƹ ó ʿ 
+	if (item->GetType() == ITEM_ELK) // 돈은 아무 처리가 필요하지 않음
 		;
-	else if (item->IsStackable())  // ĥ  ִ  
+	else if (item->IsStackable())  // 합칠 수 있는 아이템의 경우
 	{
 		count = std::clamp(count, 1, ITEM_MAX_COUNT);
 
@@ -285,7 +285,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 
 	for (int i=0 ; i < ITEM_LIMIT_MAX_NUM ; i++)
 	{
-		//     ʾƵ ð Ǵ 
+		// 아이템 생성 시점부터 사용하지 않아도 시간이 차감되는 방식
 		if (LIMIT_REAL_TIME == item->GetLimitType(i))
 		{
 			if (item->GetLimitValue(i))
@@ -300,11 +300,11 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 			item->StartRealTimeExpireEvent();
 		}
 
-		//  ũ ó ÿ 밡 ð Ǵ 
+		// 기존 유니크 아이템처럼 착용시에만 사용가능 시간이 차감되는 방식
 		else if (LIMIT_TIMER_BASED_ON_WEAR == item->GetLimitType(i))
 		{
-			// ̹  ̸ Ÿ̸Ӹ ϰ,      ð ش. (
-			// ۸ ϴ 쿡     Socket0   Ǿ ־ Ѵ.
+			// 이미 착용중인 아이템이면 타이머를 시작하고, 새로 만드는 아이템은 사용 가능 시간을 세팅해준다. (
+			// 아이템몰로 지급하는 경우에는 이 로직에 들어오기 전에 Socket0 값이 세팅이 되어 있어야 한다.
 			if (true == item->IsEquipped())
 			{
 				item->StartTimerBasedOnWearExpireEvent();
@@ -316,16 +316,16 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 					duration = item->GetLimitValue(i);
 
 				if (0 == duration)
-					duration = 60 * 60 * 10;	//  ƹ͵  Ʈ 10ð 
+					duration = 60 * 60 * 10;	// 정보가 아무것도 없으면 디폴트로 10시간 세팅
 
 				item->SetSocket(0, duration);
 			}
 		}
 	}
 
-	if (id == 0) //     ó
+	if (id == 0) // 새로 만드는 아이템일 때만 처리
 	{
-		// ߰Ǵ ʵϰ  ٸó
+		// 새로추가되는 약초들일경우 성능을 다르게처리
 		if (ITEM_BLEND==item->GetType())
 		{
 			if (Blend_Item_find(item->GetVnum()))
@@ -352,7 +352,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 		if (table->bGainSocketPct)
 			item->AlterToSocketItem(table->bGainSocketPct);
 
-		// 50300 ==  ü
+		// 50300 == 기술 수련서
 		if (vnum == 50300 || vnum == ITEM_SKILLFORGET_VNUM)
 		{
 			DWORD dwSkillVnum;
@@ -404,7 +404,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
 		}
 	}
 
-	//  Ǵ ȥ ó.
+	// 새로 생성되는 용혼석 처리.
 	if (item->IsDragonSoul() && 0 == id)
 	{
 		DSManager::instance().DragonSoulItemInitialize(item);
@@ -473,7 +473,7 @@ void ITEM_MANAGER::Update()
 		this_it = it++;
 		LPITEM item = *this_it;
 
-		// SLOW_QUERY ÷װ ִ  ÿ Ѵ.
+		// SLOW_QUERY 플래그가 있는 것은 종료시에만 저장한다.
 		if (item->GetOwner() && IS_SET(item->GetFlag(), ITEM_FLAG_SLOW_QUERY))
 			continue;
 
@@ -496,7 +496,7 @@ void ITEM_MANAGER::RemoveItem(LPITEM item, const char * c_pszReason)
 		// SAFEBOX_TIME_LIMIT_ITEM_BUG_FIX
 		if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX)
 		{
-			// 20050613.ipkn.ð     ð  ٿȴ.
+			// 20050613.ipkn.시간제 아이템이 상점에 있을 경우 시간만료시 서버가 다운된다.
 			CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
 			if (pSafebox)
 			{
@@ -760,8 +760,8 @@ class CItemDropInfo
 extern std::vector g_vec_pkCommonDropItem[MOB_RANK_MAX_NUM];
 
 // 20050503.ipkn.
-// iMinimum   iDefault  (, iMinimum 0 Ŀ)
-// 1, 0  ON/OFF Ǵ  ϱ  
+// iMinimum 보다 작으면 iDefault 세팅 (단, iMinimum은 0보다 커야함)
+// 1, 0 식으로 ON/OFF 되는 방식을 지원하기 위해 존재
 int GetDropPerKillPct(int iMinimum, int iDefault, int iDeltaPercent, const char * c_pszFlag)
 {
 	int iVal = 0;
@@ -781,8 +781,8 @@ int GetDropPerKillPct(int iMinimum, int iDefault, int iDeltaPercent, const char
 	if (iVal == 0)
 		return 0;
 
-	// ⺻ ϶ (iDeltaPercent=100) 
-	// 40000 iVal  ϳ  ֱ  
+	// 기본 세팅일때 (iDeltaPercent=100) 
+	// 40000 iVal 마리당 하나 느낌을 주기 위한 상수임
 	return (40000 * iDeltaPercent / iVal);
 }
 
@@ -922,7 +922,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
 			CMobItemGroup* pGroup = it->second;
 
 			// MOB_DROP_ITEM_BUG_FIX
-			// 20050805.myevan.MobDropItem     CMobItemGroup::GetOne() ٽ  ߻ 
+			// 20050805.myevan.MobDropItem 에 아이템이 없을 경우 CMobItemGroup::GetOne() 접근시 문제 발생 수정
 			if (pGroup && !pGroup->IsEmpty())
 			{
 				int iPercent = 40000 * iDeltaPercent / pGroup->GetKillPerDrop();
@@ -989,7 +989,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
 		}
 	}
 	
-	// 
+	// 잡템
 	if (pkChr->GetMobDropItemVnum())
 	{
 		itertype(m_map_dwEtcItemDropProb) it = m_map_dwEtcItemDropProb.find(pkChr->GetMobDropItemVnum());
@@ -1038,14 +1038,14 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
 		pdw[1] = 1;
 		pdw[2] = quest::CQuestManager::instance().GetEventFlag("lotto_round");
 
-		//    Ѵ
+		// 행운의 서는 소켓을 설정한다
 		DBManager::instance().ReturnQuery(QID_LOTTO, pkKiller->GetPlayerID(), pdw,
 				"INSERT INTO lotto_list VALUES(0, 'server%s', %u, NOW())",
 				get_table_postfix(), pkKiller->GetPlayerID());
 	}
 
 	//
-	//   
+	// 스페셜 드롭 아이템
 	// 
 	CreateQuestDropItem(pkChr, pkKiller, vec_item, iDeltaPercent, iRandRange);
 
@@ -1056,7 +1056,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
 	}
 
 	//
-	// · õǵ 2  
+	// 승룡곡 천의동굴 2층에서만 수룡방 입장권
 	//
 	if (LC_IsYMIR() || LC_IsKorea())
 	{
@@ -1073,21 +1073,21 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
 	}
 
 	//
-	// · 1, 2 7,8 ųԹ 
+	// 승룡곡 1층, 2층에서만 7,8 스킬입문서 드롭
 	//
 	if (LC_IsYMIR() || LC_IsKorea())
 	{
 		switch (pkKiller->GetMapIndex())
 		{
-			case 72:	// õǵ 1
-			case 73:	// õǵ 2
+			case 72:	// 천의동굴 1층
+			case 73:	// 천의동굴 2층
 				{
 					int vnum = 0;
 
-					if (2403 == pkChr->GetRaceNum())	// õǹ
-						vnum = 69200;	// 7ų Թ
-					else if (2411 == pkChr->GetRaceNum())	// õǺ
-						vnum = 69201;	// 8ų Թ
+					if (2403 == pkChr->GetRaceNum())	// 천의법사
+						vnum = 69200;	// 7스킬 입문서
+					else if (2411 == pkChr->GetRaceNum())	// 진천의병사
+						vnum = 69201;	// 8스킬 입문서
 					else
 						break;
 
@@ -1242,11 +1242,11 @@ bool DropEvent_CharStone_SetValue(const std::string& name, int value)
 // END_OF_DROPEVENT_CHARSTONE
 
 // fixme
-//  Ͱ Բ quest  . 
-// ̰ ʹ ݾ...
-// ??.. ϵڵ ȴ ̤
-// 跮   .
-// by rtsummit ġ ¥
+// 위의 것과 함께 quest로 뺄것 빼보자. 
+// 이거 너무 더럽잖아...
+// ??.. 하드코딩 싫다 ㅜㅠ
+// 계량 아이템 보상 시작.
+// by rtsummit 고치자 진짜
 static struct DropEvent_RefineBox
 {
 	int percent_low;
@@ -1363,7 +1363,7 @@ bool DropEvent_RefineBox_SetValue(const std::string& name, int value)
 
 	return true;
 }
-//    .
+// 개량 아이템 보상 끝.
 
 
 void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector & vec_item, int iDeltaPercent, int iRandRange)
@@ -1383,7 +1383,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 	// END_OF_DROPEVENT_CHARSTONE
 	__DropEvent_RefineBox_DropItem(*pkKiller, *pkChr, *this, vec_item);
 
-	// ũ 縻
+	// 크리스마스 양말
 	if (quest::CQuestManager::instance().GetEventFlag("xmas_sock"))
 	{
 		//const DWORD SOCK_ITEM_VNUM = 50010;
@@ -1425,7 +1425,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 		}
 	}
 
-	//  
+	// 월광 보합
 	if (quest::CQuestManager::instance().GetEventFlag("drop_moon"))
 	{
 		const DWORD ITEM_VNUM = 50011;
@@ -1471,10 +1471,10 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 		}
 	}
 
-	//
+	//육각보합
 	if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "2006_drop") >= Random::get(1, iRandRange))
 	{
-        SPDLOG_DEBUG(" DROP EVENT ");
+        SPDLOG_DEBUG("Hexagonal Treasure Chest DROP EVENT ");
 
 		const static DWORD dwVnum = 50037;
 
@@ -1483,10 +1483,10 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 
 	}
 
-	//+
+	//육각보합+
 	if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "2007_drop") >= Random::get(1, iRandRange))
 	{
-        SPDLOG_DEBUG(" DROP EVENT ");
+        SPDLOG_DEBUG("Hexagonal Treasure Chest DROP EVENT ");
 
 		const static DWORD dwVnum = 50043;
 
@@ -1494,17 +1494,17 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	//   ̺Ʈ
+	// 새해 폭죽 이벤트
 	if (GetDropPerKillPct(/* minimum */ 100, /* default */ 1000, iDeltaPercent, "newyear_fire") >= Random::get(1, iRandRange))
 	{
-		// ߱ , ѱ 
+		// 중국은 폭죽, 한국 팽이
 		const DWORD ITEM_VNUM_FIRE = g_iUseLocale ? 50107 : 50108;
 
 		if ((item = CreateItem(ITEM_VNUM_FIRE, 1, 0, true)))
 			vec_item.push_back(item);
 	}
 
-	//  뺸  ̺Ʈ
+	// 새해 대보름 원소 이벤트
 	if (GetDropPerKillPct(100, 500, iDeltaPercent, "newyear_moon") >= Random::get(1, iRandRange))
 	{
         SPDLOG_DEBUG("EVENT NEWYEAR_MOON DROP");
@@ -1516,7 +1516,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	// ߷Ÿ  ̺Ʈ. OGE 䱸  event ּҰ 1 .(ٸ ̺Ʈ ϴ ״ .)
+	// 발렌타인 데이 이벤트. OGE의 요구에 따라 event 최소값을 1로 변경.(다른 이벤트는 일단 그대로 둠.)
 	if (GetDropPerKillPct(1, g_iUseLocale ? 2000 : 800, iDeltaPercent, "valentine_drop") >= Random::get(1, iRandRange))
 	{
         SPDLOG_DEBUG("EVENT VALENTINE_DROP");
@@ -1528,7 +1528,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	// ̽ũ ̺Ʈ
+	// 아이스크림 이벤트
 	if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "icecream_drop") >= Random::get(1, iRandRange))
 	{
 		const static DWORD icecream = 50123;
@@ -1537,8 +1537,8 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	// new ũ ̺Ʈ
-	// 53002 : Ʊ  ȯ
+	// new 크리스마스 이벤트
+	// 53002 : 아기 순록 소환권
 	if ((pkKiller->CountSpecifyItem(53002) > 0) && (GetDropPerKillPct(50, 100, iDeltaPercent, "new_xmas_event") >= Random::get(1, iRandRange)))
 	{
 		const static DWORD xmas_sock = 50010;
@@ -1582,7 +1582,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	//  ̺Ʈ
+	// 월드컵 이벤트
 	if ( GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "football_drop") >= Random::get(1, iRandRange) )
 	{
 		const static DWORD football_item = 50096;
@@ -1591,7 +1591,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	// ȭƮ  ̺Ʈ
+	// 화이트 데이 이벤트
 	if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "whiteday_drop") >= Random::get(1, iRandRange))
 	{
         SPDLOG_DEBUG("EVENT WHITEDAY_DROP");
@@ -1602,7 +1602,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	// ̳   ̺Ʈ
+	// 어린이날 수수께끼 상자 이벤트
 	if (pkKiller->GetLevel()>=50)
 	{
 		if (GetDropPerKillPct(100, 1000, iDeltaPercent, "kids_day_drop_high") >= Random::get(1, iRandRange))
@@ -1624,7 +1624,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 		}
 	}
 
-	// ø  ̺Ʈ
+	// 올림픽 드롭 이벤트
 	if (pkChr->GetLevel() >= 30 && GetDropPerKillPct(50, 100, iDeltaPercent, "medal_part_drop") >= Random::get(1, iRandRange))
 	{
 		const static DWORD drop_items[] = { 30265, 30266, 30267, 30268, 30269 };
@@ -1635,7 +1635,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 	}
 
 	// ADD_GRANDMASTER_SKILL
-	// ȥ  
+	// 혼석 아이템 드롭
 	if (pkChr->GetLevel() >= 40 && pkChr->GetMobRank() >= MOB_RANK_BOSS && GetDropPerKillPct(/* minimum */ 1, /* default */ 1000, iDeltaPercent, "three_skill_item") / GetThreeSkillLevelAdjust(pkChr->GetLevel()) >= Random::get(1, iRandRange))
 	{
 		const DWORD ITEM_VNUM = 50513;
@@ -1646,7 +1646,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 	// END_OF_ADD_GRANDMASTER_SKILL
 
 	//
-	//   drop
+	// 종자 아이템 drop
 	//
 	if (GetDropPerKillPct(100, 1000, iDeltaPercent, "dragon_boat_festival_drop") >= Random::get(1, iRandRange))
 	{
@@ -1656,7 +1656,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
 			vec_item.push_back(item);
 	}
 
-	//  ູ ö drop
+	// 무신의 축복서용 만년한철 drop
 	if (pkKiller->GetLevel() >= 15 && quest::CQuestManager::instance().GetEventFlag("mars_drop"))
 	{
 		const DWORD ITEM_HANIRON = 70035;
@@ -1718,8 +1718,8 @@ DWORD ITEM_MANAGER::GetMaskVnum(DWORD dwVnum)
 		return 0;
 }
 
-// pkNewItem  Ӽ   ϴ Լ.
-//  char_item.cpp Ͽ ִ Լ TransformRefineItem ״ 
+// pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
+// 기존에 char_item.cpp 파일에 있던 로컬함수인 TransformRefineItem 그대로 복사함
 void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
 {
 	// ACCESSORY_REFINE
@@ -1734,7 +1734,7 @@ void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
 	// END_OF_ACCESSORY_REFINE
 	else
 	{
-		// ⼭  ڵ û 
+		// 여기서 깨진석이 자동적으로 청소 됨
 		for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 		{
 			if (!pkOldItem->GetSocket(i))
@@ -1743,19 +1743,19 @@ void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
 				pkNewItem->SetSocket(i, 1);
 		}
 
-		//  
+		// 소켓 설정
 		int slot = 0;
 
 		for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
 		{
 			int socket = pkOldItem->GetSocket(i);
-			const int ITEM_BROKEN_METIN_VNUM = 28960; // ̰  Ȱ  3 ֳ... ϳ سФФ  н ȫ Ҳ
+			const int ITEM_BROKEN_METIN_VNUM = 28960; // 이건 뭐 똑같은 상수가 3군데나 있냐... 하나로 해놓지ㅠㅠㅠ 나는 패스 홍이 할꺼임
 			if (socket > 2 && socket != ITEM_BROKEN_METIN_VNUM)
 				pkNewItem->SetSocket(slot++, socket);
 		}
 
 	}
 
-	//   
+	// 매직 아이템 설정
 	pkOldItem->CopyAttributeTo(pkNewItem);
 }
diff --git a/src/game/src/item_manager.h b/src/game/src/item_manager.h
index 6ca4e9b..8beb832 100644
--- a/src/game/src/item_manager.h
+++ b/src/game/src/item_manager.h
@@ -5,9 +5,9 @@
 #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/src/item_manager_read_tables.cpp b/src/game/src/item_manager_read_tables.cpp
index 819be0c..97a4dc7 100644
--- a/src/game/src/item_manager_read_tables.cpp
+++ b/src/game/src/item_manager_read_tables.cpp
@@ -78,7 +78,7 @@ bool ITEM_MANAGER::ReadCommonDropItemFile(const char * c_pszFileName)
 
 			if (!ITEM_MANAGER::instance().GetVnumByOriginalName(d[i].szItemName, dwItemVnum))
 			{
-				// ̸ ã ȣ ˻
+				// 이름으로 못찾으면 번호로 검색
 				str_to_number(dwItemVnum, d[i].szItemName);
 				if (!ITEM_MANAGER::instance().GetTable(dwItemVnum))
 				{
@@ -223,7 +223,7 @@ bool ITEM_MANAGER::ReadSpecialDropItemFile(const char * c_pszFileName)
 
 					if (!GetVnumByOriginalName(name.c_str(), dwVnum))
 					{
-						if (name == "ġ" || name == "exp")
+						if (name == "\xB0\xE6\xC7\xE8\xC4\xA1" || name == "exp")
 						{
 							dwVnum = CSpecialItemGroup::EXP;
 						}
@@ -372,7 +372,8 @@ bool ITEM_MANAGER::ConvSpecialDropItemFile()
 
 				if (!GetVnumByOriginalName(name.c_str(), dwVnum))
 				{
-					if (	name == "ġ" ||
+					if (	name == "\xB0\xE6\xC7\xE8\xC4\xA1" ||
+						name == "exp" ||
 						name == "mob" ||
 						name == "slow" ||
 						name == "drain_hp" ||
@@ -405,7 +406,7 @@ bool ITEM_MANAGER::ConvSpecialDropItemFile()
 					str_to_number(iRarePct, pTok->at(3).c_str());
 				}
 
-				//    1   " ü"   1   100
+				//    1   "기술 수련서"   1   100
 				if (0 == dwVnum)
 					fprintf(fp, "	%d	%s	%d	%d\n", k, name.c_str(), iCount, iProb);
 				else
diff --git a/src/game/src/locale.cpp b/src/game/src/locale.cpp
index 74397a7..8477317 100644
--- a/src/game/src/locale.cpp
+++ b/src/game/src/locale.cpp
@@ -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/src/locale_service.cpp b/src/game/src/locale_service.cpp
index 4b3b7cf..fde3eb7 100644
--- a/src/game/src/locale_service.cpp
+++ b/src/game/src/locale_service.cpp
@@ -79,7 +79,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));
 
@@ -120,12 +120,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;
@@ -172,8 +172,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
 
@@ -230,15 +230,15 @@ int check_name_latin1(const char * str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ѱ ƴϰ ĭ̸ ߸ 
+		// 한글이 아니고 빈칸이면 잘못된 것
 		if (isspace(*tmp))
 			return 0;
 
-		// ѱ ƴϰ ڶ ϴ.
+		// 한글이 아니고 숫자라면 적합하다.
 		if (isdigit(*tmp))
 			continue;
 
-		// ѱ ƴϰ ̶ ϴ.   
+		// 한글이 아니고 영문이라면 적합하다.   
 		if (isalpha(*tmp))
 			continue;
 
@@ -275,7 +275,7 @@ int check_name_alphabet(const char * str)
 
 	for (tmp = str; *tmp; ++tmp)
 	{
-		// ĺ ڸ 
+		// 알파벳과 수자만 허용
 		if (isdigit(*tmp) || isalpha(*tmp))
 			continue;
 		else
@@ -324,7 +324,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;
 
@@ -337,7 +337,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;
@@ -345,7 +345,7 @@ int check_name_sjis(const char *str)
 		}
 		else
 		{
-			// ̳ ڴ Ѵ.
+			// 영문이나 수자는 허용한다.
 			if (isalpha(*p) || isdigit(*p))
 			{
 				p += 1;
@@ -888,7 +888,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()
@@ -1309,18 +1309,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에서 서비스 시작
 			return true;
 	}
 
diff --git a/src/game/src/main.cpp b/src/game/src/main.cpp
index 8d58f06..4425765 100644
--- a/src/game/src/main.cpp
+++ b/src/game/src/main.cpp
@@ -85,10 +85,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;
@@ -165,11 +165,11 @@ void ShutdownOnFatalError()
 		{
 			char buf[256];
 
-			strlcpy(buf, LC_TEXT(" ġ  ߻Ͽ ڵ õ˴ϴ."), sizeof(buf));
+			strlcpy(buf, LC_TEXT("A critical server error has occurred. The server will restart automatically."), sizeof(buf));
 			SendNotice(buf);
-			strlcpy(buf, LC_TEXT("10 ڵ  Ǹ,"), sizeof(buf));
+			strlcpy(buf, LC_TEXT("You will be disconnected automatically in 10 seconds."), sizeof(buf));
 			SendNotice(buf);
-			strlcpy(buf, LC_TEXT("5 Ŀ  ϽǼ ֽϴ."), sizeof(buf));
+			strlcpy(buf, LC_TEXT("You can connect again after 5 minutes."), sizeof(buf));
 			SendNotice(buf);
 		}
 
@@ -226,7 +226,7 @@ void heartbeat(LPHEART ht, int pulse)
 
 	t = get_dword_time();
 
-	// 1ʸ
+	// 1초마다
 	if (!(pulse % ht->passes_per_sec))
 	{
 		if (!g_bAuthServer)
@@ -273,14 +273,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();
 
-	//  5.08ʸ
+	// 약 5.08초마다
 	if (!(pulse % (passes_per_sec * 5 + 2)))
 	{
 		ITEM_MANAGER::instance().Update();
@@ -840,7 +840,7 @@ int io_loop(event_base * base)
 	LPDESC	d;
 	int		num_events, event_idx;
 
-	DESC_MANAGER::instance().DestroyClosed(); // PHASE_CLOSE ӵ ش.
+	DESC_MANAGER::instance().DestroyClosed(); // PHASE_CLOSE인 접속들을 끊어준다.
 	DESC_MANAGER::instance().TryConnect();
 
     // Process network events
diff --git a/src/game/src/marriage.cpp b/src/game/src/marriage.cpp
index dade791..22a10b3 100644
--- a/src/game/src/marriage.cpp
+++ b/src/game/src/marriage.cpp
@@ -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 std::min(50 + std::min(days * point_per_day, max_limit) + std::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/src/matrix_card.cpp b/src/game/src/matrix_card.cpp
index 80212fa..fd1dc4d 100644
--- a/src/game/src/matrix_card.cpp
+++ b/src/game/src/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/src/messenger_manager.cpp b/src/game/src/messenger_manager.cpp
index f1b2078..1d8641a 100644
--- a/src/game/src/messenger_manager.cpp
+++ b/src/game/src/messenger_manager.cpp
@@ -118,7 +118,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("The other person is unable to accept friend requests."));
 	    return;
 	}
 
@@ -171,7 +171,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("[Friends] You have added %s as a friend."), companion.c_str());
 	}
 
 	LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(companion.c_str());
@@ -213,7 +213,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("[Friends] You have deleted %s from the list."), companion.c_str());
 }
 
 void MessengerManager::RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion)
@@ -239,11 +239,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++ )
@@ -251,7 +251,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/src/messenger_manager.h b/src/game/src/messenger_manager.h
index f04c880..3aa8fbb 100644
--- a/src/game/src/messenger_manager.h
+++ b/src/game/src/messenger_manager.h
@@ -22,10 +22,10 @@ class MessengerManager : public singleton
 		void	RequestToAdd(LPCHARACTER ch, LPCHARACTER target);
 		void	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/src/mining.cpp b/src/game/src/mining.cpp
index ba92d93..ad34f28 100644
--- a/src/game/src/mining.cpp
+++ b/src/game/src/mining.cpp
@@ -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("Your mining points have reached their maximum. (%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("Your mining points have reached their maximum level."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can get lumberjack Deokbae to upgrade your Pickaxe."));
 			}
 			else
 			{
 				Pick_IncCurExp(pick);	
 
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" õ Ͽϴ! (%d/%d)"),
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your Mining Points have increased! (%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("Your mining points have reached their maximum level."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can get lumberjack Deokbae to upgrade your Pickaxe."));
 				}
 			}
 		}
@@ -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("You cannot mine without a Pick."));
 			return 0;
 		}
 		// END_OF_REFINE_PICK
 
 		if (!load)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("̻ ij  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Nothing to mine here."));
 			return 0;
 		}
 
@@ -371,11 +371,11 @@ namespace mining
 		if (Random::get(1, 100) <= iPct)
 		{
 			OreDrop(ch, load->GetRaceNum());
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The mining has been successful."));
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ä Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The mining has failed."));
 		}
 
 		PracticePick(ch, pick);
diff --git a/src/game/src/mob_manager.h b/src/game/src/mob_manager.h
index 1ac67a9..fe86391 100644
--- a/src/game/src/mob_manager.h
+++ b/src/game/src/mob_manager.h
@@ -3,8 +3,8 @@
 
 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/src/monarch.cpp b/src/game/src/monarch.cpp
index 27a9be6..28c2ad8 100644
--- a/src/game/src/monarch.cpp
+++ b/src/game/src/monarch.cpp
@@ -40,7 +40,7 @@ struct FHealMyEmpire
 
 			if (ch->IsPC() && m_bEmpire == ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ְ  ູ    äϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The energy is reflected because of the Emperors Blessing."));
 				ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
 				ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
 				ch->EffectPacket(SE_SPUP_BLUE);
@@ -61,7 +61,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("You do not have the emperor qualification."));
 			SPDLOG_ERROR("No Monarch pid {} ", pid);
 			return 0;
 		}
@@ -69,14 +69,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("After %d seconds you can use the Emperors Blessing."), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), GetMoney(Empire), price);
 		return 0;
 	}
 
@@ -86,14 +86,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]Tax : %d"), GetMoney(Empire) - price);
 	return 1;
 }
 
@@ -139,7 +139,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));
@@ -153,7 +153,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;
 
@@ -236,7 +236,7 @@ void CMonarch::PowerUp(BYTE Empire, bool On)
 
 	m_PowerUp[Empire] = On;
 
-	//   Ÿ 
+	// 군주 사자후 쿨타임 
 	m_PowerUpCT[Empire] = thecore_pulse() + PASSES_PER_SEC(60 * 10);
 }
 
@@ -247,13 +247,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;
 
@@ -263,11 +263,11 @@ bool IsMonarchWarpZone (int map_idx)
 	case 302:
 	case 303:
 	case 304:
-		//
-	case 351: // 漺
-	case 352: // 
+		//던전
+	case 351: // 적룡성
+	case 352: // 백룡지성
 		return false;
 	}
 
 	return (map_idx != 208 && map_idx != 216 && map_idx != 217);
-}
\ No newline at end of file
+}
diff --git a/src/game/src/monarch.h b/src/game/src/monarch.h
index 411dec9..8821563 100644
--- a/src/game/src/monarch.h
+++ b/src/game/src/monarch.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/src/motion.cpp b/src/game/src/motion.cpp
index 6c60509..3b85529 100644
--- a/src/game/src/motion.cpp
+++ b/src/game/src/motion.cpp
@@ -476,7 +476,7 @@ bool CMotion::LoadMobSkillFromFile(const char * c_pszFileName, CMob* pMob, int i
 						continue;
 
 					case MOTION_EVENT_TYPE_SPECIAL_ATTACKING:
-						//  ʹ ϳ  
+						// 구 데이터는 하나 라고 가정
 						if (!rkTextFileLoader.SetChildNode("spheredata", 0))
 						{
 							SPDLOG_ERROR("Motion: no sphere data {}", c_pszFileName);
diff --git a/src/game/src/motion.h b/src/game/src/motion.h
index e13c3c8..336db47 100644
--- a/src/game/src/motion.h
+++ b/src/game/src/motion.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/src/p2p.cpp b/src/game/src/p2p.cpp
index 193e09f..a596ce4 100644
--- a/src/game/src/p2p.cpp
+++ b/src/game/src/p2p.cpp
@@ -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/src/p2p.h b/src/game/src/p2p.h
index 0db231c..ffb301a 100644
--- a/src/game/src/p2p.h
+++ b/src/game/src/p2p.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/src/packet.h b/src/game/src/packet.h
index f602fb3..be9e28a 100644
--- a/src/game/src/packet.h
+++ b/src/game/src/packet.h
@@ -45,14 +45,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,
@@ -93,10 +93,10 @@ enum
 //	HEADER_CG_ROULETTE				= 200,
 //	HEADER_CG_RUNUP_MATRIX_ANSWER	= 201,
 
-	//NOTE : ̷ XXX  ̰ Packet  . ̷ ڵϰ  Ѿ.
-	//enum   ϴ. ƴ namepsace  ϴ..
-	// packet generator ٶ ʴ´. ̷ XX
-	//̷ٰ  ġ  åµ???
+	//NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
+	//enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
+	//정말 packet generator까지는 바라지도 않는다. 이런 씨XX
+	//이러다가 숫자 겹치면 누가 책임지는데???
 
 	HEADER_CG_DRAGON_SOUL_REFINE			= 205,
 	HEADER_CG_STATE_CHECKER					= 206,
@@ -286,7 +286,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,
@@ -439,8 +439,8 @@ typedef struct SPacketGGMessenger
 typedef struct SPacketGGFindPosition
 {
 	BYTE header;
-	DWORD dwFromPID; //  ġ Ϸ 
-	DWORD dwTargetPID; // ã 
+	DWORD dwFromPID; // 저 위치로 워프하려는 사람
+	DWORD dwTargetPID; // 찾는 사람
 } TPacketGGFindPosition;
 
 typedef struct SPacketGGWarpCharacter
@@ -481,14 +481,14 @@ typedef struct SPacketGGBlockChat
 	LONG	lBlockDuration;
 } TPacketGGBlockChat;
 
-/* Ŭ̾Ʈ   Ŷ */
+/* 클라이언트 측에서 보내는 패킷 */
 
 typedef struct command_text
 {
 	BYTE	bHeader;
 } TPacketCGText;
 
-/* α (1) */
+/* 로그인 (1) */
 typedef struct command_handshake
 {
 	BYTE	bHeader;
@@ -572,7 +572,7 @@ typedef struct command_player_create_success
 	TSimplePlayer	player;
 } TPacketGCPlayerCreateSuccess;
 
-// 
+// 공격
 typedef struct command_attack
 {
 	BYTE	bHeader;
@@ -594,7 +594,7 @@ enum EMoveFuncType
 	FUNC_SKILL = 0x80,
 };
 
-// ̵
+// 이동
 typedef struct command_move
 {
 	BYTE	bHeader;
@@ -613,22 +613,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;
@@ -788,7 +788,7 @@ typedef struct command_quest_confirm
 } TPacketCGQuestConfirm;
 
 /*
- *    Ŷ 
+ * 서버 측에서 보내는 패킷 
  */
 typedef struct packet_quest_confirm
 {
@@ -904,7 +904,7 @@ typedef struct packet_add_char
 	BYTE	bAttackSpeed;
 
 	BYTE	bStateFlag;
-	DWORD	dwAffectFlag[2];	// ȿ
+	DWORD	dwAffectFlag[2];	// 효과
 } TPacketGCCharacterAdd;
 
 typedef struct packet_char_additional_info
@@ -966,7 +966,7 @@ typedef struct packet_del_char
 	DWORD	id;
 } TPacketGCCharacterDelete;
 
-typedef struct packet_chat	//  Ŷ
+typedef struct packet_chat	// 가변 패킷
 {
 	BYTE	header;
 	WORD	size;
@@ -975,7 +975,7 @@ typedef struct packet_chat	// 
 	BYTE	bEmpire;
 } TPacketGCChat;
 
-typedef struct packet_whisper	//  Ŷ
+typedef struct packet_whisper	// 가변 패킷
 {
 	BYTE	bHeader;
 	WORD	wSize;
@@ -1199,7 +1199,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 
 	{
@@ -1222,7 +1222,7 @@ typedef struct packet_shop_update_price
 	INT				iPrice;
 } TPacketGCShopUpdatePrice;
 
-typedef struct packet_shop	//  Ŷ
+typedef struct packet_shop	// 가변 패킷
 {
 	BYTE        header;
 	WORD	size; 
@@ -1302,7 +1302,7 @@ typedef struct packet_move
 	DWORD		dwDuration;
 } TPacketGCMove;
 
-// 
+// 소유권
 typedef struct packet_ownership
 {
 	BYTE		bHeader;
@@ -1310,7 +1310,7 @@ typedef struct packet_ownership
 	DWORD		dwVictimVID;
 } TPacketGCOwnership;
 
-// ġ ȭ Ŷ bCount ŭ ٴ 
+// 위치 동기화 패킷의 bCount 만큼 붙는 단위
 typedef struct packet_sync_position_element
 {
 	DWORD	dwVID;
@@ -1318,11 +1318,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
@@ -1357,7 +1357,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
@@ -1373,7 +1373,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
@@ -1769,7 +1769,7 @@ typedef struct packet_mark_idxlist
 	BYTE    header;
 	DWORD	bufSize;
 	WORD	count;
-	//ڿ size * (WORD + WORD)ŭ  
+	//뒤에 size * (WORD + WORD)만큼 데이터 붙음
 } TPacketGCMarkIDXList;
 
 typedef struct packet_mark_block
@@ -1778,7 +1778,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
@@ -1917,8 +1917,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;
 
@@ -2127,13 +2127,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;
@@ -2166,7 +2166,7 @@ typedef struct SPacketGCHybridCryptKeys
 	}
 
 	BYTE	bHeader;
-	WORD    uDynamicPacketSize; //  Ŭ  DynamicPacketHeader  Ѵ -_-;
+	WORD    uDynamicPacketSize; // 빌어먹을 클라  DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
 	INT		KeyStreamLen;
 	BYTE*   pDataKeyStream;
 
@@ -2214,7 +2214,7 @@ typedef struct SPacketGCPackageSDB
 	}
 
 	BYTE	bHeader;
-	WORD    uDynamicPacketSize; //  Ŭ  DynamicPacketHeader  Ѵ -_-;
+	WORD    uDynamicPacketSize; // 빌어먹을 클라  DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
 	INT		iStreamLen;
 	BYTE*   m_pDataSDBStream;
 
@@ -2232,7 +2232,7 @@ typedef struct SPacketGCSpecificEffect
 	char effect_file[MAX_EFFECT_FILE_NAME];
 } TPacketGCSpecificEffect;
 
-// ȥ
+// 용혼석
 enum EDragonSoulRefineWindowRefineType
 {
 	DragonSoulRefineWindow_UPGRADE,
diff --git a/src/game/src/panama.cpp b/src/game/src/panama.cpp
index e37bd18..2ac3257 100644
--- a/src/game/src/panama.cpp
+++ b/src/game/src/panama.cpp
@@ -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/src/party.cpp b/src/game/src/party.cpp
index eab00a7..469b647 100644
--- a/src/game/src/party.cpp
+++ b/src/game/src/party.cpp
@@ -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()
 {
 	SPDLOG_TRACE("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("[Group] This group has been disbanded."));
 			}
 			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();
@@ -643,7 +643,7 @@ void CParty::Unlink(LPCHARACTER pkChr)
 	if (pkChr->IsPC())
 	{
 		SendPartyUnlinkOneToAll(pkChr);
-		//SendPartyUnlinkAllToOne(pkChr); //  ̹Ƿ  Unlink Ŷ  ʿ .
+		//SendPartyUnlinkAllToOne(pkChr); // 끊기는 것이므로 구지 Unlink 패킷을 보낼 필요 없다.
 
 		if (it->second.bRole == PARTY_ROLE_LEADER)
 		{
@@ -651,7 +651,7 @@ void CParty::Unlink(LPCHARACTER pkChr)
 
 			if (it->second.pCharacter->GetDungeon())
 			{
-				// TODO:    
+				// TODO: 던젼에 있으면 나머지도 나간다
 				FExitDungeon f;
 				ForEachNearMember(f);
 			}
@@ -898,9 +898,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)
@@ -1067,7 +1067,7 @@ void CParty::RemoveBonusForOne(DWORD pid)
 
 void CParty::HealParty()
 {
-	// XXX DELETEME Ŭ̾Ʈ Ϸɶ
+	// XXX DELETEME 클라이언트 완료될때까지
 	{
 		return;
 	}
@@ -1121,7 +1121,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("[Group] The target has not been found."));
 		return;
 	}
 
@@ -1129,13 +1129,13 @@ void CParty::SummonToLeader(DWORD pid)
 
 	if (!ch)
 	{
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> ȯϷ  ã  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] The target has not been found."));
 		return;
 	}
 
 	if (!ch->CanSummon(m_iLeadership))
 	{
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ>  ȯ  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot call the target."));
 		return;
 	}
 
@@ -1152,7 +1152,7 @@ void CParty::SummonToLeader(DWORD pid)
 	}
 
 	if (n == 0)
-		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ƽ> Ƽ  ġ ȯ  ϴ."));
+		l->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Group] You cannot call group members over to your current position."));
 	else
 	{
 		int i = Random::get(0, n - 1);
@@ -1355,7 +1355,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;
@@ -1371,7 +1371,7 @@ void CParty::Update()
 			continue;
 
 		if (bLongTimeExpBonusChanged && ch->GetDesc())
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ƽ   ݺ ߰ ġ ʽ ޽ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your group works well together, and group members near the group leader will receive an experience bonus."));
 
 		bool bNear = it->second.bNear;
 
@@ -1400,9 +1400,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)
@@ -1412,7 +1412,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");
 			}
@@ -1681,7 +1681,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/src/party.h b/src/game/src/party.h
index 116c3b2..7222803 100644
--- a/src/game/src/party.h
+++ b/src/game/src/party.h
@@ -5,7 +5,7 @@
 
 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/src/polymorph.cpp b/src/game/src/polymorph.cpp
index 48448b3..4255fb0 100644
--- a/src/game/src/polymorph.cpp
+++ b/src/game/src/polymorph.cpp
@@ -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("Transformation error."));
 		return false;
 	}
 	else
 	{
 		if (Random::get(1, 100) > iPolyPercent)
 		{
-			pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("а  Ͽϴ"));
+			pChar->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Transformation error."));
 			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("You learned the transmutation completely."));
 
 	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/src/priv_manager.cpp b/src/game/src/priv_manager.cpp
index 8a52c2c..c3f3a78 100644
--- a/src/game/src/priv_manager.cpp
+++ b/src/game/src/priv_manager.cpp
@@ -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 of the Guild %s raised up to %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 of the Guild %s normal again."), 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 has increased by %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 %s normal again."), 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 = std::max(val_ch, GetPrivByEmpire(0, type));
 		val = std::max(val, GetPrivByEmpire(ch->GetEmpire(), type));
 
diff --git a/src/game/src/priv_manager.h b/src/game/src/priv_manager.h
index 58b011d..a5e837b 100644
--- a/src/game/src/priv_manager.h
+++ b/src/game/src/priv_manager.h
@@ -2,10 +2,10 @@
 #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/src/pvp.cpp b/src/game/src/pvp.cpp
index 364c28c..e2b83f8 100644
--- a/src/game/src/pvp.cpp
+++ b/src/game/src/pvp.cpp
@@ -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("The battle with %s has begun!"), pkChr->GetName());
+			pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The battle with %s has begun!"), 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 challenged you to a battle!"), 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("You have challenged %s to a battle."), 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:		// 용맹한 전갑암순록	
 				break;
 
 			default:
@@ -460,7 +460,7 @@ bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
 		{
 		    if (g_protectNormalPlayer)
 		    {
-			// ڴ ȭ ѻ   .
+			// 범법자는 평화모드인 착한사람을 공격할 수 없다.
 			if (PK_MODE_PEACE == pkVictim->GetPKMode())
 			    return false;
 		    }
@@ -592,7 +592,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;
@@ -647,7 +647,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/src/pvp.h b/src/game/src/pvp.h
index 116c632..fadedc1 100644
--- a/src/game/src/pvp.h
+++ b/src/game/src/pvp.h
@@ -3,8 +3,8 @@
 
 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/src/questevent.cpp b/src/game/src/questevent.cpp
index 96933ba..e7d2c02 100644
--- a/src/game/src/questevent.cpp
+++ b/src/game/src/questevent.cpp
@@ -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/src/questlua.cpp b/src/game/src/questlua.cpp
index 7ee34d2..6e55692 100644
--- a/src/game/src/questlua.cpp
+++ b/src/game/src/questlua.cpp
@@ -414,7 +414,7 @@ namespace quest
 	}
 
 	/**
-	 * @version 05/06/08	Bang2ni - __get_guildid_byname ũƮ Լ 
+	 * @version 05/06/08	Bang2ni - __get_guildid_byname 스크립트 함수 등록
 	 */
 	bool CQuestManager::InitializeLua()
 	{
@@ -648,7 +648,7 @@ namespace quest
 
 		if (chReply)
 		{
-			// ð  ˾Ƽ 
+			// 시간 지나면 알아서 닫힘
 		}
 
 		if (chWait)
@@ -668,12 +668,12 @@ namespace quest
 
 		SPDLOG_DEBUG("GotoConfirmState vid {} msg '{}', timeout {}", dwVID, szMsg, iTimeout);
 
-		// 1. 濡 Ȯâ 
-		// 2.  Ȯ ٸٰ ǥϴ â 
-		// 3. ŸӾƿ  (ŸӾƿ Ǹ  â ݰ Ե â  )
+		// 1. 상대방에게 확인창 띄움
+		// 2. 나에게 확인 기다린다고 표시하는 창 띄움
+		// 3. 타임아웃 설정 (타임아웃 되면 상대방 창 닫고 나에게도 창 닫으라고 보냄)
 
 		// 1
-		//    ׳ 濡  ʴ´. ŸӾƿ ؼ ѾԵ
+		// 상대방이 없는 경우는 그냥 상대방에게 보내지 않는다. 타임아웃에 의해서 넘어가게됨
 		LPCHARACTER ch = CHARACTER_MANAGER::instance().Find(dwVID);
 		if (ch && ch->IsPC())
 		{
@@ -709,7 +709,7 @@ namespace quest
 		AddScript("[INPUT]");
 		SendScript();
 
-		// ð  
+		// 시간 제한을 검
 		//event_create(input_timeout_event, dwEI, PASSES_PER_SEC(iTimeout));
 	}
 
diff --git a/src/game/src/questlua_affect.cpp b/src/game/src/questlua_affect.cpp
index 20c0cf2..fa0c0be 100644
--- a/src/game/src/questlua_affect.cpp
+++ b/src/game/src/questlua_affect.cpp
@@ -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;
 
 		int value = (int) 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/src/questlua_dungeon.cpp b/src/game/src/questlua_dungeon.cpp
index 3f9e8ba..cd70595 100644
--- a/src/game/src/questlua_dungeon.cpp
+++ b/src/game/src/questlua_dungeon.cpp
@@ -991,7 +991,7 @@ namespace quest
 		return 0;
 	}
 
-	int dungeon_exit(lua_State* L) //    ġ 
+	int dungeon_exit(lua_State* L) // 던전에 들어오기 전 위치로 보냄
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
@@ -999,7 +999,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();
@@ -1127,7 +1127,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))
 		{
@@ -1192,7 +1192,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/src/questlua_global.cpp b/src/game/src/questlua_global.cpp
index 50daeba..005750d 100644
--- a/src/game/src/questlua_global.cpp
+++ b/src/game/src/questlua_global.cpp
@@ -790,7 +790,7 @@ namespace quest
 		return 1;
 	}
 
-	// ο state .
+	// 새로운 state를 만든다.
 	int _set_quest_state(lua_State* L)
 	{
 		if (!lua_isstring(L, 1) || !lua_isstring(L, 2))
@@ -938,7 +938,7 @@ namespace quest
 
 		event_create(warp_all_to_village_event, info, PASSES_PER_SEC(iSec));
 
-		SendNoticeMap(LC_TEXT("   ̵˴ϴ."), iMapIndex, false);
+		SendNoticeMap(LC_TEXT("Everyone will be teleported into the city shortly."), iMapIndex, false);
 
 		return 0;
 	}
@@ -1012,7 +1012,7 @@ namespace quest
 		return 0;
 	}
 
-	//:   ȵǴ ʿ 
+	//주의: 몹 리젠이 안되는 맵에서만 사용
 	int _regen_in_map( lua_State * L )
 	{
 		int iMapIndex = static_cast(lua_tonumber(L, 1));
diff --git a/src/game/src/questlua_guild.cpp b/src/game/src/questlua_guild.cpp
index 8ed5f97..0b43159 100644
--- a/src/game/src/questlua_guild.cpp
+++ b/src/game/src/questlua_guild.cpp
@@ -297,12 +297,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();
 
@@ -338,23 +338,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/src/questlua_horse.cpp b/src/game/src/questlua_horse.cpp
index 1f44735..5ea7def 100644
--- a/src/game/src/questlua_horse.cpp
+++ b/src/game/src/questlua_horse.cpp
@@ -61,10 +61,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;
@@ -212,10 +212,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/src/questlua_item.cpp b/src/game/src/questlua_item.cpp
index c5e0978..6da9fe8 100644
--- a/src/game/src/questlua_item.cpp
+++ b/src/game/src/questlua_item.cpp
@@ -437,7 +437,7 @@ namespace quest
 			ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);
 			pkNewItem->AttrLog();
 
-			// !
+			// 성공!
 			lua_pushboolean(L, 1);			
 		}
 
diff --git a/src/game/src/questlua_marriage.cpp b/src/game/src/questlua_marriage.cpp
index cbe769e..975ed32 100644
--- a/src/game/src/questlua_marriage.cpp
+++ b/src/game/src/questlua_marriage.cpp
@@ -162,7 +162,7 @@ namespace quest
 		}
 		if (pMarriage->pWeddingInfo)
 		{
-			// ȥ  û
+			// 결혼식 끝내기 요청
 			pMarriage->RequestEndWedding();
 		}
 		return 0;
diff --git a/src/game/src/questlua_monarch.cpp b/src/game/src/questlua_monarch.cpp
index 53142fe..10ac588 100644
--- a/src/game/src/questlua_monarch.cpp
+++ b/src/game/src/questlua_monarch.cpp
@@ -137,7 +137,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("You do not have the emperor qualification."));
 				quest_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -145,22 +145,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("When the Blessing of the Emperor is used %s the HP and SP are restored again."), EMPIRE_NAME(ch->GetEmpire()));
 			SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
-			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ູ Ͽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("The Emperor Blessing is activated."));
 		}
 
 		return 1;
 	}
 
-	//   Ʈ Լ 
+	// 군주의 사자후 퀘스트 함수 
 	int monarch_powerup(lua_State * L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); 
@@ -168,37 +168,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("You do not have the emperor qualification."));
 				quest_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("The Treasury is running out of money. Currently: %u Amount needed: %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("After %d seconds you can use the Emperors Blessing."), next_sec);
 			return 0;
 		}
 
-		//  	
+		//군주의 사자후 적용	
 		CMonarch::instance().PowerUp(ch->GetEmpire(), true); 
 	
-		//  ð 	
+		//군주의 사자후 적용시간 	
 		int g_nMonarchPowerUpCT = 60 * 3;
 		
 		monarch_powerup_event_info* info = AllocEventInfo();
@@ -210,13 +210,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("Due to Emperor Sa-Za-Hu, the player %s will receive an attack power increase of 10 %% for 3 minutes in this area."), EMPIRE_NAME(ch->GetEmpire()));
 		
 		SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
 		return 1;		
 	}
-	//  ݰ Ʈ Լ 
+	// 군주의 금강권 퀘스트 함수 
 	int monarch_defenseup(lua_State * L)
 	{
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); 
@@ -225,37 +225,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("You do not have the emperor qualification."));
 				quest_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("The Treasury is running out of money. Currently: %u Amount needed: %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("After %d seconds you can use the Emperors Blessing."), next_sec);
 			return 0;
 		}	
 		
-		// ݰ 	
+		//군주의 금강권 적용	
 		CMonarch::instance().DefenseUp(ch->GetEmpire(), true); 
 
-		// ݰ  ð
+		//군주의 금강권 적용 시간
 		int g_nMonarchDefenseUpCT = 60 * 3;
 		
 		monarch_defenseup_event_info* info = AllocEventInfo();
@@ -267,7 +267,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("By the Emperor Geum-Gang-Gwon the player %s gets 10 %% more armour for 3 minutes."), EMPIRE_NAME(ch->GetEmpire()));
 
 		SendNoticeMap(szNotice, ch->GetMapIndex(), false);
 
@@ -311,7 +311,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("You do not have the emperor qualification."));
 				quest_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -326,13 +326,13 @@ namespace quest
 			int x = ch->GetX();
 			int 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, CASTLE_FROG_PRICE);
 					return 0;
 				}
 
@@ -340,7 +340,7 @@ namespace quest
 
 				if (mob)
 				{
-					// 
+					// 국고감소
 					CMonarch::instance().SendtoDBDecMoney(CASTLE_FROG_PRICE, ch->GetEmpire(), ch);
 					castle_save();
 				}
@@ -399,7 +399,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("You do not have the emperor qualification."));
 				quest_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -407,7 +407,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("You are only able to use this function while you are at the castle."));
 			return 0;
 		}
 
@@ -417,18 +417,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("The Treasury is running out of money. Currently: %u Amount needed: %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();
 			}
@@ -448,7 +448,7 @@ namespace quest
 		{
 			if (!ch->IsGM())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT(" ڰ   ʽϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO ,LC_TEXT("You do not have the emperor qualification."));
 				quest_err("No Monarch pid %d ", ch->GetPlayerID());
 				return 0;
 			}
@@ -457,14 +457,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: The Gold Bar has been paid back to your kingdom's safe."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST: In your kingdom's safe there are: %d"), empire_money);
 			castle_save();
 			return 1;
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST : Ȳݵβ  ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("TEST: You cannot pay the Gold Bar back into your kingdom's safe."));
 			return 0;
 		}
 	}
@@ -487,26 +487,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("This function can only be used by the emperor."));
 			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("Cooldown time for approximately %d seconds"), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, WarpPrice);
 			return 0;	
 		}
 
@@ -522,18 +522,18 @@ namespace quest
 			{
 				if (pkCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot be warped to an unknown player."));
 					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("Adding player %d into the channel. (Present channel %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("Unable to navigate to the region."));	
 					return 0;
 				}
 
@@ -544,13 +544,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("Warp to player %s."), name.c_str());
 					ch->WarpSet(pos.x, pos.y);
 
-					//  谨	
+					//군주 돈 삭감	
 					CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-					//Ÿ ʱȭ 
+					//쿨타임 초기화 
 					ch->SetMC(CHARACTER::MI_WARP);
 				}
 
@@ -566,13 +566,13 @@ namespace quest
 		{
 			if (tch->GetEmpire() != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ÿ Դ ̵Ҽ ϴ"));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot be warped to an unknown player."));
 				return 0;
 			}
 
 			if (!IsMonarchWarpZone(tch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 				return 0;
 			}
 
@@ -580,14 +580,14 @@ namespace quest
 			y = tch->GetY();
 		}
 
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s Է ̵մϴ"), name.c_str());
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Warp to player %s."), name.c_str());
 		ch->WarpSet(x,y);
 		ch->Stop();
 
-		//  谨	
+		//군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
 
-		//Ÿ ʱȭ 
+		//쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_WARP); 
 
 		return 0;
@@ -604,22 +604,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("My information about the emperor"));
 		
 			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("[%sMonarch] : %s Yang owned %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("[%sMonarch] : %s"), EMPIRE_NAME(n), p->name[n]);
 			}
 		}
 		else
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT(" "));
+			ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("Information about the emperor"));
 
 			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("[%sMonarch] : %s"), EMPIRE_NAME(n), p->name[n]);
 		}
 
 		return 0;
@@ -642,25 +642,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("This function can only be used by the emperor."));
 			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("Cooldown time for approximately %d seconds"), 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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, WarpPrice);
 			return 0;	
 		}
 
@@ -674,24 +674,24 @@ namespace quest
 			{
 				if (pkCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 					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("The player %s is on channel %d at the moment. (Your channel: %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("Unable to navigate to the region."));	
 					return 0;
 				}
 				if (!IsMonarchWarpZone(ch->GetMapIndex()))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 					return 0;
 				}
 
@@ -703,17 +703,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("You have recruited %s players."), 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("There is no user with this name."));
 			}
 
 			return 0;
@@ -721,31 +721,31 @@ namespace quest
 
 		if (ch == tch)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit yourself."));
 			return 0;
 		}
 
 		if (tch->GetEmpire() != ch->GetEmpire())
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 			return 0;
 		}
 
 		if (!IsMonarchWarpZone(tch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 			return 0;
 		}
 		if (!IsMonarchWarpZone(ch->GetMapIndex()))
 		{
-			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+			ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 			return 0;
 		}
 		tch->WarpSet(ch->GetX(), ch->GetY(), ch->GetMapIndex());
 
-		//   谨	
+		// 군주 돈 삭감	
 		CMonarch::instance().SendtoDBDecMoney(WarpPrice, ch->GetEmpire(), ch);
-		// Ÿ ʱȭ 
+		// 쿨타임 초기화 
 		ch->SetMC(CHARACTER::MI_TRANSFER);
 		return 0;
 	}
@@ -762,7 +762,7 @@ namespace quest
 		
 		if (ch->IsMonarch() == false)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ָ   Դϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This function can only be used by the emperor."));
 			return 0;
 		}
 
@@ -826,13 +826,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("This function can only be used by the emperor."));
 			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("Cooldown time for approximately %d seconds"), ch->GetMCLTime(CHARACTER::MI_TRANSFER));
 			return 0;
 		}
 		
@@ -841,7 +841,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("The Treasury is running out of money. Currently: %u Amount needed: %u"), NationMoney, ciTransferCost);
 			return 0;
 		}
 
@@ -857,25 +857,25 @@ namespace quest
 			{
 				if (pCCI->bEmpire != ch->GetEmpire())
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 					return 0;
 				}
 
 				if (pCCI->bChannel != g_bChannel)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s  %d äο Դϴ. ( ä: %d)"),
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The player %s is on channel %d at the moment. (Your channel: %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("Unable to navigate to the region."));
 					return 0;
 				}
 				if (!IsMonarchWarpZone(ch->GetMapIndex()))
 				{
-					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+					ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 					return 0;
 				}
 
@@ -886,14 +886,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("You sent a summons request"));
 
 				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("There is no user with this name."));
 				return 0;
 			}
 		}
@@ -901,30 +901,30 @@ namespace quest
 		{
 			if (pTargetChar == ch)
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ڽ ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit yourself."));
 				return 0;
 			}
 
 			if (pTargetChar->GetEmpire() != ch->GetEmpire())
 			{
-				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ٸ   ȯ  ϴ."));
+				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot recruit players from another kingdom."));
 				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 is too far away."), pTargetChar->GetName());
 				return 0;
 			}
 
 			if (!IsMonarchWarpZone(pTargetChar->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ̵  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to navigate to the region."));
 				return 0;
 			}
 			if (!IsMonarchWarpZone(ch->GetMapIndex()))
 			{
-				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("ش  ȯ  ϴ."));
+				ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT("Unable to summon to the region."));
 				return 0;
 			}
 
@@ -937,7 +937,7 @@ namespace quest
 
 			event_create(monarch_transfer2_event, info, 1);
 
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ȯ û ½ϴ"));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You sent a summons request"));
 
 			CMonarch::instance().SendtoDBDecMoney(ciTransferCost, ch->GetEmpire(), ch);
 			ch->SetMC(CHARACTER::MI_TRANSFER);
diff --git a/src/game/src/questlua_party.cpp b/src/game/src/questlua_party.cpp
index 607377e..022ff4c 100644
--- a/src/game/src/questlua_party.cpp
+++ b/src/game/src/questlua_party.cpp
@@ -323,8 +323,8 @@ namespace quest
 		}
 	};
 	
-	// Ƽ   ִ Լ.
-	//  ʿ ִ Ƽ  ޴´.
+	// 파티 단위로 버프 주는 함수.
+	// 같은 맵에 있는 파티원만 영향을 받는다.
 	int party_give_buff (lua_State* L)
 	{
 		CQuestManager & q = CQuestManager::instance();
@@ -405,7 +405,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/src/questlua_pc.cpp b/src/game/src/questlua_pc.cpp
index d7c2f64..205831f 100644
--- a/src/game/src/questlua_pc.cpp
+++ b/src/game/src/questlua_pc.cpp
@@ -227,15 +227,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("You can't teleport while a trading window, storeroom, etc. is open" ));
 
 			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("You cannot go elsewhere for a period of time after the trade." ) );
 			return;
 		}
 		//END_PREVENT_PORTAL_AFTER_EXCHANGE
@@ -243,7 +243,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("You cannot go elsewhere for a period of time after the trade." ) );
 				return;
 			}
 
@@ -400,12 +400,12 @@ namespace quest
 			{
 				if (dwVnums[i] == 1)
 				{
-					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(" %d  ȹ߽ϴ."), dwCounts[i]);
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have received %d Yang."), 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("A mysterious light appears from the tree."));
+					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have received %d experience points."), dwCounts[i]);
 				}
 			}
 		}
@@ -447,7 +447,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))
 		{
@@ -487,7 +487,7 @@ namespace quest
 
 		DWORD dwVnum;
 
-		if (lua_isnumber(L, 1)) // ȣΰ ȣ ش.
+		if (lua_isnumber(L, 1)) // 번호인경우 번호로 준다.
 		{
 			dwVnum = (int) lua_tonumber(L, 1);
 		}
@@ -543,7 +543,7 @@ namespace quest
 
 		DWORD dwVnum;
 
-		if (lua_isnumber(L, 1)) // ȣΰ ȣ ش.
+		if (lua_isnumber(L, 1)) // 번호인경우 번호로 준다.
 		{
 			dwVnum = (int) lua_tonumber(L, 1);
 		}
@@ -804,7 +804,7 @@ namespace quest
 
 		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
 
-		if (val > 0) // Ű ̹Ƿ   
+		if (val > 0) // 증가시키는 것이므로 무조건 성공 리턴
 			ch->PointChange(POINT_SP, val);
 		else if (val < 0)
 		{
@@ -857,18 +857,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 - std::max(ch->GetLevel(), 9));
 			ch->PointChange(POINT_STAT, ((std::clamp(newLevel, 1, 90) - ch->GetLevel()) * 3) + ch->GetPoint(POINT_LEVEL_STEP));
-			//
+			//레벨
 			ch->PointChange(POINT_LEVEL, newLevel - ch->GetLevel(), false, true);
 			//HP, SP
 			ch->SetRandomHP((newLevel - 1) * Random::get(JobInitialPoints[ch->GetJob()].hp_per_lv_begin, JobInitialPoints[ch->GetJob()].hp_per_lv_end));
 			ch->SetRandomSP((newLevel - 1) * Random::get(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());
 			
@@ -931,8 +931,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);
@@ -1257,7 +1257,7 @@ namespace quest
 		ch->RemoveAffect(AFFECT_MOUNT);
 		ch->RemoveAffect(AFFECT_MOUNT_BONUS);
 
-		//  ȯǾ ٴϴ ¶  
+		// 말이 소환되어 따라다니는 상태라면 말부터 없앰
 		if (ch->GetHorse())
 			ch->HorseSummon(false);
 
@@ -1525,7 +1525,7 @@ namespace quest
 
 		if (pct == 100 || Random::get(1, 100) <= pct)
 		{
-			//  
+			// 개량 성공
 			lua_pushboolean(L, 1);
 
 			LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(item->GetRefinedVnum(), 1, 0, false);
@@ -1562,7 +1562,7 @@ namespace quest
 		}
 		else
 		{
-			//  
+			// 개량 실패
 			lua_pushboolean(L, 0);
 		}
 
@@ -1599,7 +1599,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());
@@ -1848,14 +1848,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
 			{
@@ -1864,16 +1864,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},
+				{"\xBF\xB5\xBE\xC8\xC0\xBE\xBC\xBA",	4743,	9548},
+				{"\xC0\xD3\xC1\xF6\xB0\xEE",		3235,	9086},
+				{"\xC0\xDA\xBE\xE7\xC7\xF6",		3531,	8829},
+				{"\xC1\xB6\xBE\xC8\xC0\xBE\xBC\xBA",	638,	1664},
+				{"\xBD\xC2\xB7\xE6\xB0\xEE",		1745,	1909},
+				{"\xBA\xB9\xC1\xA4\xC7\xF6",		1455,	2400},
+				{"\xC6\xF2\xB9\xAB\xC0\xBE\xBC\xBA",	9599,	2692},
+				{"\xB9\xE6\xBB\xEA\xB0\xEE",		8036,	2984},
+				{"\xB9\xDA\xB6\xF3\xC7\xF6",		8639,	2460},
+				{"\xBC\xAD\xC7\xD1\xBB\xEA",		4350,	2143},
 			};
 			int idx  = (int)lua_tonumber(L, 1);
 
@@ -2056,13 +2056,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() )
 		{
 			lua_pushnumber(L, 5);
@@ -2102,7 +2102,7 @@ teleport_area:
 			int	count = 0;
 			str_to_number(count, row[0]);
 
-			// ̹ ش ̸  ijͰ 
+			// 이미 해당 이름을 가진 캐릭터가 있음
 			if ( count != 0 )
 			{
 				lua_pushnumber(L, 3);
@@ -2353,8 +2353,8 @@ teleport_area:
 
 		int idx = 1;
 
-		// ȥ   ʿ  .
-		//  Լ Ż Լ  ϴ.
+		// 용혼석 슬롯은 할 필요 없을 듯.
+		// 이 함수는 탈석서용 함수인 듯 하다.
 		for ( int i=0; i < INVENTORY_MAX_NUM + WEAR_MAX_NUM; i++ )
 		{
 			LPITEM pItem = pChar->GetInventoryItem(i);
@@ -2743,7 +2743,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();
 
@@ -2986,17 +2986,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/src/questlua_pet.cpp b/src/game/src/questlua_pet.cpp
index d5c62dd..cc1d6a1 100644
--- a/src/game/src/questlua_pet.cpp
+++ b/src/game/src/questlua_pet.cpp
@@ -34,13 +34,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);
@@ -62,7 +62,7 @@ namespace quest
 		if (0 == petSystem)
 			return 0;
 
-		// ȯ vnum
+		// 소환수의 vnum
 		DWORD mobVnum= lua_isnumber(L, 1) ? lua_tonumber(L, 1) : 0;
 
 		petSystem->Unsummon(mobVnum);
@@ -94,7 +94,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/src/questlua_quest.cpp b/src/game/src/questlua_quest.cpp
index b442cb5..e90b482 100644
--- a/src/game/src/questlua_quest.cpp
+++ b/src/game/src/questlua_quest.cpp
@@ -140,7 +140,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())
 		{
 			quest_err("FATAL ERROR! Yield occur in other_pc_block.");
@@ -214,10 +214,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
@@ -227,7 +227,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/src/questlua_target.cpp b/src/game/src/questlua_target.cpp
index 2f7264b..01abf0d 100644
--- a/src/game/src/questlua_target.cpp
+++ b/src/game/src/questlua_target.cpp
@@ -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/src/questmanager.cpp b/src/game/src/questmanager.cpp
index e9ceb2f..bc2d1dc 100644
--- a/src/game/src/questmanager.cpp
+++ b/src/game/src/questmanager.cpp
@@ -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;
 
@@ -253,9 +253,9 @@ namespace quest
 
 			if (!pPC->GetRunningQuestState()->chat_scripts.empty())
 			{
-				// ä ̺Ʈ 
-				//  Ʈ  Ʈ  ΰ  Ʈ ̹Ƿ
-				//  õ Ʈ Ѵ.
+				// 채팅 이벤트인 경우
+				// 현재 퀘스트는 어느 퀘스트를 실행할 것인가를 고르는 퀘스트 이므로
+				// 끝내고 선택된 퀘스트를 실행한다.
 				QuestState& old_qs = *pPC->GetRunningQuestState();
 				CloseState(old_qs);
 
@@ -368,7 +368,7 @@ namespace quest
 			pPC->CancelRunning();
 		}
 
-		//   α׾ƿ Ѵ.
+		// 지우기 전에 로그아웃 한다.
 		Logout(ch->GetPlayerID());
 
 		if (ch == m_pCurrentCharacter)
@@ -380,7 +380,7 @@ namespace quest
 
 	///////////////////////////////////////////////////////////////////////////////////////////
 	//
-	// Quest Event 
+	// Quest Event 관련
 	//
 	///////////////////////////////////////////////////////////////////////////////////////////
 	void CQuestManager::Login(unsigned int pc, const char * c_pszQuest)
@@ -427,9 +427,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
 			m_mapNPC[npc].OnKill(*pPC);
@@ -577,7 +577,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("Your request is loading. Please wait."));
 
 				return;
 			}
@@ -602,7 +602,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("Your request is loading. Please wait."));
 				}
 				return;
 			}
@@ -627,7 +627,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("Your request is loading. Please wait."));
 				}
 				return false;
 			}
@@ -654,7 +654,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("Your request is loading. Please wait."));
 				}
 				return false;
 			}
@@ -684,7 +684,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)
 	{
         SPDLOG_TRACE("questmanager::SIGUse Start : itemVnum : {} PC : {}", item->GetOriginalVnum(), pc);
@@ -696,7 +696,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("Your request is loading. Please wait."));
 				}
 				return false;
 			}
@@ -750,7 +750,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("Your request is loading. Please wait."));
 
 				return false;
 			}
@@ -826,7 +826,7 @@ namespace quest
 		else
 			SPDLOG_ERROR("QUEST no such pc id : {}", pc);
 	}
-	//   ׽Ʈ
+	//독일 선물 기능 테스트
 	void CQuestManager::ItemInformer(unsigned int pc,unsigned int vnum)
 	{
 		
@@ -836,7 +836,7 @@ namespace quest
 		m_mapNPC[QUEST_NO_NPC].OnItemInformer(*pPC,vnum);
 	}
 	///////////////////////////////////////////////////////////////////////////////////////////
-	// END OF Ʈ ̺Ʈ ó
+	// END OF 퀘스트 이벤트 처리
 	///////////////////////////////////////////////////////////////////////////////////////////
 
 	///////////////////////////////////////////////////////////////////////////////////////////
@@ -1258,19 +1258,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
 				{
 					int lMapIndex;
@@ -1306,7 +1306,7 @@ namespace quest
 			}
 			else if (!value && prev_value)
 			{
-				//  ش
+				// 있으면 지워준다
 				CharacterVectorInteractor i;
 
 				if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(xmas::MOB_XMAS_FIRWORK_SELLER_VNUM, i))
@@ -1395,7 +1395,7 @@ namespace quest
 		}
 		else if (name == "new_xmas_event")
 		{
-			// 20126 newŸ.
+			// 20126 new산타.
 			static DWORD new_santa = 20126;
 			if (value != 0)
 			{
@@ -1534,12 +1534,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");
@@ -1578,10 +1578,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))
 		{
@@ -1753,7 +1753,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("Your request is loading. Please wait."));
 				}
 				return false;
 			}
diff --git a/src/game/src/questmanager.h b/src/game/src/questmanager.h
index efac155..7f505f4 100644
--- a/src/game/src/questmanager.h
+++ b/src/game/src/questmanager.h
@@ -56,7 +56,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();
@@ -106,7 +106,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);	//독일선물기능
 
 			//
 
@@ -254,7 +254,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/src/questnpc.cpp b/src/game/src/questnpc.cpp
index 864912f..ddaf676 100644
--- a/src/game/src/questnpc.cpp
+++ b/src/game/src/questnpc.cpp
@@ -131,7 +131,7 @@ namespace quest
 			//
 
 			///////////////////////////////////////////////////////////////////////////
-			//  Index (   Ƿ ִ ,  index   )
+			// 순서 Index (여러개 있을 수 있으므로 있는 것임, 실제 index 값은 쓰지 않음)
 			j = i;
 			i = s.find('.', i + 1);
 
@@ -410,7 +410,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))
@@ -494,8 +494,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());		
 				}
 				
@@ -805,7 +805,7 @@ namespace quest
 		QuestMapType & rmapEventOwnQuest = m_mapOwnQuest[EventIndex];
 		QuestMapType::iterator itQuestMap = rmapEventOwnQuest.find(quest_index);
 
-		// ׷ Ʈ 
+		// 그런 퀘스트가 없음
 		if (itQuestMap == rmapEventOwnQuest.end())
 			return false;
 
@@ -817,7 +817,7 @@ namespace quest
 		}
 		else
 		{
-			//  ұ?
+			// 새로 시작할까요?
 			if (CQuestManager::instance().CanStartQuest(itQuestMap->first, pc) && HasStartState(itQuestMap->second))
 				iState = 0;
 			else
@@ -917,7 +917,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/src/questpc.cpp b/src/game/src/questpc.cpp
index 5d14925..766087c 100644
--- a/src/game/src/questpc.cpp
+++ b/src/game/src/questpc.cpp
@@ -307,10 +307,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);
@@ -623,7 +623,7 @@ namespace quest
 	{
 		if (m_bIsGivenReward)
 		{
-			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Ʈ>      ־ ٽ  ʽϴ."));
+			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Quest] You have already received your reward."));
 			m_bIsGivenReward = false;
 		}
 
diff --git a/src/game/src/questpc.h b/src/game/src/questpc.h
index 9a95080..1fd64fe 100644
--- a/src/game/src/questpc.h
+++ b/src/game/src/questpc.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/src/refine.h b/src/game/src/refine.h
index 77a1e05..a567406 100644
--- a/src/game/src/refine.h
+++ b/src/game/src/refine.h
@@ -5,8 +5,8 @@
 
 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/src/regen.cpp b/src/game/src/regen.cpp
index eaff2b3..8ddb138 100644
--- a/src/game/src/regen.cpp
+++ b/src/game/src/regen.cpp
@@ -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, int lMapIndex, int base_x, int base_y, LPDUN
 				// before the call to CHARACTER::SetRegen()
 			}
 
-			// ó   ش.
+			// 처음엔 무조건 리젠 해준다.
 			regen_spawn_dungeon(regen, pDungeon, bOnce);
 
 		}
@@ -576,7 +576,7 @@ bool regen_load_in_file(const char* filename, int lMapIndex, int base_x, int bas
 				}
 			}
 
-			// ó   ش.
+			// 처음엔 무조건 리젠 해준다.
 			regen_spawn(regen, true);
 		}
 	}
@@ -683,11 +683,11 @@ bool regen_load(const char* filename, int 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/src/safebox.cpp b/src/game/src/safebox.cpp
index 0586fe5..a70e83a 100644
--- a/src/game/src/safebox.cpp
+++ b/src/game/src/safebox.cpp
@@ -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/src/sectree.cpp b/src/game/src/sectree.cpp
index 7273d1e..daab5bb 100644
--- a/src/game/src/sectree.cpp
+++ b/src/game/src/sectree.cpp
@@ -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/src/sectree.h b/src/game/src/sectree.h
index eb67503..3a5df0b 100644
--- a/src/game/src/sectree.h
+++ b/src/game/src/sectree.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(int x, int y);
 		bool				IsAttr(int x, int y, DWORD dwFlag);
 
-		void				CloneAttribute(LPSECTREE tree); // private map ó 
+		void				CloneAttribute(LPSECTREE tree); // private map 처리시 사용
 
-		int				GetEventAttribute(int x, int y); // 20050313   
+		int				GetEventAttribute(int x, int y); // 20050313 현재는 사용하지 않음
 
 		void				SetAttribute(DWORD x, DWORD y, DWORD dwAttr);
 		void				RemoveAttribute(DWORD x, DWORD y, DWORD dwAttr);
diff --git a/src/game/src/sectree_manager.cpp b/src/game/src/sectree_manager.cpp
index 80374b7..498d5af 100644
--- a/src/game/src/sectree_manager.cpp
+++ b/src/game/src/sectree_manager.cpp
@@ -76,8 +76,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
@@ -106,7 +106,7 @@ void SECTREE_MAP::Build()
 	}
 
 	//
-	//  sectree   sectree Ʈ .
+	// 모든 sectree에 대해 주위 sectree들 리스트를 만든다.
 	//
 	MapType::iterator it = map_.begin();
 
@@ -114,7 +114,7 @@ void SECTREE_MAP::Build()
 	{
 		LPSECTREE tree = it->second;
 
-		tree->m_neighbor_list.push_back(tree); // ڽ ִ´.
+		tree->m_neighbor_list.push_back(tree); // 자신을 넣는다.
 
 		SPDLOG_TRACE("{}x{}", (int) tree->m_id.coord.x, (int) tree->m_id.coord.y);
 
@@ -153,7 +153,7 @@ void SECTREE_MAP::Build()
 	};
 
 	//
-	//  sectree   sectree Ʈ .
+	// 모든 sectree에 대해 주위 sectree들 리스트를 만든다.
 	//
 	MapType::iterator it = map_.begin();
 
@@ -161,7 +161,7 @@ void SECTREE_MAP::Build()
 	{
 		LPSECTREE tree = it->second;
 
-		tree->m_neighbor_list.push_back(tree); // ڽ ִ´.
+		tree->m_neighbor_list.push_back(tree); // 자신을 넣는다.
 
 		SPDLOG_TRACE("{}x{}", (int) tree->m_id.coord.x, (int) tree->m_id.coord.y);
 
@@ -230,7 +230,7 @@ LPSECTREE SECTREE_MANAGER::Get(DWORD dwIndex, DWORD x, DWORD y)
 }
 
 // -----------------------------------------------------------------------------
-// Setting.txt   SECTREE 
+// Setting.txt 로 부터 SECTREE 만들기
 // -----------------------------------------------------------------------------
 int SECTREE_MANAGER::LoadSettingFile(int lMapIndex, const char * c_pszSettingFileName, TMapSetting & r_setting)
 {
@@ -365,10 +365,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)
 {
@@ -472,7 +472,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;
@@ -543,7 +543,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;
@@ -677,7 +677,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;
@@ -768,7 +768,7 @@ int SECTREE_MANAGER::Build(const char * c_pszListFileName, const char* c_pszMapB
 
         SPDLOG_TRACE("[BUILD] Build {} {} {} ",c_pszMapBasePath, szMapName, iIndex );
 
-		//      ͸ ؾ ϴ° Ȯ Ѵ.
+		// 먼저 이 서버에서 이 맵의 몬스터를 스폰해야 하는가 확인 한다.
 		if (map_allow_find(iIndex))
 		{
 			LPSECTREE_MAP pkMapSectree = BuildSectreeFromSetting(setting);
@@ -967,7 +967,7 @@ bool SECTREE_MANAGER::GetRandomLocation(int lMapIndex, PIXEL_POSITION & r_pos, D
 
 int SECTREE_MANAGER::CreatePrivateMap(int lMapIndex)
 {
-	if (lMapIndex >= 10000) // 10000 ̻  . (Ȥ ̹ private ̴)
+	if (lMapIndex >= 10000) // 10000번 이상의 맵은 없다. (혹은 이미 private 이다)
 		return 0;
 
 	LPSECTREE_MAP pkMapSectree = GetMap(lMapIndex);
@@ -1077,7 +1077,7 @@ struct FDestroyPrivateMapEntity
 
 void SECTREE_MANAGER::DestroyPrivateMap(int lMapIndex)
 {
-	if (lMapIndex < 10000) // private map  ε 10000 ̻ ̴.
+	if (lMapIndex < 10000) // private map 은 인덱스가 10000 이상 이다.
 		return;
 
 	LPSECTREE_MAP pkMapSectree = GetMap(lMapIndex);
@@ -1085,11 +1085,11 @@ void SECTREE_MANAGER::DestroyPrivateMap(int lMapIndex)
 	if (!pkMapSectree)
 		return;
 
-	//     ϴ ͵  ش.
+	// 이 맵 위에 현재 존재하는 것들을 전부 없앤다.
 	// WARNING:
-	//  ʿ   Sectree    
-	//  ⼭ delete   Ƿ Ͱ   
-	//  ó ؾ
+	// 이 맵에 있지만 어떤 Sectree에도 존재하지 않을 수 있음
+	// 따라서 여기서 delete 할 수 없으므로 포인터가 깨질 수 있으니
+	// 별도 처리를 해야함
 	FDestroyPrivateMapEntity f;
 	pkMapSectree->for_each(f);
 
@@ -1105,7 +1105,7 @@ TAreaMap& SECTREE_MANAGER::GetDungeonArea(int lMapIndex)
 
 	if (it == m_map_pkArea.end())
 	{
-		return m_map_pkArea[-1]; // ӽ÷  Area 
+		return m_map_pkArea[-1]; // 임시로 빈 Area를 리턴
 	}
 	return it->second;
 }
@@ -1128,7 +1128,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)
@@ -1361,7 +1361,7 @@ bool SECTREE_MANAGER::ForAttrRegion(int lMapIndex, int lStartX, int lStartY, int
 	}
 
 	//
-	//  ǥ Cell  ũ⿡  ȮѴ.
+	// 영역의 좌표를 Cell 의 크기에 맞춰 확장한다.
 	//
 
 	lStartX	-= lStartX % CELL_SIZE;
@@ -1370,7 +1370,7 @@ bool SECTREE_MANAGER::ForAttrRegion(int lMapIndex, int lStartX, int lStartY, int
 	lEndY	+= lEndY % CELL_SIZE;
 
 	//
-	// Cell ǥ Ѵ.
+	// Cell 좌표를 구한다.
 	// 
 
 	int lCX = lStartX / CELL_SIZE;
diff --git a/src/game/src/sectree_manager.h b/src/game/src/sectree_manager.h
index 7b6b99e..8a4fada 100644
--- a/src/game/src/sectree_manager.h
+++ b/src/game/src/sectree_manager.h
@@ -165,16 +165,16 @@ class SECTREE_MANAGER : public singleton
 		size_t		GetMonsterCountInMap(int lMapIndex);
 		size_t		GetMonsterCountInMap(int 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(int lMapIndex, int lStartX, int lStartY, int lEndX, int lEndY, int 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( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int 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( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int 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( int lMapIndex, int lCX, int lCY, DWORD dwAttr, EAttrRegionMode mode );
 
diff --git a/src/game/src/shop.cpp b/src/game/src/shop.cpp
index 7697178..4b55903 100644
--- a/src/game/src/shop.cpp
+++ b/src/game/src/shop.cpp
@@ -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
@@ -243,7 +243,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);
@@ -255,7 +255,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;
@@ -290,7 +290,7 @@ int CShop::Buy(LPCHARACTER ch, BYTE pos)
 
 	ch->PointChange(POINT_GOLD, -dwPrice, false);
 
-	// 
+	//세금 계산
 	DWORD dwTax = 0;
 	int iVal = 0;
 
@@ -330,13 +330,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);
@@ -370,7 +370,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("This sale will be taxed %d%%."), iVal);
 
 		CMonarch::instance().SendtoDBAddMoney(dwTax, m_pkPC->GetEmpire(), m_pkPC);
 	}
@@ -431,7 +431,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/src/shop.h b/src/game/src/shop.h
index adde8b3..8e7f913 100644
--- a/src/game/src/shop.h
+++ b/src/game/src/shop.h
@@ -14,12 +14,12 @@ class CShop
 	public:
 		typedef struct shop_item
 		{
-			DWORD	vnum;		//  ȣ
-			int	price;		// 
-			BYTE	count;		//  
+			DWORD	vnum;		// 아이템 번호
+			int	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/src/shopEx.cpp b/src/game/src/shopEx.cpp
index e9e9ac4..fedcd70 100644
--- a/src/game/src/shopEx.cpp
+++ b/src/game/src/shopEx.cpp
@@ -69,7 +69,7 @@ bool CShopEx::AddGuest(LPCHARACTER ch,DWORD owner_vid, bool bOtherEmpire)
 	
 	pack2.owner_vid = owner_vid;
 	pack2.shop_tab_count = m_vec_shopTabs.size();
-	char temp[8096]; // ִ 1728 * 3
+	char temp[8096]; // 최대 1728 * 3
 	char* buf = &temp[0];
 	size_t size = 0;
 	for (itertype(m_vec_shopTabs) it = m_vec_shopTabs.begin(); it != m_vec_shopTabs.end(); it++)
diff --git a/src/game/src/shopEx.h b/src/game/src/shopEx.h
index d688181..000192b 100644
--- a/src/game/src/shopEx.h
+++ b/src/game/src/shopEx.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/src/shop_manager.cpp b/src/game/src/shop_manager.cpp
index e8cdace..0cb59ff 100644
--- a/src/game/src/shop_manager.cpp
+++ b/src/game/src/shop_manager.cpp
@@ -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("You cannot trade in the shop while another window is open."));
 		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)
 	SPDLOG_DEBUG("SHOP: END: {}", 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("You are too far away from the shop to buy something."));
 		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("You are too far away from the shop to sell something."));
 		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("You can't sell items that you're wearing."));
 		return;
 	}
 
@@ -313,7 +313,7 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 
 	dwPrice /= 5;
 	
-	// 
+	//세금 계산
 	DWORD dwTax = 0;
 	int iVal = 3;
 	
@@ -335,22 +335,22 @@ void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
 	if (GOLD_MAX <= nTotalMoney)
 	{
 		SPDLOG_ERROR("[OVERFLOW_GOLD] id {} name {} gold {}", ch->GetPlayerID(), ch->GetName(), ch->GetGold());
-		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20 ʰϿ ǰ ȼ ϴ."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot trade because you are carrying more than 2 billion Yang."));
 		return;
 	}
 
-	// 20050802.myevan. Ǹ α׿  ID ߰
+	// 20050802.myevan.상점 판매 로그에 아이템 ID 추가
 	SPDLOG_DEBUG("SHOP: SELL: {} item name: {}(x{}):{} price: {}", 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("This sale will be taxed %d%%."), iVal);
 
 	DBManager::instance().SendMoneyLog(MONEY_LOG_SHOP, item->GetVnum(), dwPrice);
 
 	if (bCount == item->GetCount())
 	{
-		// ѱ   ش޶  Ƽ
-		//  ǸŽ Ӽα׸ .
+		// 한국에는 아이템을 버리고 복구해달라는 진상유저들이 많아서
+		// 상점 판매시 속성로그를 남긴다.
 		if (LC_IsYMIR())
 			item->AttrLog();
 
@@ -359,7 +359,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);
@@ -490,8 +490,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/src/skill.cpp b/src/game/src/skill.cpp
index d402423..b00ee3f 100644
--- a/src/game/src/skill.cpp
+++ b/src/game/src/skill.cpp
@@ -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/src/skill.h b/src/game/src/skill.h
index 824890e..2977246 100644
--- a/src/game/src/skill.h
+++ b/src/game/src/skill.h
@@ -5,33 +5,33 @@
 
 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;		// 이전에 배워야할 스킬의 레벨
 
 		int	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/src/skill_power.h b/src/game/src/skill_power.h
index a82afae..8fa96ff 100644
--- a/src/game/src/skill_power.h
+++ b/src/game/src/skill_power.h
@@ -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/src/start_position.cpp b/src/game/src/start_position.cpp
index c191102..0cb76bb 100644
--- a/src/game/src/start_position.cpp
+++ b/src/game/src/start_position.cpp
@@ -5,38 +5,38 @@
 char g_nation_name[4][32] =
 {
 	"",
-	"ż",
-	"õ",
-	"뱹",
+	"Shinsoo Kingdom",
+	"Chunjo Kingdom",
+	"Jinno Kingdom",
 };
 
-//	LC_TEXT("ż")
-//	LC_TEXT("õ")
-//	LC_TEXT("뱹")
+//	LC_TEXT("Shinsoo Kingdom")
+//	LC_TEXT("Chunjo Kingdom")
+//	LC_TEXT("Jinno Kingdom")
 
 int 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/src/target.h b/src/game/src/target.h
index abc1f62..babc230 100644
--- a/src/game/src/target.h
+++ b/src/game/src/target.h
@@ -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/src/threeway_war.cpp b/src/game/src/threeway_war.cpp
index 611d8d7..d622e23 100644
--- a/src/game/src/threeway_war.cpp
+++ b/src/game/src/threeway_war.cpp
@@ -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("Current score: Shinsoo %d, Chunjo %d, Jinno %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("The devil of the hallowed place: [ENTER][ENTER]") +
 				Nation +
-				LC_TEXT("༮ ̰   ڰ Ҿ.   Ŷ~~[ENTER][ENTER] 10 Ŀ   ̵ϰ ˴ϴ. ") +
+				LC_TEXT(", you don't have any right to be here! The members of your kingdom will leave this hallowed ground in 10 seconds.") +
 				"[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 has been defeated and drops out of the Kingdom Battle."), 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("Current score: Shinsoo %d, Chunjo %d, Jinno %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("If you defeat the Guard of the Holy Place, you will become the owner of it.") +
 					"[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/src/trigger.cpp b/src/game/src/trigger.cpp
index ceb1a51..460cf53 100644
--- a/src/game/src/trigger.cpp
+++ b/src/game/src/trigger.cpp
@@ -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/src/unique_item.h b/src/game/src/unique_item.h
index f3b0990..9f10e65 100644
--- a/src/game/src/unique_item.h
+++ b/src/game/src/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/src/utils.cpp b/src/game/src/utils.cpp
index 12294a9..f12ab0d 100644
--- a/src/game/src/utils.cpp
+++ b/src/game/src/utils.cpp
@@ -30,12 +30,12 @@ size_t str_lower(const char * src, char * dest, size_t dest_size)
 		return len;
 	}
 
-	// \0 ڸ Ȯ
+	// \0 자리 확보
 	--dest_size;
 
 	while (*src && len < dest_size)
 	{
-		*dest = LOWER(*src); // LOWER ũο ++ --ϸ ȵ!!
+		*dest = LOWER(*src); // LOWER 매크로에서 ++나 --하면 안됨!!
 
 		++src;
 		++dest;
@@ -63,7 +63,7 @@ const char *one_argument(const char *argument, char *first_arg, size_t first_siz
 		return NULL;    
 	} 
 
-	// \0 ڸ Ȯ
+	// \0 자리 확보
 	--first_size;
 
 	skip_spaces(&argument);
@@ -101,7 +101,7 @@ const char *first_cmd(const char *argument, char *first_arg, size_t first_arg_si
 	size_t cur_len = 0;
 	skip_spaces(&argument);
 
-	// \0 ڸ Ȯ
+	// \0 자리 확보
 	first_arg_size -= 1;
 
 	while (*argument && !isspace(*argument) && cur_len < first_arg_size)
diff --git a/src/game/src/war_map.cpp b/src/game/src/war_map.cpp
index 87cdb14..257a559 100644
--- a/src/game/src/war_map.cpp
+++ b/src/game/src/war_map.cpp
@@ -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; 
 		SPDLOG_DEBUG("WarMap +o {}", 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("You can participate in the guild battle in viewer mode."));
+		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("While choosing a character, an icon appears."));
 	}
 
 	UpdateUserCount();
@@ -480,8 +480,8 @@ void CWarMap::CheckWarEnd()
 		if (m_pkTimeoutEvent)
 			return;
 
-		Notice(LC_TEXT("    ƹ ϴ."));
-		Notice(LC_TEXT("1 ̳ ƹ    ڵ ˴ϴ."));
+		Notice(LC_TEXT("There are no opponents."));
+		Notice(LC_TEXT("If no enemy can be found, the guild war will be ended automatically."));
 
 		SPDLOG_DEBUG("CheckWarEnd: Timeout begin {} vs {}", 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("Because the guild war finished early, the result will judged as a draw."));
 		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/src/war_map.h b/src/game/src/war_map.h
index d57950c..4d9a4d2 100644
--- a/src/game/src/war_map.h
+++ b/src/game/src/war_map.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/src/wedding.cpp b/src/game/src/wedding.cpp
index be15a3a..9028707 100644
--- a/src/game/src/wedding.cpp
+++ b/src/game/src/wedding.cpp
@@ -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("The wedding is finishing soon."));
+		Notice(LC_TEXT("Will be left automatically."));
 
 		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/src/xmas_event.cpp b/src/game/src/xmas_event.cpp
index 0fa73dd..fcf0920 100644
--- a/src/game/src/xmas_event.cpp
+++ b/src/game/src/xmas_event.cpp
@@ -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
 			{
 				int 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/game/src/xmas_event.h b/src/game/src/xmas_event.h
index 1fb568e..97d7bf9 100644
--- a/src/game/src/xmas_event.h
+++ b/src/game/src/xmas_event.h
@@ -5,8 +5,8 @@ namespace xmas
 {
 	enum
 	{
-		MOB_SANTA_VNUM = 20031,	//Ÿ 
-	//	MOB_SANTA_VNUM = 20095,	//
+		MOB_SANTA_VNUM = 20031,	//산타 
+	//	MOB_SANTA_VNUM = 20095,	//노해
 		MOB_XMAS_TREE_VNUM = 20032,
 		MOB_XMAS_FIRWORK_SELLER_VNUM = 9004,
 	};
diff --git a/src/libgame/include/attribute.h b/src/libgame/include/attribute.h
index 33d22fd..907c7c4 100644
--- a/src/libgame/include/attribute.h
+++ b/src/libgame/include/attribute.h
@@ -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/include/targa.h b/src/libgame/include/targa.h
index bf0a18f..8c99263 100644
--- a/src/libgame/include/targa.h
+++ b/src/libgame/include/targa.h
@@ -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/libgame/src/attribute.cc b/src/libgame/src/attribute.cc
index 5d08308..014f568 100644
--- a/src/libgame/src/attribute.cc
+++ b/src/libgame/src/attribute.cc
@@ -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일 때는 원본 속성과 같으므로 단지 복사.
 	    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/src/grid.cc b/src/libgame/src/grid.cc
index e2b7391..c0dae5a 100644
--- a/src/libgame/src/grid.cc
+++ b/src/libgame/src/grid.cc
@@ -28,7 +28,7 @@ void CGrid::Clear()
 
 int CGrid::FindBlank(int w, int h)
 {
-    // ũⰡ  ũٸ Ȯ ʿ  ׳ 
+    // 크기가 더 크다면 확인할 필요 없이 그냥 리턴
     if (w > m_iWidth || h > m_iHeight)
 	return -1;
 
@@ -89,7 +89,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/libsql/include/CAsyncSQL.h b/src/libsql/include/CAsyncSQL.h
index 915590d..e617819 100644
--- a/src/libsql/include/CAsyncSQL.h
+++ b/src/libsql/include/CAsyncSQL.h
@@ -99,8 +99,8 @@ typedef struct _SQLMsg
 	int				iID;
 	std::string			stQuery;
 
-	std::vector	vec_pkResult;	// result 
-	unsigned int		uiResultPos;	//  result ġ
+	std::vector	vec_pkResult;	// result 벡터
+	unsigned int		uiResultPos;	// 현재 result 위치
 
 	void *			pvUserData;
 	bool			bReturn;
diff --git a/src/libsql/src/CAsyncSQL.cpp b/src/libsql/src/CAsyncSQL.cpp
index 2d42506..796dbee 100644
--- a/src/libsql/src/CAsyncSQL.cpp
+++ b/src/libsql/src/CAsyncSQL.cpp
@@ -145,10 +145,10 @@ bool CAsyncSQL::Connect()
 
 	SPDLOG_INFO("AsyncSQL: connected to {} (reconnect {})", m_stHost, m_hDB.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);
 
@@ -523,7 +523,7 @@ class cProfiler
 
 void CAsyncSQL::ChildLoop()
 {
-	cProfiler profiler(500000); // 0.5
+	cProfiler profiler(500000); // 0.5초
 
 	while (!m_bEnd)
 	{
@@ -540,7 +540,7 @@ void CAsyncSQL::ChildLoop()
 
 		while (count--)
 		{
-			//ð üũ  
+			//시간 체크 시작 
 			profiler.Start();
 
 			if (!PeekQueryFromCopyQueue(&p))
@@ -585,7 +585,7 @@ void CAsyncSQL::ChildLoop()
 
 			profiler.Stop();
 			
-			// 0.5 ̻ ɷ α׿ 
+			// 0.5초 이상 걸렸으면 로그에 남기기
 			if (!profiler.IsOk())
 				SPDLOG_TRACE("[QUERY : LONG INTERVAL(OverSec {}.{})] : {}",
 						profiler.GetResultSec(), profiler.GetResultUSec(), p->stQuery);
@@ -687,9 +687,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); // 둘 중에 작은 크기
 		strlcpy(tmp, src, tmpLen);
 
 		SPDLOG_CRITICAL("FATAL ERROR!! not enough buffer size (dstSize {} srcSize {} src{}: {})",
diff --git a/src/libthecore/include/buffer.h b/src/libthecore/include/buffer.h
index 8644ea1..a69ab95 100644
--- a/src/libthecore/include/buffer.h
+++ b/src/libthecore/include/buffer.h
@@ -1,8 +1,8 @@
 /*
  *    Filename: buffer.h
- * Description: Buffer ó 
+ * Description: Buffer 처리 모듈
  *
- *      Author:  (aka. , Cronan), ۿ (aka. myevan, ڷ)
+ *      Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
  */
 #ifndef __INC_LIBTHECORE_BUFFER_H__
 #define __INC_LIBTHECORE_BUFFER_H__
@@ -28,30 +28,30 @@
 	int            flag;
     };
 
-	extern LPBUFFER	buffer_new(int size);				//   
-    extern void		buffer_delete(LPBUFFER buffer);					//  
-    extern void		buffer_reset(LPBUFFER buffer);					//  ̵ ʱȭ
+	extern LPBUFFER	buffer_new(int size);				// 새 버퍼 생성
+    extern void		buffer_delete(LPBUFFER buffer);					// 버퍼 삭제
+    extern void		buffer_reset(LPBUFFER buffer);					// 버퍼 길이들을 초기화
 
-    extern DWORD	buffer_size(LPBUFFER buffer);					// ۿ  
-    extern int		buffer_has_space(LPBUFFER buffer);				//   ִ ̸ 
+    extern DWORD	buffer_size(LPBUFFER buffer);					// 버퍼에 남은 길이
+    extern int		buffer_has_space(LPBUFFER buffer);				// 쓸 수 있는 길이를 리턴
 
-    extern void		buffer_write (LPBUFFER& buffer, const void* src, int length);	// ۿ .
-    extern void		buffer_read(LPBUFFER buffer, void * buf, int bytes);		// ۿ д´.
+    extern void		buffer_write (LPBUFFER& buffer, const void* src, int length);	// 버퍼에 쓴다.
+    extern void		buffer_read(LPBUFFER buffer, void * buf, int bytes);		// 버퍼에서 읽는다.
     extern BYTE		buffer_get_byte(LPBUFFER buffer);
     extern WORD		buffer_get_word(LPBUFFER buffer);
     extern DWORD	buffer_get_dword(LPBUFFER buffer);
 
-    // buffer_proceed Լ buffer_peek б ͸  ޾Ƽ  ʿ䰡
-    //   ó  󸶳 ó ٰ 뺸ؾ   . 
-    // (buffer_read, buffer_get_* ø 쿡 ˾Ƽ ó peek ó
-    //   ׷   Ƿ)
-    extern const void *	buffer_read_peek(LPBUFFER buffer);				// д ġ 
-    extern void		buffer_read_proceed(LPBUFFER buffer, int length);		// lengthŭ ó 
+    // buffer_proceed 함수는 buffer_peek으로 읽기용 포인터를 리턴 받아서 쓸 필요가
+    // 있을 때 처리가 끝나면 얼마나 처리가 끝났다고 통보해야 할 때 쓴다. 
+    // (buffer_read, buffer_get_* 시리즈의 경우에는 알아서 처리되지만 peek으로 처리했을
+    //  때는 그렇게 될 수가 없으므로)
+    extern const void *	buffer_read_peek(LPBUFFER buffer);				// 읽는 위치를 리턴
+    extern void		buffer_read_proceed(LPBUFFER buffer, int length);		// length만큼의 처리가 끝남
 
-    //  write_peek  ġ   󸶳 質 뺸 
-    // buffer_write_proceed Ѵ.
-    extern void *	buffer_write_peek(LPBUFFER buffer);				//  ġ 
-    extern void		buffer_write_proceed(LPBUFFER buffer, int length);		// length  Ų.
+    // 마찬가지로 write_peek으로 쓰기 위치를 얻어온 다음 얼마나 썼나 통보할 때
+    // buffer_write_proceed를 사용한다.
+    extern void *	buffer_write_peek(LPBUFFER buffer);				// 쓰는 위치를 리턴
+    extern void		buffer_write_proceed(LPBUFFER buffer, int length);		// length만 증가 시킨다.
 
-    extern void		buffer_adjust_size(LPBUFFER & buffer, int add_size);		// add_sizeŭ ߰ ũ⸦ Ȯ
+    extern void		buffer_adjust_size(LPBUFFER & buffer, int add_size);		// add_size만큼 추가할 크기를 확보
 #endif
diff --git a/src/libthecore/include/heart.h b/src/libthecore/include/heart.h
index f98431d..23fc259 100644
--- a/src/libthecore/include/heart.h
+++ b/src/libthecore/include/heart.h
@@ -20,7 +20,7 @@ struct heart
 
 extern LPHEART	heart_new(int opt_usec, HEARTFUNC func);
 extern void	heart_delete(LPHEART ht);
-extern int	heart_idle(LPHEART ht);	//  pulse  Ѵ.
+extern int	heart_idle(LPHEART ht);	// 몇 pulse가 지났나 리턴한다.
 extern void	heart_beat(LPHEART ht, int pulses);
 
 #endif
diff --git a/src/libthecore/include/main.h b/src/libthecore/include/main.h
index 2ea09ed..ee6cfc0 100644
--- a/src/libthecore/include/main.h
+++ b/src/libthecore/include/main.h
@@ -32,7 +32,7 @@ extern "C"
     extern float		thecore_pulse_per_second(void);
 	extern int			thecore_is_shutdowned(void);
 
-	extern void			thecore_tick(void); // tics 
+	extern void			thecore_tick(void); // tics 증가
 
 #ifdef __cplusplus
 }
diff --git a/src/libthecore/include/utils.h b/src/libthecore/include/utils.h
index c560f38..6f8908f 100644
--- a/src/libthecore/include/utils.h
+++ b/src/libthecore/include/utils.h
@@ -13,24 +13,24 @@ using Random = effolkronium::random_static;
 #define str_cmp strcasecmp
 
 #define core_dump()	core_dump_unix(__FILE__, __LINE__)
-    extern void		core_dump_unix(const char *who, WORD line);	// ھ  
+    extern void		core_dump_unix(const char *who, WORD line);	// 코어를 강제로 덤프
 
 #define TOKEN(string) if (!str_cmp(token_string, string))
-    // src = ū : 
+    // src = 토큰 : 값
     extern void		parse_token(char * src, char * token, char * value);
 
     extern void		trim_and_lower(const char * src, char * dest, size_t dest_size);
 
-    // a b ð 󸶳 ̳ 
+    // a와 b의 시간이 얼마나 차이나는지 리턴
     extern struct timeval *	timediff(const struct timeval *a, const struct timeval *b);
 
-    // a ð b ð  
+    // a의 시간에 b의 시간을 더해 리턴
     extern struct timeval *	timeadd(struct timeval *a, struct timeval *b);
 
-    //  ð curr_tm  days   
+    // 현재 시간 curr_tm으로 부터 days가 지난 날을 리턴
     extern struct tm *		tm_calc(const struct tm *curr_tm, int days);
 
-    extern void		thecore_sleep(struct timeval * timeout);	// timeoutŭ μ 
+    extern void		thecore_sleep(struct timeval * timeout);	// timeout만큼 프로세스 쉬기
 
     extern float	get_float_time();
     extern DWORD	get_dword_time();
@@ -50,7 +50,7 @@ using Random = effolkronium::random_static;
 		sys_err("realloc failed [%d] %s", errno, strerror(errno)); \
 		abort(); } } while(0)
 
-    // Next  Prev  ִ Ʈ ߰
+    // Next 와 Prev 가 있는 리스트에 추가
 #define INSERT_TO_TW_LIST(item, head, prev, next)   \
     if (!(head))                                    \
     {                                               \
diff --git a/src/libthecore/src/buffer.cpp b/src/libthecore/src/buffer.cpp
index ba38d11..d020437 100644
--- a/src/libthecore/src/buffer.cpp
+++ b/src/libthecore/src/buffer.cpp
@@ -1,8 +1,8 @@
 /*
  *    Filename: buffer.c
- * Description: Buffer ó 
+ * Description: Buffer 처리 모듈
  *
- *      Author:  (aka. , Cronan)
+ *      Author: 김한주 (aka. 비엽, Cronan)
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
@@ -32,7 +32,7 @@ static int buffer_get_exac_pool_index(int size) {
 	}
 	return -1; // too big... not pooled
 }
-//  buffer pool .
+// 모든 buffer pool 해제.
 static void buffer_pool_free ()
 {
 	for (int i = 31; i >= 0; i--)
@@ -50,7 +50,7 @@ static void buffer_pool_free ()
 		}
 	}
 }
-// n ū buffer pool ϳ .
+// n보다 큰 buffer pool 하나를 해제.
 static bool buffer_larger_pool_free (int n)
 {
 	for (int i = 31; i > n; i--)
@@ -102,13 +102,13 @@ LPBUFFER buffer_new(int size)
 	{
 		CREATE(buffer, BUFFER, 1);
 		buffer->mem_size = size;
-		// buffer_new calloc failed  ߻Ͽ(Ű  ӽſ ַ ߻),
-		// calloc ϸ, buffer pool  ٽ õѴ.
+		// buffer_new에서 calloc failed가 자주 발생하여(터키의 빈약한 머신에서 주로 발생),
+		// calloc이 실패하면, buffer pool을 비우고 다시 시도한다.
 		if (!safe_create(&buffer->mem_data, size))
 		{
-			// ʿ buffer ū buffer pool ϳ .
+			// 필요한 buffer보다 큰 buffer pool에서 하나를 해제.
 			if (!buffer_larger_pool_free(pool_index))
-				// ϸ  ,  pool Ѵ.
+				// 실패하면 최후의 수단으로, 모든 pool을 해제한다.
 				buffer_pool_free();
 			CREATE(buffer->mem_data, char, size);
 			SPDLOG_ERROR("buffer pool free success.");
@@ -213,10 +213,10 @@ void buffer_read_proceed(LPBUFFER buffer, int length)
 		length = buffer->length;
 	}
 
-	// ó ̰  ̺ ۴ٸ, ۸ ܵξ Ѵ.
+	// 처리할 길이가 버퍼 길이보다 작다면, 버퍼를 남겨두어야 한다.
 	if (length < buffer->length)
 	{
-		// write_point  pos  ״ ΰ read_point   Ų.
+		// write_point 와 pos 는 그대로 두고 read_point 만 증가 시킨다.
 		if (buffer->read_point + length - buffer->mem_data > buffer->mem_size)
 		{
             SPDLOG_ERROR("buffer_read_proceed: buffer overflow! length {} read_point {}", length, buffer->read_point - buffer->mem_data);
@@ -268,8 +268,8 @@ void buffer_realloc(LPBUFFER& buffer, int length)
 	if (buffer->mem_size >= length)
 		return;
 
-	// i   Ҵ ũ ũ ,   
-	// ޸ ũ⸦ Ѵ.
+	// i 는 새로 할당된 크기와 이전크기의 차, 실제로 새로 생긴
+	// 메모리의 크기를 뜻한다.
 	i = length - buffer->mem_size;
 
 	if (i <= 0)
@@ -281,7 +281,7 @@ void buffer_realloc(LPBUFFER& buffer, int length)
 
 	read_point_pos = buffer->read_point - buffer->mem_data;
 
-	// write_point  read_point    Ų.
+	// write_point 와 read_point 를 재 연결 시킨다.
 	temp->write_point = temp->mem_data + buffer->write_point_pos;
 	temp->write_point_pos = buffer->write_point_pos;
 	temp->read_point = temp->mem_data + read_point_pos;
diff --git a/src/libthecore/src/heart.cpp b/src/libthecore/src/heart.cpp
index 649c3d9..f51be4b 100644
--- a/src/libthecore/src/heart.cpp
+++ b/src/libthecore/src/heart.cpp
@@ -1,8 +1,8 @@
 /*
  *    Filename: heart.c
- * Description: fps  ѹ ȣǴ "" ̴.
+ * Description: fps 에 한번씩 호출되는 "심장" 이다.
  *
- *      Author:  aka. Cronan
+ *      Author: 비엽 aka. Cronan
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
@@ -57,8 +57,8 @@ int heart_idle(LPHEART ht)
 	missed_pulse += process_time.tv_usec / ht->opt_time.tv_usec;
     }
 
-	// ٺ pulse ƴµ  ð ...
-	// ޽ fps  Ʋִµ, Ȯ ߴ  ߿ ʾ.
+	// 바빠서 pulse도 놓쳤는데 잘 시간이 어딨어...
+	// 펄스 fps 어차피 틀어져있는데, 정확히 맞추는 건 중요하지 않아.
 	if (missed_pulse > 0)
 	{
 		gettimeofday(&ht->last_time, (struct timezone *) 0);
diff --git a/src/libthecore/src/main.cpp b/src/libthecore/src/main.cpp
index 6d73ecd..68c7f2f 100644
--- a/src/libthecore/src/main.cpp
+++ b/src/libthecore/src/main.cpp
@@ -1,8 +1,8 @@
 /*
  *    Filename: main.c
- * Description: ̺귯 ʱȭ/ 
+ * Description: 라이브러리 초기화/삭제 등
  *
- *      Author:  aka. Cronan
+ *      Author: 비엽 aka. Cronan
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
diff --git a/src/libthecore/src/signals.cpp b/src/libthecore/src/signals.cpp
index e6271b2..21866d8 100644
--- a/src/libthecore/src/signals.cpp
+++ b/src/libthecore/src/signals.cpp
@@ -1,8 +1,8 @@
 /*
  *    Filename: signal.c
- * Description: ñ׳  Լ.
+ * Description: 시그널 관련 함수.
  *
- *      Author:  aka. Cronan
+ *      Author: 비엽 aka. Cronan
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
diff --git a/src/libthecore/src/utils.cpp b/src/libthecore/src/utils.cpp
index f3a23cb..af94c67 100644
--- a/src/libthecore/src/utils.cpp
+++ b/src/libthecore/src/utils.cpp
@@ -1,8 +1,8 @@
 /*
  *    Filename: utils.c
- * Description:  ƿƼ
+ * Description: 각종 유틸리티
  *
- *      Author:  aka. Cronan
+ *      Author: 비엽 aka. Cronan
  */
 #define __LIBTHECORE__
 #include "stdafx.h"
@@ -85,7 +85,7 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
 	return;
     }
 
-    // տ ĭ dz ٱ
+    // 앞에 빈칸 건너 뛰기
     while (*tmp)
     {
 	if (!isspace(*tmp))
@@ -94,12 +94,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;
     }
@@ -108,7 +108,7 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
 
     if (len > 0)
     {
-	// ڿ ĭ 
+	// 뒤에 빈칸 지우기
 	--dest;
 
 	while (*dest && isspace(*dest) && len--)
@@ -116,8 +116,8 @@ void trim_and_lower(const char * src, char * dest, size_t dest_size)
     }
 }
 
-/* "Name : "   "׸ : "  ̷ ڿ 
-   ׸ token ,  value  Ͽ Ѵ. */
+/* "Name : 비엽" 과 같이 "항목 : 값" 으로 이루어진 문자열에서 
+   항목을 token 으로, 값을 value 로 복사하여 리턴한다. */
 void parse_token(char *src, char *token, char *value)
 {
     char *tmp;
diff --git a/src/quest/src/qc.cc b/src/quest/src/qc.cc
index 5cff0fa..ea24d26 100644
--- a/src/quest/src/qc.cc
+++ b/src/quest/src/qc.cc
@@ -519,7 +519,7 @@ void parse(char * filename)
 
 					if (lexstate.lookahead.token == TK_OR)
 					{
-						//  when name
+						// 다중 when name
 						// push to somewhere -.-
 						ps = ST_WHEN_NAME;
 						when_name_arg_vector.push_back(make_pair(current_when_name, current_when_argument));
@@ -539,7 +539,7 @@ void parse(char * filename)
 					current_when_condition = "";
 					if (t.token == TK_WITH)
 					{
-						// here comes ǽ
+						// here comes 조건식
 						next(&lexstate);
 						ostringstream os;
 						os << (lexstate.t);
@@ -848,7 +848,7 @@ void parse(char * filename)
 			}
 		}
 
-		// quest function 
+		// quest function들을 기록
 		ouf << all_functions;
 
 		ouf << "}";