diff --git a/README.md b/README.md index ea728fd..ec44df8 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,16 @@ - 원본 레거시 데이터의 바이트 경로 정보는 manifest에 보존됩니다. - macOS 네이티브보다 Linux 컨테이너 기반 실행을 우선 권장합니다. +## UTF-8 First 운영 정책 +- 텍스트 리소스/소스는 UTF-8 기준으로 관리합니다. +- 바이너리 산출물(`.exe`, `.arj`, `.mdp`, 실행 바이너리 blob)은 인코딩 변환 대상에서 제외합니다. +- 소켓 입력 파이프라인은 UTF-8 strict 모드입니다. +- 잘못된 UTF-8 시퀀스는 무시되며, 백스페이스는 1바이트가 아닌 1코드포인트 단위로 처리됩니다. +- 문자열 길이 제한은 바이트 길이(`strlen`)가 아니라 유니코드 코드포인트 길이 기준입니다. +- 플레이어 이름은 유니코드 문자열을 허용하며, 금지 문자(제어문자, `/` 등)는 차단됩니다. +- 플레이어 저장 경로는 이름 첫 글자 분기(`first_han`)가 아니라 SHA-1 2자리 샤딩(`player//`)을 사용합니다. +- CP949 플레이어 파일/입력과의 하위 호환은 제공하지 않습니다. + ## macOS 호환 패치 내역 - 브랜치: `feat/macos-compat` - 목적: macOS(Apple clang)에서 네이티브 빌드/기동이 가능하도록 레거시 C 코드 호환성 보강 diff --git a/docs/board_make b/docs/board_make index ae5d5e1..f485dae 100644 --- a/docs/board_make +++ b/docs/board_make @@ -1,43 +1,43 @@ -<< Խ >> +<< 게시판 >> -Mordor Խ ϴ. -ҽ ø ϰ -мϱⰡ ֽϴ.. +Mordor에 게시판 기능이 없어 만들었습니다. +소스를 보시면 아주 조잡하게 만들어 져서 +분석하기가 힘들수도 있습니다.. -board.c ȭϸ Ǿ ְ.. -includeȭϷ board.h ֽϴ. +board.c라는 화일명으로 되어 있고.. +include화일로 board.h도 있습니다. -Խ object ̿ؼ нϴ. -object special(4=SP_BOARD) -Խ Ȯϸ, -type Խ Ҽ -ϳ Խ ֽϴ. -Ȱ Խ object 濡 θ ǰ. -Խ 18 ÷׸ ־ Ϲ ijͰ - ϰ, 19 ÷׸ ־ Ⱥ̰ ֽϴ. +게시판은 object를 이용해서 읽습니다. +object의 special변수값(4=SP_BOARD)으로 +게시판인지를 확인하며, +type변수로 여러개의 게시판을 정의할수도 있으며 +하나의 게시판을 여러곳에서 읽을수 있습니다. +똑같은 게시판 object를 여러 방에 두면 되겠지요. +게시판은 18번 플래그를 주어 일반 캐릭터가 +집을수 없게 하고, 19번 플래그를 주어 안보이게 할 수있습니다. -board.c board_dir[]迭 .. +board.c의 board_dir[]배열에 보면.. { 100, "/home/mordor/board/info" }, - Ǿ ִµ... -100 type Էϴ , Խ ϴ°Դϴ.. -ٸ ڸ ߰Ͽ ٸ Խ  ǰ.. - Խ ڷᰡ 丮Դϴ. -Խ ó Խ 丮 touch board_index - ԷϿ 0Ʈ board_indexȭ ־ մϴ. -Էµ ڷ board.ȣ ǰ -parse Ư 1 ϵ صξϴ. - -board.c ϸ Խ ֽϴ. - 'Խ ' ̶ غø ɴϴ. - - غ... - -1. board.c board_dir[] type 丮 ִ´. -2. object ϳ type 1 Է ְ, - special 4(=SP_BOARD) ִ´. -3. 1 丮 touch board_index Ѵ. -4. Խ 濡 2 object ִ´. -5. Ѵ. -6. Խù ϳ [Խ 1 ۻ] ԷϿ 1 Խù . - -- - +로 되어 있는데... +100 은 type변수에 입력하는 값, 즉 게시판을 구분하는것입니다.. +다른 숫자를 추가하여 다른 게시판을 만들어도 되겠지요.. +다음은 게시판의 자료가 만들어지는 디렉토리입니다. +게시판을 처음 만들면 게시판 디렉토리에서 touch board_index +라고 입력하여 0바이트의 board_index화일을 만들어주어야 합니다. +입력된 자료는 board.번호 의 형식으로 저장이 되고 +parse의 특성상 1번은 읽지 못하도록 해두었습니다. + +board.c를 수정후 재 컴파일해준 후 리붓하면 게시판을 쓸 수 있습니다. +사용법은 '게시판 도움' 이라고 해보시면 나옵니다. + +위의 내용을 정리해보면... + +1. board.c의 board_dir[]변수에 type값과 디렉토리를 넣는다. +2. object를 하나 만들어 type에 1번에서 입력한 값을 넣고, + special에 4(=SP_BOARD)를 넣는다. +3. 1번에서 설정한 디렉토리로 가서 touch board_index를 실행한다. +4. 게시판을 둘 방에 2번에서 만든 object를 넣는다. +5. 컴파일 후 리부팅한다. +6. 게시물을 하나 쓴 후 [게시판 1 글삭제]를 입력하여 1번 게시물은 지운다. + +- 끝 - diff --git a/docs/cmd_ital b/docs/cmd_ital index 90ccd4a..29bd191 100644 --- a/docs/cmd_ital +++ b/docs/cmd_ital @@ -1,6 +1,6 @@ -telnet italk Ͻʽÿ. -italk telnet ޸𸮰 ǰ, ϴ. -ϴ ϴ. +telnet 대신 italk를 사용 하십시오. +italk는 telnet에 비해 메모리가 절약되고, 더 빠릅니다. +사용하는 방법은 다음과 같습니다. italk localhost 4000 diff --git a/docs/crt_expg b/docs/crt_expg index 1656332..899b458 100644 --- a/docs/crt_expg +++ b/docs/crt_expg @@ -1,4 +1,4 @@ -Ѵ ǥ Ÿ ̺ +무한대전 몹의 표준적 데이타 테이블 LEVEL STATS HP's AC TO XP's DAM 1 55 10 90 19 10 5 diff --git a/docs/crt_flag b/docs/crt_flag index 3ff213e..bcd213a 100644 --- a/docs/crt_flag +++ b/docs/crt_flag @@ -1,247 +1,247 @@ - ÷ ȣ +제목 플레그 번호 정의 ================================================================== Permanent Monster 1 Perm MPERMT - ν ǵ ð Ѵ. + 고정된 몹으로써 정의된 일정한 시간 간격으로 계속 출현한다. Hidden 2 MHIDDN - ִ ã ʴ´. + 숨어있는 몹으로 찾기전에는 보이지 않는다. Invisible 3 Invis MINVIS - е ִ а ʴ´. + 은둔되 있는 몹으로 은둔감지가 가능하지 않으면 보이지 않는다. Plural name 4 MTOMEN - . + 쓰이지 않음. No Plural 5 MDROPS - . + 쓰이지 않음. No Prefix 6 MNOPRE - . + 쓰이지 않음. Aggressive 7 Aggr MAGGRE - ̴ ڸ Ѵ. + 공격 성향을 가진 몹으로 보이는 사용자를 공격한다. Guard Treasure 8 Guard MGUARD - 濡 ִ ϰ Ѵ. + 방에 떨어져 있는 물건을 집지 못하게 방해한다. Follow attacker 10 Follow MFOLLO - ڰ ڸ 󰣴. + 사용자가 도망갈경우 사용자를 따라간다. Flee 11 Flee MFLEER - ڽ ü . + 자신의 체력이 위험할 경우 도망간다. Scavenger 12 Scav MSCAVE - ⵵ Ѵ. + 때때로 땅에 물건을 집어 가지기도 한다. Gender 13 Male MMALES - ϴ ÷ɴǸ , ʵǸ - ȴ. + 남성과 여성을 구분하는 플레굣�눠【냇ㅅ퓔� 남성, 설정 않되면 + 여성이 된다. Poisoner 14 Poison MPOISS - ڸ ߵų ִ ɷ ִ. + 사용자를 중독시킬수 있는 능력이 있다. Undead 15 Undead MUNDED - Ȱ ü ȥ ĥ ִ. + 부활한 시체로 방혼술로 물리칠수 있다. No Steal 16 No-steal NUNSTL - ij Ѵ. + 도둑이 아이템을 훔쳐낼수 없게 한다. Poisoned 17 Poisoned MPOISN - ߵ ־ ð ״´. + 중독되 있어서 일정 시간이 지나면 죽는다. Casts spells 18 Magic MMAGIC - ߿ ڳ ڽſ ֹ ܿ ϰų - ڽ ġѴ. + 전투중에 사용자나 자신에게 설정된 주문을 외워 공격하거나 + 자신을 치료한다. Has Scavenged 19 MHASSC - ʴ´. + 쓰이지 않는다. Breath Weapon Attack 20 MBRETH - ⸦ ϴ flag Ǹ 29/30 ÷ - ߿ ϰ ȴ. + 용의 무기를 사용하는 flag로 설정되면 29/30 플레그 설정을 따라서 + 전투중에 공격하게 된다. Type of breath 29/30 MBRWP1/MBRWP2 - ΰ ÷ ϴ Ʋ. - κ Ǹ ׹ . + 이 두개의 플레그의 조합으로 공격하는 방식이 틀려진다. + 대부분 용의 공격으로 설정되며 그방식은 다음과 같다. - (0,0) = ȭ , (01) = ñ , - (1,0) = , (1,1) = + (0,0) = 화염 공격, (01) = 냉기 공격, + (1,0) = 가스 공격, (1,1) = 독 공격 Magic Harm Only 21 Magic-only MMGONL - ü ߵ . ֹμ - ִ. + 모든 육체적 공격을 견디어 낸다. 오로지 주문으로서만 + 공격 받을수 있다. Detect Invisibility 22 Detect-invis MDINVIS - ڸ ִ ɷ ִ. + 은둔한 사용자를 볼수 있는 능력이 있다. Magic / Enchant 23 Enchant-only MENONL - (+) ⳪ ǰ ɸ θ ϴ. + (+)된 무기나 빙의가 걸린 무기로만 공격이 가능하다. Interactive Talk 24 Talks MTALKS - objmon/talk о ڿ ȭ ϰ - Ѵ. "̸_"̴. "輮ġ_25" + objmon/talk에 설정된 파일을 읽어서 사용자와 대화를 가능하게 + 한다. 형식은 "몹이름_레벨"이다. 예 "계석치무_25" No Harm 25 Unkillable MUNKIL - Ҽ ̴. + 공격할수도 받을수도 없는 몹이다. Fix amount of gold 26 NonrandGold MNRGLD - ɲ ϰ Ǹ - ִ. + 보�꺾【냇ㅅ� 범위내에서 돈이 랜덤하게 나오나 설정되면 + 고정된 양의 돈을 갖고 있다. Aggressive talk 27 Talk-aggr MTLKAG - Ŵ ڸ Ѵ. + 말을 거는 사용자를 공격한다. Resist-magic 28 Resist-magic MRMAGI - ֹ . ɷ¿ - ̰ ִ. + 주문에 내성이 생긴다. 어느정도 능력에 따라서 내성의 + 정도는 차이가 있다. Experience Drain 31 Energy Drain MENEDR - ġ ƸԴ´. + 공격자의 경험치를 가끔씩 깍아먹는다. Kingdom allegiance 32 MKNGDM - ձ Ҽӵ Ѵ. ̼ɱǾ ձ - ÷׵ ۵Ѵ. + 왕국에 소속된 몹을 뜻한다. 이설정�괍〉퓸� 나머지 왕국관련 + 플레그들이 작동한다. Pledge 33 Pledge 0/1 MPLDGK - ڵ ÷װ ձ Ե - ڿ 53 ձ ÷װ ÿ ־ Ѵ. + 사용자들은 이 플레그가 설정된 몹의 왕국에 가입되 있으며 + 뒤에 53번 이하 왕국 플레그가 동시에 설정되 있어야 한다. Rescind 34 Rescind 0/1 MRSCND - ڵ ձ ŻҼ , 53 - ձ ÷װ ÿ ־ Ѵ. + 사용자들은 가입한 몹의 왕국에서 탈퇴할수 있으며, 53번 이하 + 왕국 플레그가 동시에 설정되 있어야 한다. Disease 35 Disease MDISEA - ڿ Ű Ѵ. + 사용자에게 질병을 일으키는 공격을 한다. Disolve items 36 Dissolve MDISIT - 쿩. + 사용자이 장비를 가끔 녹여버린다. Vendor 37 Purchase MPURIT - ǰ ִ ڿ Ǵ. + 소지품에 있는 아이템을 사용자에게 판다. Gives Items for quest 38 Trade MTRADE - "ȯ" ̶ ¹ٲپ ش. ӹ ߿ϰ - ̸ ȯϴ 1 5 ȴ. ȯִ - +5 6 10 ǰ Ǹ, ÿ - ȯ Ҽ ִ. + "교환" 이란 명령으로 물건을 맞바꾸어 준다. 임무 설계실 중요하게 + 쓰이며 그 교환하는 물건은 1번에서 5번의 아이템이 된다. 교환해주는 + 물건은 +5인 6번에서 10번의 소지품이 되며, 여러가지를 동시에 + 교환 할수도 있다. Passive guard 39 P-Guard MPGUAR - ⱸ ÷׿ XPGUAR ÷װ ⱸ - Ű ϰ Ѵ. + 출구의 플레그에 XPGUAR의 플레그가 설정되있으면 그 출구를 + 지키며 못 통과하게 한다. Good Aggressive 40 Good-Aggro MGAGGR - ڸ Ѵ. + 선한 성향의 사용자를 공격한다. Evil Aggressive 41 Evil-Aggro MEAGR - ڸ Ѵ. + 악한 성향의 사용자를 공격한다. Death Scene 42 Ddesc MDEATH - ׾ muhan/objmon/ddesc/ о 濡 - ϰ Ǹ, ӹ ̳ Ҷ ȴ. - "̸_" ȴ. MPERMT ÷װ ÿ - ־ ۵ȴ. "α_25". + 몹이 죽었을 경우 muhan/objmon/ddesc/에 저장된 파일을 읽어서 방에 + 출력하게 되며, 임무의 성공이나 극적인 장면을 연출할때 사용된다. + 파일은 "몹이름_레벨"같이 저장된다. 또한 MPERMT의 플레그가 동시에 + 설정되 있어야 작동된다. 예 "식인귀_25". Resist Befuddle 44 R-beffd MRBEFD - ȥ ֹ ɷ ʴ´. + 혼동 주문에 걸려들지 않는다. Resist circle 45 R-circle MNOCIR - ̳ Ͱ ɷ ʴ´. + 교란이나 맹공에 걸려들지 않는다. Monster Blinds 46 M-blinds MBLNDR - ڸ ְ Ѵ. + 사용자를 눈멀게 한다. DM-follow 47 DM-follow MDMFOL - ڸ . ܺ ʴ´. + 관리자를 따른다. 외부적으로 사용되지 않는다. Monster Fearful 48 M-fear MFEARS - ֹ ɷִ. ܺ ʴ´. + 공포 주문에 걸려있다. 외부적으로 사용 않는다. Monster silenced 49 M-silenced MSILNC - ֹ ܿ Ѵ. ܺ ʵ. + 주문을 외우지 못한다. 외부적 사용 않됨. Monster Blind 50 M-blind MBLIND - ־ ִ. ܺ ʴ´. + 눈이 멀어 있다. 외부적으로 사용되진 않는다. Monster charmed 51 M-charm MCHARM - ָ鿡 ɷ ִ. ܺ ʴ´. + 누군가의 최면에 걸려 있다. 외부적으로 쓰이지 않는다. Monster Befuddle 52 M-beffd MBEFUD - ȥǾ ִ. ܺ . + 혼동되어 있다. 외부 사용 않함. Monster Kingdom1 53 kingdom1 MKNDM1 - 1 ձ Ҽ + 1번 왕국의 소속 몹 Monster Kingdom2 54 kingdom2 MKNDM2 - 2 ձ Ҽ + 2번 왕국의 소속 몹 Monster Kingdom3 55 kingdom3 MKNDM3 - 3 ձ + 3번 예비 왕국 Monster Kingdom4 56 kingdom4 MKNDM4 - 4 ձ + 4번 예비 왕국 Monster King1 57 king1 MKING1 - 1 ձ + 1번 왕국의 왕 Monster King2 58 king2 MKING2 - 2 ձ + 2번 왕국의 왕 Monster King3 59 king3 MKING3 - 3 + 3번 예비 왕 Monster King4 60 king4 MKING4 - 4 + 4번 예비 왕 Monster saytalk 61 saytalk MSAYTLK - . + 아직 제작중 설정 금지. Monster Summon 62 summoner MSUMMO - MPERM ÷׿ ÿ ؾ ۵ϸ, Ÿ - specialȣ ִ ȣ ȯѴ. ȯ - ȯ ڸ Ѵ. + MPERM 플레그와 동시에 설정 해야 작동하며, 몹의 데이타중 + special번호에 있는 몹의 번호를 죽을 때 소환한다. 소환된 + 몹은 소환한 몹과 전투중인 사용자를 공격한다. ----------------------- ɲ -------------------------- +---------------------- 전쟁 루팀�껼【낯� -------------------------- - ƾ  ÷׵ ̷ . - ڵ , 丮 Ȳ -⼺ ΰ ϰ Ͽ. ΰ ձ - ΰ Ǿ. + 전쟁 루틴은 몇가지 복잡한 플레그들의 조합으로 이루어 진다. 원래 +정당한 사용자들의 대결을 위해 제작했으나, 제작중 스토리와 상황변수의 +복잡성으로 인해 두개의 나라만 지원 하게 설계하였다. 나머지 두개의 왕국은 +예비로 놔두게 되었다. - ձ ̷ . ձ հ ϵ ̷ , - ÷׸ ϰ ȴ. ڴ ձ Ҽӵǰ Ǹ, - ձ Եǰ, ڽ ձ ڳ -ϸ ظ Դ´. ƾ߸ , -̶ ¸ ްԵǰ, й ް ȴ. +먼저 왕국은 몹들로 이루어 진다. 각 왕국은 왕과 부하들로 이루어져 있으며, +왕은 왕의 플레그를 설정하게 된다. 가입한 사용자는 그 왕국에 소속되게 되며, +상대 왕국의 몹을 잡으면 상금을 얻게되고, 자신의 왕국의 사용자나 몹을 +공격하면 피해를 입는다. 선언된 전쟁은 서로의 왕을 잡아야만 끝낼수 있으며, +이때 승리한 쪽은 상을 받게되고, 패배한 쪽은 벌을 받게 된다. - κ ̰, ִ. +아직 많은 부분이 개발이 덜 된 상태이고, 많은 개선점이 있다. ---------------------- ȭϴ ------------------------ +--------------------- 대화하는 몹의 설정 ------------------------ - ȭϴ ⸦ ԰ ÿ Ʈ ϱ -Ѵ. ΰ  ְ, ȭ + 대화하는 몹은 임의 동기를 설정함과 동시에 힌트를 제공하기 위해 +존재한다. 또한 부가적인 몇개의 기능을 갖고 있고, 그 대화 형식은 ------------------- -"ܾ" -"ܾ " +"단어" +"단어에 대한 대답" ------------------ - muhan/objmon/talk/ ȴ. +형식으로 muhan/objmon/talk/에 저장 된다. -ΰ 캸 +부가적인 기능을 살펴보면 -"ܾ" ATTACK -̰ Ư ܾ ȭϸ ϴ ̴. +"단어" ATTACK +이것은 몹과 특정한 단어로 대화하면 공격을 하는 기능이다. -"ܾ" ACTION <ൿ> PLAYER -ܾ ̾߱ϸ ൿ ִ ǥ ڿ Ұ̴. -ǥ action.c ǵ ǥ ϴ. +"단어" ACTION <행동> PLAYER +단어를 이야기하면 몹이 행동에 적혀있는 표현을 사용자에게 할것이다. +표현은 action.c에 정의된 표현이 가능하다. -"ܾ" CAST <ֹ> -ܾ ̾߱ ϸ ֹ ǵ ֹɯڿ ̴. -κ ġ ٶ ϸ . +"단어" CAST <주문> +단어를 이야기 하면 주문에 정의된 주뮌��벙사용자에게 사용할 것이다. +대부분 치료 기능을 줄때 사용하면 좋다. -"ܾ" GIVE < ȣ> -ܾ ̾߱ ϸ ȣ ǵ ̴ٰ. ̰ ӹ -Ҷ ߿ϰ ̰ Ǹ, ̶ ÷̰ Ѱ? ° - ؾ Ѵ. ܾ ̾߱ϸ õ ٰ̱ ̴. +"단어" GIVE <아이템 번호> +단어를 이야기 하면 아이템 번호에 정의된 아이템을 줄것이다. 이것은 임무를 +설계할때 중요하게 쓰이게 되며, 이때 버그 플레이가 가능한가? 문제는 없는가 +잘 고려해야 한다. 단어를 이야기하면 수천개라도 아이템을 줄것이기 때문이다. diff --git a/docs/crt_make b/docs/crt_make index 23b6553..b64a6cb 100644 --- a/docs/crt_make +++ b/docs/crt_make @@ -1,6 +1,6 @@ - Ϳ ֽϴ. - dm.doc Ͻñ ٶϴ. - dm.doc ÷׿ Ÿ ڼ ֽϴ. + 몹들은 에디터에서 쉽게 만들 수 있습니다. + dm.doc 파일을 참조하시기 바랍니다. + dm.doc 파일은 몹 플래그와 기타 변수에 대한 자세한 정보를 담고 있습니다. - ¶λ󿡼 "*缳" Ʈ ֽϴ. + 몹은 온라인상에서 "*재설정" 명령을 통해 업데이트 될 수 있습니다. diff --git a/docs/crt_talk b/docs/crt_talk index d0178c6..a9b954d 100644 --- a/docs/crt_talk +++ b/docs/crt_talk @@ -1,32 +1,32 @@ - ȭ +몹과의 대화 - ڿ ȭ Դϴ. + 이 문서는 사용자와 몹과의 대화에 대한 문서입니다. - ÷̾ Ư ܾ , Ư - ֽϴ. - ̴ Ͽ ݴϴ. + 플레이어가 몹에게 특정 단어에 대해 물어볼때, 몹은 특별한 반응을 + 할 수 있습니다. + 이는 다음 파일에 설정해 줍니다. ~/objmon/talk. - Ϲ ̸ [̸]-[] ϴ. - ϴ ϴ. + 일반적으로 파일 이름은 [몹이름]-[몹레벨]로 정해집니다. + 이 파일을 기록하는 양식은 다음과 같습니다. - <Ưܾ> [۱] - <> + <특정단어> [동작구문] + <응답라인> - Ưܾ ִ ̴ ѱ 40, 80Դϴ. - ִ ѱ 512ڸ Ҽ ֽϴ. + 반응할 특정단어의 최대 길이는 한글 40자, 영문 80자입니다. + 응답 라인은 최대 한글 512자를 기록할수 있습니다. - <Ưܾ> ܾ Ǿ մϴ. + <특정단어> 는 공백 없는 한 단어로 구성되어야 합니다. - <Ưܾ> ATTACK - ְ Ǹ ڰ Ưܾ ȭҰ ڸ - մϴ. - ̿ ɾ ֽϴ. + <특정단어> ATTACK + 위와 같이 써주게 되면 사용자가 특정단어로 대화할경우 몹이 사용자를 + 공격합니다. + 이와 같은 방식으로 다음과 같은 명령어들이 있습니다. - <Ưܾ> ACTION [Ÿ] PLAYER : ǥ - <Ưܾ> CAST <ȣ> : ֹ ܿ - <Ưܾ> GIVE <۹ȣ> : ڿ Ư ش + <특정단어> ACTION [반응타입] PLAYER : 감정표현 + <특정단어> CAST <마법번호> : 몹이 주문을 외움 + <특정단어> GIVE <아이템번호> : 사용자에게 특정 아이템을 준다 - Ÿ ڼѰ ̹ Ǿ ִ talk 丮 - Ͻñ ٶϴ. + 기타 자세한것은 이미 구현되어 있는 talk 디렉토리 내의 파일을 + 참조하시기 바랍니다. diff --git a/docs/dm.doc b/docs/dm.doc index e2b0890..94e7429 100644 --- a/docs/dm.doc +++ b/docs/dm.doc @@ -1,24 +1,24 @@ - >> ޴<< + >>관리자의 메뉴얼<< -list ƿ +list 유틸 사용법 - 󿡼 ԷѴ. +리눅스 쉘 상에서 다음을 입력한다. list [options] -[options]: -r#:# ȣ Ѵ - -s# ܾ ˻Ѵ - -l#:# Ѵ - -t# Ѵ - -w# ϴ Ѵ - -f# flag - -F# flag ʵȰ - -q ӹ - -o# ִ - -m# ִ +[options]: -r#:# 번호범위를 지정한다 + -s# 지정된 단어를 검색한다 + -l#:# 레벨범위를 지정한다 + -t# 물건 성격을 지정한다 + -w# 착용하는 부위를 지정한다 + -f# flag를 지정 + -F# flag설정 않된것을 지정 + -q 임무 아이템 지정 + -o# 아이템이 있는 몹과 방을 지정 + -m# 몹이 있는 방을 지정 -Ѵ ǥ Ÿ ̺ +무한대전 몹의 표준적 데이타 테이블 LEVEL STATS HP's AC TO XP's DAM 1 55 10 90 19 10 5 @@ -51,799 +51,799 @@ LEVEL STATS HP's AC TO XP's DAM - > Flags< + >몹들의 Flags< - ¿ ൿ ϴ Ƿ̴ɷ - ÷ ȣ ͳ mtype.h -÷׸ ϰ Ǵ mtype.h DEFINE ĺ̴. -ɱ 0 ϹǷ ̰ -1 - ־ Ѵ. +다음은 몹들의 상태와 행동양식을 규정하는 퓐묽戮甄�랴� +구성은 다음과 같다 플레그 번호는 에디터나 mtype.h에서 규정된 +플레그를 뜻하고 정의는 mtype.h에서 DEFINE된 식별자이다. +주의할점�괍′珥叢【�는 0부터 정의하므로 이곳의 설명보다 -1을 +해 주어야 한다. - ÷ ȣ +제목 플레그 번호 정의 ================================================================== Permanent Monster 1 Perm MPERMT - ν ǵ ð Ѵ. + 고정된 몹으로써 정의된 일정한 시간 간격으로 계속 출현한다. Hidden 2 MHIDDN - ִ ã ʴ´. + 숨어있는 몹으로 찾기전에는 보이지 않는다. Invisible 3 Invis MINVIS - е ִ а ʴ´. + 은둔되 있는 몹으로 은둔감지가 가능하지 않으면 보이지 않는다. Plural name 4 MTOMEN - . + 쓰이지 않음. No Plural 5 MDROPS - . + 쓰이지 않음. No Prefix 6 MNOPRE - . + 쓰이지 않음. Aggressive 7 Aggr MAGGRE - ̴ ڸ Ѵ. + 공격 성향을 가진 몹으로 보이는 사용자를 공격한다. Guard Treasure 8 Guard MGUARD - 濡 ִ ϰ Ѵ. + 방에 떨어져 있는 물건을 집지 못하게 방해한다. Follow attacker 10 Follow MFOLLO - ڰ ڸ 󰣴. + 사용자가 도망갈경우 사용자를 따라간다. Flee 11 Flee MFLEER - ڽ ü . + 자신의 체력이 위험할 경우 도망간다. Scavenger 12 Scav MSCAVE - ⵵ Ѵ. + 때때로 땅에 물건을 집어 가지기도 한다. Gender 13 Male MMALES - ϴ ÷ɴǸ , ʵǸ - ȴ. + 남성과 여성을 구분하는 플레굣�눠【냇ㅅ퓔� 남성, 설정 않되면 + 여성이 된다. Poisoner 14 Poison MPOISS - ڸ ߵų ִ ɷ ִ. + 사용자를 중독시킬수 있는 능력이 있다. Undead 15 Undead MUNDED - Ȱ ü ȥ ĥ ִ. + 부활한 시체로 방혼술로 물리칠수 있다. No Steal 16 No-steal NUNSTL - ij Ѵ. + 도둑이 아이템을 훔쳐낼수 없게 한다. Poisoned 17 Poisoned MPOISN - ߵ ־ ð ״´. + 중독되 있어서 일정 시간이 지나면 죽는다. Casts spells 18 Magic MMAGIC - ߿ ڳ ڽſ ֹ ܿ ϰų - ڽ ġѴ. + 전투중에 사용자나 자신에게 설정된 주문을 외워 공격하거나 + 자신을 치료한다. Has Scavenged 19 MHASSC - ʴ´. + 쓰이지 않는다. Breath Weapon Attack 20 MBRETH - ⸦ ϴ flag Ǹ 29/30 ÷ - ߿ ϰ ȴ. + 용의 무기를 사용하는 flag로 설정되면 29/30 플레그 설정을 따라서 + 전투중에 공격하게 된다. Type of breath 29/30 MBRWP1/MBRWP2 - ΰ ÷ ϴ Ʋ. - κ Ǹ ׹ . + 이 두개의 플레그의 조합으로 공격하는 방식이 틀려진다. + 대부분 용의 공격으로 설정되며 그방식은 다음과 같다. - (0,0) = ȭ , (01) = ñ , - (1,0) = , (1,1) = + (0,0) = 화염 공격, (01) = 냉기 공격, + (1,0) = 가스 공격, (1,1) = 독 공격 Magic Harm Only 21 Magic-only MMGONL - ü ߵ . ֹμ - ִ. + 모든 육체적 공격을 견디어 낸다. 오로지 주문으로서만 + 공격 받을수 있다. Detect Invisibility 22 Detect-invis MDINVIS - ڸ ִ ɷ ִ. + 은둔한 사용자를 볼수 있는 능력이 있다. Magic / Enchant 23 Enchant-only MENONL - (+) ⳪ ǰ ɸ θ ϴ. + (+)된 무기나 빙의가 걸린 무기로만 공격이 가능하다. Interactive Talk 24 Talks MTALKS - objmon/talk о ڿ ȭ ϰ - Ѵ. "̸_"̴. "輮ġ_25" + objmon/talk에 설정된 파일을 읽어서 사용자와 대화를 가능하게 + 한다. 형식은 "몹이름_레벨"이다. 예 "계석치무_25" No Harm 25 Unkillable MUNKIL - Ҽ ̴. + 공격할수도 받을수도 없는 몹이다. Fix amount of gold 26 NonrandGold MNRGLD - ɲ ϰ Ǹ - ִ. + 보�꺾【냇ㅅ� 범위내에서 돈이 랜덤하게 나오나 설정되면 + 고정된 양의 돈을 갖고 있다. Aggressive talk 27 Talk-aggr MTLKAG - Ŵ ڸ Ѵ. + 말을 거는 사용자를 공격한다. Resist-magic 28 Resist-magic MRMAGI - ֹ . ɷ¿ - ̰ ִ. + 주문에 내성이 생긴다. 어느정도 능력에 따라서 내성의 + 정도는 차이가 있다. Experience Drain 31 Energy Drain MENEDR - ġ ƸԴ´. + 공격자의 경험치를 가끔씩 깍아먹는다. Kingdom allegiance 32 MKNGDM - ձ Ҽӵ Ѵ. ̼ɱǾ ձ - ÷׵ ۵Ѵ. + 왕국에 소속된 몹을 뜻한다. 이설정�괍〉퓸� 나머지 왕국관련 + 플레그들이 작동한다. Pledge 33 Pledge 0/1 MPLDGK - ڵ ÷װ ձ Ե - ڿ 53 ձ ÷װ ÿ ־ Ѵ. + 사용자들은 이 플레그가 설정된 몹의 왕국에 가입되 있으며 + 뒤에 53번 이하 왕국 플레그가 동시에 설정되 있어야 한다. Rescind 34 Rescind 0/1 MRSCND - ڵ ձ ŻҼ , 53 - ձ ÷װ ÿ ־ Ѵ. + 사용자들은 가입한 몹의 왕국에서 탈퇴할수 있으며, 53번 이하 + 왕국 플레그가 동시에 설정되 있어야 한다. Disease 35 Disease MDISEA - ڿ Ű Ѵ. + 사용자에게 질병을 일으키는 공격을 한다. Disolve items 36 Dissolve MDISIT - 쿩. + 사용자이 장비를 가끔 녹여버린다. Vendor 37 Purchase MPURIT - ǰ ִ ڿ Ǵ. + 소지품에 있는 아이템을 사용자에게 판다. Gives Items for quest 38 Trade MTRADE - "ȯ" ̶ ¹ٲپ ش. ӹ ߿ϰ - ̸ ȯϴ 1 5 ȴ. ȯִ - +5 6 10 ǰ Ǹ, ÿ - ȯ Ҽ ִ. + "교환" 이란 명령으로 물건을 맞바꾸어 준다. 임무 설계실 중요하게 + 쓰이며 그 교환하는 물건은 1번에서 5번의 아이템이 된다. 교환해주는 + 물건은 +5인 6번에서 10번의 소지품이 되며, 여러가지를 동시에 + 교환 할수도 있다. Passive guard 39 P-Guard MPGUAR - ⱸ ÷׿ XPGUAR ÷װ ⱸ - Ű ϰ Ѵ. + 출구의 플레그에 XPGUAR의 플레그가 설정되있으면 그 출구를 + 지키며 못 통과하게 한다. Good Aggressive 40 Good-Aggro MGAGGR - ڸ Ѵ. + 선한 성향의 사용자를 공격한다. Evil Aggressive 41 Evil-Aggro MEAGR - ڸ Ѵ. + 악한 성향의 사용자를 공격한다. Death Scene 42 Ddesc MDEATH - ׾ muhan/objmon/ddesc/ о 濡 - ϰ Ǹ, ӹ ̳ Ҷ ȴ. - "̸_" ȴ. MPERMT ÷װ ÿ - ־ ۵ȴ. "α_25". + 몹이 죽었을 경우 muhan/objmon/ddesc/에 저장된 파일을 읽어서 방에 + 출력하게 되며, 임무의 성공이나 극적인 장면을 연출할때 사용된다. + 파일은 "몹이름_레벨"같이 저장된다. 또한 MPERMT의 플레그가 동시에 + 설정되 있어야 작동된다. 예 "식인귀_25". Resist Befuddle 44 R-beffd MRBEFD - ȥ ֹ ɷ ʴ´. + 혼동 주문에 걸려들지 않는다. Resist circle 45 R-circle MNOCIR - ̳ Ͱ ɷ ʴ´. + 교란이나 맹공에 걸려들지 않는다. Monster Blinds 46 M-blinds MBLNDR - ڸ ְ Ѵ. + 사용자를 눈멀게 한다. DM-follow 47 DM-follow MDMFOL - ڸ . ܺ ʴ´. + 관리자를 따른다. 외부적으로 사용되지 않는다. Monster Fearful 48 M-fear MFEARS - ֹ ɷִ. ܺ ʴ´. + 공포 주문에 걸려있다. 외부적으로 사용 않는다. Monster silenced 49 M-silenced MSILNC - ֹ ܿ Ѵ. ܺ ʵ. + 주문을 외우지 못한다. 외부적 사용 않됨. Monster Blind 50 M-blind MBLIND - ־ ִ. ܺ ʴ´. + 눈이 멀어 있다. 외부적으로 사용되진 않는다. Monster charmed 51 M-charm MCHARM - ָ鿡 ɷ ִ. ܺ ʴ´. + 누군가의 최면에 걸려 있다. 외부적으로 쓰이지 않는다. Monster Befuddle 52 M-beffd MBEFUD - ȥǾ ִ. ܺ . + 혼동되어 있다. 외부 사용 않함. Monster Kingdom1 53 kingdom1 MKNDM1 - 1 ձ Ҽ + 1번 왕국의 소속 몹 Monster Kingdom2 54 kingdom2 MKNDM2 - 2 ձ Ҽ + 2번 왕국의 소속 몹 Monster Kingdom3 55 kingdom3 MKNDM3 - 3 ձ + 3번 예비 왕국 Monster Kingdom4 56 kingdom4 MKNDM4 - 4 ձ + 4번 예비 왕국 Monster King1 57 king1 MKING1 - 1 ձ + 1번 왕국의 왕 Monster King2 58 king2 MKING2 - 2 ձ + 2번 왕국의 왕 Monster King3 59 king3 MKING3 - 3 + 3번 예비 왕 Monster King4 60 king4 MKING4 - 4 + 4번 예비 왕 Monster saytalk 61 saytalk MSAYTLK - . + 아직 제작중 설정 금지. Monster Summon 62 summoner MSUMMO - MPERM ÷׿ ÿ ؾ ۵ϸ, Ÿ - specialȣ ִ ȣ ȯѴ. ȯ - ȯ ڸ Ѵ. + MPERM 플레그와 동시에 설정 해야 작동하며, 몹의 데이타중 + special번호에 있는 몹의 번호를 죽을 때 소환한다. 소환된 + 몹은 소환한 몹과 전투중인 사용자를 공격한다. ----------------------- ɲ -------------------------- +---------------------- 전쟁 루팀�껼【낯� -------------------------- - ƾ  ÷׵ ̷ . - ڵ , 丮 Ȳ -⼺ ΰ ϰ Ͽ. ΰ ձ - ΰ Ǿ. + 전쟁 루틴은 몇가지 복잡한 플레그들의 조합으로 이루어 진다. 원래 +정당한 사용자들의 대결을 위해 제작했으나, 제작중 스토리와 상황변수의 +복잡성으로 인해 두개의 나라만 지원 하게 설계하였다. 나머지 두개의 왕국은 +예비로 놔두게 되었다. - ձ ̷ . ձ հ ϵ ̷ , - ÷׸ ϰ ȴ. ڴ ձ Ҽӵǰ Ǹ, - ձ Եǰ, ڽ ձ ڳ -ϸ ظ Դ´. ƾ߸ , -̶ ¸ ްԵǰ, й ް ȴ. +먼저 왕국은 몹들로 이루어 진다. 각 왕국은 왕과 부하들로 이루어져 있으며, +왕은 왕의 플레그를 설정하게 된다. 가입한 사용자는 그 왕국에 소속되게 되며, +상대 왕국의 몹을 잡으면 상금을 얻게되고, 자신의 왕국의 사용자나 몹을 +공격하면 피해를 입는다. 선언된 전쟁은 서로의 왕을 잡아야만 끝낼수 있으며, +이때 승리한 쪽은 상을 받게되고, 패배한 쪽은 벌을 받게 된다. - κ ̰, ִ. +아직 많은 부분이 개발이 덜 된 상태이고, 많은 개선점이 있다. ---------------------- ȭϴ ------------------------ +--------------------- 대화하는 몹의 설정 ------------------------ - ȭϴ ⸦ ԰ ÿ Ʈ ϱ -Ѵ. ΰ  ְ, ȭ + 대화하는 몹은 임의 동기를 설정함과 동시에 힌트를 제공하기 위해 +존재한다. 또한 부가적인 몇개의 기능을 갖고 있고, 그 대화 형식은 ------------------- -"ܾ" -"ܾ " +"단어" +"단어에 대한 대답" ------------------ - muhan/objmon/talk/ ȴ. +형식으로 muhan/objmon/talk/에 저장 된다. -ΰ 캸 +부가적인 기능을 살펴보면 -"ܾ" ATTACK -̰ Ư ܾ ȭϸ ϴ ̴. +"단어" ATTACK +이것은 몹과 특정한 단어로 대화하면 공격을 하는 기능이다. -"ܾ" ACTION <ൿ> PLAYER -ܾ ̾߱ϸ ൿ ִ ǥ ڿ Ұ̴. -ǥ action.c ǵ ǥ ϴ. +"단어" ACTION <행동> PLAYER +단어를 이야기하면 몹이 행동에 적혀있는 표현을 사용자에게 할것이다. +표현은 action.c에 정의된 표현이 가능하다. -"ܾ" CAST <ֹ> -ܾ ̾߱ ϸ ֹ ǵ ֹɯڿ ̴. -κ ġ ٶ ϸ . +"단어" CAST <주문> +단어를 이야기 하면 주문에 정의된 주뮌��벙사용자에게 사용할 것이다. +대부분 치료 기능을 줄때 사용하면 좋다. -"ܾ" GIVE < ȣ> -ܾ ̾߱ ϸ ȣ ǵ ̴ٰ. ̰ ӹ -Ҷ ߿ϰ ̰ Ǹ, ̶ ÷̰ Ѱ? ° - ؾ Ѵ. ܾ ̾߱ϸ õ ٰ̱ ̴. +"단어" GIVE <아이템 번호> +단어를 이야기 하면 아이템 번호에 정의된 아이템을 줄것이다. 이것은 임무를 +설계할때 중요하게 쓰이게 되며, 이때 버그 플레이가 가능한가? 문제는 없는가 +잘 고려해야 한다. 단어를 이야기하면 수천개라도 아이템을 줄것이기 때문이다. - =====> ɾ<====== + =====>관리자의 명령어들<====== - Ϻδ һ ϰ ְ, κ ũ - ڸ ϰ ִ. +이 명령의 일부는 불사들이 공유하고 있고, 대부분 디스크 입출력 +명령은 관리자만이 소유하고 있다. -[] * - ణ . +[사용자] *방어력 + 지정된 사용자의 방어력 약간의 정보 출력. -r <ȣ> * - ο ϰ Ѵ. +r <방번호> *방제작 + 새로운 방을 지정하고 제작한다. -[-n] <...> *߰ - 漳 ߰Ѵ. - -n 漳 ̾ ߰Ѵ. +[-n] <문장...> *추가 + 방설명에 문장을 추가한다. + -n 방설명의 마지막 문장의 끝에서 이어서 문장을 추가한다. -[-n] < ....> * - ڿ ȴ. - -n ### ۵ ʴ´. +[-n] <내용 ....> *공지 + 내용이 모든 사용자에게 공지된다. + -n 공지의 내용이 ###으로 시작되지 않는다. -< ȣ> *â - ȣ . +<아이템 번호> *창조 + 아이템 번호의 물건을 만든다. -<....> * - 濡 ִ ڵ鿡 ˸. +<문장....> *방송 + 문장의 내용을 같은 방에 있는 사용자들에게 알린다. -<> *ΰ - ȣƮ finger˻ Ѵ. +<사용자> *핑거 + 사용자의 호스트에 finger검색을 한다. -*缳 - ޸𸮻 ۰ ũ Ѵ. +*재설정 + 메모리상의 아이템과 몹을 디스크의 변경된 내용으로 갱신한다. -<> <ൿ> * - ڿ ൿ Ѵ. +<사용자> <행동> *강제 + 사용자에게 행동을 강요한다. --r <ֹ> *ֹ - ڿ ֹ ܿ. ʿġ ʴ. - -r ڿԸ ֹ ܿ. +-r <주문> *전주문 + 모든 사용자에게 주문을 외운다. 도력이 필요치 않다. + -r 같은 방의 사용자에게만 주문을 외운다. -<> *׷ - ׷ ˻Ѵ. +<사용자> *그룹 + 사용자 그룹원을 검색한다. -* - ӵ ¸ . +*정보 + 머드의 상태를 본다. -* - ڽ ڵ鿡Լ . +*투명 + 자신을 사용자들에게서 감춘다. - *Ʈ - Ʈ ˻Ѵ. ̸ list ƿ ϵǾ - bin/ ġ ־ Ѵ. + *리스트 + 각 종류별로 리스트 검색한다. 미리 list 유틸이 컴파일되어서 + bin/에 위치해 있어야 한다. -* - д´. +*제한 + 접속지 제한 파일을 갱신해 읽는다. -< ȣ> [n #] * - ȣ ȯѴ. n ġ Ǹ ׼ڸŭ - ȯȴ. +<몹 번호> [n #] *괴물 + 몹번호의 괴물을 소환한다. n 다음 수치가 지정되면 그숫자만큼 + 소환된다. -≮ ...> *̸ - üѴ. +<이름 ...> *방이름 + 방의 제목을 교체한다. -[dr #] *ġ +[dr #] *수치 - d  ġ ˻Ѵ. + d 몇가지 수치적 정보를 검색한다. - r # 󵵸 Ѵ. + r # 랜덤 몹의 출현 빈도를 정의한다. -<ť * - OPERM ÷ Ѵ. +<아읖�� *영원 + 지정된 아이템을 OPERM 플레그 설정한다. -[-sn] <...> * - *߰ 漳 ʿ ߰Ѵ. +[-sn] <문장...> *서언 + *추가와 같은 방식으로 방설명을 위쪽에서 추가한다. -*ֱ - Ѵ. +*없애기 + 방의 몹과 아이템을 제거한다. -*ε - ¸ ũ ٽ д´. +*로드 + 방 상태를 디스크에서 다시 읽는다. -[-D] <ܾ> <ü ܾ> *ü - ܾ ãƼ ü ܾ üѴ. - -D ü ܾκ üѴ. +[-D] <단어> <교체할 단어> *교체 + 방 설명중 단어를 찾아서 교체할 단어로 교체한다. + -D 는 교체할 단어부분을 지우고 교체한다. -*ȣ - ȣ . +*방번호 + 방번호를 본다. -*̺ - ¸ Ѵ. ¸ ٲپ ޸𸮿 - ϱ ؾ ¸ Ѵ. +*세이브 + 방의 상태를 저장한다. 모든 기능으로 상태를 바꾸었더라도 메모리에서 + 존재하기 때문에 저장을 해야 다음에도 상태를 유지한다. -<> *ϱ - ڿ һ鿡 Ѵ. +<문장> *전하기 + 모든 관리자와 불사들에게 문장을 전한다. -[now] [#] * - ӵ带 Ѵ. - now ٷ Ѵ. - # ŭ 1 ؼ Ѵ. +[now] [#] *종료 + 머드를 종료한다. + now 바로 종료한다. + # 지정된 숫자 만큼 1분 단위로 지연해서 종료한다. -<> [cm] * - Ų. - c ɱ Ƚ - m # ȸ Ѵ. +<사용자> [cm] *벙어리 + 사용자의 잡담을 금지시킨다. + c 남�괍÷穗� 횟수를 본다 + m # 잡담 회수를 설정한다. -<> * - ൿ Ѵ. +<사용자> *감시 + 사용자의 수상한 행동을 감시한다. - * - , , , , ⱸ Ѵ. + *설정 + 몹, 사용자, 아이템, 방, 출구를 설정한다. -o <> [#] [,] <û> [] * - Ǵ ڰ ִ Ѵ. +o <물건> [#] [몹,사용자] <선택사항> [값] *설정 + 몹 또는 사용자가 갖고 있는 물건의 정보를 설정한다. -c/p/m ≮> [#] <û> [] * - ڳ Ѵ. +c/p/m <이름> [#] <선택사항> [값] *설정 + 사용자나 몹의 정보를 수정한다. -r <û> [] * - ڽ ϴ Ѵ. +r <선택사항> [값] *설정 + 현재 자신이 존재하는 방의 정보를 수정한다. -xf <ⱸ> <ȣ> * - ڽ ϴ ⱸ ÷׸ /Ѵ. +xf <출구> <번호> *설정 + 현재 자신이 존재하는 방의 출구 플래그를 설정/해제한다. -x <ⱸ̸> <ȣ> [<ⱸ̸2>] * - <ⱸ̸> <ȣ> ⱸ . <ȣ> 0̸ - <ⱸ̸> ⱸ ȴ. <ⱸ̸2> Ǹ - ⱸ Ŀ <ȣ> ִ <ⱸ̸2> - ٽ ⱸ . +x <출구이름> <방번호> [<출구이름2>] *설정 + <출구이름>으로 <방번호>로 출구를 만든다. <방번호>가 0이면 + <출구이름>의 출구가 삭제된다. <출구이름2>가 설정되면 + 출구를 설정한 후에 <방번호>에서 현재있는 방으로 <출구이름2>로 + 다시 출구가 만들어진다. -x bl <> * - ⱸ ִ ּҷ Ѵ. +x bl <레벨> *설정 + 그 출구로 갈수 있는 최소레벨을 설정한다. -x bh <> * - ⱸ ִ ְ Ѵ. +x bh <레벨> *설정 + 그 출구로 갈수 있는 최고레벨을 설정한다. -x x <ȣ> * - ȣ Ѵ. +x x <번호> *설정 + 현재 방의 함정 번호를 설정한다. -[//] * - ڼ ÷׸ . +[물건/사용자/몹] *상태 + 각기 자세한 정보와 플레그를 본다. -[1/ȣ] [2] *̵ - ̵Ѵ. - *̵ ̵. - # *̵ #ȣ ɴ̵. - *̵ ڷ ̵. - 1 2 *̵ 1 ڸ 2 ڷ ̵. - ply1 . *̵ 1 ڸ ڽſ ̵. +[사용자1/방번호] [사용자2] *순간이동 + 순간 이동한다. + *순간이동 생명의 나무로 이동. + # *순간이동 #번호의 뮌막�눠÷絹�. + 사용자 *순간이동 사용자로 이동. + 사용자1 사용자2 *순간이동 1번 사용자를 2번 사용자로 이동. + ply1 . *순간이동 1번 사용자를 자신에게 이동. -* - +*누구 + 사용자 목록을 본다 - > Flags< + >아이템의 Flags< -mtype.h ǵ ĺڴ ̰ 1 ۴. +mtype.h에 의된 식별자는 이곳보다 1이 작다. ======================================================================= Permanent 1 Pperm OPERMT - 濡 Ѵ. + 누군가가 집어들기전에는 계속 방에 존재한다. Hidden 2 Hidden OPERMT - ̳ ߰ϱ ʴ´. + 포졸이나 누군가 발견하기 전까지는 보이지 않는다. Invisible 3 Invis OINVIS - ʿϴ. + 투명한 아이템으로 은둔 감지가 필요하다. Prefix Some 4 OSOMEA - + 쓰이지 않음 Plurals 5 ODROPS - + 쓰이지 않음 No Prefix 6 ONOPRE - + 쓰이지 않음 Container 7 Cont OCONTN - ٸ ɮ + 보따리 종류로 다른 아이템을 담을수 있��¿ Weightless Container 8 Wtless OCONTN - ԰ . + 무게 없는 보따리로 아이템을 담으면 무게가 사라진다. Temp Permanent 9 Tperm OTEMPP Inventory Permanent 10 IPerm OPERM2 Mage restricted 11 Nomage ONOMAG - . + 도술사 사용 금지. Light Source 12 Light OLIGHT - ϸ . + 사용하면 광원으로 빛을 낸다. Good Only 13 Good OGOODO - ڿ + 선한 성향의 사용자용 Evil Only 14 Evil OEVILO - ڿ + 악한 성향의 사용자용 Enchanted 15 Ench OENCHA - "" ȭ + "빙의"로 강화된 물건 Non repairable 16 NoFix ONOFIX - Ұ + 수리 불가한 물건 Climbing Gear 17 Climbing OCLIMB - 濡 + 등반 장비로 오르막길에서 도움 됨 Cannot be taken 18 Notake ONOTAK - ڰ + 사용자가 주을수 없는 물건 OSCENE 19 Scenery OSCENE - 漳 Ϻη ʴ´. + 방설명의 일부로 존재는 나 보이지는 않는다. Sized armor 20/21 Sized OSIZE1/OSIZE2 - ó ũ ϴ ޴´. - 00 Ѿ, 01 ũ, 10 ߰ ũ, 11 ū ũ - ´ 밡ϴ. + 갑옷의 경우처럼 크기 설정하는 것으로 종족의 영향을 받는다. + 00는 제한없고, 01은 작은 크기, 10은 중간 크기, 11은 큰 크기로 + 맞는 종족만 사용가능하다. Random Enchant 22 RandEnch ORENCH - Ҷ ϰ ǵǾ ´. + 물건이 등장할때 랜덤하게 빙의되어 나온다. Cursed 23 Cursed OCURSE - ɸ + 저주 걸린 물건 Worn 24 Worn OWEARS - ԰ ִٴ ÷ɭܺ . + 입고 있다는 플레��ぁ외부 사용 금지. Floor usable 25 Use-floor OUSEFl - ٴڿ . + 바닥에 떨어져 있을때도 사용 가능. Devouring container 26 Devours OCNDES -  ı ȴ. + 보따리 종류로 들어가는 물건은 파괴 된다. Female only 27 Nomale ONOMAL - + 여성 전용 Male only 27 Nofemale ONOFEM - + 남성 전용 Damage based object 29 NdS dam ODDICE - Ÿġ . + 전투시 설정된 타격치에 따라 사용됨. Pledge Only 30/31 Kingdom 0/1 OPLDGK/OKNGDM - ձ Ե . Ѵ ÷׸ ؾ Ѵ. + 왕국에 가입된 사람만 사용 가능. 둘다 플레그를 설정해야 한다. Class selective 32 Cls-Sel: OCLSSEl - Ǹ ÷׿ . + 설정되면 다음의 플레그에 따라 직업 성향이 정해진다. Assassin usable 33 A OASSNO - ڰ + 자객 사용 Barbarian usable 34 B OBARBO - ǹ + 권법가 사용 Cleric usable 35 C OCLERO - + 불제자 사용 Fighter usable 36 F OFIGHO - ˻ + 검사 사용 Mage usable 37 M OMAGEO - + 도술사 사용 Paladin usable 38 P OPALAO - + 무사 사용 Ranger usable 39 R ORNGRO - + 포졸 사용 Thief usable 40 T OTHIEO - + 도둑 사용 Changeble Name 44 OCNAME - ̸ ڰ Ҽ ִ . + 이름을 사용자가 명명 할수 있는 아이템. ------------------- ֹ Ư ------------------------------ +------------------ 주문서 특성 ------------------------------ -ֹ special ȴ. ̶ - ֹ Ҽ . +주문서는 special에 각기 레벨이 지정된다. 이때 레벨은 배우려는 사람이 +지정된 레벨보다 작으면 그 주문서를 이해할수 없다. ------------------- ۹ ------------------------------ +------------------ 열쇠 제작법 ------------------------------ -ⱸ ȣ ƴ϶ Diceȣ -ȴ. ȣ ⱸ ġѾ Ѵ. +출구에서 지정된 열쇠는 열쇠의 아이템 번호가 아니라 열쇠의 Dice번호로 +지정된다. 이 번호를 출구와 일치시켜야 한다. - > Flags< + >방의 Flags< -mtype.h ĺڴ 1 ۴. +mtype.h에서 식별자는 1이 작다. ======================================================================= Shop 1 Shoppe RSHOPP - Ĵ + 물건 파는 상점 Recycle 2 Dump RDUMPR - ̰ ణ ڿ . + 이곳에 버린 물건은 없어지고 약간의 돈이 사용자에게 보태짐. Pawnshop 3 Pawnshop RPAWNS - + 사용자의 물건을 사는 전당포 Training ground 4-5-6-7 Train RTRAIN - 4 Ʈ ȴ. - 000:ڰ, 001:ǹ.........111:ϼ ̴. + 직업별 수련장으로 4개의 비트로 설정된다. + 000:자객, 001:권법가.........111:도둑순 이다. Repair Shop 8 Repair RREPAI - ģ. + 수리점으로 물건을 고친다. Continual Darkness 9 DarkAlways RDARKR - ʿ ׻ ο + 광원이 필요한 항상 어두운 지역 Dark At Night 10 DarkNight RDARKN - Ǹ ο + 밤이 되면 어두운 지역 Post Office 11 PostOffice RPOSTO - ڳ ְ޴ ü + 사용자끼리 편지를 주고받는 우체국 Safe Room 12 NoPlyKill RNOKIL - + 사용자 공격 금지 지역 No Teleport 13 NoTeleport RNOTEL - ̵, , ȯ + 공간이동, 추적, 소환 금지지역 Fast heal 14 HealFast RHEALR - ȸ + 빠른 회복 지역 One Player 15 OnePlayer RONEPL - ѻ  ִ + 한사람만 들어갈수 있는 지역 Two Player 16 TwoPlayer RTWOPL - λ  մ + 두사람만 들어갈수 잇는 지역 Three Player 17 Threeplyr RTHREE -  ִ + 세사람만 들어갈수 있는 지역 No Magic 18 NoMagic RNOMAG - ֹ + 주문 금지 지역 Permanent Tracks 19 PermTrack RPTRAK - ߰Ҽ ִ ִ + 포졸이 발견할수 있는 흔적이 있는 방 Earth Realm 20 Earth REATH - 迭 + 땅계열 지역 Wind Realm 21 Wind RWINDR - ٶ迭 + 바람계열 지역 Fire Realm 22 Fire RFIRER - Ұ迭 + 불계열 지역 Water Realm 23 Water RWATER - 迭 + 물계열 지역 Group Wander 24 Group RPLWAN - Random Monster ǵ 濡 ϴ - Ѵ. + Random Monster에 정의된 몹이 방에 존재하는 사용자의 + 수에 따라 등장한다. Player Harm 25 PHarm RPHARM - ڰ 迭 ȣ ֹ , - 迭 ظ ԰ ȴ. + 사용자가 적절한 계열의 보호 주문이 없으면, 위에 설정된 + 계열별로 피해를 입게 된다. Poison 26 P-Poison RPPOIS - ڰ ð ӹ ߵ. + 사용자가 일정 시간 머물면 중독됨. Magic Drain 27 MPDrain RPMPRD - ȣ ֹ Ѵ. + 보호 주문이 없으면 도력을 점점 상실한다. Befudlng 28 Confusion RPBEFU - ڰ ð ӹ ȥȴ. + 사용자가 일정 시간 머물면 혼동된다. No Summon 29 No SUmmon RNOLEA - ȯ + 소환 금지 지역 Pledge 30 Pledge RPLDGK - ձ ƾ ϳ ̰ ձ . + 왕국 루틴중의 하나로 이곳에서 왕국의 몹에게 가입. Rescind 31 Rescind RRSCND - ձ ƾ ϳ ̰ ձ Ż. + 왕국 루틴중의 하나로 이곳에 왕국의 몹에게 탈퇴. No Potion 32 No Potion RNOPOT - + 약 사용 금지 지역 Extended Magic 33 Pmagic RPMEXT - ֹ ȭ + 주문 강화 지역 Room nologon 34 Rnolog RNOLOG - ̰ ٽ ӽ ̰ - Ҽ . + 이곳에서 끝나더라도 다시 접속시 이곳에서 + 시작할수 없다. Election Box 35 R-elec RELECT - ǥ + 투표소 Room Forge 36 R-forge RFORGE - Ư⸦ ϴ 尣. + 특수무기를 제련하는 대장간. ---------------------- -------------------------- +--------------------- 상점 만드는 법 -------------------------- - â ־ Ѵ. â ȣ+1 ȴ. - 1000̸ â 1001 ȴ. -̰ ־θ ȴ. ̶ ̵, ȯ -ؾ Ѵ. +상점은 창고를 가지고 있어야 한다. 창고는 상점번호+1 로 설정된다. +상점이 1000번이면 그 상점의 창고는 1001번이 된다. +이곳에 아이템을 넣어두면 된다. 이때 공간이동, 소환 금지 지역으로 +설정해야 한다. - >ⱸ Flags< + >출구 Flags< -mtype.h ĺڴ 1 ۴. +mtype.h에서 식별자는 1이 작다. ======================================================================= Hidden 1 Secret XSECRT - ⱸ ܿ ãƾ߸ ߰ + 숨겨진 출구로 포졸외에는 찾아야만 발견 가능 Invisible 2 Invisible XINVIS - ⱸ ʿ. + 투명한 출구로 은둔 감지 필요. Locked 3 Locked XLOCKED - ⱸ ʿ. + 잠긴 출구로 열쇠 설정이 필요. Closed 4 Closed XCLOSD - ⱸ. + 닫힌 출구. Lockable 5 Lockable XLOCKS - ִ ⱸ. ʿ. + 잠길수 있는 출구. 열쇠 설정이 필요. Clossable 6 Closable XCLOSS - ִ ⱸ + 닫힐수 있는 출구 Unpickable 7 Un-pick XUNPCK - . + 도둑의 따기 금지. Weightless 8 Naked XNAKED - . + 장비를 들고 통과 금지. Climbing Up 9 ClimbUp XCLIMB - ⱸ ɼ . + 기어오르는 출구 떨어질 가능성 있음. Climb Down 10 ClimbRepel XREPEL -  ⱸ. + 기어내려오는 출구. Difficult Climb 11 HardClimb XDCLIM - Ư ֹ ʵ. + 등반장비나 특수 주문이 없이 통과 않됨. Fly 12 Fly XFLYSP - Ƽ . + 날아서만 통과 가능. Female only 13 Female XFEMAL - + 여성 전용 Male only 14 Male XMALES - + 남성 전용 Kingdom / Pledge 14/15 Kingdom 0/1 XPLDGK / XKNGDM - ձ Ҽӵ ڸ . ÷װ - ÿ Ǿ . Ŀ ձ ÷׿ . + 왕국에 소속된 사용자만 출입 가능. 두 플레그가 + 동시에 설정되어야 함. 후에 왕국 플레그에 영향 받음. Night time 17 Night XNGHTO - ӻ ð . + 게임상의 밤 시간에만 출입 가능. Day time 18 Day XDATON - . + 낮에만 출입 가능. Gaurded 19 P-Guard XPGUAR - MGUARD ÷װ ⱸ Ų. + 몹에 MGUARD 플레그가 설정되 있으면 이출구를 지킨다. unseen exit 20 NoSee XNOSEE - Ȯ... . + 확장용... 보이지도 사용하지도 못함. king1 road 20 kingdom1 XKNDM1 - 1 ձ ڸ + 1번 왕국 사용자만 통과 king2 road 20 kingdom2 XKNDM2 - 2 ձ ڸ - ̶ ۵Ǹ ÷״ Ǹ, ȿ - Ҵ´. ȿ ٽ õȴ. + 2번 왕국 사용자만 통과 + 이때 전쟁이 시작되면 이플레그는 잠시 정지되며, 효력을 + 잃는다. 전쟁이 끝나면 효력이 다시 개시된다. - >Ư Flags< + >특별 Flags< - ĺڵ special Ǹ, Ư 뵵 ȴ. +이 식별자들은 아이템의 special에 저장 되며, 특수 용도로 사용된다. ======================================================================= SP_MAPSC 1 - muhan/objmon/ ̸ - о 鿩 ش. 鶧 ȴ. + 아이템을 보면 muhan/objmon/에 저장되 아이템 이름의 파일을 + 읽어 들여 보여준다. 지도나 문서를 만들때 사용된다. SP_COMBO 2 - ȣŰ ⱸ ȴ. + 번호키를 가진 출구에 설정된다. SP_WAR 3 - Ҷ ȴ.  ٷο ִ. - ձ Ե ־ ϸ, ƴϾ Ѵ. -ձ ϰ ձ ޴´. -ٽ ϸ Ѵ. ȿܿ ٷο -ʾ . + 전쟁을 선언할때 사용된다. 몇가지 까다로운 조건이 있다. +먼저 왕국에 가입되 있어야 하며, 전쟁이 아니어야 한다. 먼저 사용한 +왕국에서 도전하고 다음에 사용한 왕국에서 도전을 받는다. +다시 사용하면 도전을 취소한다. 전쟁 나팔외에 사용은 까다로와 +않쓰는 편이 좋다. SP_BOARD 4 - Խǿ ȴ. ڼ board.doc . + 게시판에 설정된다. 자세한 내용은 board.doc를 참조. - > Flags< + >함정 Flags< - ĺڵ trap ȴ. +이 식별자들은 방들의 trap에 저장된다. ======================================================================= TRAP_PIT 1 - ι° ؾ Ѵ. + 구덩이 함정으로 두번째에 떨어지는 방을 지정해야 한다. TRAP_DART 2 - ȭ + 독화살 함정 TRAP_BLOCK 3 - ū û ظ . + 큰 바위 함정 엄청난 피해를 입힌다. TRAP_MPDAM 4 - Ҵ + 도력을 잃는 함정 TRAP_RMSPL 5 - ֹ Ҵ .... ʴ . + 주문을 잃는 함정....쓰지 않는 것이 좋음. TRAP_NAKED 6 - + 모든 장비를 잃음 TRAP_ALARM - 溸 ι° 񺴵 ִ ϰ, ׹濡 - ƾ ۵Ѵ. + 경보 함정 두번째에 경비병들이 있는 방을 지정하고, 그방에 몹을 + 설정해 놓아야 작동한다. diff --git a/docs/obj_flag b/docs/obj_flag index 8d138e7..fccb408 100644 --- a/docs/obj_flag +++ b/docs/obj_flag @@ -1,134 +1,134 @@ - > Flags< + >아이템의 Flags< -mtype.h ǵ ĺڴ ̰ 1 ۴. +mtype.h에 의된 식별자는 이곳보다 1이 작다. ======================================================================= Permanent 1 Pperm OPERMT - 濡 Ѵ. + 누군가가 집어들기전에는 계속 방에 존재한다. Hidden 2 Hidden OPERMT - ̳ ߰ϱ ʴ´. + 포졸이나 누군가 발견하기 전까지는 보이지 않는다. Invisible 3 Invis OINVIS - ʿϴ. + 투명한 아이템으로 은둔 감지가 필요하다. Prefix Some 4 OSOMEA - + 쓰이지 않음 Plurals 5 ODROPS - + 쓰이지 않음 No Prefix 6 ONOPRE - + 쓰이지 않음 Container 7 Cont OCONTN - ٸ ɮ + 보따리 종류로 다른 아이템을 담을수 있��¿ Weightless Container 8 Wtless OCONTN - ԰ . + 무게 없는 보따리로 아이템을 담으면 무게가 사라진다. Temp Permanent 9 Tperm OTEMPP Inventory Permanent 10 IPerm OPERM2 Mage restricted 11 Nomage ONOMAG - . + 도술사 사용 금지. Light Source 12 Light OLIGHT - ϸ . + 사용하면 광원으로 빛을 낸다. Good Only 13 Good OGOODO - ڿ + 선한 성향의 사용자용 Evil Only 14 Evil OEVILO - ڿ + 악한 성향의 사용자용 Enchanted 15 Ench OENCHA - "" ȭ + "빙의"로 강화된 물건 Non repairable 16 NoFix ONOFIX - Ұ + 수리 불가한 물건 Climbing Gear 17 Climbing OCLIMB - 濡 + 등반 장비로 오르막길에서 도움 됨 Cannot be taken 18 Notake ONOTAK - ڰ + 사용자가 주을수 없는 물건 OSCENE 19 Scenery OSCENE - 漳 Ϻη ʴ´. + 방설명의 일부로 존재는 나 보이지는 않는다. Sized armor 20/21 Sized OSIZE1/OSIZE2 - ó ũ ϴ ޴´. - 00 Ѿ, 01 ũ, 10 ߰ ũ, 11 ū ũ - ´ 밡ϴ. + 갑옷의 경우처럼 크기 설정하는 것으로 종족의 영향을 받는다. + 00는 제한없고, 01은 작은 크기, 10은 중간 크기, 11은 큰 크기로 + 맞는 종족만 사용가능하다. Random Enchant 22 RandEnch ORENCH - Ҷ ϰ ǵǾ ´. + 물건이 등장할때 랜덤하게 빙의되어 나온다. Cursed 23 Cursed OCURSE - ɸ + 저주 걸린 물건 Worn 24 Worn OWEARS - ԰ ִٴ ÷ɭܺ . + 입고 있다는 플레��ぁ외부 사용 금지. Floor usable 25 Use-floor OUSEFl - ٴڿ . + 바닥에 떨어져 있을때도 사용 가능. Devouring container 26 Devours OCNDES -  ı ȴ. + 보따리 종류로 들어가는 물건은 파괴 된다. Female only 27 Nomale ONOMAL - + 여성 전용 Male only 27 Nofemale ONOFEM - + 남성 전용 Damage based object 29 NdS dam ODDICE - Ÿġ . + 전투시 설정된 타격치에 따라 사용됨. Pledge Only 30/31 Kingdom 0/1 OPLDGK/OKNGDM - ձ Ե . Ѵ ÷׸ ؾ Ѵ. + 왕국에 가입된 사람만 사용 가능. 둘다 플레그를 설정해야 한다. Class selective 32 Cls-Sel: OCLSSEl - Ǹ ÷׿ . + 설정되면 다음의 플레그에 따라 직업 성향이 정해진다. Assassin usable 33 A OASSNO - ڰ + 자객 사용 Barbarian usable 34 B OBARBO - ǹ + 권법가 사용 Cleric usable 35 C OCLERO - + 불제자 사용 Fighter usable 36 F OFIGHO - ˻ + 검사 사용 Mage usable 37 M OMAGEO - + 도술사 사용 Paladin usable 38 P OPALAO - + 무사 사용 Ranger usable 39 R ORNGRO - + 포졸 사용 Thief usable 40 T OTHIEO - + 도둑 사용 Changeble Name 44 OCNAME - ̸ ڰ Ҽ ִ . + 이름을 사용자가 명명 할수 있는 아이템. ------------------- ֹ Ư ------------------------------ +------------------ 주문서 특성 ------------------------------ -ֹ special ȴ. ̶ - ֹ Ҽ . +주문서는 special에 각기 레벨이 지정된다. 이때 레벨은 배우려는 사람이 +지정된 레벨보다 작으면 그 주문서를 이해할수 없다. ------------------- ۹ ------------------------------ +------------------ 열쇠 제작법 ------------------------------ -ⱸ ȣ ƴ϶ Diceȣ -ȴ. ȣ ⱸ ġѾ Ѵ. +출구에서 지정된 열쇠는 열쇠의 아이템 번호가 아니라 열쇠의 Dice번호로 +지정된다. 이 번호를 출구와 일치시켜야 한다. diff --git a/docs/obj_make b/docs/obj_make index d00397d..9d3c964 100644 --- a/docs/obj_make +++ b/docs/obj_make @@ -2,6 +2,6 @@ this is how to make an item lalala........ ^^ -dm.doc ϼ.. +dm.doc 을 참조하세요.. mk_item diff --git a/docs/revive/baseline.md b/docs/revive/baseline.md index 0247e3c..4a64177 100644 --- a/docs/revive/baseline.md +++ b/docs/revive/baseline.md @@ -51,3 +51,11 @@ docker run --rm --platform linux/amd64 \ -v "$(pwd)":/work -w /work gcc:14 bash -lc \ 'make -C src clean >/dev/null 2>&1 || true; make -C src CC=gcc -j4' ``` + +## UTF-8 First migration constraints (2026-02-11) +- Scope: 텍스트 파일은 UTF-8로 통일, 바이너리 파일은 기존 바이트 유지. +- Input policy: 소켓 입력은 UTF-8 strict 처리, invalid sequence는 버림. +- Backspace policy: 입력 버퍼 편집은 바이트 단위가 아니라 UTF-8 코드포인트 단위. +- String-length policy: CP949 2바이트 가정 대신 Unicode 코드포인트 길이 기준 사용. +- Name/path policy: 플레이어 이름은 유니코드 허용(금지문자 차단), 저장 경로는 SHA-1 2자리 샤딩. +- Compatibility policy: CP949 플레이어 데이터/입력 호환은 제공하지 않음. diff --git a/docs/rom_flag b/docs/rom_flag index 09084c0..c5f3faa 100644 --- a/docs/rom_flag +++ b/docs/rom_flag @@ -1,108 +1,108 @@ - > Flags< + >방의 Flags< -mtype.h ĺڴ 1 ۴. +mtype.h에서 식별자는 1이 작다. ======================================================================= Shop 1 Shoppe RSHOPP - Ĵ + 물건 파는 상점 Recycle 2 Dump RDUMPR - ̰ ణ ڿ . + 이곳에 버린 물건은 없어지고 약간의 돈이 사용자에게 보태짐. Pawnshop 3 Pawnshop RPAWNS - + 사용자의 물건을 사는 전당포 Training ground 4-5-6-7 Train RTRAIN - 4 Ʈ ȴ. - 000:ڰ, 001:ǹ.........111:ϼ ̴. + 직업별 수련장으로 4개의 비트로 설정된다. + 000:자객, 001:권법가.........111:도둑순 이다. Repair Shop 8 Repair RREPAI - ģ. + 수리점으로 물건을 고친다. Continual Darkness 9 DarkAlways RDARKR - ʿ ׻ ο + 광원이 필요한 항상 어두운 지역 Dark At Night 10 DarkNight RDARKN - Ǹ ο + 밤이 되면 어두운 지역 Post Office 11 PostOffice RPOSTO - ڳ ְ޴ ü + 사용자끼리 편지를 주고받는 우체국 Safe Room 12 NoPlyKill RNOKIL - + 사용자 공격 금지 지역 No Teleport 13 NoTeleport RNOTEL - ̵, , ȯ + 공간이동, 추적, 소환 금지지역 Fast heal 14 HealFast RHEALR - ȸ + 빠른 회복 지역 One Player 15 OnePlayer RONEPL - ѻ  ִ + 한사람만 들어갈수 있는 지역 Two Player 16 TwoPlayer RTWOPL - λ  մ + 두사람만 들어갈수 잇는 지역 Three Player 17 Threeplyr RTHREE -  ִ + 세사람만 들어갈수 있는 지역 No Magic 18 NoMagic RNOMAG - ֹ + 주문 금지 지역 Permanent Tracks 19 PermTrack RPTRAK - ߰Ҽ ִ ִ + 포졸이 발견할수 있는 흔적이 있는 방 Earth Realm 20 Earth REATH - 迭 + 땅계열 지역 Wind Realm 21 Wind RWINDR - ٶ迭 + 바람계열 지역 Fire Realm 22 Fire RFIRER - Ұ迭 + 불계열 지역 Water Realm 23 Water RWATER - 迭 + 물계열 지역 Group Wander 24 Group RPLWAN - Random Monster ǵ 濡 ϴ - Ѵ. + Random Monster에 정의된 몹이 방에 존재하는 사용자의 + 수에 따라 등장한다. Player Harm 25 PHarm RPHARM - ڰ 迭 ȣ ֹ , - 迭 ظ ԰ ȴ. + 사용자가 적절한 계열의 보호 주문이 없으면, 위에 설정된 + 계열별로 피해를 입게 된다. Poison 26 P-Poison RPPOIS - ڰ ð ӹ ߵ. + 사용자가 일정 시간 머물면 중독됨. Magic Drain 27 MPDrain RPMPRD - ȣ ֹ Ѵ. + 보호 주문이 없으면 도력을 점점 상실한다. Befudlng 28 Confusion RPBEFU - ڰ ð ӹ ȥȴ. + 사용자가 일정 시간 머물면 혼동된다. No Summon 29 No SUmmon RNOLEA - ȯ + 소환 금지 지역 Pledge 30 Pledge RPLDGK - ձ ƾ ϳ ̰ ձ . + 왕국 루틴중의 하나로 이곳에서 왕국의 몹에게 가입. Rescind 31 Rescind RRSCND - ձ ƾ ϳ ̰ ձ Ż. + 왕국 루틴중의 하나로 이곳에 왕국의 몹에게 탈퇴. No Potion 32 No Potion RNOPOT - + 약 사용 금지 지역 Extended Magic 33 Pmagic RPMEXT - ֹ ȭ + 주문 강화 지역 Room nologon 34 Rnolog RNOLOG - ̰ ٽ ӽ ̰ - Ҽ . + 이곳에서 끝나더라도 다시 접속시 이곳에서 + 시작할수 없다. Election Box 35 R-elec RELECT - ǥ + 투표소 Room Forge 36 R-forge RFORGE - Ư⸦ ϴ 尣. + 특수무기를 제련하는 대장간. diff --git a/docs/rom_make b/docs/rom_make index 84f330e..7278239 100644 --- a/docs/rom_make +++ b/docs/rom_make @@ -1,14 +1,14 @@ - ΰ Դϴ. + 다음은 방을 만드는 두가지 방법입니다. -1) ¶λ󿡼 *add ϴ - dm_cmnd *add, *replace, *save, *reload, *name, - *set, *rm ãƺʽÿ. +1) 온라인상에서 *add 명령을 사용하는 방법 + dm_cmnd 파일의 *add, *replace, *save, *reload, *name, + *set, *rm 문서를 찾아보십시오. -2) λ󿡼 ͸ ϴ - λ󿡼 ߰, ̶ Ϳ - Ѱ εϱ *缳 Ͻʽÿ. - *缳 ӿ - ˴ϴ. +2) 오프라인상에서 에디터를 사용하는 방법 + 만약 오프라인상에서 수정했고, 게임이 실행중이라면 에디터에서 + 변경한것을 로드하기 위해 *재설정 명령을 사용하십시오. + 빨리 *재설정 명령을 사용하지 않으면 변경된 사항은 게임에 의해 + 지워지게 됩니다. diff --git a/docs/rom_xflg b/docs/rom_xflg index b70243f..e006e40 100644 --- a/docs/rom_xflg +++ b/docs/rom_xflg @@ -1,71 +1,71 @@ - >ⱸ Flags< + >출구 Flags< -mtype.h ĺڴ 1 ۴. +mtype.h에서 식별자는 1이 작다. ======================================================================= Hidden 1 Secret XSECRT - ⱸ ܿ ãƾ߸ ߰ + 숨겨진 출구로 포졸외에는 찾아야만 발견 가능 Invisible 2 Invisible XINVIS - ⱸ ʿ. + 투명한 출구로 은둔 감지 필요. Locked 3 Locked XLOCKED - ⱸ ʿ. + 잠긴 출구로 열쇠 설정이 필요. Closed 4 Closed XCLOSD - ⱸ. + 닫힌 출구. Lockable 5 Lockable XLOCKS - ִ ⱸ. ʿ. + 잠길수 있는 출구. 열쇠 설정이 필요. Clossable 6 Closable XCLOSS - ִ ⱸ + 닫힐수 있는 출구 Unpickable 7 Un-pick XUNPCK - . + 도둑의 따기 금지. Weightless 8 Naked XNAKED - . + 장비를 들고 통과 금지. Climbing Up 9 ClimbUp XCLIMB - ⱸ ɼ . + 기어오르는 출구 떨어질 가능성 있음. Climb Down 10 ClimbRepel XREPEL -  ⱸ. + 기어내려오는 출구. Difficult Climb 11 HardClimb XDCLIM - Ư ֹ ʵ. + 등반장비나 특수 주문이 없이 통과 않됨. Fly 12 Fly XFLYSP - Ƽ . + 날아서만 통과 가능. Female only 13 Female XFEMAL - + 여성 전용 Male only 14 Male XMALES - + 남성 전용 Kingdom / Pledge 14/15 Kingdom 0/1 XPLDGK / XKNGDM - ձ Ҽӵ ڸ . ÷װ - ÿ Ǿ . Ŀ ձ ÷׿ . + 왕국에 소속된 사용자만 출입 가능. 두 플레그가 + 동시에 설정되어야 함. 후에 왕국 플레그에 영향 받음. Night time 17 Night XNGHTO - ӻ ð . + 게임상의 밤 시간에만 출입 가능. Day time 18 Day XDATON - . + 낮에만 출입 가능. Gaurded 19 P-Guard XPGUAR - MGUARD ÷װ ⱸ Ų. + 몹에 MGUARD 플레그가 설정되 있으면 이출구를 지킨다. unseen exit 20 NoSee XNOSEE - Ȯ... . + 확장용... 보이지도 사용하지도 못함. king1 road 20 kingdom1 XKNDM1 - 1 ձ ڸ + 1번 왕국 사용자만 통과 king2 road 20 kingdom2 XKNDM2 - 2 ձ ڸ - ̶ ۵Ǹ ÷״ Ǹ, ȿ - Ҵ´. ȿ ٽ õȴ. + 2번 왕국 사용자만 통과 + 이때 전쟁이 시작되면 이플레그는 잠시 정지되며, 효력을 + 잃는다. 전쟁이 끝나면 효력이 다시 개시된다. diff --git a/help/char b/help/char index d6386cb..6eaf2bf 100644 --- a/help/char +++ b/help/char @@ -1,12 +1,12 @@ - ̸ ̸ - 1 1 - 2 ǹ 2 - 3 3 䱫 - 4 ˻ 4 - 5 5 ΰ - 6 6 - 7 7 - 8 8 Gnome +직업 이름 종족 이름 + 1 닌자 1 난장이족 + 2 권법자 2 용신족 + 3 불제자 3 요괴족 + 4 검사 4 토신족 + 5 도술사 5 인간족 + 6 무사 6 도께비족 + 7 포졸 7 거인족 + 8 도둑 8 Gnome 9 Bard 9 Troll 10 Caretaker 11 Dungeonmaster diff --git a/help/exp b/help/exp index 08d210b..b45077b 100644 --- a/help/exp +++ b/help/exp @@ -1,4 +1,4 @@ -ġ +경험치에 따른 등급 1 0 11 146,410 21 4,465,120 2 512 12 207,360 22 5,792,661 diff --git a/help/help.1 b/help/help.1 index 231158f..ed35969 100644 --- a/help/help.1 +++ b/help/help.1 @@ -1,13 +1,13 @@ -: - +도움말: + 위 밑 북 남 동 서 밖 나가 - ɾ. +그쪽으로 가는 명령어라네. -: +예: - +선비촌 -ⱸ: , . +출구: 북, 남. -: +:북 diff --git a/help/help.10 b/help/help.10 index ce8de33..f249cbb 100644 --- a/help/help.10 +++ b/help/help.10 @@ -1,16 +1,16 @@ -: - <> [#] +도움말: + <물건> 벗어 [#] -'' ְų ԰ִ° ų ° մϴ. - '' Էϼ. -׷ ǰ ɴϴ. -' ' ϴ. +'벗어'는 당신이 잡고 있거나 입고있는것을 벗거나 놓는것을 말합니다. +입은것을 볼려면 '장비'라고 입력하세요. +그러면 장비품이 나옵니다. +'모두 벗어'는 모든장비를 벗습니다. -: +예: -: -ǰ: Į +:장비 +장비품:작은 칼 -:Į - Į ϴ. +:칼 벗어 +당신은 작은 칼을 벗었습니다. diff --git a/help/help.100 b/help/help.100 index efb2f97..d9c586f 100644 --- a/help/help.100 +++ b/help/help.100 @@ -1,22 +1,22 @@ - ǥ ɾ : +감정 표현 명령어 도움말: - ɵ 뿡 ǥϴµ -˴ϴ. ÿ -Ű Ҽ ֽϴ. + 이 명령들은 당신의 감정을 상대에게 표현하는데 +사용됩니다. 비전투시에 사용되지만 몇몇 말들은 전투를 +일으키게 할수 있습니다. - [] <ľ> ɾ + [사람] <수식어> 감정명령어 - ǥ: +감정 표현: -(=) ƴ ̼ Ǽ ̺ -ڼ (=) 뷡 ޷ -Ȳ ̾ ũ ǻ ȳ - β Ⱦ(=Ⱦ) - ǰ ûȥ +끄덕(=응) 아니 감사 미소 웃어 악수 하이파이브 +박수 흡연(=담배) 절 찔러 춤 노래 울어 달래 +당황 생각 보아 노려봐 미안 윙크 뽀뽀 안녕 바이 +설레 놀려 부끄러 구박 따귀 안아(=껴안아) 구걸 +해 떨어 하품 청혼 -> Ÿ ̺ - => Ÿ̴԰ ̺긦 մϴ. +예> 타이 손을 높이 들어 하이파이브 + => 당신은 타이님과 손을 높이 들어 하이파이브를 합니다. -߰ϰ ǥ ø 'Ǫϴ' - ֽʽÿ. +추가하고 싶은 감정 표현이 있으시면 '푸른하늘'에게 +편지보내 주십시요. diff --git a/help/help.101 b/help/help.101 index 9572948..bccf9b1 100644 --- a/help/help.101 +++ b/help/help.101 @@ -1,6 +1,6 @@ -: +도움말: - < # | > [ 2 | . ] *̵ + <방 # | 사용자 > [ 사용자2 | . ] *순간이동 - ̵ų ̴. +사람을 이동시킬때 쓰는 명령이다. diff --git a/help/help.102 b/help/help.102 index 4780e25..0a217de 100644 --- a/help/help.102 +++ b/help/help.102 @@ -1,9 +1,9 @@ -: +도움말: - *ȣ + *방번호 -ȣ Ѵ. +방번호를 출력한다. diff --git a/help/help.103 b/help/help.103 index 98cdb58..3d3b58f 100644 --- a/help/help.103 +++ b/help/help.103 @@ -1,8 +1,8 @@ -: +도움말: - *ε + *로드 - ٽ ũ εѴ. +방을 다시 디스크에서 로드한다. diff --git a/help/help.104 b/help/help.104 index 807e65b..937d753 100644 --- a/help/help.104 +++ b/help/help.104 @@ -1,7 +1,7 @@ - : + 도움말: - *̺ + *세이브 - ٲ ¸ ũ Ѵ. +방의 바뀐 상태를 디스크에 저장한다. diff --git a/help/help.105 b/help/help.105 index 2b17a72..8f58b99 100644 --- a/help/help.105 +++ b/help/help.105 @@ -1,8 +1,8 @@ Help on: - [ #] *â + [물건 #] *창조 -ȣ . +번호의 물건을 만들어낸다. diff --git a/help/help.106 b/help/help.106 index 0c10a3b..7ccce29 100644 --- a/help/help.106 +++ b/help/help.106 @@ -1,8 +1,8 @@ Help on: - [̸] * + [물건이름] *영원 - Ҷ ... -̸ ʴ° . +상점 같은곳에 영원한 물건을 설정할때 쓴다... +가급적이면 사용하지 않는것이 좋다. diff --git a/help/help.107 b/help/help.107 index d360a6d..77896e4 100644 --- a/help/help.107 +++ b/help/help.107 @@ -1,6 +1,6 @@ Help on: - * + *투명 - . +투명 모드로 들어간다. diff --git a/help/help.108 b/help/help.108 index e46344c..e3d72bf 100644 --- a/help/help.108 +++ b/help/help.108 @@ -1,6 +1,6 @@ Help on: - *ϱ + *전하기 -һ̻ ǻ縦 Ҷ . +불사이상 서로 의사를 전달할때 쓴다. diff --git a/help/help.109 b/help/help.109 index f75129c..8eb3e7f 100644 --- a/help/help.109 +++ b/help/help.109 @@ -1,6 +1,6 @@ help: - *ֱ + *없애기 - 繰ǰ ش. +방의 모든물건과 괴물을 없앤다. diff --git a/help/help.11 b/help/help.11 index 782a6a8..c2d845b 100644 --- a/help/help.11 +++ b/help/help.11 @@ -1,5 +1,5 @@ -: - +도움말: + 장비 -'' ԰ְų ִ Ÿݴϴ. +'장비'는 당신이 입고있거나 잡고있는 물건을 나타내줍니다. diff --git a/help/help.110 b/help/help.110 index 790fbd5..cbb6f5e 100644 --- a/help/help.110 +++ b/help/help.110 @@ -1,5 +1,5 @@ Help on: - [ | ] * + [사용자 | 괴물] *방어력 - 캻. +간단히 방어력을 살펴본다. diff --git a/help/help.111 b/help/help.111 index 1660362..48c992f 100644 --- a/help/help.111 +++ b/help/help.111 @@ -1,6 +1,6 @@ Help on: - [f] * + [f] *누구 - ¸ ɴ. +사용자의 접속지와 상태를 살핀다. diff --git a/help/help.112 b/help/help.112 index 8c3fe73..8bf9d21 100644 --- a/help/help.112 +++ b/help/help.112 @@ -1,6 +1,6 @@ Help on: - [] * + [문장] *공지 - 鿡 . +방의 사람들에게 공지를 보낸다. diff --git a/help/help.113 b/help/help.113 index fb45470..5b2fd16 100644 --- a/help/help.113 +++ b/help/help.113 @@ -1,8 +1,8 @@ Help on: - * + *모든저장 - ũ Ѵ... -׷ ʻϴ° . +모든 방과 괴물 물건을 디스크에 저장한다... +그러나 않사용하는게 좋다. diff --git a/help/help.114 b/help/help.114 index a11b44e..aa9f968 100644 --- a/help/help.114 +++ b/help/help.114 @@ -1,5 +1,5 @@ Help on: - <ð #> * + <시간 #> *종료 - Ŀ ӵ带 Ѵ. +지정된 분 후에 머드를 종료한다. diff --git a/help/help.115 b/help/help.115 index 8a0bea9..5247b29 100644 --- a/help/help.115 +++ b/help/help.115 @@ -1,7 +1,7 @@ Help on: - [] [] * + [사용자] [명령] *강제 -ڿ Ѵ. +사용자에게 명령을 강제한다. diff --git a/help/help.116 b/help/help.116 index 7365fa1..43d90dd 100644 --- a/help/help.116 +++ b/help/help.116 @@ -1,7 +1,7 @@ Help on: - *缳 + *재설정 -ũ ̳ ٲ ٽ ޸𸮷 -ҷ´. +디스크의 괴물이나 물건의 설정이 바뀌었을때 다시 메모리로 +불러온다. diff --git a/help/help.117 b/help/help.117 index e5e78b3..ff0e3da 100644 --- a/help/help.117 +++ b/help/help.117 @@ -1,7 +1,7 @@ Help on: - [#] * + [#] *괴물 - ȣ ҷ´. -ȣ ׹ θ. +지정된 번호의 괴물을 불러온다. +번호가 지정되지 않으면 그방의 랜덤 한 괴물을 부른다. diff --git a/help/help.118 b/help/help.118 index 4a39e52..8020003 100644 --- a/help/help.118 +++ b/help/help.118 @@ -1,9 +1,9 @@ Help on: - [///] * + [물건/사용자/괴물/방] *상태 -Ȱ ¸ . +지정된것의 상태를 본다. diff --git a/help/help.119 b/help/help.119 index 06b0093..ee73b1b 100644 --- a/help/help.119 +++ b/help/help.119 @@ -1,7 +1,7 @@ Help on: - [#] * + [#] *방제작 - ȣ Ѵ. +지정된 번호의 방을 새로 제작한다. diff --git a/help/help.12 b/help/help.12 index dbd8085..b76c1fa 100644 --- a/help/help.12 +++ b/help/help.12 @@ -1,12 +1,12 @@ -: - <> [#] +도움말: + <물건> [#] 잡아 -'' ִ տ ϴ Դϴ. -̳ ȶҰ ִµ ִ Ҽ ϴ. - ˴ϴ.(:ȶ) +'잡아'는 잡을수 있는 물건을 손에 들게하는 명령입니다. +랜턴이나 횃불같은것을 잡을수 있는데 잡고 있는 물건을 도둑질 당할수 없습니다. +어떤 물건은 잡으면 사용됩니다.(예:횃불) -: +예: -: ȶ 2 - ȶ ϴ.. +: 횃불 2 잡아 +당신은 횃불을 밝혔습니다.. diff --git a/help/help.120 b/help/help.120 index eff410d..77cce2b 100644 --- a/help/help.120 +++ b/help/help.120 @@ -1,6 +1,6 @@ Help on: - DM function * + DM function *설정 This function allows the DM to set any variable on an exit, room, player, monster, or object. The syntax is different for each class of diff --git a/help/help.121 b/help/help.121 index 873ca08..ef86584 100644 --- a/help/help.121 +++ b/help/help.121 @@ -1,7 +1,7 @@ -: +도움말: - [r] * + [r] *접속 - . -r Ѵ. +접속일지를 본다. +r은 삭제한다. diff --git a/help/help.122 b/help/help.122 index 19c0a1f..82ec233 100644 --- a/help/help.122 +++ b/help/help.122 @@ -1,5 +1,5 @@ -: - <> * +도움말: + <사용자> *감시 - ׻ Ѵ. +몰래 그사람을 감시한다. diff --git a/help/help.123 b/help/help.123 index aa51b72..4e65acd 100644 --- a/help/help.123 +++ b/help/help.123 @@ -1,3 +1,3 @@ -: - * -ִ εѴ. +도움말: + *제한 +설정되있는 접속지 제한을 로드한다. diff --git a/help/help.124 b/help/help.124 index a2b2686..a7ca8b5 100644 --- a/help/help.124 +++ b/help/help.124 @@ -1,3 +1,3 @@ -: - <> *ΰ - ΰ ˻Ѵ. +도움말: + <사용자> *핑거 +사용자의 핑거정보를 검색한다. diff --git a/help/help.125 b/help/help.125 index 4b45f31..f721f8b 100644 --- a/help/help.125 +++ b/help/help.125 @@ -1,7 +1,7 @@ Help on: - [options] *Ʈ + [options] *리스트 This funtion calls a program that lists any and all rooms, objects, or monsters. WARNING: The output may be extrememly long if the diff --git a/help/help.126 b/help/help.126 index 394affe..823ef37 100644 --- a/help/help.126 +++ b/help/help.126 @@ -1,7 +1,7 @@ -: +도움말: - * + *정보 - . +간단한 게임의 정보를 본다. diff --git a/help/help.127 b/help/help.127 index c3c6e28..8b981e4 100644 --- a/help/help.127 +++ b/help/help.127 @@ -1,7 +1,7 @@ Help on: - [r|d|s] *ġ + [r|d|s] *수치 This function allows the DM to set various game parameters. These parameters can be listed by using the 'd' flag. diff --git a/help/help.128 b/help/help.128 index a9687ff..f8c9576 100644 --- a/help/help.128 +++ b/help/help.128 @@ -1,6 +1,6 @@ Help on: - [] [c/m] (x) * + [사용자] [c/m] (x) *벙어리 - Ѵ. +사용자의 잡담을 금지한다. diff --git a/help/help.130 b/help/help.130 index 76c550a..4b8db97 100644 --- a/help/help.130 +++ b/help/help.130 @@ -1,6 +1,6 @@ -: +도움말: - *[ܾ1] [ܾ2] ü + *[단어1] [단어2] 교체 -ܾ1 ܾ2 üѴ ׷ ġ ۵ Ѵ. +단어1을 단어2로 교체한다 그러나 위치상의 문제로 잘 작동 않한다. diff --git a/help/help.131 b/help/help.131 index 8e13078..d985aa0 100644 --- a/help/help.131 +++ b/help/help.131 @@ -1,7 +1,7 @@ -: +도움말: - [̸] *̸ + [방이름] *방이름 -̸ Ѵ. +방이름을 설정한다. diff --git a/help/help.132 b/help/help.132 index cc77148..d8ded5c 100644 --- a/help/help.132 +++ b/help/help.132 @@ -1,8 +1,8 @@ -: +도움말: - [-sn] [] *߰ + [-sn] [문장] *추가 - 漳 ߰Ѵ. s ߰ǰ -n ο ٲ ʴ´. +문장을 방설명레 추가한다. s는 간단 설명에 추가되고 +n은 새로운 라인으로 바꾸지 않는다. diff --git a/help/help.133 b/help/help.133 index 8857a2d..50567f7 100644 --- a/help/help.133 +++ b/help/help.133 @@ -1,6 +1,6 @@ -: +도움말: - [-sn] [] * + [-sn] [문장] *서언 -ɼ̳ *߰ . - ʿ ִ´. +옵션이나 기능은 *추가와 같다. +문장을 앞쪽에다 집어넣는다. diff --git a/help/help.134 b/help/help.134 index c4516e7..41b707c 100644 --- a/help/help.134 +++ b/help/help.134 @@ -1,8 +1,8 @@ -: +도움말: - [-r] <ֹ> *ֹ + [-r] <주문> *전주문 -ֹ ܿ. -r 濡 ִ Ը ģ. +주문을 모든 사람에게 외운다. +r은 방에 있는 사람에게만 영향을 미친다. diff --git a/help/help.135 b/help/help.135 index 64e71d9..40ace1d 100644 --- a/help/help.135 +++ b/help/help.135 @@ -1,7 +1,7 @@ -: +도움말: - [] *׷ + [사용자] *그룹 - ׷ ɴ. +사용자의 그룹을 살핀다. diff --git a/help/help.136 b/help/help.136 index 774f38e..6ff2b26 100644 --- a/help/help.136 +++ b/help/help.136 @@ -1,9 +1,9 @@ -޸: +메모: - [d|a] *޸ + [d|a] *메모 -޸ ɼ ׳ ȴ. -ĥ . ´. a ߰ϴ ̰ d ̴. +메모장을 쓴다 옵션이 없으면 그냥 사용이 된다. +마칠때는 .을 찍는다. a는 추가하는 것이고 d는 지우는 것이다. diff --git a/help/help.14 b/help/help.14 index d727759..833b3b2 100644 --- a/help/help.14 +++ b/help/help.14 @@ -1,5 +1,5 @@ -: - +도움말: + 도움 - ״ . +말 그대로 라네. diff --git a/help/help.140 b/help/help.140 index 79ae0db..476206d 100644 --- a/help/help.140 +++ b/help/help.140 @@ -1,7 +1,7 @@ -: +도움말: - *Ȱ + *활성 - ޸𸮿 Ȱȭ . +지금 메모리에 활성화된 괴물을 본다. diff --git a/help/help.141 b/help/help.141 index ee3f0e3..8d8a619 100644 --- a/help/help.141 +++ b/help/help.141 @@ -1,7 +1,7 @@ -: +도움말: - <> *ġ + <사용자> *벼락치기 -ڸ ߽Ų. +사용자를 완전히 증발시킨다. diff --git a/help/help.142 b/help/help.142 index 123dcfa..a738391 100644 --- a/help/help.142 +++ b/help/help.142 @@ -1,7 +1,7 @@ -: +도움말: - <> * + <괴물> *따르기 - . +괴물을 따라오게 만든다. diff --git a/help/help.144 b/help/help.144 index db8896c..32fa0e1 100644 --- a/help/help.144 +++ b/help/help.144 @@ -1,7 +1,7 @@ -: +도움말: - <> <> * + <괴물> <사용자> *공격 - ڸ ϰ Ѵ. +괴물에게 사용자를 공격하게 한다. diff --git a/help/help.145 b/help/help.145 index 42e519f..9b38bd1 100644 --- a/help/help.145 +++ b/help/help.145 @@ -1,7 +1,7 @@ -: +도움말: - <> * + <괴물> *적 - . +괴물의 적을 본다. diff --git a/help/help.146 b/help/help.146 index a4af2b0..06ae728 100644 --- a/help/help.146 +++ b/help/help.146 @@ -1,8 +1,8 @@ -: +도움말: - <> *ָ + <사용자> *최면 - ָ鿡 ɸ . +사용자의 최면에 걸린 사람을 본다. diff --git a/help/help.148 b/help/help.148 index a2164e8..41c47b4 100644 --- a/help/help.148 +++ b/help/help.148 @@ -1,24 +1,24 @@ -<аŸ > -аŸ : аŸ Խû ϴ . - Խû аŸ θ ̿̾߸ մϴ. - Խû Ͽٰ ص θ 㰡 - ʽϴ. -㰡 : аŸ θ ڽ аŸ - ο ڸ ޾Ƶ̴ Դϴ. - 㰡 ؼ ڰ Խû ص־ - 㰡 ټ ֽϴ. -аŸŻ : ڽ аŸ Ż ϴ Դϴ. - Խṵ̂, 㰡 ʾ - Խû Ҽ ֽϴ. -аŸ : ̿ аŸ ݴϴ. -аŸ(]): аŸ鿡 ̾߱⸦ ݴϴ. -аŸ : ӵ忡 Ȱ аŸ Ʈ ݴϴ. -аŸ߹ : θ ڽ аŸ - ߹ϴ Դϴ. -аŸ : [a/d] аŸ. - аŸ ִ . - θ 쿡 ɼ Ͽ ų ֽϴ. - [.] ġ ˴ϴ. +<패거리 명령> +패거리가입 : 패거리에 가입신청을 하는 명령. + 가입신청은 그 패거리의 두목이 이용중이어야만 가능합니다. + 가입신청을 하였다고 해도 두목이 가입허가를 해주지 + 않으면 가입이 되지 않습니다. +가입허가 : 패거리의 두목만이 가능한 명령으로 자신의 패거리에 + 새로운 사용자를 받아들이는 명령입니다. + 가입허가를 위해서는 먼저 사용자가 가입신청을 해둬야 + 가입허가를 해줄수 있습니다. +패거리탈퇴 : 자신이 가입한 패거리에서 탈퇴를 하는 명령입니다. + 가입신청중이고, 아직 가입허가를 받지 않았을때도 + 이 명령으로 가입신청을 취소할수 있습니다. +패거리 : 현재 이용중인 패거리원을 보여줍니다. +패거리말(]): 패거리원들에게 이야기를 전해줍니다. +모든패거리 : 머드에서 활동중인 모든 패거리의 리스트를 보여줍니다. +패거리추방 : 두목만이 가능한 명령으로 자신의 패거리에서 강제로 + 추방하는 명령입니다. +패거리공지 : [a/d] 패거리공지. + 패거리내에서의 공지사항을 보여주는 명령으로. + 두목의 경우에는 위의 옵션을 사용하여 지우거나 쓸수 있습니다. + 쓸때는 마지막에 [.]을 치면 저장이 됩니다. ->>> ƴ϶ ϴ. - ʿ ø "" ּ. +>>> 아직 명령을 다 만든게 아니라서 부족한 점이 많습니다. + 필요한 기능이 있으시면 "개골"에게 메일을 보내주세요. diff --git a/help/help.149 b/help/help.149 index dd7eb13..b964ef3 100644 --- a/help/help.149 +++ b/help/help.149 @@ -1,6 +1,6 @@ -: - <ü/> +도움말: + <체력/도력> 향상 - , ġ -ü Ǵ ִ Դϴ. +초인 만이 가능한 명령으로, 경험치와 돈으로 +체력 또는 도력을 살 수 있는 명령입니다. diff --git a/help/help.15 b/help/help.15 index 785b66c..977c520 100644 --- a/help/help.15 +++ b/help/help.15 @@ -1,4 +1,4 @@ -: - +도움말: + 점수 -'' ¿ ,谰 ݴϴ. +'점수'는 당신의 상태와 돈,경험같은 간략한 정보를 보여줍니다. diff --git a/help/help.150 b/help/help.150 index d31dc05..3bb8d9c 100644 --- a/help/help.150 +++ b/help/help.150 @@ -1,10 +1,10 @@ -[] - ȥ - : [̸] ȥ -ȥ忡 ϸ, ΰ ȥ -ȥ ˴ϴ. +[도움말] + 결혼 +사용 : [상대방이름] 결혼 +결혼식장에서만 가능하며, 서로가 결혼명령을 했을때만 +결혼이 성립이 됩니다. - - : [ҳ] -ڽŰ ȥ Ѹ ȭ ϴ Դϴ. -ڽŰ ȥ Ȯοε մϴ. + 사랑말 +사용 : [말할내용] 사랑말 +자신과 결혼한 사람과 둘만의 대화를 하는 것입니다. +자신과 결혼한 사람이 사용중인지 확인여부도 가능합니다. diff --git a/help/help.151 b/help/help.151 index c37d120..051a5e8 100644 --- a/help/help.151 +++ b/help/help.151 @@ -1,8 +1,8 @@ -[] - [] [ ] ޸ +[도움말] + [사용자] [남길 내용] 메모 -'޸' ƴ ޸ Դϴ. - ʾƵ ޸ ϸ, - ӽÿ ޸ ٷ ֽϴ. -, ѹ ޸ ʾ ٽ ϴ. +'메모'는 현재 접속중이 아닌 사람에게 간단한 메모를 남기는 기능입니다. +편지로 보내지 않아도 될 정도의 간단한 메모만 가능하며, 그 상대방이 +다음 접속시에 메모의 내용을 바로 볼 수 있습니다. +단, 한번 읽은 메모의 내용은 저장이 되지 않아 다음에 다시 볼수 없습니다. diff --git a/help/help.16 b/help/help.16 index 7bbab7b..2afe9f0 100644 --- a/help/help.16 +++ b/help/help.16 @@ -1,4 +1,4 @@ -: - +도움말: + 정보 -'' ¸ ݴϴ. +'정보'는 당신의 상세한 상태를 보여줍니다. diff --git a/help/help.17 b/help/help.17 index a07ea6b..8abe63f 100644 --- a/help/help.17 +++ b/help/help.17 @@ -1,11 +1,11 @@ -: - <Ÿ> <> ̾߱ - <Ÿ> <> +도움말: + <타인> <문장> 이야기 + <타인> <문장> 얘기 -'̾߱' 濡 ڽ մϴ. +'이야기'는 상대방에게 자신의 말을 전합니다. -: +예: -: Ƕ ȳ û! ̾߱ -̾߱Ⱑ Ƕ̿ ϴ. +: 또라이 안녕 멍청아! 이야기 +이야기가 또라이에게 전해졌습니다. diff --git a/help/help.18 b/help/help.18 index 2f30e73..39a5574 100644 --- a/help/help.18 +++ b/help/help.18 @@ -1,7 +1,7 @@ -: - <Ÿ> +도움말: + <타인> 따라 -'' ٸ 󰡴 Դϴ. -׻ ̴ ڵ 󰡰 ˴ϴ. -׷ µ ߿ Դϴ. +'따라'는 다른 사람을 따라가는 명령입니다. +그사람이 움직이는 방향으로 자동적으로 따라가게 됩니다. +그룹을 만드는데 중요한 명령입니다. diff --git a/help/help.19 b/help/help.19 index ac11b6c..660680a 100644 --- a/help/help.19 +++ b/help/help.19 @@ -1,5 +1,5 @@ -: - <Ÿ> +도움말: + <타인> 내보내 -'' ׷쿡 ʿ Դϴ. +'내보내'는 그룹에서 필요없는 사람을 내보내는 명령입니다. diff --git a/help/help.2 b/help/help.2 index a4eba21..182781b 100644 --- a/help/help.2 +++ b/help/help.2 @@ -1,15 +1,15 @@ -: - [ [#]] - [ [#]] - [ [#]] +도움말: + [<물건/괴물> [#]] 보다 + [<물건/괴물> [#]] 봐 + [<물건/괴물> [#]] 조사 -׳ Էϸ ׹ ¸ ݴϴ. -̳ Էϸ ׿ ݴϴ. +그냥 입력하면 그방의 상태를 보여줍니다. +물건이나 괴물을 입력하면 그에 대한 상세한 정보를 보여줍니다. -: +예: -: +:가방 봐 -Ư ϴ. -빰: å. +특이한 점이 없습니다. +내용물: 책. diff --git a/help/help.20 b/help/help.20 index d731ffb..f1a2244 100644 --- a/help/help.20 +++ b/help/help.20 @@ -1,7 +1,7 @@ -: - ׷ +도움말: + 그룹 -'׷' ׷ ¸ ݴϴ. -׷ ׻ ڽ ׷¸ Ȯؼ ȣؾ մϴ. - '' ׷ ֽϴ. +'그룹'은 현재 당신을 따르는 그룹원의 상태를 보여줍니다. +그룹의 리더는 항상 자신의 그룹상태를 확인해서 보호해야 합니다. +당신은 '내보내'로 그룹원을 내보낼수 있습니다. diff --git a/help/help.21 b/help/help.21 index 70162fb..9b7e25f 100644 --- a/help/help.21 +++ b/help/help.21 @@ -1,6 +1,6 @@ -: - +도움말: + 추적 - ƯԴϴ. س - ߰Ҽ ֽϴ. +추적은 포졸의 특수기술입니다. 성공적으로 해내면 마지막으로 방을 떠난 +마지막 사람의 흔적을 발견할수 있습니다. diff --git a/help/help.22 b/help/help.22 index af88348..904981a 100644 --- a/help/help.22 +++ b/help/help.22 @@ -1,13 +1,13 @@ -: - +도움: + <물건/괴물> 엿봐 -'' ٸ ̳ ĺ ֽϴ. - Ȯ ֽϴ. -ڿ Դϴ. +'엿봐'는 다른 사람이나 괴물의 소유물을 훔쳐볼수 있습니다. +그정보는 정확하지 않을수도 있습니다. +닌자와 도둑의 전용 기술입니다. -: +예: -Ƕ̰ ȳ ̶ ߽ϴ. -: Ƕ - ǰ: Ȱ, Į. +또라이가 안녕 이라고 말했습니다. +: 또라이 엿봐 +그의 소지품: 활, 작은 칼. diff --git a/help/help.23 b/help/help.23 index 0a4cfd9..f6346d9 100644 --- a/help/help.23 +++ b/help/help.23 @@ -1,14 +1,14 @@ -: - <Ÿ/> [#] - <Ÿ/> [#] +도움말: + <타인/괴물> [#] 공격 + <타인/괴물> [#] 때려 -'' ̳ ٸ մϴ. -ݴ Ѵٴ° . +'공격'은 괴물이나 다른사람을 공격합니다. +공격당한 괴물은 당신의 얼굴을 기억한다는걸 잊지 마세요. -: +예: - ֽϴ. -: 2 - ߽ϴ. - 5 ϴ. +곰 세마리가 있습니다. +: 곰 2 때려 +당신은 곰을 공격했습니다. +당신은 5 데미지를 입혔습니다. diff --git a/help/help.24 b/help/help.24 index 3d80045..d08f2f1 100644 --- a/help/help.24 +++ b/help/help.24 @@ -1,6 +1,6 @@ -: - ã +도움말: + 찾아 -'ã' 濡 ִ н ΰ Žسϴ. - ãƿ Դϴ. +'찾아'는 방에 있는 비밀스런 무엇인가를 탐지해냅니다. +포졸이 찾아에 가장 적합한 직업입니다. diff --git a/help/help.25 b/help/help.25 index 34ce381..7c06b81 100644 --- a/help/help.25 +++ b/help/help.25 @@ -1,13 +1,13 @@ -: +도움말: - <> ǥ + <문장> 표현 -'' ǥ Ÿ մϴ. +'감정'은 당신의 표현을 자유로이 나타내게 합니다. -: -:޾Ҵ ǥ. +예: +:열받았당 표현. Ok. -Ÿ̴ ޾Ҵ. +타이는 열받았당. diff --git a/help/help.26 b/help/help.26 index 09db3d0..30668e1 100644 --- a/help/help.26 +++ b/help/help.26 @@ -1,17 +1,17 @@ -: - [<> [#]] +도움말: + [<물건> [#]] 숨겨 -'' ̳ ڿ ⵵ մϴ. -̸ ƹ մϴ. -׷ ϸ ߰ߵ˴ϴ. -,, ƯԴϴ. +'숨어'는 물건이나 당신을 방뒤에 숨기도록 합니다. +성공적이면 아무도 당신을 보지못합니다. +그러나 숨은곳을 누가 수색하면 발견됩니다. +포졸,도둑,닌자의 특기입니다. -: +예: -ٴڿ ߰Ѱ: Į, . -: Į - Į մϴ. -: -ٴڿ ߰Ѱ: . -: - ׸ڵڷ մϴ. +바닥에서 발견한것: 작은 칼, 가방. +: 칼 숨겨 +당신은 칼을 숨기려 합니다. +: 봐 +바닥에서 발견한것: 가방. +: 숨겨 +당신은 그림자뒤로 숨으려 합니다. diff --git a/help/help.27 b/help/help.27 index 0bbf2f0..728ef21 100644 --- a/help/help.27 +++ b/help/help.27 @@ -1,26 +1,26 @@ -: - <> +도움말: + <상태> 설정 - ¸ Ҽ ֽϴ.: +다음 상태를 설정할수 있습니다.: - ʽϴ. -̾߱ ̾߱⸦ ʽϴ. - ɴϴ. -̸ ̸ ʽϴ. - ϴ. -Ϲ ڼ ϴ -ġ <ü> üġ մϴ. - ¸ ݴϴ. - ͹̳ ϸ Į ɴϴ. - ¿ ϸ ɴϴ. -ȯź ٸ ȯϴ° źմϴ. - ޼ ˴ϴ. - մϴ. +잡담듣기 잡담들을 듣지 않습니다. +이야기듣기 개인적인 이야기를 듣지 않습니다. +축약 결과가 간단히 나옵니다. +방이름 방이름을 보지 않습니다. +간단 방의 간단한 설명을 봅니다. +일반 방의 자세한 설명을 봅니다 +도망수치 <체력> 도망가는 체력치를 설정합니다. +상태 당신의 상태를 보여줍니다. +색 당신의 터미날이 가능하면 칼라가 나옵니다. +밝은색 색 설정이 된 상태에서 사용하면 밝은색으로 나옵니다. +소환거부 다른 사람이 소환하는걸 거부합니다. +반향 당신의 메세지가 반향됩니다. +수동공격 수동으로 공격합니다. - +예 -: - ɴϴ. -: - մϴ. +: 축약 설정 +설명이 간단히 나옵니다. +: 축약 해제 +축약 설명을 해제합니다. diff --git a/help/help.28 b/help/help.28 index b4b941b..ed78cd9 100644 --- a/help/help.28 +++ b/help/help.28 @@ -1,5 +1,5 @@ -: - <> +도움말: + <상태> 해제 -ڼ '' ϼ +자세한 사항은 '설정'을 참조하세요 diff --git a/help/help.29 b/help/help.29 index 8be5844..7c66db5 100644 --- a/help/help.29 +++ b/help/help.29 @@ -1,6 +1,6 @@ -: - <> +도움말: + <문장> 외쳐 -'' ó ִ 鿡 ǻ縦 Ҽ ֽϴ. -׷ Ҽ ֽϴ. +'외쳐'는 근처에 있는 사람들에게 당신의 의사를 전달할수 있습니다. +그러나 괴물이 듣고 접근할수도 있습니다. diff --git a/help/help.3 b/help/help.3 index a77db5f..e1d4634 100644 --- a/help/help.3 +++ b/help/help.3 @@ -1,7 +1,7 @@ -: - - ħ +도움말: + 끝 + 마침 - ϴ. +게임을 끝냅니다. diff --git a/help/help.30 b/help/help.30 index 4b86f12..c93de3a 100644 --- a/help/help.30 +++ b/help/help.30 @@ -1,11 +1,11 @@ -: - <ⱸ/> [#] - <ⱸ/> [#] ̵ +도움말: + <출구/문> [#] 가 + <출구/문> [#] 이동 -Ư ҷ ̵ϰų Ա ϴ. +특정 장소로 이동하거나 입구로 들어갑니다. -: +예: -ⱸ: , . -: +출구: 문, 길. +: 길 가 diff --git a/help/help.32 b/help/help.32 index 2b08b38..79c94b6 100644 --- a/help/help.32 +++ b/help/help.32 @@ -1,6 +1,6 @@ -: - <ⱸ/> [#] ݾ - <ⱸ/> [#] +도움말: + <출구/문> [#] 닫아 + <출구/문> [#] 막아 -'ݾ' ִ ݴ´. +'닫아'는 열려있는 문을 닫는다. diff --git a/help/help.33 b/help/help.33 index ca7cffe..fcf392c 100644 --- a/help/help.33 +++ b/help/help.33 @@ -1,13 +1,13 @@ -: - <ⱸ/> [#] <> [#] Ǯ +도움말: + <출구/문> [#] <열쇠> [#] 풀어 -'Ǯ' 乮 Ǭ. +'풀어'는 잠긴문을 열쇠로 푼다. -: +예: -ⱸ: ö빮. -: - ǰ: , ö , . -: 2 Ǯ - ö빮 Ǯϴ. +출구: 철대문. +: 장비 +당신의 소지품: 은 열쇠, 철 열쇠, 상아 열쇠. +: 문 열쇠 2 풀어 +당신은 철대문을 풀었습니다. diff --git a/help/help.34 b/help/help.34 index 9a22ed5..79da9d1 100644 --- a/help/help.34 +++ b/help/help.34 @@ -1,5 +1,5 @@ -: - <ⱸ/> [#] [with] <> [#] +도움말: + <출구/문> [#] [with] <열쇠> [#] 잠궈 -'' ޴ϴ. +'잠궈'는 열린 문을 열쇠로 잠급니다. diff --git a/help/help.35 b/help/help.35 index 2626582..26b6042 100644 --- a/help/help.35 +++ b/help/help.35 @@ -1,8 +1,8 @@ -: - <ⱸ/> [#] +도움말: + <출구/문> [#] 따 -'' 乮 Դϴ. - Ȯ ϴ. +'따'는 도둑이 잠긴문을 열쇠없이 따는 명령입니다. +레벨이 높을수록 성공확률이 높습니다. diff --git a/help/help.36 b/help/help.36 index 3084421..fc70e31 100644 --- a/help/help.36 +++ b/help/help.36 @@ -1,10 +1,10 @@ -: - <> [from] <Ÿ/> [#] +도움말: + <물건> [from] <타인/괴물> [#] 훔쳐 -ϰ ڵ ̳ ٸ κ ĥ ֽϴ. - ̸ 𸣰 ĥ ֽϴ. -ϸ 뿡 ˷ ˴ϴ. +도둑과 닌자들은 괴물이나 다른 사람들로부터 물건을 훔칠수 있습니다. +만약 성공적이면 대상이 모르게 물건을 훔칠수 있습니다. +실패하면 상대에게 알려지게 됩니다. - : ٸ ġ° Ǹ ġ - Ұ ˴ϴ. +경고 : 다른 사람의 물건을 훔치는것이 남용되면 훔치는 기술을 + 잃게 됩니다. diff --git a/help/help.37 b/help/help.37 index b620f7f..d4e4eac 100644 --- a/help/help.37 +++ b/help/help.37 @@ -1,7 +1,7 @@ -: - +도움말: + 도망 -'' ɰ ظ Ծ ϴ Դϴ. -׷  ⱸ ִ 쵵 ֽϴ. - ⸦ ߸ ⵵ մϴ. +'도망'은 괴물들로 부터 심각한 피해를 입었을때 피하는 명령입니다. +그러나 어떤 괴물은 출구를 막고 있는 경우도 있습니다. +또한 무기를 떨어뜨리고 가기도 합니다. diff --git a/help/help.38 b/help/help.38 index d601ca7..9edcece 100644 --- a/help/help.38 +++ b/help/help.38 @@ -1,7 +1,7 @@ -: - <ּ> <> [#] ֹ +도움말: + <주술> <대상> [#] 주문 -'ֹ' η縶κ ֹ ϴ Դϴ - ֹ Ҽ Ư ξ - Ҽ ֽϴ. +'주문'은 두루마기로부터 배운 주문을 사용하는 명령입니다 +모든 직업이 주문을 사용할수 있지만 특정직업들이 훨씬 더 +잘 사용할수 있습니다. diff --git a/help/help.39 b/help/help.39 index 0212293..20151fe 100644 --- a/help/help.39 +++ b/help/help.39 @@ -1,14 +1,14 @@ -: - <> [#] - <> [#] +도움말: + <물건> [#] 연마 + <물건> [#] 배워 -'' η縶κ ֹ Դϴ. -ֹ η縶 ϴ. +'연마'는 두루마기로부터 주문을 배우는 명령입니다. +주문을 읽은 두루마기는 사라집니다. -: +예: - ǰ: ȸ η縶, η縶. -:η縶 2 - ġּ ϴ. - η縶Ⱑ ϴ. +당신의 소지품: 회색 두루마기, 검은 두루마기. +:두루마기 2 배워 +당신은 치료주술을 배웠습니다. +검은 두루마기가 사라졌습니다. diff --git a/help/help.4 b/help/help.4 index 0dd510d..65d1823 100644 --- a/help/help.4 +++ b/help/help.4 @@ -1,10 +1,10 @@ -: - <> - <> " - <> ' - <> ? - <> . +도움말: + <문장> 말 + <문장> " + <문장> ' + <문장> ? + <문장> . -'' 濡 ִ 鿡 ǻ縦 մϴ. +'말해'는 같은 방에 있는 사람들에게 의사를 전달합니다. diff --git a/help/help.40 b/help/help.40 index 63fb8b3..584a71b 100644 --- a/help/help.40 +++ b/help/help.40 @@ -1,14 +1,14 @@ -: - <> [#] [on] [<> [#]] о - <> [#] [on] [<> [#]] ܿ +도움말: + <물건> [#] [on] [<대상> [#]] 읽어 + <물건> [#] [on] [<대상> [#]] 외워 -'о' η縶⸦ о ּ մϴ. -׷ ּ ϴ. +'읽어'는 두루마기를 읽어서 주술을 사용합니다. +그러나 그 주술을 배울수는 없습니다. -: +예: - ǰ: η縶. -: η縶 on о - ġֹ ܿϴ. - η縶Ⱑ ϴ. +당신의 소지품: 검은 두루마기. +: 두루마기 on 개 읽어 +당신은 개에게 치료주문을 외웠습니다. +검은 두루마기가 사라졌습니다. diff --git a/help/help.41 b/help/help.41 index 7b44791..c2b973c 100644 --- a/help/help.41 +++ b/help/help.41 @@ -1,5 +1,5 @@ -: - ǰ +도움말: + 품목 -'ǰ' ǰ ݰ Ʈ ݴϴ. +'품목'은 상점에서 상품의 가격과 리스트를 보여줍니다. diff --git a/help/help.42 b/help/help.42 index 81f720c..0f39dfe 100644 --- a/help/help.42 +++ b/help/help.42 @@ -1,15 +1,15 @@ -: - <> [#] +도움말: + <물건> [#] 사 -'' 춧 ˴ϴ. - ' ' ϸ ʵǰ -' ' ' ' ϼž մϴ. +'사'는 상점에서 물건을 살때 사용됩니다. +가죽 구두 가죽 모자 등이 있을때 '가죽 사' 하면 않되고 +'구두 사' '모자 사'를 하셔야 합니다. -: -: ǰ -ǰ: - : 3 - : 2 -: - ڸ ϴ. +예: +: 품목 +상품들: + 가죽 모자 가격: 3 + 가죽 구두 가격: 2 +: 모자 사 +당신은 가죽 모자를 샀습니다. diff --git a/help/help.43 b/help/help.43 index 3b8d588..36d2865 100644 --- a/help/help.43 +++ b/help/help.43 @@ -1,6 +1,6 @@ -: - <> [#] Ⱦ +도움말: + <물건> [#] 팔아 -'Ⱦ' ߰󿡼 ȼִ Դϴ. - 'ġ' Ҽ ֽϴ. +'팔아'는 중고상에서 물건을 팔수있는 명령입니다. +당신은 '가치'로 물건을 감정할수 있습니다. diff --git a/help/help.44 b/help/help.44 index dbfee2e..a9a95aa 100644 --- a/help/help.44 +++ b/help/help.44 @@ -1,8 +1,8 @@ -: - <> [#] ġ - <> [#] +도움말: + <물건> [#] 가치 + <물건> [#] 가격 -'ġ' ߰ ۵մϴ. - ġ ο  Դϴ. - ˾ƺµ ˴ϴ. +'가치'는 중고상점에서만 작동합니다. +물건의 가치를 상점 주인에게 물어보는 기능입니다. +수리점에서는 수리비를 알아보는데 사용됩니다. diff --git a/help/help.45 b/help/help.45 index 3942344..4a22c67 100644 --- a/help/help.45 +++ b/help/help.45 @@ -1,8 +1,8 @@ -: - [#] +도움말: + [#] 기습 -'' ڿ ϸ Դϴ. -īӰų  ⸦ ϰ ظ -ټ ֽϴ. ϱؼ ݵ ־ մϴ. - ۽ÿ մϴ. +'기습'은 닌자와 도둑만 가능한 기술입니다. +날카롭거나 찌르는 무기를 장착하고 있을때 더욱 많은 피해를 +줄수 있습니다. 기습을 하기위해선 반드시 숨어 있어야 합니다. +전투 시작시에만 사용이 가능합니다. diff --git a/help/help.46 b/help/help.46 index 7a46b9d..5f07511 100644 --- a/help/help.46 +++ b/help/help.46 @@ -1,6 +1,6 @@ -: - +도움말: + 수련 -'' ׾ øµ ˴ϴ. - 忡 ؾմϴ. +'수련'은 충분한 경험을 쌓았을때 레벨을 올리는데 사용됩니다. +각 직업은 각기 수련장에서 수련을 해야합니다. diff --git a/help/help.47 b/help/help.47 index 3e87c78..6ba0051 100644 --- a/help/help.47 +++ b/help/help.47 @@ -1,12 +1,12 @@ -: - <> [#] <Ÿ/> [#] - <׼> <Ÿ/> [#] +도움말: + <물건> [#] <타인/괴물> [#] 줘 + <액수>냥 <타인/괴물> [#] 줘 -'' ̳ 뿡 ٶ ˴ϴ. +'줘'는 물건이나 돈을 상대에게 줄때 사용됩니다. -: -: Į Ÿ - Į Ÿ̿ ־ϴ. -: 100 Ÿ - 100 Ÿ̿ ־ϴ. +예: +: 칼 타이 줘 +당신은 칼을 타이에게 주었습니다. +: 100냥 타이 줘 +당신은 100원을 타이에게 주었습니다. diff --git a/help/help.48 b/help/help.48 index c97cb54..02d4506 100644 --- a/help/help.48 +++ b/help/help.48 @@ -1,5 +1,5 @@ -: - <> [#] +도움말: + <물건> [#] 수리 -'' 峭 Ҷ Դϴ. - ڻ쳯 ֽϴ. +'수리'는 수리상점에서 고장난 물건을 수리할때 쓰입니다. +가끔 물건이 박살날수도 있습니다. diff --git a/help/help.49 b/help/help.49 index b19edaf..6aeeedf 100644 --- a/help/help.49 +++ b/help/help.49 @@ -1,5 +1,5 @@ -: - ð +도움말: + 시간 - ð ݴϴ. +현재 시간을 보여줍니다. diff --git a/help/help.5 b/help/help.5 index cd52b0a..b1c90be 100644 --- a/help/help.5 +++ b/help/help.5 @@ -1,14 +1,14 @@ -: - <> [#] [<> [#]] - <> [#] [<> [#]] ֿ +도움말: + <물건> [#] [<물건> [#]] 가져 + <물건> [#] [<물건> [#]] 주워 -'' ݰų ˴ϴ. -° Ǹ ζ ̸ -ݽϴ. +'가져'는 물건을 어디서 줍거나 가질때 사용됩니다. +담는것으로 부터 꺼낼때도 사용되며 모두라고 붙이면 모든 물건을 +줍습니다. -: +예: -ٴڿ ֽϴ. -: ֿ - å, , å ֿϴ. +바닥에 가방이 있습니다. +: 모두 가방 주워 +당신은 책, 연필, 공책을 주웠습니다. diff --git a/help/help.50 b/help/help.50 index 1b33a95..e23f289 100644 --- a/help/help.50 +++ b/help/help.50 @@ -1,7 +1,7 @@ -: - <Ÿ/> [#] +도움말: + <타인/괴물> [#] 교란 -'' ˻ ǹ ȥ ߸ ˴ϴ. -ȥ մϴ. -׷쿡 մϴ. +'교란'은 검사와 권법가가 적을 혼란에 빠뜨릴때 사용됩니다. +혼란되 괴물은 잠시 공격을 못합니다. +그룹에 유용합니다. diff --git a/help/help.51 b/help/help.51 index c31d1fe..b2b5a0c 100644 --- a/help/help.51 +++ b/help/help.51 @@ -1,8 +1,8 @@ -: - <Ÿ/> [#] Ͱ +도움말: + <타인/괴물> [#] 맹공 -'Ͱ' ⸦ 븦 Ÿ ߸ϴ. -˻ ι Ÿ ǹ Ǽ̸ 쿡 -Ÿ մϴ. - ʱ⿡ ȿԴϴ. +'맹공'은 기를 모아 상대를 강한 타격으로 땅에 쓰러뜨립니다. +검사는 약두배의 타격 권법가는 맨손이면 경우에 따라 여섯배의 +타격을 가합니다. +전투 초기에 효과적입니다. diff --git a/help/help.52 b/help/help.52 index 37bbd4f..e71c4f6 100644 --- a/help/help.52 +++ b/help/help.52 @@ -1,4 +1,4 @@ -: - +도움말: + 저장 -'' ڷḦ մϴ. +'저장'은당신의 자료를 저장합니다. diff --git a/help/help.53 b/help/help.53 index 2f69e3d..ffd547b 100644 --- a/help/help.53 +++ b/help/help.53 @@ -1,7 +1,7 @@ -: - - ޱ - +도움말: + 편지보내기 + 편지받기 + 편지삭제 -̵ ü մϴ. +이들은 우체국에서 편지를 보낼때 사용합니다. diff --git a/help/help.54 b/help/help.54 index 2f69e3d..ffd547b 100644 --- a/help/help.54 +++ b/help/help.54 @@ -1,7 +1,7 @@ -: - - ޱ - +도움말: + 편지보내기 + 편지받기 + 편지삭제 -̵ ü մϴ. +이들은 우체국에서 편지를 보낼때 사용합니다. diff --git a/help/help.55 b/help/help.55 index 2f69e3d..ffd547b 100644 --- a/help/help.55 +++ b/help/help.55 @@ -1,7 +1,7 @@ -: - - ޱ - +도움말: + 편지보내기 + 편지받기 + 편지삭제 -̵ ü մϴ. +이들은 우체국에서 편지를 보낼때 사용합니다. diff --git a/help/help.56 b/help/help.56 index 27cdf61..6f7f71f 100644 --- a/help/help.56 +++ b/help/help.56 @@ -1,14 +1,14 @@ -: - <> [#] <ܾ> ȭ +도움말: + <괴물> [#] <단어> 대화 -'ȭ' Ư ̾߱⸦ ϴ Դϴ. - ϸ ߿ ϴ ֽϴ. -ӹ ߿ Ȱ ϴ ȭ м. +'대화'는 특정 괴물들과 이야기를 하는 명령입니다. +적절한 말을 하면 중요한 정보를 제공하는 괴물이 있습니다. +임무에 중요한 역활을 하니 대화를 잘 사용학세요. -: +예: -: ٺ ȭ -̰ "~ '' " մϴ. -: ٺ ȭ -̰ " ̸ ߰ڴ" մϴ. +: 바보 대화 +식충이가 "아~ '밥' 먹자"라고 말합니다. +: 바보 밥 대화 +식충이가 "난 배고프니 이만 가야겠다"라고 말합니다. diff --git a/help/help.57 b/help/help.57 index d2495a0..ebde6fd 100644 --- a/help/help.57 +++ b/help/help.57 @@ -1,12 +1,12 @@ -: +도움말: - <> ׷츻 + <문장> 그룹말 - ׷鳢 ̾߱Ҷ մϴ. +같은 그룹원들끼리 이야기할때 사용합니다. -: -: ׷츻? -### Ÿ̰ ߽ϴ. +예: +:어디로 가지 그룹말? +### 타이가 어디로 가지라고 말했습니다. diff --git a/help/help.58 b/help/help.58 index 911bef3..8d5a927 100644 --- a/help/help.58 +++ b/help/help.58 @@ -1,9 +1,9 @@ -: +도움말: - <> - <> Ծ + <물건> 마셔 + <물건> 먹어 -'Ծ' ర Խϴ. +'먹어'는 약같은 물건을 먹습니다. diff --git a/help/help.59 b/help/help.59 index f4fdfb6..3f216d9 100644 --- a/help/help.59 +++ b/help/help.59 @@ -1,9 +1,9 @@ -: +도움말: - <> + <문장> 잡담 -'' 鿡 ڽ ǻ縦 ˸ϴ. - ϸ ڽ ü ణ ϴ. -Ͽ Ͻø ׿ ؼ Ǵ -Ͻʽÿ. +'잡담'은 모든 사람들에게 자신의 의사를 알립니다. +잡담을 하면 자신의 체력이 약간 닳습니다. +연속하여 잡담을 하시면 그에 비례해서 많이 닳게 되니 +조심하십시요. diff --git a/help/help.6 b/help/help.6 index dca47a3..907381d 100644 --- a/help/help.6 +++ b/help/help.6 @@ -1,11 +1,11 @@ -: - +도움말: + 소지 -'' ԰ְų ִ ǰ ݴϴ. - ʴ ǰ ȭ鿡 Ÿ ʽϴ. +'소지'는 당신이 입고있거나 가지고 있는 품목을 보여줍니다. +보이지 않는 품목은 화면에 나타나지 않습니다. -: +예: -: - , å, ֽϴ. +:소지 +당신은 막대기, 책, 반지를 갖고 있습니다. diff --git a/help/help.60 b/help/help.60 index 8fea3e2..e935026 100644 --- a/help/help.60 +++ b/help/help.60 @@ -1,13 +1,13 @@ -: +도움말: - <> <> + <물건> <괴물> 사용 - Ҷ մϴ. +마법의 물건으로 괴물을 공격할때 사용합니다. -: -:η縶 - ġḶ ߽ϴ. -ּ 8 Ծϴ. +예: +:두루마기 사용 +당신은 치료마법을 사용했습니다. +주술로 인해 8데미지를 입었습니다. diff --git a/help/help.61 b/help/help.61 index c6f8e75..1d6da2e 100644 --- a/help/help.61 +++ b/help/help.61 @@ -1,7 +1,7 @@ -: +도움말: - ȯ + 환영 -ó в 帳ϴ. +처음 오신 분께 도움말을 드립니다. diff --git a/help/help.62 b/help/help.62 index 0d17823..15d5eb7 100644 --- a/help/help.62 +++ b/help/help.62 @@ -1,6 +1,6 @@ -: - <> [#] ȥ +도움말: + <괴물> [#] 방혼술 -'ȥ' Ư̴. - Ƴ ǵ. +'방혼술'은 무사와 불제자의 특수기술이다. +무덤에서 살아난 괴물들을 강한 마력으로 되돌린다. diff --git a/help/help.63 b/help/help.63 index 0d9c418..e95fafe 100644 --- a/help/help.63 +++ b/help/help.63 @@ -1,14 +1,14 @@ -: - < ࿡ ɾ > - - ࿡ ص Ʈ Դϴ. -[̸] - ϴ Դϴ. -[̸] ޾ - κ ޴ Դϴ. -ܾ - ܰ Ȯϴ Դϴ. -### Ա - ࿡ Աϴ Դϴ. -### - ࿡ ϴ Դϴ. +도움말: + < 은행에서의 명령어 > +보관물 + 은행에 보관해둔 물건의 리스트를 보는 것입니다. +[물건이름] 보관물 + 물건을 보관하는 것입니다. +[물건이름] 받아 + 물건을 은행으로부터 받는 것입니다. +잔액 + 은행의 잔고를 확인하는 것입니다. +###냥 입금 + 은행에 돈을 입금하는 것입니다. +###냥 출금 + 은행에서 돈을 출금하는 것입니다. diff --git a/help/help.64 b/help/help.64 index 2d16c39..9603f5d 100644 --- a/help/help.64 +++ b/help/help.64 @@ -1,6 +1,6 @@ -: - Ȱ +도움말: + 활보법 -'Ȱ' Ưν ø ÷ݴϴ. - ϼ ֽϴ. +'활보법'은 포졸의 특수기술로써 민첩성을 올려줍니다. +따라서 전투시 유리한 움직임으로 움직일수 있습니다. diff --git a/help/help.65 b/help/help.65 index 853260f..a92f0e7 100644 --- a/help/help.65 +++ b/help/help.65 @@ -1,6 +1,6 @@ -: - ſ +도움말: + 신원법 -'ſ' ڿ Ư ſ Ͽ -ȣ ް Ҷ Ǵ Դϴ. +'신원법'은 불제자와 무사의 특수기술로 신에게 기원하여 +보호를 받고자 할때 사용되는 명령입니다. diff --git a/help/help.66 b/help/help.66 index 2105ef1..118e199 100644 --- a/help/help.66 +++ b/help/help.66 @@ -1,7 +1,7 @@ -: - +도움말: + 경계 -'' 濡 ؼ Ǵ Դϴ. -ɷ¿ Ҽֽϴ. +'경계'는 다음방에 함정이 있을경우 주의해서 살피는 명령입니다. +능력에 따라서 성공적으로 함정을 피할수있습니다. diff --git a/help/help.67 b/help/help.67 index 207fe19..d9dd3a4 100644 --- a/help/help.67 +++ b/help/help.67 @@ -1,7 +1,7 @@ -: +도움말: - <> <> + <물건> <대상> 사용 -'' 󿡰 մϴ. - Ǹ ڽſ ˴ϴ. +'사용'은 물건을 대상에게 사용합니다. +대상이 생략되면 자신에게 사용됩니다. diff --git a/help/help.68 b/help/help.68 index ee3d89d..354ea09 100644 --- a/help/help.68 +++ b/help/help.68 @@ -1,5 +1,5 @@ -: - [Ÿ] ź +도움말: + [타인] 듣기거부 -'ź' ̾߱⸦ մϴ. +'듣기거부'는 누군가의 이야기를 듣기 싫을때 사용합니다. diff --git a/help/help.69 b/help/help.69 index e5923ac..707aaed 100644 --- a/help/help.69 +++ b/help/help.69 @@ -1,7 +1,7 @@ -: +도움말: - <> ڰ˻ + <누구> 사용자검색 -׻ ڼ ˾ƺϴ +그사람에 대한 자세한 정보를 알아봅니다 diff --git a/help/help.7 b/help/help.7 index 2199585..8e1e2cf 100644 --- a/help/help.7 +++ b/help/help.7 @@ -1,11 +1,11 @@ -: - <> [#] [in] [<> [#]] - <> [#] [in] [<> [#]] ־ +도움말: + <물건> [#] [in] [<물건> [#]] 버려 + <물건> [#] [in] [<물건> [#]] 넣어 -'־' ǰ ٴڿ ų ˴ϴ. +'넣어'는 당신의 소지품을 바닥에 버리거나 대상에 넣을때 사용됩니다. -: +예: -:å 3 in 2 ־ - 濡 å ־ϴ. +:책 3 in 가방 2 넣어 +당신은 가방에 책을 넣었습니다. diff --git a/help/help.70 b/help/help.70 index 4897bde..a79d907 100644 --- a/help/help.70 +++ b/help/help.70 @@ -1,6 +1,6 @@ -: +도움말: - <ҳ> ȯȣ + <말할내용> 환호 - ο ϴ Դϴ. +축하 등의 내용을 전부에게 말하는 것입니다. diff --git a/help/help.71 b/help/help.71 index fc5c710..a78b73d 100644 --- a/help/help.71 +++ b/help/help.71 @@ -1,12 +1,12 @@ -: +도움말: - <Ÿ> <ּ> + <타인> <주술> 가르쳐 -'' Ư ּ ٸ -ĥ ˴ϴ. +'가르쳐'는 도술사의 특수기술로 간단한 주술을 다른 사람에게 +가르칠때 사용됩니다. -: -:Ÿ ġ -ּ "ġḦ Ÿ̿ ƽϴ. +예: +:타이 치료 가르쳐 +주술 "치료를 타이에게 가르쳤습니다. diff --git a/help/help.72 b/help/help.72 index 1431387..2bf37bf 100644 --- a/help/help.72 +++ b/help/help.72 @@ -1,12 +1,12 @@ -: +도움말: - <> + <괴물> 가입 -'' Ҷ ˴ϴ. - ϸ ̵ ϴ. 밡 ̶ - Ÿ Ҽӵ ׿ ġ ϴ. -ڽ ڰ ɼ ؼ ϼž մϴ. - ش ƹ ϴ. +'가입'은 괴물의 조직에 가입할때 사용됩니다. +가입을 하면 당신은 여러가지 이득을 봅니다. 상대가 선한 사람이라도 +전쟁중인 타 조직에 소속되있으면 죽여도 경험치를 얻습니다. +자신이 그 피해자가 될수도 있으니 조심해서 가입을 하셔야 합니다. +가입후 당한 피해는 아무런 보상이 없습니다. diff --git a/help/help.73 b/help/help.73 index fce3018..d0e882c 100644 --- a/help/help.73 +++ b/help/help.73 @@ -1,8 +1,8 @@ -: +도움말: - () Ż + (괴물) 탈퇴 -'Ż' Դϴ. - ű⿡ մ 񰡸 ġ մϴ. +'탈퇴'는 당신이 가입한 조직에서 나오는 명령입니다. +물론 거기에 합당한 댓가를 치루어야 합니다. diff --git a/help/help.74 b/help/help.74 index 7fe9bd6..4674cb0 100644 --- a/help/help.74 +++ b/help/help.74 @@ -1,13 +1,13 @@ -: +도움말: - <> <> + <괴물> <물건> 구입 -'' Ǹϴ Ҷ ˴ϴ. - '' Ͻʽÿ. +'구입'은 가끔 괴물이 물건을 판매하는 경우 구입할때 사용됩니다. +먼저 '선택'으로 살 물건을 선택하십시요. -: +예: -:ֺ - 7000 ־ϴ. - ϴ ֺ ֽϴٶ մϴ. +:지휘봉 점원 구입 +당신은 점원에게 7000 금을 주었습니다. +점원이 고맙습니다 여기 지휘봉이 있습니다라고 말합니다. diff --git a/help/help.75 b/help/help.75 index 9f82c47..e23c28b 100644 --- a/help/help.75 +++ b/help/help.75 @@ -1,13 +1,13 @@ -: +도움말: - <> + <괴물> 선택 -'' Ȱ ϴ Դϴ. +'선택'은 괴물이 물건을 팔경우 물건을 선택하는 명령입니다. -: +예: -: selection registrar +: 점원 선택selection registrar - ǵ: -1) å 7000 +점원의 현재 물건들: +1) 책가방 7000 금 diff --git a/help/help.76 b/help/help.76 index f1660a6..acb46c4 100644 --- a/help/help.76 +++ b/help/help.76 @@ -1,12 +1,12 @@ -: +도움말: - <> <> ȯ + <물건> <괴물> 교환 -'ȯ' Ư ȯҶ մϴ. - ϴ ־ մϴ. -ӹ ߿ Ȱ մϴ. +'교환'은 특정 괴물과 물건을 교환할때 사용합니다. +괴물이 원하는 물건을 주어야지만 성립합니다. +임무에 중요한 역활을 합니다. -: -:Į հŹ ȯ -հŹ̰ װ ʾ! մϴ. +예: +:칼 왕거미 교환 +왕거미가 난 그걸 원하지 않아!라고 말합니다. diff --git a/help/help.77 b/help/help.77 index 3334d52..3bf83d5 100644 --- a/help/help.77 +++ b/help/help.77 @@ -1,6 +1,6 @@ -: - Ŵޱ +도움말: + 목매달기 -'Ŵޱ' ϰ մϴ. -ٽô Ƴ ٴ° ϼ. +'목매달기'는 모든걸 포기하고 끝낼때 사용합니다. +다시는 살아날수 없다는걸 기억하세요. diff --git a/help/help.79 b/help/help.79 index c39261d..3c521bf 100644 --- a/help/help.79 +++ b/help/help.79 @@ -1,6 +1,6 @@ -ǥ: +투표: - ǥ + 투표 -'ǥ' ߿ ̳ ˴ϴ. +'투표'는 몇몇 중요한 사항이나 누군가를 뽑을때 사용됩니다. diff --git a/help/help.8 b/help/help.8 index 502201e..a638982 100644 --- a/help/help.8 +++ b/help/help.8 @@ -1,5 +1,5 @@ -: - +도움말: + 누구 -'' ִ ˾ƺϴ. +'누구'는 누가 지금 접속해 있는지 알아봅니다. diff --git a/help/help.80 b/help/help.80 index 75cdff3..b73d6ed 100644 --- a/help/help.80 +++ b/help/help.80 @@ -1,11 +1,11 @@ -: +도움말: - <Ÿ> + <타인> 사용자정보 -'' ˻մϴ. +'사용자정보'는 그 사람의 정보를 검색합니다. -: -: Ÿ -Ÿ ΰ - : 9 3 13:02:51 1994 - . +예: +: 타이 사용자정보 +타이 인간족 불제자 +마지막 접속: 9월 토요일 3 13:02:51 1994 +편지 없음. diff --git a/help/help.81 b/help/help.81 index de66887..7171496 100644 --- a/help/help.81 +++ b/help/help.81 @@ -1,6 +1,6 @@ -: +도움말: - ȯ + 귀환 -'ȯ' ưϴ. +'귀환'은 광장으로 돌아갑니다. diff --git a/help/help.82 b/help/help.82 index b33a2c0..7723440 100644 --- a/help/help.82 +++ b/help/help.82 @@ -1,22 +1,22 @@ -: +도움말: - [Ӵܾ] [ɾ] Ӹ + [줄임단어] [명령어] 줄임말 -'Ӹ' ɾ ɾ ٿ ֽϴ. +'줄임말'은 여러 명령어를 한 명령어로 줄여서 쓸수 있습니다. -Ӹ : Ӹ ݴϴ. -[Ӵܾ] Ӹ: Ӹ մϴ. -[Ӵܾ] [ɾ] Ӹ: Ӹ ߰մϴ. +줄임말 : 줄임말들을 보여줍니다. +[줄임단어] 줄임말: 줄임말을 삭제합니다. +[줄임단어] [명령어] 줄임말: 줄임말을 추가합니다. -ɾ ';' ȣ ɾ ֽϴ. -Ӵܾ ڸ ̿Ͻ÷ 'xxxx' (xxx ) -ʽÿ. -ɾ κп $1, $2, ... , $16, $* ڸ ־ټ ֽϴ. -ڴ 16 ϸ $* ɾ ǹմϴ. +명령어는 ';' 기호로 여러 명령어를 적을 수 있습니다. +줄임단어에 숫자를 이용하시려면 '숫자xxxx'의 형식(xxx는 숫자)으로 +적으십시요. +명령어 부분에 $1, $2, ... , $16, $*과 같이 인자를 넣어줄수 있습니다. +인자는 16개까지 가능하며 $*는 명령어앞의 모든 글을 의미합니다. -) ] $1 ϵ帳ϴ. Ӹ - Ӹ Ǿϴ. +예) ] 축 $1님의 레벨업을 진심으로 축하드립니다. 잡 줄임말 + 줄임말이 설정되었습니다. - ] Ǫϴ - Ÿ> Ǫϴô ϵ帳ϴ. + ] 푸른하늘 축 + 타이> 푸른하늘님의 레벨업을 진심으로 축하드립니다. diff --git a/help/help.83 b/help/help.83 index 61805eb..43e5971 100644 --- a/help/help.83 +++ b/help/help.83 @@ -1,13 +1,13 @@ -: +도움말: - <> ¿ + <물건> 태워 -'¿' ʿ ڸ Ұϴ Դϴ.. -ణ ġ 忡 ġ° - ޽ϴ. - ϸ ġ ⵵ մϴ. +'태워'는 필요없는 물건을 그자리에서 소각하는 명령입니다.. +약간의 경험치와 상금을 받지만 제사장에서 제물로 받치는것의 +반을 받습니다. +가끔 신이 흡족하면 돈벼락과 경험치를 내리기도 합니다. - -Į ¿ - Į ¿ ణ ݰ ޾ҽϴ. +예 +칼 태워 +당신은 칼을 태워 약간의 상금과 경험을 받았습니다. diff --git a/help/help.84 b/help/help.84 index f8cdf85..4c46964 100644 --- a/help/help.84 +++ b/help/help.84 @@ -1,14 +1,14 @@ -: - <Īȣ> Īȣ - Īȣ +도움말: + <칭호> 칭호 + 칭호삭제 -'Īȣ' ڽ Īȣ ϴ ɾԴϴ. -''ɿ ڽ Īȣ ֽϴ. -'Īȣ' Īȣ մϴ. +'칭호'는 자신의 칭호를 설정하는 명령어입니다. +'누구'명령에서 자신의 칭호를 볼 수 있습니다. +'칭호삭제'는 설정한 칭호를 삭제합니다. -Īȣ ֽϴ. -{, {, {, {, {, {, { 7 ϰ -'}' ǵϴ. -' ' Ͻø մϴ. +칭호에 색을 넣을 수 있습니다. +{빨, {노, {녹, {파, {하, {보, {흰 7가지 색깔이 가능하고 +'}'는 원래의 색으로 되돌립니다. +'밝은색 설정'을 하시면 밝은색으로 출력합니다. -) {{Ĵ {븸~~} Īȣ +예) {빨무한{파대전 {노만세~~} 칭호 diff --git a/help/help.85 b/help/help.85 index b65a049..c333c31 100644 --- a/help/help.85 +++ b/help/help.85 @@ -1,7 +1,7 @@ -: - +도움말: + 제련 -'' 尣 Ư ⸦ Ҷ ˴ϴ. -Ÿġ ׸ ̸ ڽ Ҽ , -Ǹ ̸ ٴ û ϰ ϴ. +'제련'은 대장간에서 특수한 무기를 제작할때 사용됩니다. +타격치와 내구성 그리고 이름을 자신이 설계할수 있으며, +훌륭한 이름이 붙는 무기는 엄청난 가격을 지니고 있읍니다. diff --git a/help/help.86 b/help/help.86 index 7ea4ae0..fccba6c 100644 --- a/help/help.86 +++ b/help/help.86 @@ -1,7 +1,7 @@ -: - ȯ +도움말: + 직업전환 -'ȯ' ڽ ٲܶ մϴ. -ٲٱ ϴ 忡 ãư ȯϸ ˴ϴ. -״񰡷 10 ణ ɷ Ұ ˴ϴ. +'직업전환'은 자신의 직업을 바꿀때 사용합니다. +바꾸길 원하는 직업의 수련장에 찾아가서 직업전환하면 됩니다. +그댓가로 당신은 10만점의 경험과 약간의 능력을 잃게 됩니다. diff --git a/help/help.87 b/help/help.87 index 16bff14..2e80d0c 100644 --- a/help/help.87 +++ b/help/help.87 @@ -1,5 +1,5 @@ -: +도움말: - + 기공집결 -'' ˻ ⸦ Ͽ 谡Ű Դϴ. +'기공집결'은 검사들이 기를 운행하여 힘을 배가시키는 기술입니다. diff --git a/help/help.88 b/help/help.88 index 21e4171..de7207d 100644 --- a/help/help.88 +++ b/help/help.88 @@ -1,6 +1,6 @@ -: +도움말: - + 살기충전 -'' ڰ ڽ ⿡ Ǹ ν -Ⱑ 븦 Ҷ а Դϴ. +'살기충전'은 자객과 도둑의 기술로 자신의 무기에 피를 먹임으로써 +무기가 상대를 가격할때 실패가 적어지는 기술입니다. diff --git a/help/help.89 b/help/help.89 index 5c112e7..e48d4b8 100644 --- a/help/help.89 +++ b/help/help.89 @@ -1,8 +1,8 @@ - +도움말 - <> + <괴물> 흡성대법 -'' Ư ⸦ Ѿ ڽ -⿡ ϴ ֹԴϴ. -׷ ׾ Ƴ Ƿ ⸦ ϰ -Ͽ մϴ. +'흡성대법'은 도술사의 특수 기술로 적의 기를 빼앗아 자신의 +기에 더하는 주문입니다. +그러나 죽었다 살아난 악령족들은 사악한 기를 지니고 있으니 +조심하여야 합니다. diff --git a/help/help.9 b/help/help.9 index 95bbc91..ba45317 100644 --- a/help/help.9 +++ b/help/help.9 @@ -1,13 +1,13 @@ -: - <> [#] Ծ +도움말: + <물건> [#] 입어 -'Ծ' ̳ ϴ մϴ. -' Ծ' մϴ. +'입어'는 갑옷이나 몸에 착용하는 물건을 착용합니다. +'모두 입어'는 모든걸 착용합니다. -: +예: -: - ǰ: , Ź. -: Ź Ծ - Ź Խϴ. +: 소지 +당신의 소지품: 가방, 신발. +: 신발 입어 +당신은 신발을 입습니다. diff --git a/help/help.90 b/help/help.90 index b80f34a..0c6abf9 100644 --- a/help/help.90 +++ b/help/help.90 @@ -1,6 +1,6 @@ -: +도움말: - + 참선 -'' Ư Ͽ -繰 ٶ󺸴 ɷ Ű ֹɷ ŵϴ. +'참선'은 무사와 불제자의 특수기능으로 참선을 통하여 +사물을 바라보는 지적능력을 향상시키고 주문능력을 향상시킵니다. diff --git a/help/help.91 b/help/help.91 index 393b6e1..c07d4fa 100644 --- a/help/help.91 +++ b/help/help.91 @@ -1,7 +1,7 @@ -: - <> +도움말: + <괴물> 혈도봉쇄 -'' ¤ ֹ -ܿ ϴ Դϴ. ޼Ҹ ¤ û Ÿ -԰ ˴ϴ. +'혈도봉쇄'는 포졸의 전용기술로 적의 혈도를 짚어내 주문을 +외울수 없게하는 기술입니다. 운좋게 급소를 짚으면 엄청난 타격을 +입게 됩니다. diff --git a/help/help.92 b/help/help.92 index 6a047d6..91c77d1 100644 --- a/help/help.92 +++ b/help/help.92 @@ -1,7 +1,7 @@ -: - +도움말: + 써 -'' Խǿ ø Դϴ. - Էϰ Էϸ ÷ϴ. +'써'는 게시판에 글을 올리는 명령입니다. +제목을 입력하고 글을 입력하면 글이 올려집니다. -: о ۻ +참고명령: 봐 읽어 글삭제 diff --git a/help/help.94 b/help/help.94 index 589dc9f..1722540 100644 --- a/help/help.94 +++ b/help/help.94 @@ -1,10 +1,10 @@ -: - Խ - - <ȣ> о - Խ <ȣ> ۻ +도움말: + 게시판 + 써 + <번호> 읽어 + 게시판 <번호> 글삭제 -'Խ' Խù ϴ Դϴ.(= Խù ) -'' Խǿ ø Դϴ. -'о' Խ մϴ. -'ۻ' Խ Ҷ մϴ. +'게시판'명령은 게시물의 목록을 볼때 사용하는 명령입니다.(= 게시물 봐) +'써'명령은 게시판에 글을 올리는 명령입니다. +'읽어' 명령은 게시판의 글을 읽을때 사용합니다. +'글삭제' 명령은 게시판의 글을 삭제할때 사용합니다. diff --git a/help/help.95 b/help/help.95 index f541cd6..832109c 100644 --- a/help/help.95 +++ b/help/help.95 @@ -1,7 +1,7 @@ -: - <> [#] ≮> +도움말: + <물건> [#] <이름> 명명 -'' ǰ ̸ ϴ Դϴ. - ѹ ϴ ؼ ̸ մϴ. - Ư ڴ ν . +'명명'은 기념품점에서 산 물건을 이름을 지을때 사용하는 명령입니다. +단 한번만 명명 가능하니 주의해서 이름을 지어야 합니다. +영어나 특수 문자는 인식하지 않으니 넣지마세요. diff --git a/help/help.96 b/help/help.96 index 6bc310f..2b56162 100644 --- a/help/help.96 +++ b/help/help.96 @@ -1,8 +1,8 @@ -: - <> [#] +도움말: + <물건> [#] 감정 -'' Ư ó ij ˴ϴ. +'감정'은 도둑의 특수기술로 물건의 사용처와 정보를 캐낼때 사용됩니다. - <> [#] + <물건> [#] 비교 -'' ۿ ݴϴ. +'비교'는 각 아이템에 따른 레벨제한을 보여줍니다. diff --git a/help/help.97 b/help/help.97 index fbc494c..9c85756 100644 --- a/help/help.97 +++ b/help/help.97 @@ -1,7 +1,7 @@ -: - <Ÿ/> [#] +도움말: + <타인/괴물> [#] 차기 -'' ǹ Ư ߷ Ⱦ -ϴ Դϴ. ϸ Ÿ ϸ - ˴ϴ. +'차기'는 권법가의 특수기술로 강한 힘을 모아 적을 발로 걷어차 +공격하는 기술입니다. 성공하면 강한 타격을 입히지만 실패하면 +헛점이 노출됩니다. diff --git a/help/help.98 b/help/help.98 index 6d75cb7..51269eb 100644 --- a/help/help.98 +++ b/help/help.98 @@ -1,7 +1,7 @@ -: - <> [#] +도움말: + <괴물> [#] 독살포 -'' ڰ Ư ѷ ߵ -Ű Դϴ. ϸ ߵ Ǿ ð - Ǹ װ ˴ϴ. +'독살포'는 자객의 특수기술로 괴물에게 독을 뿌려서 중독을 +시키는 기술입니다. 성공하면 괴물이 중독이 되어서 일정 시간이 +지나게 되면 죽게 됩니다. diff --git a/help/help.99 b/help/help.99 index bdc3439..ee8c29b 100644 --- a/help/help.99 +++ b/help/help.99 @@ -1,7 +1,7 @@ -: - °ݹ +도움말: + 잠력격발 - θ 밡 Ưμ ÿ -ü° , ָ Ÿġ ణ ϰ -˴ϴ. +무적과 초인만이 사용가능한 특수기술로서 사용시에 +체력과 도력이 오르며, 주먹 타격치도 약간 상승하게 +됩니다. diff --git a/help/helpfile b/help/helpfile index dfdf8b8..bf8cfb3 100644 --- a/help/helpfile +++ b/help/helpfile @@ -1,34 +1,34 @@ - ɾ : + 명령어 도움말: [===================] - ̵: - (,6) / (,4) / (,2) / (,8) / (,9) / (,3) - / / / ȯ + 이동: + 동(ㄷ,6) / 서(ㅅ,4) / 남(ㄴ,2) / 북(ㅂ,8) / 위(ㅇ,9) / 밑(ㅁ,3) + 가 / 도망 / 밖 / 귀환 +-------------------------------------------------------------------+ - : - / ̾߱ / ׷츻 / аŸ / / / ź - / ޱ / + 통신: + 말 / 이야기 / 그룹말 / 패거리말 / 외쳐 / 잡담 / 듣기거부 + 편지보내기 / 편지받기 / 편지삭제 +-------------------------------------------------------------------+ - : - / / / ڰ˻ / / / / - ׷ / / / ð / / / ȯ / / å / ȣ - аŸ / аŸ + 정보: + 점수 / 정보 / 누구 / 사용자검색 / 봐 / 사용자정보 / 설정 / 해제 + 그룹 / 장비 / 소지 / 시간 / 가격 / 저장 / 환영 / 감정 / 정책 / 암호 + 패거리 / 모든패거리 +-------------------------------------------------------------------+ - ൿ: - / / / / / / Ծ / ż / - / / / / ֹ / / Ŵޱ / - ã / ־ / / о / Ż / ȯ / / ǥ / - / ǥ / ݾ / Ǯ / Ⱦ / / / / ȭ - / ǰ / Ӹ / ¿ / Ծ / / ȯ / - + 행동: + 가져 / 벗어 / 무장 / 잡아 / 마셔 / 사용 / 입어 / 매수 / 가입 + 내보내 / 열어 / 잠궈 / 배워 / 주문 / 숨겨 / 목매달기 / 경계 + 찾아 / 넣어 / 버려 / 읽어 / 탈퇴 / 교환 / 사 / 투표 / 선택 + 따라 / 표현 / 닫아 / 풀어 / 팔아 / 수련 / 줘 / 수리 / 대화 + 구입 / 품목 / 줄임말 / 태워 / 먹어 / 제련 / 직업전환 / 명명 + 감정 +-------------------------------------------------------------------+ - : - / Ͱ / / / / ȥ / ֹ + 전투: + 때려 / 맹공 / 공격 / 교란 / 기습 / 방혼술 / 주문 +-------------------------------------------------------------------+ - Ư: - Ͱ / / ſ / / / / / - / / Ȱ / / ȥ / / / - / + 특수기술: + 맹공 / 교란 / 신원법 / 따 / 엿봐 / 기공집결 / 살기충전 / 흡성대법 + 훔쳐 / 기습 / 활보법 / 추적 / 방혼술 / 가르쳐 / 참선 / 혈도봉쇄 + 독살포 / 차기 [===================================================================] - "<> "̶ ġ ڼ ɴϴ. - " ּ " ġ ּ ɴϴ. -忡 " Ұ "ϸ ڼ ɴϴ. + "<명령> 도움"이라고 치면 자세한 설명이 나옵니다. + " 주술 도움" 치면 주술들의 설명이 나옵니다. +광장에서 "종족 소개서 봐"하면 자세한 종족 직업 설명이 나옵니다. diff --git a/help/helpfiles b/help/helpfiles index 610471a..8c79ab4 100644 --- a/help/helpfiles +++ b/help/helpfiles @@ -1,24 +1,24 @@ - ɾ : + 명령어 도움말: [===================] - : ̵: - \̾߱\׷츻\\\ź / / й / + 통신: 이동: + 말\이야기\그룹말\외쳐\잡담\듣기거부 가 / 도망 / 은둔법 / 밖 +-------------------------------------------------------------------+ STATUS: - / / / ڰ˻ / / / / - ׷ / / / ð / / / ȯ + 점수 / 정보 / 누구 / 사용자검색 / 봐 / 사용자정보 / 설정 / 해제 + 그룹 / 장비 / 소지 / 시간 / 가격 / 저장 / 환영 +-------------------------------------------------------------------+ - ൿ: - / / / / / / Ծ / ż / - / / / / ֹ / / ڻ / / ǰ - ã / ־ / / о / Ż / ȯ / / ǥ / - / ǥ / ݾ / Ǯ / Ⱦ / / / / ȭ / + 행동: + 가져 / 벗어 / 무장 / 잡아 / 마셔 / 사용 / 입어 / 매수 / 가입 + 내보내 / 열어 / 잠궈 / 공부 / 주문 / 숨겨 / 자살 / 경계 / 품목 + 찾아 / 넣어 / 버려 / 읽어 / 탈퇴 / 교환 / 사 / 투표 / 선택 + 따라 / 표현 / 닫아 / 풀어 / 팔아 / 수련 / 줘 / 수리 / 대화 / 구입 +-------------------------------------------------------------------+ - : - / / Ѱ / / / ȥ / charm / ֹ + 전투: + 때려 / 공격 / 넘겨 / 교란 / 기습 / 방혼술 / charm / 주문 +-------------------------------------------------------------------+ - Ư: - Ѱ / / ſ / meditate / touch / / - / / Ȱ / / ȥ / charm / / й + 특수기능: + 넘겨 / 교란 / 신원법 / meditate / touch / 따 / 엿봐 + 훔쳐 / 기습 / 활보법 / 추적 / 방혼술 / charm / 가르쳐 / 은둔법 [===================================================================] - "<> "̶ ġ ڼ ɴϴ. - " ֹ " ġ ּ ɴϴ. + "<명령> 도움"이라고 치면 자세한 설명이 나옵니다. + " 주문 도움" 치면 주술들의 설명이 나옵니다. diff --git a/help/policy b/help/policy index 3eeae7c..d337273 100644 --- a/help/policy +++ b/help/policy @@ -1,67 +1,67 @@ - : 95 9 +마지막 갱신일: 95년 9월 -ؼ: +준수사항: - ӿ ؼؾ ׵Դϴ. - ݽ ׿ Ģ ް ˴ϴ. - ڰ ɼ ֽϴ. +다음은 게임에서 준수해야할 사항들입니다. +만일 위반시 그에대한 상당한 벌칙을 받게 됩니다. +심지어 위반자가 영원히 삭제될수도 있습니다. -1. ߸ . - ۵Ǿϴ. ൿ ϴ - ߽߰ ڿ ּ. - û Ⱓ ٽ ۾ ؾ ϰ - Ͻ Դϴ. +1. 게임을 깨뜨리지 마세요. + 여러분을 위해 제작되었습니다. 만일 수상한 행동을 하는 사람을 + 발견시 운영자에게 연락주세요. + 게임이 깨지는 경우 엄청난 기간동안 다시 작업을 해야 하고 + 그 동안 여러분은 접속을 못하실 것입니다. -2. ӹ . - ӹ ߿ κԴϴ. Բ - ְ, йҼ ֽϴ. - ׷ ӹ Ĵ° ߵǴ ׿ - Ģ ްԵ˴ϴ. +2. 임무에 관한 물건을 팔지 마세요. + 임무는 게임의 중요한 부분입니다. 서로 정보를 나누고 함께 + 모험을 나설수 있고, 물건을 분배할수 있습니다. + 그러나 임무에 관한 물건을 파는것이 적발되는 경우 그에 따른 + 벌칙을 받게됩니다. -3. ٸ ҷ ̵Ű . - ʺڵ鿡Է  ɱ? +3. 괴물을 다른 장소로 이동시키지 마세요. + 강력한 괴물을 초보자들에게로 데리고 가면 어떻게 될까요? -4. Ÿ . - ׷ 츦 ϸ '' . - ڿ ߰ Ģ ޽ϴ. +4. 타인을 괴롭히지 마세요. + 만일 그런 경우를 당하면 '무시'로 듣지마세요. + 운영자에게 발각시 역시 벌칙을 받습니다. -5. . - Ұ ڽ ɰ ظ ٰ մϴ. +5. 다중 접속을 하지 마세요. + 다중 접속을 할경우 자신이 심각한 피해를 본다고 합니다. -6. Ÿ . - ϰ մϴ. ϴµ - ̰ ϴ. +6. 타인을 조종하지 마세요. + 서로의 감정을 상하게 합니다. 또한 게임 내용을 진행하는데 + 재미가 없어집니다. -⺻ : +기본 예절: - Ÿΰ 迡 ־ ʷϴ -ؾ ൿԴϴ. - ϼ, +다음은 금지되지는 않지만 타인과의 관계에 있어서 불편을 초래하니 +자제해야할 행동들입니다. +신이 벌을 내릴수도 있으니 조심하세요, -1. Ÿ ϴ . +1. 타인이 공격하던 괴물을 죽이지 마세요. -2. . - Բ ϴ ʿ ּ. +2. 모두 줍지마세요. + 함께 하는 사람을 위해 필요없는 것은 남겨주세요. -3. 糪 ʺڵ ȯ . - Ͼ ˰? +3. 사나운 괴물에게 초보자들을 소환하지 마세요. + 무슨일이 일어날지는 알겠죠? -4. ൿ̳  - 浵 ڽŰ Դϴ. Ǹ Ѽ ൿϼ - ̰ ൿ̳  - Ѵٸ  ¡踦 ް ˴ϴ. +4. 더러운 행동이나 언어를 쓰지 마세요 + 상대방도 자신과 동일한 사람입니다. 예의를 지켜서 행동하세요 + 만약 누군가가 계속적이고 고의적으로 더러운 행동이나 언어를 + 사용한다면 운영진에게 징계를 받게 됩니다. - Ģ +전쟁의 규칙 - ߹ϸ ձ Ҽӵ θ Ҽ ְ ˴ϴ. -θ ϼ ֱ⿡ ɽ ൿؾ մϴ. +전쟁이 발발하면 왕국에 소속된 사람들은 서로를 공격할수 있게 됩니다. +서로를 죽일수 있기에 조심스럽게 행동해야 합니다. -1. ݵ Ǹ ļ ؾ մϴ. +1. 반드시 서로의 합의를 거쳐서 전쟁을 해야 합니다. -2. ˸ οž մϴ. ̱ ٰ - ãư ̸ ʵ˴ϴ. +2. 서로 알맞은 레벨끼리 싸우셔야 합니다. 저레벨은 죽이기 쉽다고 + 찾아가서 죽이면 않됩니다. -3. ظ ° Ż ϼ. - ձ Ҽӵ ش ƹ å ʽϴ. +3. 만일 전쟁 때문에 피해를 보는것 같으면 탈퇴를 하세요. + 왕국에 소속된 사용자의 피해는 아무도 책임지지 않습니다. diff --git a/help/spell.0 b/help/spell.0 index 9c7b897..0f72c3e 100644 --- a/help/spell.0 +++ b/help/spell.0 @@ -1,7 +1,7 @@ -<< ȸ >> - ġּԴϴ. +<< 회복 >> +가장 간단한 치료주술입니다. -ġ : 2 +도력치 : 2 -[ ] -ȸ <> ֹ +[ 예 제 ] +회복 <대상> 주문 diff --git a/help/spell.1 b/help/spell.1 index f9330ec..96fdcaf 100644 --- a/help/spell.1 +++ b/help/spell.1 @@ -1,8 +1,8 @@ -<< dz >> -dz迭 ּԴϴ. - ̴ ż ٶ ҷɴϴ. +<< 삭풍 >> +풍계열의 주술입니다. +살을 에이는 매서운 바람을 불러옵니다. -ġ : 3 +도력치 : 3 -[ ] -dz <> ֹ +[ 예 제 ] +삭풍 <대상> 주문 diff --git a/help/spell.10 b/help/spell.10 index c6cce9c..a349446 100644 --- a/help/spell.10 +++ b/help/spell.10 @@ -1,7 +1,7 @@ -<< ֹ >> - ֹ سϴ. +<< 주문감지 >> +대상의 주문을 감지해냅니다. -ġ : 10 +마법치 : 10 -[ ] -ֹ <> ֹ +[ 예 제 ] +주문감지 <대상> 주문 diff --git a/help/spell.11 b/help/spell.11 index f524650..475d808 100644 --- a/help/spell.11 +++ b/help/spell.11 @@ -1,9 +1,9 @@ -[ ] - ð ٸ ҷ ֽϴ. -* * ̰̾ 𸨴ϴ. - ڵ ⿡ ϰ ֽϴ. +[ 축지법 ] +빠른 시간에 다른 장소로 갈수 있습니다. +* 주의 * 이 술법은 아직 미개발이어서 어디에 갈지 모릅니다. + 지금 학자들이 여기에 대해 연구를 하고 있습니다. -ġ : 20 +도력치 : 20 -[ ] - <> ֹ +[ 예 제 ] +축지법 <대상> 주문 diff --git a/help/spell.12 b/help/spell.12 index 2568cdb..72969b1 100644 --- a/help/spell.12 +++ b/help/spell.12 @@ -1,7 +1,7 @@ -<< ȥ >> - ȥ ϰ մϴ. +<< 혼동술 >> +상대의 정신을 술법을 통해 잠시 혼동시켜 공격을 못하게 합니다. -ġ: 10 +도력치: 10 -[ ] -ȥ <> ֹ +[ 예 제 ] +혼동술 <대상> 주문 diff --git a/help/spell.13 b/help/spell.13 index 9ae4f54..511d3b8 100644 --- a/help/spell.13 +++ b/help/spell.13 @@ -1,7 +1,7 @@ -<< () >> -dz()迭 2° ּν մϴ. +<< 뇌전(雷電) >> +풍(風)계열 2번째 서열의 공격 주술로써 번개로 적을 공격합니다. -ġ : 15 +도력치 : 15 -[ ] - <> ֹ +[ 예 제 ] +뇌전 <대상> 주문 diff --git a/help/spell.14 b/help/spell.14 index 0571ced..492f4b6 100644 --- a/help/spell.14 +++ b/help/spell.14 @@ -1,8 +1,8 @@ -<< >> - 迭 ּԴϴ. - մϴ. +<< 동설주 >> +수 계열의 주술입니다. +죽음의 눈보라를 일으켜 상대방 공격합니다. -ġ : 25 +도력치 : 25 -[ ] - <> ֹ +[ 예 제 ] +동설주 <대상> 주문 diff --git a/help/spell.15 b/help/spell.15 index e01aa83..629c49b 100644 --- a/help/spell.15 +++ b/help/spell.15 @@ -1,8 +1,8 @@ -<< >> - Ư ǿ ּ ̴ϴ. -縸 ϰ ɷ¿ ٸϴ. +<< 빙의 >> +어떤 특정한 물건에 주술을 겁니다. +도술사만이 가능하고 능력에 따라 다릅니다. -ġ : 25 +도력치 : 25 -[ ] - <> ֹ +[ 예 제 ] +빙의 <대상> 주문 diff --git a/help/spell.16 b/help/spell.16 index 2b1b6ea..b8836e7 100644 --- a/help/spell.16 +++ b/help/spell.16 @@ -1,8 +1,8 @@ -<< ȯ >> - ̵ŵϴ. -ڸ մϴ. +<< 귀환 >> +당신을 안전한 지역으로 이동시킵니다. +불제자만이 가능합니다. -ġ : 25 +도력치 : 25 -[] -ȯ <> ֹ +[예제] +귀환 <대상> 주문 diff --git a/help/spell.17 b/help/spell.17 index 51247a9..c5c44f5 100644 --- a/help/spell.17 +++ b/help/spell.17 @@ -1,7 +1,7 @@ -<< ȯ >> -Ư ڽ ġ ҷɴϴ. +<< 소환 >> +특정한 상대방을 자신의 위치로 불러옵니다. -ġ : 30 +도력치 : 30 -[ ] -ȯ <> ֹ +[ 예 제 ] +소환 <대상> 주문 diff --git a/help/spell.18 b/help/spell.18 index 8a40ee3..84fbcb9 100644 --- a/help/spell.18 +++ b/help/spell.18 @@ -1,7 +1,7 @@ -<< ȸ >> - üȸԴϴ. +<< 원기회복 >> +강력한 체력회복술입니다. -ġ : 4 +도력치 : 4 -[ ] -ȸ <> +[ 예 제 ] +원기회복 <대상> diff --git a/help/spell.19 b/help/spell.19 index 10baed7..d852321 100644 --- a/help/spell.19 +++ b/help/spell.19 @@ -1,9 +1,9 @@ -<< ġ >> -Ϻϰ ü ȸմϴ. -ڿ ֹԴϴ. -׷ Ϸ翡 ִ ֽϴ. +<< 완치 >> +완벽하게 체력을 회복합니다. +불제자와 무사의 주문입니다. +그러나 하루에 쓸수있는 제한이 있습니다. -ġ: 20 +도력치: 20 -ġ <> ֹ +완치 <대상> 주문 diff --git a/help/spell.2 b/help/spell.2 index 33add80..c0c8183 100644 --- a/help/spell.2 +++ b/help/spell.2 @@ -1,7 +1,7 @@ -<< ߱ >> - Ͽ ݴϴ. +<< 발광 >> +밝은 빛을 내게 하여 주위를 밝혀줍니다. -ġ : 5 +도력치 : 5 -[ ] -߱ ֹ +[ 예 제 ] +발광 주문 diff --git a/help/spell.21 b/help/spell.21 index 0becf33..a6c24bd 100644 --- a/help/spell.21 +++ b/help/spell.21 @@ -1,8 +1,8 @@ -<< ξ >> -ڽ 鿡 ణ ö ϰų - ˴ϴ. +<< 부양술 >> +자신의 기로 지면에서 몸이 약간 떠올라 함정을 피하거나 +오르내릴때 사용됩니다. -ġ : 10 +도력치 : 10 -[ ] -ξ <> ֹ +[ 예 제 ] +부양술 <대상> 주문 diff --git a/help/spell.22 b/help/spell.22 index b05e85e..3eaa593 100644 --- a/help/spell.22 +++ b/help/spell.22 @@ -1,7 +1,7 @@ -<< 濭 >> -ȭ κ ȣ ݴϴ. +<< 방열진 >> +화의 기운으로부터 대상을 보호해 줍니다. -ġ : 12 +도력치 : 12 -[ ] -濭 <> ֹ +[ 예 제 ] +방열진 <대상> 주문 diff --git a/help/spell.23 b/help/spell.23 index 063892c..8d71928 100644 --- a/help/spell.23 +++ b/help/spell.23 @@ -1,7 +1,7 @@ -<< >> - մϴ. +<< 비상술 >> +몸을 공중을 날게 합니다. -ġ : 15 +도력치 : 15 -[ ] - <> ֹ +[ 예 제 ] +비상술 <대상> 주문 diff --git a/help/spell.24 b/help/spell.24 index 3d27551..648cffd 100644 --- a/help/spell.24 +++ b/help/spell.24 @@ -1,7 +1,7 @@ -<< >> -ּ ݿ ȣմϴ. +<< 보마진 >> +주술 공격에서 보호합니다. -ġ: 12 +도력치: 12 -[ ] - <> ֹ +[ 예 제 ] +보마진 <대상> 주문 diff --git a/help/spell.25 b/help/spell.25 index 954ff2c..2bc89e9 100644 --- a/help/spell.25 +++ b/help/spell.25 @@ -1,8 +1,8 @@ -<< dz >> -dz 迭 ּԴϴ. -ǿ dz Ÿ Դϴ. +<< 권풍술 >> +풍 계열의 주술입니다. +권에 강한 풍을 만들어 적에게 직격타를 먹입니다. -ġ : 10 +도력치 : 10 -[ ] -dz <> ֹ +[ 예 제 ] +권풍술 <대상> 주문 diff --git a/help/spell.26 b/help/spell.26 index b3f3ee6..0831e0d 100644 --- a/help/spell.26 +++ b/help/spell.26 @@ -1,8 +1,8 @@ -<< >> - 迭 ּԴϴ. - ִ մϴ. +<< 지동술 >> +지 계열의 주술입니다. +땅에 속해 있는 물질들이 적을 공격합니다. -ġ : 3 +도력치 : 3 -[ ] - <> ֹ +[ 예 제 ] +지동술 <대상> 주문 diff --git a/help/spell.27 b/help/spell.27 index 041b8d7..2c9c52c 100644 --- a/help/spell.27 +++ b/help/spell.27 @@ -1,7 +1,7 @@ -<< ȭ >> -ȭ 迭 ּԴϴ. - ִ ߵ ϴ. +<< 화선도 >> +화 계열의 주술입니다. +몸에 숨어 있는 깃발들이 적에게 펼쳐집니다. -ġ : 3 -[ ] -ȭ <> ֹ +도력치 : 3 +[ 예 제 ] +화선도 <대상> 주문 diff --git a/help/spell.28 b/help/spell.28 index acd9e02..95544c6 100644 --- a/help/spell.28 +++ b/help/spell.28 @@ -1,7 +1,7 @@ -<< ź >> - 迭 ּ Դϴ. -߿ ٴϴ մϴ. +<< 탄수공 >> +수 계열의 주술 입니다. +공기중에 떠 다니는 수의 기운들을 모아 적에게 공격합니다. -ġ : 3 -[ ] -ź <> ֹ +도력치 : 3 +[ 예 제 ] +탄수공 <대상> 주문 diff --git a/help/spell.29 b/help/spell.29 index d02e80d..b20a2b4 100644 --- a/help/spell.29 +++ b/help/spell.29 @@ -1,8 +1,8 @@ -<< dz >> -dz 迭 ּԴϴ. - ٶ մϴ. +<< 풍마현 >> +풍 계열의 강력한 공격주술입니다. +검은 마가 깃들은 바람으로 공격을 합니다. -ġ : 7 +도력치 : 7 -[ ] -dz <> ֹ +[ 예 제 ] +풍마현 <대상> 주문 diff --git a/help/spell.3 b/help/spell.3 index 2a09d52..57e40a0 100644 --- a/help/spell.3 +++ b/help/spell.3 @@ -1,7 +1,7 @@ -<< ص >> - ġ ִ ֹԴϴ. +<< 해독 >> +독을 치료할 수 있는 주문입니다. -ġ : 6 +도력치 : 6 -[ ] -ص <> ֹ +[ 예 제 ] +해독 <대상> 주문 diff --git a/help/spell.30 b/help/spell.30 index 0beab9b..415b83f 100644 --- a/help/spell.30 +++ b/help/spell.30 @@ -1,8 +1,8 @@ -<< ʽ >> - 迭 ּԴϴ. -Ǯٸ մϴ. +<< 파초식 >> +수 계열의 강력한 공격주술입니다. +풀잎모양의 물결이 적을 공격합니다. -ġ : 7 +도력치 : 7 -[ } -ʽ <> ֹ +[ 예 제 } +파초식 <대상> 주문 diff --git a/help/spell.31 b/help/spell.31 index 878cabd..3d0779f 100644 --- a/help/spell.31 +++ b/help/spell.31 @@ -1,8 +1,8 @@ -<< >> - 迭 ּԴϴ. - ҷ鿩 մϴ. +<< 폭진 >> +지 계열의 강력한 공격주술입니다. +난폭한 지룡을 불러들여 적을 공격합니다. -ġ : 7 +도력치 : 7 -[ ] - <> ֹ +[ 예 제 ] +폭진 <대상> 주문 diff --git a/help/spell.32 b/help/spell.32 index 3e70cf6..0945a96 100644 --- a/help/spell.32 +++ b/help/spell.32 @@ -1,8 +1,8 @@ -<< >> - 迭 ֹԴϴ. - ÷ մϴ. +<< 낙석 >> +지 계열의 아주 강력한 주문입니다. +염력으로 바위를 들어 올려 적을 공격합니다. -ġ : 10 +도력치 : 10 -[ ] - <> ֹ +[ 예 제 ] +낙석 <대상> 주문 diff --git a/help/spell.33 b/help/spell.33 index be4d88b..95a993b 100644 --- a/help/spell.33 +++ b/help/spell.33 @@ -1,8 +1,8 @@ -<< ȭdz >> -ȭ 迭 ּԴϴ. -ҹٶ մϴ. +<< 화풍술 >> +화 계열의 아주 강력한 공격주술입니다. +불바람을 일으켜 적을 공격합니다. -ġ : 10 +도력치 : 10 -[ ] -ȭdz <> ֹ +[ 예 제 ] +화풍술 <대상> 주문 diff --git a/help/spell.34 b/help/spell.34 index 7b1e392..d6ee46e 100644 --- a/help/spell.34 +++ b/help/spell.34 @@ -1,8 +1,8 @@ -<< ȭõ >> -ȭ迭 ּԴϴ. -ȭ ȣϴ ȭ ҷ鿩 մϴ. +<< 화룡대천 >> +화계열의 아주 강력한 공격주술입니다. +화산을 수호하는 화룡을 불러들여 적을 공격합니다. -ġ : 10 +도력치 : 10 -[ ] -ȭõ <> ֹ +[ 예 제 ] +화룡대천 <대상> 주문 diff --git a/help/spell.35 b/help/spell.35 index c19fb66..f955152 100644 --- a/help/spell.35 +++ b/help/spell.35 @@ -1,8 +1,8 @@ -<< ռ >> -()迭 ּԴϴ. - ϴ. +<< 토합술 >> +지(地)계열의 가장 강력한 공격주술입니다. +땅에 지진을 일으켜 적을 삼켜 버립니다. -ġ: 15 +도력치: 15 -[ ] -ռ <> ֹ +[ 예 제 ] +토합술 <대상> 주문 diff --git a/help/spell.36 b/help/spell.36 index 6405454..3d87f63 100644 --- a/help/spell.36 +++ b/help/spell.36 @@ -1,8 +1,8 @@ -<< >> -ȭ 迭 ְ ּԴϴ. -ȭ ҷ鿩 մϴ. +<< 주작현 >> +화 계열 최고수준의 공격 주술입니다. +화의 주작을 불러들여 적을 공격합니다. -ġ : 15 +도력치 : 15 -[ ] - <> ֹ +[ 예 제 ] +주작현 <대상> 주문 diff --git a/help/spell.37 b/help/spell.37 index 9f9938f..5472a12 100644 --- a/help/spell.37 +++ b/help/spell.37 @@ -1,8 +1,8 @@ -<< õ >> - 迭 ְ ּԴϴ. -߰ſ մϴ. +<< 열사천 >> +수 계열 최고 수준의 공격 주술입니다. +뜨거운 용암으로 적에게 출수를 합니다. -ġ : 15 +마법치 : 15 -[ ] -õ <> ֹ +[ 예 제 ] +열사천 <대상> 주문 diff --git a/help/spell.38 b/help/spell.38 index 1b211c2..b1958e8 100644 --- a/help/spell.38 +++ b/help/spell.38 @@ -1,8 +1,8 @@ -<< õdz >> -dz 迭 ְ Ѿ ּԴϴ. -õ Ҹ ų ִ ҷ鿩 մϴ. +<< 파천풍 >> +풍 계열 최고 경지의 수준을 넘어선 공격주술입니다. +천지를 소멸 시킬 수 있는 힘을 불러들여 적을 공격합니다. -ġ : 25 +도력치 : 25 -[ ] -õdz <> ֹ +[ 예 제 ] +파천풍 <대상> 주문 diff --git a/help/spell.39 b/help/spell.39 index d66f11a..2be909b 100644 --- a/help/spell.39 +++ b/help/spell.39 @@ -1,8 +1,8 @@ -<< >> -()迭 ְ Ѿ ּԴϴ. - 33 ڸ ҷ鿩 ϴ. +<< 지옥패 >> +지(地)계열 최고의 경지를 넘어선 공격주술입니다. +지옥의 33의 사자를 불러들여 적을 무참히 도륙해 버립니다. -ġ : 25 +도력치 : 25 -[ ] - <> ֹ +[ 예 제 ] +지옥패 <대상> 주문 diff --git a/help/spell.4 b/help/spell.4 index b029bab..5d8db9f 100644 --- a/help/spell.4 +++ b/help/spell.4 @@ -1,7 +1,7 @@ -<< >> - ɷ ÷ݴϴ. +<< 성현 >> +성스러운 힘으로 당신의 능력을 올려줍니다. -ġ : 10 +도력치 : 10 -[ ] - <> ֹ +[ 예 제 ] +성현 <대상> 주문 diff --git a/help/spell.40 b/help/spell.40 index 11cd5e4..3bed84a 100644 --- a/help/spell.40 +++ b/help/spell.40 @@ -1,8 +1,8 @@ -<< ¾ >> -Ұ迭 ְ Ѿ ּԴϴ. -̰ ¾̶ ¿ϴ. +<< 태양안 >> +불계열의 최고의 경지를 넘어선 공격주술입니다. +양미간에 태양안이라는 삼지안을 만들어 적을 태워버립니다. -ġ: 25 +도력치: 25 -[ ] -¾ <> ֹ +[ 예 제 ] +태양안 <대상> 주문 diff --git a/help/spell.41 b/help/spell.41 index 15b9ce0..d4bae90 100644 --- a/help/spell.41 +++ b/help/spell.41 @@ -1,6 +1,6 @@ -<< ǰ >> - մϴ. +<< 선악감지 >> +대상의 선악을 감지합니다. -ġ: 6 -[ ] -ǰ <> ֹ +도력치: 6 +[ 예 제 ] +선악감지 <대상> 주문 diff --git a/help/spell.42 b/help/spell.42 index 18237d3..396a4fb 100644 --- a/help/spell.42 +++ b/help/spell.42 @@ -1,7 +1,7 @@ -<< ؼ >> - ָ Ǯݴϴ. +<< 저주해소 >> +대상의 저주를 풀어줍니다. -ġ: 18 +도력치: 18 -[ ] -ؼ <> ֹ +[ 예 제 ] +저주해소 <대상> 주문 diff --git a/help/spell.43 b/help/spell.43 index b4d5c22..3e1a520 100644 --- a/help/spell.43 +++ b/help/spell.43 @@ -1,7 +1,7 @@ -<< ȣ >> - κ ȣմϴ. +<< 추위보호 >> +강력한 추위로부터 몸을 보호합니다. -ġ: 12 +도력치: 12 -[ ] -ȣ <> ֹ +[ 예 제 ] +추위보호 <대상> 주문 diff --git a/help/spell.44 b/help/spell.44 index 84a8b3f..a78364b 100644 --- a/help/spell.44 +++ b/help/spell.44 @@ -1,7 +1,7 @@ -<< >> - ְ մϴ. +<< 수생술 >> +물에서도 숨을 쉴수 있게 합니다. -ġ : 12 +도력치 : 12 -[ ] - <> ֹ +[ 예 제 ] +수생술 <대상> 주문 diff --git a/help/spell.45 b/help/spell.45 index 83709fb..9e54aff 100644 --- a/help/spell.45 +++ b/help/spell.45 @@ -1,7 +1,7 @@ -<< ȣ >> - и Դϴ. +<< 지방호 >> +땅의 기운으로 방패를 만들어 주위를 감쌉니다. -ġ : 12 +도력치 : 12 -[ ] -ȣ <> ֹ +[ 예 제 ] +지방호 <대상> 주문 diff --git a/help/spell.46 b/help/spell.46 index 62618e9..046ea74 100644 --- a/help/spell.46 +++ b/help/spell.46 @@ -1,8 +1,8 @@ -<< õ >> - ִ ֽϴ. -** ׻ ʽϴ. ** +<< 천리안 >> +대상이 어느곳에 있는지 알 수 있습니다. +** 항상 성공하지는 않습니다. ** -ġ : 15 +도력치 : 15 -[ ] -õ <> ֹ +[ 예 제 ] +천리안 <대상> 주문 diff --git a/help/spell.48 b/help/spell.48 index 98f8dd3..10bf1bf 100644 --- a/help/spell.48 +++ b/help/spell.48 @@ -1,7 +1,7 @@ -<< ġ >> - ɸ ġմϴ. +<< 치료 >> +병이 걸린 몸을 치료합니다. -ġ: 12 +도력치: 12 -[ ] -ġ <> ֹ +[ 예 제 ] +치료 <대상> 주문 diff --git a/help/spell.49 b/help/spell.49 index 041942b..83c69d5 100644 --- a/help/spell.49 +++ b/help/spell.49 @@ -1,7 +1,7 @@ -<< ȼ >> - ó ġմϴ. +<< 개안술 >> +눈의 상처를 치료합니다. -ġ: 12 +도력치: 12 -[ ] -ȼ <> ֹ +[ 예 제 ] +개안술 <대상> 주문 diff --git a/help/spell.5 b/help/spell.5 index 2db57c2..e0d1039 100644 --- a/help/spell.5 +++ b/help/spell.5 @@ -1,7 +1,7 @@ -<< ȣ >> - ȣ ҷ 鿩 Դϴ. +<< 수호진 >> +빛의 수호령을 불러 들여 방어력을 높입니다. -ġ : 10 +도력치 : 10 -[ ] -ȣ <> ֹ +[ 예 제 ] +수호진 <대상> 주문 diff --git a/help/spell.50 b/help/spell.50 index 8a9fa38..2f37e53 100644 --- a/help/spell.50 +++ b/help/spell.50 @@ -1,8 +1,8 @@ -<< >> - մϴ. - ⸦ ߷ ɷ ҽŵϴ. +<< 공포 >> +적을 공포에 떨게합니다. +전투에서 사기를 떨어뜨려 능력을 감소시킵니다. -ġ: 15 +도력치: 15 -[ ] - <> ֹ +[ 예 제 ] +공포 <대상> 주문 diff --git a/help/spell.51 b/help/spell.51 index 8e37b22..6e34887 100644 --- a/help/spell.51 +++ b/help/spell.51 @@ -1,7 +1,7 @@ -<< ȸ >> -ȿ ȸ ֹ ܿϴ. +<< 전회복 >> +방안에 모든 사람에게 회복 주문을 외웁니다. -ġ: 12 +도력치: 12 -[ ] -ȸ ֹ +[ 예 제 ] +전회복 주문 diff --git a/help/spell.52 b/help/spell.52 index 607d9d3..3286751 100644 --- a/help/spell.52 +++ b/help/spell.52 @@ -1,8 +1,8 @@ -<< >> - ֹ ڽ Ÿο Ҷ -̴ ̴ֹ. +<< 전송 >> +도술사의 주문으로 자신의 물건을 타인에게 전송할때 +쓰이는 주문이다. -ġ: 9 +도력치: 9 -[ ] - ܰ Ÿ ֹ +[ 예 제 ] +전송 단검 타이 주문 diff --git a/help/spell.53 b/help/spell.53 index d8f3e76..7bd632b 100644 --- a/help/spell.53 +++ b/help/spell.53 @@ -1,7 +1,7 @@ -<< >> +<< 실 명 >> - ְϿ Ƴֽϴ. +상대의 눈을 멀게하여 적을 궁지에 몰아넣습니다. -[ ] -: Ǹ ֹ - ־ϴ. +[예 제] +:생쥐 실명 주문 +생쥐의 눈이 멀었습니다. diff --git a/help/spell.55 b/help/spell.55 index 1a6f649..208b88f 100644 --- a/help/spell.55 +++ b/help/spell.55 @@ -1,9 +1,9 @@ -<< ȥ >> - ȥ η ϴ. -ֹ ɸ ൿ մϴ. +<< 이혼대법 >> +대상의 혼을 사로잡아 당신의 포로로 만듭니다. +주문에 걸린 대상은 공격적인 행동을 하지 못합니다. -ġ: 15 +도력치: 15 -[ ] -ȥ <> ֹ +[예 제 ] +이혼대법 <대상> 주문 diff --git a/help/spell.6 b/help/spell.6 index 9826cfe..a9008c2 100644 --- a/help/spell.6 +++ b/help/spell.6 @@ -1,7 +1,7 @@ -<< ȭ >> -ȭ 迭 ּԴϴ. +<< 화궁 >> +화 계열의 공격주술입니다. -ġ : 7 +도력치 : 7 -[ ] -ȭ <> ֹ +[ 예 제 ] +화궁 <대상> 주문 diff --git a/help/spell.7 b/help/spell.7 index 69245d4..e713a55 100644 --- a/help/spell.7 +++ b/help/spell.7 @@ -1,7 +1,7 @@ -<< м >>> - Ѽ ִ ּԴϴ. +<< 은둔술 >>> +적의 눈길을 피한수 있는 주술입니다. -ġ : 15 +도력치 : 15 -[ ] -м <> ֹ +[ 예 제 ] +은둔술 <대상> 주문 diff --git a/help/spell.8 b/help/spell.8 index 69a3f42..5a49084 100644 --- a/help/spell.8 +++ b/help/spell.8 @@ -1,2 +1,2 @@ -: - ȸ +도움말: + 회복 diff --git a/help/spell.9 b/help/spell.9 index 4b9cb11..909024b 100644 --- a/help/spell.9 +++ b/help/spell.9 @@ -1,7 +1,7 @@ -<< а >> -м ִ ֽϴ. +<< 은둔감지술 >> +은둔술을 사용해 숨어있는 상대방을 볼수 있습니다. -ġ: 10 +도력치: 10 -[ ] -а <> ֹ +[ 예 제 ] +은둔감지술 <대상> 주문 diff --git a/help/spellfile b/help/spellfile index cabc1a6..8b91566 100644 --- a/help/spellfile +++ b/help/spellfile @@ -1,34 +1,34 @@ - ȣ ֹ ֹ + 보호 주문 공격주문 ------------------------ --------------------------- - ȣ - 濭 迭 ٶ迭 - ȣ ----------- ------------ - dz - ġ ֹ ȸ ֹ dz ------------------------ dz - ռ - ص ȸ õdz - ġ ȸ - ȼ ġ - ȸ Ұ迭 迭 -ؼ ----------- ------------ - ֹ ȭ ź ------------------------ ȭ ʽ - ȭdz ȭõ - ǰ ֹ õ -а õ ¾ + 성현진 지방호 + 방열진 보마진 땅계열 바람계열 + 수호진 방한진 ----------- ------------ + 지동술 삭풍 + 치료 주문 회복 주문 폭진 풍마현 +----------------------- 낙석 권풍술 + 토합술 뇌전 + 해독 회복 지옥패 파천풍 + 치료 원기회복 + 개안술 완치 + 전회복 불계열 물계열 +저주해소 ----------- ------------ + 감지 주문 화선도 탄수공 +----------------------- 화궁 파초식 + 화풍술 화룡대천 + 선악감지 주문감지술 주작현 열사천 +은둔감지술 천리안 태양안 동설주 - Ÿ ֹ - Ÿ ֹ --------------------------- ----------------------- Ǹ - ξ ȥ ȥ - ȯ - ȯ й - ߱ - + 기타 공격 주문 + 기타 주문 --------------------------- +---------------------- 실명 공포 + 빙의 부양술 혼동 이혼대법 + 소환 비상술 + 귀환 은둔법 + 발광 축지법 +수생술 추적 -"<ּ> " ԷϽø ڼ Ÿϴ. -/// ̸ֹ ĥ ʿ ڸ ĵ ˴ϴ. ٸ͵鵵... /// -[ ] -ȥ ֹ ==> ȥ ֹ (o.k) +"<주술> 도움"을 입력하시면 자세한 내용이 나타납니다. +/// 위 주문이름을 다 칠 필요없이 약자만 쳐도 됩니다. 다른것들도요... /// +[ 예 제 ] +이혼대법 주문 ==> 이혼 주문 (o.k) diff --git a/help/welcome b/help/welcome index 6ce434c..30fb3d2 100644 --- a/help/welcome +++ b/help/welcome @@ -1,121 +1,121 @@ -Ѵ +무한대전 -ó : ̼, ѽ, +시나리오 제작자: 이수남, 권한식, 이정균 **************************************************************************** - ˸: ʺڵ ݵ ڼ . + 알림: 초보자들은 반드시 자세히 읽으세요. **************************************************************************** -Ұ - Ѵ MUD(Multi-User Dungeon)Դϴ. - ̰ ǽð ٸ ڵ ϰ ϸ鼭 Դϴ - ɰ ϱ в - Ұ 帮ڽϴ. - - Է - Էºκ Ʈ Ÿϴ. - ؼ ȶؼ 츦 ϰ Ӹ νҰԴϴ - ( κп ô ָԾ) - ̺κп ̳ Է ϰ Ǵ°Դϴ. - - - ̶ Է Ͻø Ǽ ֽϴ. - <׸> ̶ ġø ׸ µ˴ϴ. - ݵ Ͻð ӿ ϼž Ƴ ֽϴ. - - - ڵ ϱ⶧ ٸ ڵ ̾߱ϴ -  ֽϴ. - <> , <> ', <> " ̰ 濡 ִ 鿡 - ڽ ǻ縦 Ҷ մϴ. - <> ̰ ó ִ 鵵 ֽϴ. - <Ÿ> <> ̾߱ ̰ Ư ڿ ڽ ǻ縦 - Ҷ մϴ. - <> ̰ ڵ鿡 ڽ ǻ縦 մϴ - ̰ ϴ. - -̵ - ҿ ٸ ҷ ̵Ҷ <> մϴ. - ,,,ϰ ׳ ⸸ ø ˴ϴ. - -ǵ - ڸ ٴҼ ִ 翡 ֽϴ. - ̰ ⳪ ິ ɼ ִµ ԰ ֽϴ. - ڽ ǰ ǰ̶ ԷϽʽÿ. - ϰų ԷϽø ˴ϴ. - <2> # <1> # 2 1 Դϴ. - 尩 ȿ 尩 Դϴ. - # ȣ ϴ մϴ. - <> ٴ̳ 濡 ִ ֿ Դϴ. - <> ڽ ִ ٴڿ Դϴ. -  ؾ ˴ϴ. - <> Ծ Ծ ˴ϴ. - ջɼ ׷ ؾ մϴ. - -*** ʺڵ Ʈ - õϴ ǻԴϴ. - - 1. ι ׻ ϰ ʽÿ. -賭ϰ Ѵٸ ι ʽÿ. - ι Ҹ ֽϴ. ణ ֽϴ. - ̵ ֽϴ. ڵ鿡Լ ǵ ĥ ִµ - ڵ鵵 ̵ ڽ ִٸ Ҹ մϴ. - - 2. ̶ ڽ ȯ Ͻʽÿ. - ̶ ð ڽŸ ȯ Ͻʽÿ. - - 3. ó ׻ 캸ʽÿ. - Ǵؼ Ͻʽÿ. - ߿ ˰ ֽϴ. ȭ 򵵷 - Ͻʽÿ. - - 4. ȭ ӵ ߿ ϳԴϴ. ο ι - ׻ ȭ Ͽ ο ӹ ְ, -ġ ֽϴ. 'ȭ ' ȭϴ , - ܾ ȭؾ ϼ. ǰ ȭ ȿ ܼ - ֽϴ. - - 5. ߿ ӹ ǵ Ư ڿ մϴ. -׷ ڴ ݵ 񰡸 ġԴϴ. ̶ 'ȯ'̶ ɾ -ϼ. Ұ ӹ õȰ͵ ѹ Ҽ ֽϴ. -ų ȸ ӹ Ҽ ֽϴ. - -*** 2 *** -˸: ι 2 Ǿ ɼ ֽϴ. - -1 ڵ ̷ų 2 ɶ ָ ƴٴ -ñ ٶϴ. ս ġ -Ͻʽÿ. ġ Ͻʽÿ. - ϰ ֽϴ. Ϲ Ģ 캸 -ɾ °Դϴ. ٵ ׻ Ͻʽÿ. - - 5 ϴ. ʺ ׾ ġ - ġ ưԴϴ. - ƹŸҿ ¥ġᵵ ϴ. ȯ ־ - 쿡 ϼž ˴ϴ. ϰ ĵ - ϰ ˴ϴ. - - ڽ Ư ؼ ϼ ࿡ -ʼԴϴ. ӹ ġ Դϴ. ׷ -κ ӹ ȥڼ ذҼ ϴ. -ٸ ׷  ӹ ϼϽʽÿ. - - ġҷ 'ƹŸ ġ ȭ' ԷϽʽÿ. -ںο ƹŸ ʺ Ⲩ ͵帱Դϴ. - - ӵ ̵ ۵Ǿϴ. - Ҷ ڽŸ ׸ ɷ ϼž -մϴ. ڽſ ٴ° ƽʽÿ. - - ̳ ڿ ʽÿ. ڸ - ñ ٶϴ. - - - Ģ ؼ 'å 'ġ. +소개 + 무한대전은 MUD(Multi-User Dungeon)게임입니다. + 이것은 실시간으로 다른 사용자들과 협력하고 경쟁하면서 즐기는 게임입니다 + 여기 간단한 명령과 게임을 진행하기위한 몇몇 정보들을 여러분께 + 소개해 드리겠습니다. + +명령 입력 + 입력부분은 도스의 프롬프트 같이 나타납니다. + 명령 해석기는 똑똑해서 몇몇경우를 제외하고는 줄임말들을 인식할것입니다 + (요 부분에서 무척 애먹었음) + 이부분에다 명령이나 말을 입력함으로 게임을 진행하게 되는것입니다. + +도움 + 도움이라고 입력을 하시면 도움말을 보실수 있습니다. + <항목> 도움이라 치시면 그 항목의 도움말이 출력됩니다. + 반드시 도움말을 숙지하시고 게임에 임하셔야 살아남을수 있습니다. + +통신 + 여러 사용자들이 존재하기때문에 다른 사용자들과 이야기하는 방법이 + 몇가지 있습니다. + <문장> 말, <문장> ', <문장> " 이것은 같은 방에 있는 사람들에게 + 자신의 의사를 전할때 사용합니다. + <문장> 외쳐 이것은 근처에 있는 사람들도 들을수 있습니다. + <타인> <문장> 이야기 이것은 특정한 사용자에게 자신의 의사를 + 전달할때 사용합니다. + <문장> 잡담 이것은 모든 사용자들에게 자신의 의사를 전달합니다 + 이것은 제한이 있읍니다. + +이동 + 한 장소에서 다른 장소로 이동할때는 <장소> 가를 사용합니다. + 동,서,남,북같은 방향은 그냥 방향만 넣으시면 됩니다. + +물건들 + 각기 사용자마다 들고다닐수 있는 물건의 양에는 제한이 있습니다. + 이것은 무기나 약병이 될수도 있는데 각기 무게가 있습니다. + 자신의 소지품을 볼려면 소지품이라고 입력하십시요. + 착용하거나 무장한 물건을 볼려면 장비라고 입력하시면 됩니다. + <물건2> # <물건1> # 가져는 물건2에서 물건1을 꺼내가지는 명령입니다. + 예로 보따리 장갑 가져는 보따리안에서 장갑을 꺼내가지는 명령입니다. + #는 번호를 지정하는 것으로 같은 물건이 여러개 있을때 지정합니다. + <물건> 가져는 바닥이나 방에 있는 물건을 주워가지는 명령입니다. + <물건> 버려는 자신이 가지고 있는 물건을 바닥에 버리는 명령입니다. + 방어구는 착용해야 사용이 됩니다. + <물건> 입어로 예를 들면 가죽 갑옷 입어라는 형식으로 사용됩니다. + 또한 물건은 손상될수도 있으며 그런경우 수리를 해야 합니다. + +*** 초보자들을 위한 힌트 + 추천하는 몇몇 주의사항입니다. + + 1. 당신의 인물을 항상 선하게 만드십시요. +험난하고 어려운 게임을 원한다면 사악한 인물로 만드십시요. +사악한 인물은 여러 불리한 점이 있습니다. 물론 약간의 장점도 있습니다. +악한 도둑은 재미도 있습니다. 사용자들에게서 물건도 훔칠수 있는등 +악한 사용자들도 고난이도에 자신이 있다면 도전할만 합니다. + + 2. 설정이란 명령으로 자신의 환경을 조정하십시요. +설정 도움이란 명령으로 목록을 보시고 자신만의 게임환경을 조정하십시요. + + 3. 처음 보는 괴물을 만나면 항상 봐란 명령으로 살펴보십시요. +괴물에 대한 정보가 나오니 잘 판단해서 전투를 결정하십시요. +몇몇 괴물들은 게임의 중요 정보를 알고 있습니다. 대화로 정보를 얻도록 +노력을 하십시요. + + 4. 대화는 이 머드의 가장 중요한 요소의 하나입니다. 새로운 인물을 +만나면 항상 대화를 하여 새로운 정보를 얻어야 임무를 받을수 있고, 많은 +경험치를 쉽게 받을수 있습니다. '대화 도움'으로 대화하는 법을 익히고, +무슨 단어를 대화해야 할지 생각하세요. 몇몇 물건과 대화 내용안에 단서가 +숨겨져 있습니다. + + 5. 몇몇 중요 임무 물건들은 특정한 소유자에게 돌려줘야 합니다. +그러면 소유자는 반드시 댓가를 치룰것입니다. 이때는 '교환'이란 명령어를 +사용하세요. 주의할것은 임무에 관련된것들은 한번만 소유할수 있습니다. +버리거나 팔면은 다음 임무를 진행하지 못할수도 있습니다. + +*** 2레벨로 전진 *** +알림: 당신의 인물은 2레벨이 되어야 영원히 저장될수 있습니다. + +레벨1의 사용자들은 무리를 이루거나 레벨2가 될때까지 멀리 돌아다니지 +마시길 바랍니다. 손쉬운 괴물들과 전투를 통해 경험치를 얻고 돈을 +구하십시요. 괴물들과 전투중 도망치면 주의하십시요. 괴물들은 당신의 +얼굴을 기억하고 있습니다. 일반적인 원칙은 전투전에 살펴보고 말을 +걸어 보는것입니다. 무엇보다도 항상 주의하십시요. + +레벨 5가 넘으면 많은 제약이 따릅니다. 초보들은 죽었을경우 경험치가 +얼마 내려가지 않지만 고레벨은 많은 경험치가 날아갈것입니다. +또한 아미타불에게 공짜치료도 받을수 없습니다. 귀환도 제약이 있어서 +위급한 경우에만 사용하셔야 됩니다. 전투시 비겁하게 도망을 쳐도 +불이익을 당하게 됩니다. + +또한 자신의 특수 기술을 잘 연구해서 사용하세요 게임 진행에 꼭 +필수적입니다. 임무는 많은 경험치를 얻는 지름길입니다. 그러나 +대부분의 임무는 혼자서 해결할수 없습니다. +다른 직업과 그룹을 만들어가서 임무를 완수하십시요. + +다쳤으면 치료소로 가서 '아미타불 치료 대화'라고 입력하십시요. +자비로운 아미타불은 초보 여러분을 기꺼히 도와드릴것입니다. + +이 머드는 상당한 난이도로 제작되었습니다. +게임을 진행할때 자신만의 종족과 직업 그리고 능력으로 게임을 하셔야 +합니다. 남들의 방법이 자신에게 결코 맞을수 없다는걸 아십시요. + +만일 질문이나 문제가 있으면 운영자에게 물어보십시요. 만일 자리에 +없으면 편지를 보내시기 바랍니다. + + +몇가지 규칙에 대해서는 '정책 도움'치세요. ----------------------------------------------------------------------------- -̰ Դϴ. -׳ ߸ ߽߰ ˷ּ. ƴϸ ߸ ̳ -, ǥ ˷ּ. +이게임은 아직도 제작중입니다. +버그나 잘못된 점을 발견시 꼭 알려주세요. 아니면 잘못된 설명이나 +도움말, 표현등등도 알려주세요. diff --git "a/objmon/ddesc/\270\266\277\325_99" "b/objmon/ddesc/\270\266\277\325_99" deleted file mode 100644 index 82aefff..0000000 --- "a/objmon/ddesc/\270\266\277\325_99" +++ /dev/null @@ -1,9 +0,0 @@ - Ⱑ ڱ ߽ϴ. -׷ ұ ۽θ鼭 Ÿ մϴ. - -ڱ ؿ Ҹ 鸳ϴ. -" ΰ Ҿ.... - ձ ٽ ݵ ʸ óϸ". - - óġ ˼ ع ȯȣϴ Ҹ -⼭ ɴϴ. diff --git "a/objmon/ddesc/\272\257\275\305\261\315_40" "b/objmon/ddesc/\272\257\275\305\261\315_40" deleted file mode 100644 index df6c587..0000000 --- "a/objmon/ddesc/\272\257\275\305\261\315_40" +++ /dev/null @@ -1,7 +0,0 @@ -ֹ â θ űͰ - Ģ 巯ϴ. - - ӹ ϰ -ϴ. - - ۿ ϵ ǰŸ ϱ. diff --git "a/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\32599" "b/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\32599" deleted file mode 100644 index f3d84b2..0000000 --- "a/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\32599" +++ /dev/null @@ -1,10 +0,0 @@ - - ߸ 绡 dz ֹ ܿϴ. - -׷ dz Ҿͼ ο ۾ , - Ʋ ü ʾҽϴ. - -𼱰 ̸ ڰ Ÿ ü ȥ ܿ -Ͱ Ҹ 鸮 عȽϴ. - -մϴ Ѹ ߷Ƚϴ. diff --git "a/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\325_99" "b/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\325_99" deleted file mode 100644 index bba21f7..0000000 --- "a/objmon/ddesc/\272\316\310\260\307\321_\276\307\300\307_\301\246\277\325_99" +++ /dev/null @@ -1,11 +0,0 @@ - - ߸ 绡 dz ֹ ܿϴ. - -׷ dz Ҿͼ ο ۾ , - Ʋ ü ʾҽϴ. - -𼱰 Ͱ Ҹ 鸮 ¥ - 巯 ϴ. - -״ ٸƴ ̾ϴ. - diff --git "a/objmon/ddesc/\273\347\264\347\261\315\275\305_60" "b/objmon/ddesc/\273\347\264\347\261\315\275\305_60" deleted file mode 100644 index d6cc8fd..0000000 --- "a/objmon/ddesc/\273\347\264\347\261\315\275\305_60" +++ /dev/null @@ -1,7 +0,0 @@ -ͽ ֹ 鼭 ׿ - ߷Ƚϴ. - -״ Ȱ ٴڿ - ϴ. - ֹ ãƺ° ڱ. - diff --git "a/objmon/ddesc/\275\304\300\316\261\315_48" "b/objmon/ddesc/\275\304\300\316\261\315_48" deleted file mode 100644 index df1fd95..0000000 --- "a/objmon/ddesc/\275\304\300\316\261\315_48" +++ /dev/null @@ -1,6 +0,0 @@ -α ܸ ο ӿ ޾Ƹƽϴ. - - ̻ Դϴ. - - Ҿƹ ٸ ̰ ̴ . - diff --git "a/objmon/ddesc/\276\307\300\307_\301\246\277\325_98" "b/objmon/ddesc/\276\307\300\307_\301\246\277\325_98" deleted file mode 100644 index 0ecf603..0000000 --- "a/objmon/ddesc/\276\307\300\307_\301\246\277\325_98" +++ /dev/null @@ -1,11 +0,0 @@ - - Ⱑ ׸ ۽α մϴ. - -׷ ְϴ ν ׼ӿ -ٶ󺼼 ϴ. - -ڱ ģ 鸮 ӿ ɾ - Ƽ ɾ ɴϴ. - -" ձ ġڴ ϼ ̴" - ġ ٽ Į ſ ޷ϴ. diff --git "a/objmon/ddesc/\277\251\306\367_120" "b/objmon/ddesc/\277\251\306\367_120" deleted file mode 100644 index d5c8308..0000000 --- "a/objmon/ddesc/\277\251\306\367_120" +++ /dev/null @@ -1,8 +0,0 @@ - 鼭 Ĩϴ. - -ƴ ̷ -õϸ ִµ ̷ ٴ.... - -鼭 ڽ ܰ ſ -׸ տ ̰ ϴ. - diff --git "a/objmon/ddesc/\277\354\271\260\277\344\261\253_48" "b/objmon/ddesc/\277\354\271\260\277\344\261\253_48" deleted file mode 100644 index 37f3704..0000000 --- "a/objmon/ddesc/\277\354\271\260\277\344\261\253_48" +++ /dev/null @@ -1,6 +0,0 @@ -칰 䱫 鼭 ܸ ϴ. - -" ̷ ... !" - - Բ ǰ ҽϴ. - diff --git "a/objmon/ddesc/\301\246\277\354\275\272_127" "b/objmon/ddesc/\301\246\277\354\275\272_127" deleted file mode 100644 index d3a8fbb..0000000 --- "a/objmon/ddesc/\301\246\277\354\275\272_127" +++ /dev/null @@ -1,17 +0,0 @@ - -"״ ϱ.... ̱..." - -" ǰڱ...." - -" ؼ Գ..." - -" ߳..." - - -õ ŵ ɷ¿ ֽϴ. - Դϴ. - - ϴ Ҹ ⼭ 鸳ϴ. - -" ߾!~ ε ϼ!~ " - diff --git "a/objmon/ddesc/\301\266\277\356_\300\332\267\346_120" "b/objmon/ddesc/\301\266\277\356_\300\332\267\346_120" deleted file mode 100644 index 1a43209..0000000 --- "a/objmon/ddesc/\301\266\277\356_\300\332\267\346_120" +++ /dev/null @@ -1,8 +0,0 @@ - 鼭 Ĩϴ. - -~ ¸ ʾҴµ...... - ϻ տ ״ٴ... - -鼭 ߹ ϴ. - - diff --git "a/objmon/ddesc/\301\366\267\346_\266\363\300\333_127" "b/objmon/ddesc/\301\366\267\346_\266\363\300\333_127" deleted file mode 100644 index 5890cc1..0000000 --- "a/objmon/ddesc/\301\366\267\346_\266\363\300\333_127" +++ /dev/null @@ -1,19 +0,0 @@ - - ״ ̴϶. - - ʿ ٽ , - - ٽ ʿ ̴. - - ׶ ֱ⸦ . - - - - -մ ſ "״ ̳~~" ̾߱մϴ. - -մ ſ " ׿ ־ ~~ " ̾߱մϴ. - -մ ſ " ~~~~" ̾߱մϴ. - -巹Ͼ 鼺 " ~~ ϰ ֳ׿~~" ȯȣ մϴ. diff --git "a/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\323\270\256_80" "b/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\323\270\256_80" deleted file mode 100644 index 364b5ef..0000000 --- "a/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\323\270\256_80" +++ /dev/null @@ -1,9 +0,0 @@ - -Ǫ ұ濡 ۽ ŸŸ Ӹ г ̼Ҹ 鼭 - ϴ. - -".. ׾ٰ ⻵ ʿ ." -"Ӹ ϳ ׾ٰ ص Ŀ - ŸŸ ̶ ϴ? ." - -Ǫ ұ濡 ۽ ŸŸ Ӹ ڷ ΰ ȯ̳Ÿϴ. diff --git "a/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\366_99" "b/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\366_99" deleted file mode 100644 index ecfd15d..0000000 --- "a/objmon/ddesc/\305\270\305\270\270\243\300\307_\270\366_99" +++ /dev/null @@ -1,11 +0,0 @@ - -ڱ 鼭 ұ濡 ۽ ŸŸ ܹϴ. - Ҹ Ϳ ɴϴ. - -" , ״ ƴϴ." -" ִ ʴ ٽ Ƴ̴." -". ٰ̰ ⻵ ." -" ڵ .. ." - - ٽ 鼭 ƴ Ⱑ ھƳ ֽϴ. - diff --git "a/objmon/ddesc/\307\330\300\373_\274\261\300\345_99" "b/objmon/ddesc/\307\330\300\373_\274\261\300\345_99" deleted file mode 100644 index 492c9da..0000000 --- "a/objmon/ddesc/\307\330\300\373_\274\261\300\345_99" +++ /dev/null @@ -1,7 +0,0 @@ - -ұ濡 ۽ 뽺 ǥ - -" .. ̷.. ٷ տ ִµ.. - ̷ 㹫ϰ ׾ ϴٴ.. ϴ. " - - Բ 簡 Ǿ ϴ. diff --git "a/objmon/rndtalk/\260\307\264\336" "b/objmon/rndtalk/\260\307\264\336" deleted file mode 100644 index 078a3b0..0000000 --- "a/objmon/rndtalk/\260\307\264\336" +++ /dev/null @@ -1 +0,0 @@ - ãּ~~ 󱼻 ó 屸 ſ ؿ~~ diff --git "a/objmon/rndtalk/\260\350\274\256\304\241\271\253" "b/objmon/rndtalk/\260\350\274\256\304\241\271\253" deleted file mode 100644 index 62a4974..0000000 --- "a/objmon/rndtalk/\260\350\274\256\304\241\271\253" +++ /dev/null @@ -1,8 +0,0 @@ - ˰ ⿡ ɾ ⸦ Գ. - ʹ ϸ ٳ. -ʺڵ ǥ ãưԳ. -û ޺ΰ Ÿ η縶⸦ оȴٳ. ӹ ð ȭ غԳ. -' ' ° Ǵ ۰Ÿٳ. ϰԳ. -ڳ, °? ġҿ ƹŸҿ ġḦ ްԳ. -ɾ 𸣸 '' ̿ϰԳ. - 縦 ϸ õ ޴´ٳ. diff --git "a/objmon/rndtalk/\276\306\271\314\305\270\272\322" "b/objmon/rndtalk/\276\306\271\314\305\270\272\322" deleted file mode 100644 index c7d8d55..0000000 --- "a/objmon/rndtalk/\276\306\271\314\305\270\272\322" +++ /dev/null @@ -1,3 +0,0 @@ -ġ ġ ġ Ǹġ ϰԳ.. -ڳ °? ȭ Գ.. -ڳ 輮ġ ϴ ãƿԴ°? diff --git "a/objmon/talk/\260\350\274\256\304\241\271\253-25" "b/objmon/talk/\260\350\274\256\304\241\271\253-25" deleted file mode 100644 index 3d4ab6c..0000000 --- "a/objmon/talk/\260\350\274\256\304\241\271\253-25" +++ /dev/null @@ -1,34 +0,0 @@ -ӹ - û ޺ΰ Ÿ η縶⸦ 忡 Ҿȳ ָ . ߿ ġ ƹŸҿ 'ġ' ϰԳ. -ȳ - û ʺ Ÿ η縶⸦ Ҿȳ ָ -û -ڳװ '谡' ̳.... ļ 'ġ'ް .. -谡 -׷ ̼迡 ִٳ... װ غϴ° ڳ 'ӹ' -ġ -ƹŸҿ 'ġ' ϰԳ...̵ ذ ٰ̳.. - -ͽų е ãư ´ٰ ϰ. - -̰ Ʋ 'ð' ̳ رǾ 𸣴 ̳. -ð - 'ձ' ̰ Ǿٳ... -ձ -׵ Ƹ '' ''̶ θ? ׵鿡 ''ϴ° ô ̳ - -׵ ׻ θ ĸŰ ϰ ֳ ڳװ ׵ ''  Ұɼ. - -׵ ڳ׸ '' ؼ ٸ 谡 ο Ұ̳... - - ¸ϸ ް װų йϸ ׸ 񰡸 ġ ɰ̳.. - - ؼ ʿ Ѵٰ ϰԳ...뺴 Ȱ ʺڵ鿡Դ 賭ϴٳ.. - -ѿյ 뺴 ϳ... ϴٸ ãư ϰԳ.. -ٺ - ٺ ƴϾ. ٺ. -ǻ -. ˾ .. ڳ ƴ°.. ٷ ̾ => DZ => ǻ ..̰ ְ. -± -'±' ° Ǵ ۰Ÿٳ. ϰԳ. diff --git "a/objmon/talk/\261\271\277\325-10" "b/objmon/talk/\261\271\277\325-10" deleted file mode 100644 index da3b183..0000000 --- "a/objmon/talk/\261\271\277\325-10" +++ /dev/null @@ -1,10 +0,0 @@ - - 巹Ͼƴ ū ⿡ óִٳ, شٸ '' ְ ְڳ. ڳװ '' ְ. - - 翴ٳ. ׿ ȯ ó ˷ ٲ, ״ ȣ ž ߴٳ. - - ׷ٸ ' ǥ' ְ - -װ ְ. ׷ ž ִ ž  ְڳ -ǥ -װ ְ. ׷ ž ִ ž  ְڳ diff --git "a/objmon/talk/\261\315\261\335\274\323\301\241_\301\326\300\316-36" "b/objmon/talk/\261\315\261\335\274\323\301\241_\301\326\300\316-36" deleted file mode 100644 index 4433c4f..0000000 --- "a/objmon/talk/\261\315\261\335\274\323\301\241_\301\326\300\316-36" +++ /dev/null @@ -1,14 +0,0 @@ -ȳ ACTION -~~ [].. ... - ACTION -? ڳ 濡 Ƴ? ˰ ִٸ װ ã ְԳ ׷ ε ܼ. ? Źϳ..[] - -׷.. ġ ʰ ְڳ.. ִ Ȱ ÿ ϼ.. ׷ ϴٴ°ž.. [̶] -̶ - ȭ̶ 簡 װ Ȱ ߴµ, ڰ Ÿ ʾ ְ ... [ȭ] -ȭ -ָ ϱ ̰ µ  ƴ 𸣰ھ.. װ ؿ; ٵ... Ȥ ݱ ƿ Ű 鿡 Ѱ ƴұ..? [̶] -̶ -̰ ȿ Ű ǰŸ.. Ű ļ ׷µ ̰ ȿ ߴ 귯´ٴ°ž.. ¾! ȭ и ׾ž... ׷  .. ϸ ְ ¥ ٵ ȿ  ָ ؿ´? [] - -ڳװ? ڳ Ƿ ɱ..? .. ϱ صɰ ... ! ڳװ װ ش ָ ϰ ܼ.. ׸ ϸ ֵ ãָ ְڳ... diff --git "a/objmon/talk/\261\342\273\347_\310\257\300\307_\271\314\300\314\266\363-10" "b/objmon/talk/\261\342\273\347_\310\257\300\307_\271\314\300\314\266\363-10" deleted file mode 100644 index 5c2a781..0000000 --- "a/objmon/talk/\261\342\273\347_\310\257\300\307_\271\314\300\314\266\363-10" +++ /dev/null @@ -1,4 +0,0 @@ - - ̾, ڳ '' ϴ°? - GIVE 867 - ڳ׸ ϰ ۿ ִ 踦 ְڳ. diff --git "a/objmon/talk/\263\252\271\253\262\333-1" "b/objmon/talk/\263\252\271\253\262\333-1" deleted file mode 100644 index 19eb6e7..0000000 --- "a/objmon/talk/\263\252\271\253\262\333-1" +++ /dev/null @@ -1,9 +0,0 @@ - - 'ǥ' . -Ⱥ - Ⱥΰ Ǵµ '' . -ǥ GIVE 312 -̰ ࿡ ֽÿ. - - 鿡 'Ⱥ' ǿ. - diff --git "a/objmon/talk/\264\304\300\272_\272\270\303\312-36" "b/objmon/talk/\264\304\300\272_\272\270\303\312-36" deleted file mode 100644 index ada229f..0000000 --- "a/objmon/talk/\264\304\300\272_\272\270\303\312-36" +++ /dev/null @@ -1,8 +0,0 @@ -ȳ -.. ÿ.. ̰ .. ̺ ڳ׵ ̰ ϴ°? [] - -Ƽ.. ̰  ˾..? ư. ϼ ֳ. [׷] -׷ -.... ׷Ե  ͳ? ׷ û Կ þ ׷ 鿩 ְڳ. Կ '̰' . -㰡 GIVE 808 - Ա.... ! ̰ 踦 ְڳ. 踦 . ϰ . ȿ ° ٸ ִٳ. diff --git "a/objmon/talk/\264\304\300\272_\276\310\263\273\277\370-1" "b/objmon/talk/\264\304\300\272_\276\310\263\273\277\370-1" deleted file mode 100644 index 0d64d49..0000000 --- "a/objmon/talk/\264\304\300\272_\276\310\263\273\277\370-1" +++ /dev/null @@ -1,12 +0,0 @@ -ȥ -ȥ ߰谡 ܳ 쿬 ܳ [׸]͵ . -׸ -ٽ ؼ ̰ ִ ߰迡 ִٴ ̳. []鵵 . - -, ̰ ߰ϰ Ʋٿ. [Ʒ] ѷ ˲. -Ʒ -Ʒ ѹ ѷ ۰ . [] Գ. - - ߰ . [輮ġ] ְ. -輮ġ - 輮ġ ι̳. ֱ⵵ ؾ Ҳ. diff --git "a/objmon/talk/\264\353\300\345\300\345\300\314-48" "b/objmon/talk/\264\353\300\345\300\345\300\314-48" deleted file mode 100644 index de0c530..0000000 --- "a/objmon/talk/\264\353\300\345\300\345\300\314-48" +++ /dev/null @@ -1,12 +0,0 @@ -ȳ -ʽÿ. մ.. Ϸ ̽ϱ? [] 鷯 ̳? - -~~ ˼մϴ. մ! ̰ öθ ⸦ µ, ö ϴ. Ⱑ ϳ ֱѵ, ٸ Ź س 帱 µ. [?][ö?] -? -.. ׺ ȭ̶ ε, ׷, ȭ Ƿڸ ʾ ⸦ ϰ ־. [?] -? -׺ ö ָ ⸦ ְ ⸦ Ȱ . ׺ ö 絵 ׸ξ ϴµ ϸ ...? ٸ ̶ ö ָ ⸦ ٳ.. ! ׷.. մԲ ö ֽ ʰڽϱ? ö ֽø ⸦ 帮ڽϴ. ׷ 켱 ̰ ȿ  ٵ Ȯ ö ִ 𸨴ϴ. ȭԸ ˰ ִµ ȭ ŵ {ö} ؼ ʽÿ. [?] -ö -ö Դϱ? ö ̰ ȿ Ư ö. ȿ ö Ϲ ö ȿ θ װ ѱ⸦ ޾ ö ٲ . ȭ ö ׾ȿ ܶ ʿҶ ణ Խ. -? -Ȱ õ̶ ϴ ε.. ʿ ϴ ø ǰϽǰ̴ϴ. ׷, âȿ ִ ڿ ʽÿ. ״ ٸ ε ״ Ǹ . װ ɼ ִ ִϴ. .. .. ⿡ ̴µ ö ׿ , ּ. diff --git "a/objmon/talk/\265\277\305\271-72" "b/objmon/talk/\265\277\305\271-72" deleted file mode 100644 index 8cab071..0000000 --- "a/objmon/talk/\265\277\305\271-72" +++ /dev/null @@ -1,6 +0,0 @@ - - ִ ̱. '' ? - -׷ ӹ ϳ ñ. 屺 '' ֶ. - - ָ ƺ ̾. Ÿ ū ְڴ. diff --git "a/objmon/talk/\266\245\300\307_\260\370\301\326-1" "b/objmon/talk/\266\245\300\307_\260\370\301\326-1" deleted file mode 100644 index eb70186..0000000 --- "a/objmon/talk/\266\245\300\307_\260\370\301\326-1" +++ /dev/null @@ -1,2 +0,0 @@ - GIVE 107 - ִ ƹ ּ. diff --git "a/objmon/talk/\266\260\265\271\300\314_\260\313\260\264-60" "b/objmon/talk/\266\260\265\271\300\314_\260\313\260\264-60" deleted file mode 100644 index b36549b..0000000 --- "a/objmon/talk/\266\260\265\271\300\314_\260\313\260\264-60" +++ /dev/null @@ -1,32 +0,0 @@ -ȳ -̺! ڳ.. ڳװ ־. [̾][ٺ] -̾ CAST dz -̾ϸ ؾ? ̰ų ѹ ԰. -ٺ -? ߸ װ س ϴٴ.. װ; ȯ ߱.. [ο][׸] -ο ATTACK -̳༮! ڴ ȣ ǵ帮ٴ.. ׾~~~ -׸ -~~ װ ? . Ⱑ ̹ ..  տ ! [][̳] - - װڳ..  ..? ȴٳ .. ̿ ߰.. 縷.. ̰ [̰] -̳ CAST -ƴ.. ̳༮ ִϱ.. ٽô տ İŸ ϵ ָ. -̰ - °ž? װ ϰڴٴ°ž? [׷][ƴ] -׷ -~~~ ¥ װ ̱.. Ƽ. ʰ װ ߵ鿩 ڸ ˼ Ŵ. [˷޶] -˷޶ -! װڱ.. ! ׷ װ ʹٸ . װ ̰ ̷ µ, ̷ 1 ۿ ϰ, 2 ɸ . !! [1][2] -1 -1 .. װ ̷θ ƴٴϸ 2 ãƳ ϴµ, Ű ִ ༮ ϰ پ ָ Ծ. ༮ ġ . ! .. -2 -.. ϸ ̰ ٴϱ..~~~~ 2 ̶ ִ ã 信 شϴ ؾϴµ Į̰ ˾ƾ.. Ʋ ߴٰ ϰ Ծ. ! .. [ϴٴ] -ϴٴ - ߸ Ǯ ׿ װ ٸ ־. [] - -׷ ñϸ ޾ ݾ.. [־] -־ ACTION -ģ.. ãưٴ.. ׷ ߰.. ָ.. ! ׸ ȭ̶ ڿ µ  ƴ 𸣰ڱ.. ü ŵ Ⱥγ ض.. ~~~ -[ƴ] -׷ Ƽ. ˾ƺ ϳ . diff --git "a/objmon/talk/\267\271\272\245-1" "b/objmon/talk/\267\271\272\245-1" deleted file mode 100644 index 6d04d32..0000000 --- "a/objmon/talk/\267\271\272\245-1" +++ /dev/null @@ -1,6 +0,0 @@ - -Ҿ 迡 ִ '̷' 'ƺ' ּ. -̷ GIVE 581 -̷ Ǵ ƺ񿡰 ⸦ ּ. -ƺ GIVE 581 -̷ Ǵ ƺ񿡰 ⸦ ּ. diff --git "a/objmon/talk/\267\271\300\316\300\307_\271\314\300\314\266\363-127" "b/objmon/talk/\267\271\300\316\300\307_\271\314\300\314\266\363-127" deleted file mode 100644 index da63088..0000000 --- "a/objmon/talk/\267\271\300\316\300\307_\271\314\300\314\266\363-127" +++ /dev/null @@ -1,10 +0,0 @@ - - Ѷ 巹Ͼ ձ 翴 ''Ͻ.. - - Ѷ ̶. '' ٳ. - - ⸦ غϱ ؼ '' ʿ... - -ڳװ ⸦ 'غ'ټ ڳ? -غ GIVE 865 -׷ٸ ¥ ȯ ˰   diff --git "a/objmon/talk/\270\266\265\265\275\302-80" "b/objmon/talk/\270\266\265\265\275\302-80" deleted file mode 100644 index f18f8bb..0000000 --- "a/objmon/talk/\270\266\265\265\275\302-80" +++ /dev/null @@ -1,6 +0,0 @@ -ȳ -ŬŬŬ... װ ̹ ϰ ־. [] - - ø ƴ? ſԼ ð̶ ø . ~~~ ɰ . [] - ATTACK - ʿ. ϴ ̽ÿ. ּҼ... diff --git "a/objmon/talk/\270\266\300\273_\300\345\267\316-10" "b/objmon/talk/\270\266\300\273_\300\345\267\316-10" deleted file mode 100644 index 807699d..0000000 --- "a/objmon/talk/\270\266\300\273_\300\345\267\316-10" +++ /dev/null @@ -1,14 +0,0 @@ - - ߿Գ. 츮 ϼʿ ִ ϻ '' '' 츮 ϰ ֳ. - -̶ õ ̻ Ǵµ ̷ ̶ Ѵٳ - -ϴ '' ٰ ϳ. ׿ '̻' - - ϻ '' ؾ ϳ - - ϻ ο '' ִٰ ϳ - - Ʈ鼭 콽 ϳ. ϰ -̻ -̻ ϸ ִ ǥ ְڳ. diff --git "a/objmon/talk/\270\266\301\267_\264\353\300\345\300\345\300\314-48" "b/objmon/talk/\270\266\301\267_\264\353\300\345\300\345\300\314-48" deleted file mode 100644 index ec7455c..0000000 --- "a/objmon/talk/\270\266\301\267_\264\353\300\345\300\345\300\314-48" +++ /dev/null @@ -1,15 +0,0 @@ -ȳ -~~ ڳ׵ ʿ Գ...?[׷] -׷ -ڳ״ ϴ°? ƴϸ ϴ°? [] [] - -ư...! ʰ 𿡰 ̰ ..  տ .. - -׷...? ~~~ . . ۿ ִ ̾߱⸦ ð? [] [ƴϿ] - -. .. ö ָ ̶ ... .. [] - - Ǹ .. ̾Ƶ ڳ ɼ.. ¶. ѹ ɼ.. . . ~~~~ -ƴϿ -ũũũ... . ɼ ڸ . ũ~~ ڳװ ö ָ ̶ ְڳ. [] - diff --git "a/objmon/talk/\270\266\310\253-10" "b/objmon/talk/\270\266\310\253-10" deleted file mode 100644 index 4545630..0000000 --- "a/objmon/talk/\270\266\310\253-10" +++ /dev/null @@ -1,16 +0,0 @@ -ȳ -.. ̷ û ߿ Ѿٴ.. ^ӹ ñ ΰ? -ӹ -? ڳװ ڳװ..? ڳ׿Դ ^ .. - -~~~ ڳװ ^ ð ʹ ..? - -..! ׷ ^ſ .. -ſ - ſ ΰ? ſ ^¹ ְ ٳ. -¹ -״ ִ 𸥴ٳ.. ٸ ^ȣ̶ ܵΰ ׳ ȳ. -ȣ -۽.. ^䰡 ٳ ɷڵ 󰡿 װ Ҵٴ±. -䰡 -װ ϼʿ ִµ, װ ϰ ־ ϴٳ... diff --git "a/objmon/talk/\271\246\272\300-71" "b/objmon/talk/\271\246\272\300-71" deleted file mode 100644 index 12b920a..0000000 --- "a/objmon/talk/\271\246\272\300-71" +++ /dev/null @@ -1,38 +0,0 @@ -ȳ -..? ̰ ִ°  ˾..? .. Ȥ ΰ...? [][ƴϿ] - CAST õdz -.. Ա.. ׾.. -ƴϿ -~~~ ׷ٸ Ƚ̱.. ̺. ⿡ Ϸ . ִ ̿. ָ𿡰 ڱ... .. [˾Ҿ][] -˾Ҿ - .. ׸ 鼭 ָ𿡰 Ź  ƴ ˷޶ ϼ. - -̷ ϱ... ... ׷ .. [¿׳] -¿׳ CAST ȭdz -.. ſ ߰ڱ.. - -װ ? ʿ . ׳ ָ ȿ? ׳డ ϴ? [⿡] -⿡ -׳࿡ ..? ¼.. µ.. [] - - ڲ ..? Ͽ ΰ ? [׷] -׷ -ƿ.. ׷ ִٸ ⿡ ͱݼ ǿ ּ. [񰡴] -񰡴 ACTION Ȳ -? Ͽ ̶鼭! ̰ ̳ ڰ ״ϱ Źؿ. ! Ͱ ϱ '' ϸ . - ACTION -~~~~ Ծ? ׷ װ  ? Ȥ ڶ ҵ? [׷] -׷ -.. Ÿ ߴ... .. [ڿ] -ڿ ACTION β -״ ̿... ūε.. ˷ ó ٵ... [ŵ] -ŵ -׷.. ̿.. ̺. Ź ִµ ټ ־? [] - - ȿ ִ ڰ ˾ƺ ּ. װ ̶ ׿ ָ ִٰ ְ ְڴٰ ּ. Ź ֽðھ? [][Ͽ] - ACTION -ƿ.. ״ ǽ ȣ ſ ׷ ''̶ ϼ. ׷ װ ȽҰſ. Ź ֽðھ? -Ͽ ATTACK -ϰڴٱ? ʴ ʹ ˾ ׾߰ھ. - - diff --git "a/objmon/talk/\271\253\265\265\275\302-60" "b/objmon/talk/\271\253\265\265\275\302-60" deleted file mode 100644 index 2d73815..0000000 --- "a/objmon/talk/\271\253\265\265\275\302-60" +++ /dev/null @@ -1,5 +0,0 @@ -ȳ ACTION -~~~~ ~~~ ִ 淡 ϴ°ſ? [] - ACTION -.. ̶.. ~~ ٸ Ͻð ϰ ϻ̿. ٸͿ Ű澲ʰ ϰ ͼ. ̾Ͽ.. Ͱŵ ٴϴ µ鿡 ÿ. - diff --git "a/objmon/talk/\271\253\265\265\275\302-64" "b/objmon/talk/\271\253\265\265\275\302-64" deleted file mode 100644 index 3fa5c46..0000000 --- "a/objmon/talk/\271\253\265\265\275\302-64" +++ /dev/null @@ -1,6 +0,0 @@ -ȳ -..... ÿ. ߿ ϰ ּ. [] - ACTION Ȳ - ִ ̿.. ׷ ݸ ٸÿ. [] - ATTACK -~~~ ڴ... ϴٴ.. diff --git "a/objmon/talk/\271\256\301\326-99" "b/objmon/talk/\271\256\301\326-99" deleted file mode 100644 index 7f5a5c7..0000000 --- "a/objmon/talk/\271\256\301\326-99" +++ /dev/null @@ -1,48 +0,0 @@ -ȼ CAST ȼ - - CAST - -ȣ CAST ȣ - - CAST - -濭 CAST 濭 - -ȣ CAST ȣ - - CAST - -ؼ CAST ؼ - -ǰ CAST ǰ - -ֹ CAST ֹ - -а CAST а - -ξ CAST ξ - - CAST - - CAST - - CAST - - CAST - -Ǹ CAST Ǹ - - CAST - -ȥ CAST ȥ - -߱ CAST ߱ - -й CAST й - - CAST - -ġ CAST ȸ - °? -ȸ GIVE 36 -̰ ϰԳ diff --git "a/objmon/talk/\271\260\300\307_\260\370\301\326-1" "b/objmon/talk/\271\260\300\307_\260\370\301\326-1" deleted file mode 100644 index fe89812..0000000 --- "a/objmon/talk/\271\260\300\307_\260\370\301\326-1" +++ /dev/null @@ -1,2 +0,0 @@ - GIVE 105 - ִ ƹ ּ. diff --git "a/objmon/talk/\271\331\266\367\300\307_\260\370\301\326-1" "b/objmon/talk/\271\331\266\367\300\307_\260\370\301\326-1" deleted file mode 100644 index aaf36eb..0000000 --- "a/objmon/talk/\271\331\266\367\300\307_\260\370\301\326-1" +++ /dev/null @@ -1,2 +0,0 @@ - GIVE 106 - ִ ƹ ּ. diff --git "a/objmon/talk/\271\335\307\317\265\265\300\316-90" "b/objmon/talk/\271\335\307\317\265\265\300\316-90" deleted file mode 100644 index f1666e1..0000000 --- "a/objmon/talk/\271\335\307\317\265\265\300\316-90" +++ /dev/null @@ -1,14 +0,0 @@ -ȳ -.. ִ ÿ... ̰  öԼ? ̰ 簡 ij ƹ ü ٵ... .. ƴѰ .. ~~ µ Ȱ .. [] - ACTION ̼ -... .. ʹ β ̶ ֿ ϰ ʱ. .. ... ̰ ... ð ϰ ־̴. ִµ ȼմ Ÿ Ȱ ι ̰ Ÿٰ ߴµ ְ ٷ ι ̴. [] - ACTION -׷.. ְ ٷ ι̿... .. .. ð ʾҼ.. ɾ ֹ ݱ ̻.. .. [ֹ] -ֹ -ȥ ̶ ֹ̿. ȿ ִ Ҹ . .. δ. δ. . .. .. ٷ . Ȱ Ⱥ ѱ ϴ ߿ ׿Լ ̼ϰ ϰ .[DZ] -DZ -׷̴. ٷ ׳ῡ ҷ Ͽ ư踦 Ͽ. ״ ݹϿ, ̰ е ֹ ɾ ȼ. .. ״ 󿡵 ʴ ̶° ּ.[] - -װ . װ ִ  ̷ ־ ̶ϴ. ָ װ ߴ ¿ . .. װ ִ ְڼ. Ͻÿ. װ µ ִ ̿. [] - ACTION ̼ -~~~ ÿ. ö ּ. .. ְڼ̴. "Ըġκ.....~~~~" <<< Ȱ ϴ.>>> ~~~ ſ ־̴. .. ð ϴ. ֹ ܿÿ. ֹ [ݾ߹ٶ]̿. ֿ ȣ ֱ⸦ ٶϴ. ׸, װ ߿ µ ãƿ, ƿŵ ٽ ̾߱⸦ Žÿ.. ׷ 帮ڼ. diff --git "a/objmon/talk/\271\335\307\317\265\265\300\316-91" "b/objmon/talk/\271\335\307\317\265\265\300\316-91" deleted file mode 100644 index fa3f2fa..0000000 --- "a/objmon/talk/\271\335\307\317\265\265\300\316-91" +++ /dev/null @@ -1,9 +0,0 @@ -ȳ -~~~ .. ̱..  Ǿ. [׾ϴ] -׾ϴ -.. δ. δ. ᱹ ׷ ǰ ұ. ׷ ֲ Ź ̽ϱ? [][ƴϿ] - -~~ ̼̱.. ׷ ðڽϱ? ׷ ϳ ص帮ڼ̴. -ƴϿ -.. ׷ .. ߿ ̶ ã ; մϴ. ٽ ãƿ ðڽϱ? ׷ 帮ڽϴ. - diff --git "a/objmon/talk/\271\351\307\320\265\265\300\316-1" "b/objmon/talk/\271\351\307\320\265\265\300\316-1" deleted file mode 100644 index 8e66e5c..0000000 --- "a/objmon/talk/\271\351\307\320\265\265\300\316-1" +++ /dev/null @@ -1,12 +0,0 @@ -輮ġ - 輮ġ 'ģ'̳ -ģ -װ '' ˰ڱ - - 'η縶' ״ ϰ ڳ '' ɰ̳ -η縶 GIVE 337 - ϰԳ... - -ڳ 迡 й ʿҰ̳... 'Ҿƹ' ±... -Ҿƹ - ĥ ٳ鼭 Գ. 'й' ޶ ϰԳ. diff --git "a/objmon/talk/\272\322\300\307_\260\370\301\326-1" "b/objmon/talk/\272\322\300\307_\260\370\301\326-1" deleted file mode 100644 index b2fb287..0000000 --- "a/objmon/talk/\272\322\300\307_\260\370\301\326-1" +++ /dev/null @@ -1,2 +0,0 @@ - GIVE 104 - ִ ƹ ּ. diff --git "a/objmon/talk/\273\347\261\342\262\333-50" "b/objmon/talk/\273\347\261\342\262\333-50" deleted file mode 100644 index 35c6e2d..0000000 --- "a/objmon/talk/\273\347\261\342\262\333-50" +++ /dev/null @@ -1,14 +0,0 @@ - - '' ֳ. - - Ķ ãƿ. '亯' ְԳ. -亯 -ü Ķ 踦 ִ ڰ ? -ݱ -... ˾ҳ... '' οڳ? '' οڳ? - - ''̶ ̾߱ ϰԳ. - -Ź ''̶ ̾߱ ϰԳ. - -߿ ϳۿ ӹ Ҽٳ. ű⿡ Ʋ... diff --git "a/objmon/talk/\274\272\271\256\301\366\261\342-48" "b/objmon/talk/\274\272\271\256\301\366\261\342-48" deleted file mode 100644 index 8b71bfb..0000000 --- "a/objmon/talk/\274\272\271\256\301\366\261\342-48" +++ /dev/null @@ -1,14 +0,0 @@ -ȳ -ȳϼ. ϳ? [][ƴϿ] - - ˰ ִ ̰Űɶ.. ߿ .. [Ȱ][][ǻ][ٱ] -ƴϿ -׷? ׷ ȳ ... -Ȱ - Ȱô ڱ Ȱ 귯 ݱ ʰ . ׷ ü θ  ʴ´ϴ. ׸ Ȱü Ȱ ø ִ ž մϴ. - - ȣ̾ ȭ Ѵϴ. ׷ ȭ ɸ κ ̴ٰϴ. -ǻ -̰ .. ׷ ڱ ξٰ Ѵϴ. ׷ Ժη ¢ . ! ׸, ̰ Ȱ ܶ ־ ˰ Ͼ ϼ. -ٱ - ٱ 串 µ ׳ʸӷ ߰ ū ð ־. diff --git "a/objmon/talk/\274\322\263\340-1" "b/objmon/talk/\274\322\263\340-1" deleted file mode 100644 index 086c7fd..0000000 --- "a/objmon/talk/\274\322\263\340-1" +++ /dev/null @@ -1,8 +0,0 @@ - - ? 'Ҿƹ' ΰ? -Ҿƹ - 'ã' ʵ . -ã - ãָ ưٴ '' 帱. - -Ҿƹ 帮 Ƚ Ͻǰſ. diff --git "a/objmon/talk/\274\372\301\375_\301\326\300\316-40" "b/objmon/talk/\274\372\301\375_\301\326\300\316-40" deleted file mode 100644 index 46a5045..0000000 --- "a/objmon/talk/\274\372\301\375_\301\326\300\316-40" +++ /dev/null @@ -1,6 +0,0 @@ -ȳ -~~ մԵ ..?[][ƴϿ] - -׷ ˾.... ׳ Ȱÿ ̶ϴ.  2 ö . װ ̴ϴ. -ƴϿ -~~ ׷ 緯 ? ׷ ̶ ּ. diff --git "a/objmon/talk/\275\272\307\316\305\251\275\272-99" "b/objmon/talk/\275\272\307\316\305\251\275\272-99" deleted file mode 100644 index e9448aa..0000000 --- "a/objmon/talk/\275\272\307\316\305\251\275\272-99" +++ /dev/null @@ -1,6 +0,0 @@ - -ħ ׹߷, ɶ ι߷, ῡ ߷ ȴ ̳? -ΰ ATTACK - ߴٴ 뼭Ҽ . - ATTACK - ߴٴ 뼭Ҽ . diff --git "a/objmon/talk/\275\305\261\342\267\347_\277\344\301\244-80" "b/objmon/talk/\275\305\261\342\267\347_\277\344\301\244-80" deleted file mode 100644 index 24b695d..0000000 --- "a/objmon/talk/\275\305\261\342\267\347_\277\344\301\244-80" +++ /dev/null @@ -1,12 +0,0 @@ -õ -õ ϴ '' ƹ ʾƿ. - - '' ִ . - ACTION ǻ PLAYER - ģ ̱. 'Ź' ϳ ּ. -Ź - '̻' ش ּ. װ ߿ ֹ߿ ϳ. -̻ - ֽø ϴ '' 帮. - ACTION PLAYER -̻ ϳ ϳ. diff --git "a/objmon/talk/\276\306\260\241\276\276-1" "b/objmon/talk/\276\306\260\241\276\276-1" deleted file mode 100644 index b066d0c..0000000 --- "a/objmon/talk/\276\306\260\241\276\276-1" +++ /dev/null @@ -1,10 +0,0 @@ - ACTION ǻ PLAYER - ؿ. ^^ -ٺ ACTION PLAYER - ٺݾƿ. - -״ ϴ . ^^ -ũŰ -״ ϴ . ^^ -輱 -׳ ϴ ϰ Ϳ ư. ^^ diff --git "a/objmon/talk/\276\306\271\314\305\270\272\322-25" "b/objmon/talk/\276\306\271\314\305\270\272\322-25" deleted file mode 100644 index 17493ab..0000000 --- "a/objmon/talk/\276\306\271\314\305\270\272\322-25" +++ /dev/null @@ -1,9 +0,0 @@ -ġ CAST ȸ - °? -ġ CAST ص - صǾ? -ġ CAST ġ - ġǾ? -Ǹġ CAST ȼ - ̴°? - diff --git "a/objmon/talk/\276\306\306\304\306\256_\274\366\300\247_\276\306\300\372\276\276-127" "b/objmon/talk/\276\306\306\304\306\256_\274\366\300\247_\276\306\300\372\276\276-127" deleted file mode 100644 index de6917d..0000000 --- "a/objmon/talk/\276\306\306\304\306\256_\274\366\300\247_\276\306\300\372\276\276-127" +++ /dev/null @@ -1,18 +0,0 @@ - - ӹ 'Ʈ' °̶. -Ʈ - Ʈ , '' ΰ , , '' ٳ... - -Ʈ '' Ѵٳ, ÷ ٲ.. Ͼ̶.. - - '׽佺', '', 'ǻ'Ե.. ٻڽ е̾.. - - Ͻ, ̶... ׻ ǿ .. -ǻ - ׻ ... ϰ ڳ׵ κ Ͻ.. - -ɴ Ʈ ̻ Ҹ 鸮.. - - - - diff --git "a/objmon/talk/\277\353\300\307\300\332-70" "b/objmon/talk/\277\353\300\307\300\332-70" deleted file mode 100644 index 975fdeb..0000000 --- "a/objmon/talk/\277\353\300\307\300\332-70" +++ /dev/null @@ -1,22 +0,0 @@ -ȳ ACTION -ȳ ȳ̾..? ƹ͵ 𸥴ٴϱ. ̰ °ž? ? ʴ ƴѰ ... Ȥ.. [] Գ? - -~~ ׷ ˾Ҿ ̷ Ѹ .. ~~ (ڱ ġ) ƴ.. ؾߵ.. . ȣ .. ȣ...[𸥴]{ȣ ˸ ȣ ÿ} -𸥴 - ʴ ȣ 𸣱.. ׷ ʴ ̿.. Լ ο ̰ܾ ҰŴ. Ѳ ϳ̾ ... ! .[][׸] - ATTACK -..? ׷ ! ʿ ̰ų ѹ Կ ָ. -׸ -̱. ~~ ׷ ̻ İŸ .. - -.. ȣ ´µ ³? [ָ] ? -ָ -!! ׷ ̰ Ϸ ? [Ϸ] Գ ƴϸ ָ [] Ѱ ˾ƺ Գ? - - ڳ״ װ  ϴ? ϱ װ Ե з ϱ.. 幰ƺ񿡰 ޾ƾ ϴµ ̰ .. ʿԶ ϴ ۿ .. 幰 Ȱ [] Ѱٰ ϶ ! ׿Լ ɻġ .. ׷ ٲ? Ϸ ۿ ȵǾµ ܿ װھ.. ǵ̸ ̰ . ˾? -Ϸ -Ǫ~~~ غ װ?... ~~ ׸.. 谡 Ѱ ϸ ݹ̶ ò. ׷ ׸ δ° .. ϰ []̳ ! - - ̳ı? (Ҹ ̸) ָ Ȱ [] ־ٰ . ޾ ׿ ޾Ƴ ϰ.. ϶ ׿Լ ɻġ ٱ.. ˾? - ACTION ƴ - . װ .. װ ̻ ־ ߾. Ż Ӹڵڿ ֶ Ҹ ġ װ Ÿ ڴٰ ϴ.. Ҹ .. diff --git "a/objmon/talk/\301\241\274\322\300\314-38" "b/objmon/talk/\301\241\274\322\300\314-38" deleted file mode 100644 index 9034037..0000000 --- "a/objmon/talk/\301\241\274\322\300\314-38" +++ /dev/null @@ -1,4 +0,0 @@ -ȳ -̱.. մ ݹ ġ 帱״ ̸ . [̾߱] -̾߱ - ̾߱? ƹ͵ ƴ° µ.. ø 2 ִ ư ʽÿ. ׸ ִ ģ ׷µ ĥ ŷ 簡 Ÿ װ ġ ɾ ִٴµ ׿Ե °͵ . ׷µ ȵ ٴϴ  𸣴 ٰ ϴ. diff --git "a/objmon/talk/\301\246\260\245\260\370\270\355-72" "b/objmon/talk/\301\246\260\245\260\370\270\355-72" deleted file mode 100644 index eef5c20..0000000 --- "a/objmon/talk/\301\246\260\245\260\370\270\355-72" +++ /dev/null @@ -1,6 +0,0 @@ - -... ڳ 츮 '' . - - ְ '' δٸ Զ Ұɽ. - - ̰ Ź ׷ . diff --git "a/objmon/talk/\301\326\270\360-40" "b/objmon/talk/\301\326\270\360-40" deleted file mode 100644 index 8627768..0000000 --- "a/objmon/talk/\301\326\270\360-40" +++ /dev/null @@ -1,38 +0,0 @@ -ȳ -ȣȣ~~ մ ... ǰ.. ƴϸ Ļ縦 ..[] [] - -¼... մԵ ٿ.. [չ̶] -չ̶ -װ͵ ȵȴٿ.. ʿ.. մԵ áٱ.. ѹ ֱѵ.. [װɷ] -װɷ - ѵ.. ֳϸ  Լ ϰ ִµ, ׷ ϰڼ.. ȣȣȣ~~~ ϰ Լ ÿ. ׷ ű⿡ 帮ڼ.. [׳] -׳ - Լ 濡 ־.. ׸ .. ! ׷, ׹濡  ؿ.. ƴ϶.. ε ؿ. ȣȣȣȣ~~~~ - -̾ؼ ¼.. մ ٿ... ߾Ӵο ִ ÿ.. -Ź - Լ ߼..?[][ƴϿ] - -׷? ׷ Լ Ͻÿ. 鸮 ҹ ϸ Ͽ ˰ ִϴ ׳࿡ Ͻ.. [][] - - ׳డ ݵ? ̻ ͱݼ ǿ ˷ ޶ ϴ.. ڼѰ ׳࿡ '' .. - -׳ .. Ȱ ׳డ ִٰ յ. - - - - - - - - - - - - - - - - - - diff --git "a/objmon/talk/\301\326\301\244\262\333-36" "b/objmon/talk/\301\326\301\244\262\333-36" deleted file mode 100644 index 66847cb..0000000 --- "a/objmon/talk/\301\326\301\244\262\333-36" +++ /dev/null @@ -1,5 +0,0 @@ -ȳ -? .. ~~ ! Ѵ. ʹ ̳? .. ̺! ڳ ô Ƴ? .. [] ôٱ... - -? .. ģ ̳? ~~ .. ̷ ̰ ! ⿡ .. - diff --git "a/objmon/talk/\303\265\267\346-1" "b/objmon/talk/\303\265\267\346-1" deleted file mode 100644 index 39e1c25..0000000 --- "a/objmon/talk/\303\265\267\346-1" +++ /dev/null @@ -1,12 +0,0 @@ -ŸŸ -ڴ ڿ. ϳ Ӹ ޸ ''̶. - -ŸŸ Ӹ ϳ ٸ Ӹ Ѱ ܳ 츮μ ϼ ٿ. ̷ '' ־ٸ ̱ ٵ. - - ? ׷ '' ʰڼ? - -ŸŸ 濡 ̿. '' شٸ '' 帮ڼ. - - ̴ ֽÿ. - - ̿. ε ŸŸ ļ ȭ ãֽÿ. diff --git "a/objmon/talk/\303\265\267\346-99" "b/objmon/talk/\303\265\267\346-99" deleted file mode 100644 index b73874d..0000000 --- "a/objmon/talk/\303\265\267\346-99" +++ /dev/null @@ -1,16 +0,0 @@ - -߰迡 鸸 ִ '' ־ 'ȭ'Ӱ ־. - -װ 縷 ʿ ġϰ ּ. -ȭ - ȭӰ Ҵµ, հ 'ŸŸ' ڰ װ ȭ ȼ. -ŸŸ - 'ɷ' . ϴ ڱ ϰ ϵ  . -ɷ -ŸŸ ؼ ٴ  ִ '' ˰ ּ. - -״ ϰ Բ ŸŸ ϰ '' Ͽ. - -ڳװ ׿ Ǿ ʰڼ? ׷ٸ  '' ÿ. - GIVE 511 - ؾ. ׸ ̰ ʿ ̿. diff --git "a/objmon/talk/\303\312\307\342-50" "b/objmon/talk/\303\312\307\342-50" deleted file mode 100644 index ba08acc..0000000 --- "a/objmon/talk/\303\312\307\342-50" +++ /dev/null @@ -1,18 +0,0 @@ -ȳ ACTION -...? ..? [] ÷ Գ? ƴϸ [] Գ? - -׷ ̳ ſ. ڲ .. - -׷ ŵ ̹ ͱݼ ǿ ԰ڱ. ... ÿ ϰ ǿ ؼ . , ǰ ٸ ־. ͱݼ û з ϰ ߴ ˾ƿ? ϸ ڼ ˷ 帮. ( ̸ Ͻÿ.) - -¾ƿ.. ٷ ֿ. ִ Ȱ ü ִ [û] ̸鼭 [̰] ȿ ؿ ִϴ. ݱ ָ [ȭ]̶ 簡 ϳ⿡ ѹ ؿԾ. ! ׸, ̿ ߰ ÿ ٸ鼭? ÿ ձ ִ° ƿ. ~~~ ׸ ̰ ε û ̹ [] Ѹ Ҵ ϴ. -ȭ ACTION β - Ȱ ְ ϴ. Ư õ ų . ׷ ƽԵ ĥ ָ ϱ ̰ ԰ߴµ ݱ ƹ ҽ ...  Ȱ 𸣰ھ. ̷ ɸ µ, ƹ иؿ. ׷ .. Ź Ѱ ص ɱ? ȭ ϰ ִϴ. ׷ Ƿ ȴٸ ׺ ҽ ˷ ּ. Ź ... Ź ֽø ߿ ׿ ſ. - -.. ڴ û ִµ, Ⱑ ſ. Ű ִ [] ϴ ڿ ָ ڿ . -̰ - . װ .. ٸ ȭ Ը ¦ ƾ߱ ־µ ӿ û ִٰ ϴ. ȿ ° 縮 ־ ȭ ϰ ƿڴ ƹ . ׷ ˾? ״ ʴٸ ׸ . - ACTION -۽... ϴ .. װ . -û -û Ȱ ¾ ̿. ࿡ ž ִ û Ϸ ô ϰ ſ. diff --git "a/objmon/talk/\305\270\300\314-5" "b/objmon/talk/\305\270\300\314-5" deleted file mode 100644 index 81380d3..0000000 --- "a/objmon/talk/\305\270\300\314-5" +++ /dev/null @@ -1,44 +0,0 @@ -ȼ CAST ȼ - - CAST - -ȣ CAST ȣ - - CAST - -濭 CAST 濭 - -ȣ CAST ȣ - - CAST - -ؼ CAST ؼ - -ǰ CAST ǰ - -ֹ CAST ֹ - -а CAST а - -ξ CAST ξ - - CAST - - CAST - - CAST - - CAST - -Ǹ CAST Ǹ - - CAST - -ȥ CAST ȥ - -߱ CAST ߱ - -й CAST й - - CAST - diff --git "a/objmon/talk/\306\304\274\366\272\264-68" "b/objmon/talk/\306\304\274\366\272\264-68" deleted file mode 100644 index c44cc63..0000000 --- "a/objmon/talk/\306\304\274\366\272\264-68" +++ /dev/null @@ -1,10 +0,0 @@ -ȳ -̰ [] ̿. ưÿ. - -~~  ñε ڲ ̰ ͼ İŸ°ž? ž ȿ ִ ˾? ° ̰  ϰ ִ .. .. 𸣰 ̾߱⸦.. Ͽư ưÿ. [̾߱] ٸ Ʈ .. -̾߱ -? ̾߱⸦ Ʈڴٰ.. ̾? ̾߱Ⱑ Ȱô ȥ . ü տ Ÿ ? ȿ  ;? [][ƴϿ] - attack -! ̰  ߸ . ߸ٸ 鿩. -ƴϿ -׷ٸ ư. ȿ ѹڱ̶ ϸ ϰ ״ϱ ˾Ƽ ϶. diff --git "a/objmon/talk/\306\367\265\265\264\353\300\345-70" "b/objmon/talk/\306\367\265\265\264\353\300\345-70" deleted file mode 100644 index a837b97..0000000 --- "a/objmon/talk/\306\367\265\265\264\353\300\345-70" +++ /dev/null @@ -1,20 +0,0 @@ -ȳ - ? ̰ Ϸ Ծ? 緯 °ſ, ƴϸ ٸ ־ °ſ. [][ٸ] - -׷ ͱݼο Ͻÿ.. ۸̾.. ط ֱ Űÿ. -ٸ - 빫 ִ°ſ? Ǽ ٻڴ ̾.. [] - - ˰ ִ 𸣴ٴ. Ƹ Ÿ ̱. ̰ ϸ ٷ ĥ 2 ͱݼ ָ İ. [ָ] -ָ -׷.. .. ͱݼ ָ ãƳ ڴ ؼ ¥ ̿. 縦 Ȧ ϴ°͵ ƴѵ.. ̶ ܼ ־.. ȱ׷ ٸ ߿ Ƕ ġ µ... [] - -? ˰ .. ׷, ڲ ij°? ѵ.. Լ? [߰] -߰ -߰..? ƴ! װ Դ ̿?.. ׷ ¼ ذ 𸣰ڱ. ÿ.. ſ Ƿ ִµ ְڼ? [][] - -.. Ƿڸ ޾ شٴ 帮. ( Ҹ) Ȱð ⿡ ó ּ. ٸ ̸ ְ ϴ û 'ž' ϸ ׺ ֽǰ̿. ³ ϸ '' ´ٰ Ͻÿ. - -ȵȴٰ..? ׷ ټ .. ٽѹ ϰڴµ Ƿڸ ޾ֽðڼ? [][ȵ] -ȵ CAST ¾ -̷ Ź ϴµ ϴٴ.. ~~~ ȭ .... ѹ Ծ. diff --git "a/objmon/talk/\306\367\267\316-1" "b/objmon/talk/\306\367\267\316-1" deleted file mode 100644 index 09127d0..0000000 --- "a/objmon/talk/\306\367\267\316-1" +++ /dev/null @@ -1,8 +0,0 @@ - - 'Ķ' Ű µ, 븮 ƿԴϴ. -Ķ -Ķ ʸӿ ִ '' Բ ־. - -װ Ķ Ű ù ȣŵ Ķ Ű ְ, '' ϴ. - - ŷɽ ݱͰ , ׳ ٲ. diff --git "a/objmon/talk/\306\367\301\271-56" "b/objmon/talk/\306\367\301\271-56" deleted file mode 100644 index d9cbdff..0000000 --- "a/objmon/talk/\306\367\301\271-56" +++ /dev/null @@ -1,4 +0,0 @@ -ȳ - ? ó ε.. ̰ Ϸ Գ? ̰ [ū] ̾.. -ū -ڳװ ˾Ƽ ? ƴ.. ణ ܼ ã⸦ ⸦ ϴ°͵ . ! ڳ׿ . ΰϸ ÿ ̶ Ҽ ִ ְ ߳. ͱݼ ָ ãƴ޶ ߴ̳.. ¥ ġ ̾.. Ȥ ڳ ƴ° ? Ȥó ̻ ҹ̶ ŵ ߿ ְ.. diff --git "a/objmon/talk/\306\367\301\271-57" "b/objmon/talk/\306\367\301\271-57" deleted file mode 100644 index 1284ac1..0000000 --- "a/objmon/talk/\306\367\301\271-57" +++ /dev/null @@ -1,14 +0,0 @@ -ȳ -.. ٽ ִ Ȼ ƴϾ.. ? ̺! ? ּ? [][ƴϿ] - -.. Ҹ . ٸ ǵ з ÿ. -ƴϿ -û ٸ ̰ Ϸ Լ? [][ڸ] - -ƴ Ϸ ..? ٸ ٻڴ ÿ. ƴ.. ׷, Լ? ( ´ Ͻÿ.) -ڸ -ƴ .. װ ̰ ִ° ε  ˾Ҽ? ..  ڸ . ȸ ϰ ʹٸ ޾ƾ Ұſ. - -..? ... Ϸ ... ! ¶ ׺ ´ٴ ְڼ. '' Էϰ ÿ. -ȸ㰡 - ϼ̼...? .. ׷ 'ȳ' Էϰ ÿ. ׷ ȸ ϰ Է 'ȳ' ϸ ׸ ȳ ְڼ. diff --git "a/objmon/talk/\306\367\301\271-60" "b/objmon/talk/\306\367\301\271-60" deleted file mode 100644 index 5cd01a2..0000000 --- "a/objmon/talk/\306\367\301\271-60" +++ /dev/null @@ -1,20 +0,0 @@ -ȳ -̰ Ϸ ? ̰ ڸ δ ε [ȸ] Գ? -ȸ -... ̰ ˼ ϳۿ µ [׸] ° ƴ? -׸ -ȵŴµ... ׸ ܴ ϶ ߰ŵ? ~~ ڱ . ڳ Ȥ ֳ? [][ƴϿ] - -! ! ׷ ֳ? { ִ ̸ ÿ} -ɸ -װͻΰ? װŶ ְ 켱 ϱ... - -~~ ׷ ֱ.. ܸ ְڳ? ... - -ī~~~ Ⱑ.. ϴ ֱ ׷. ְ ׷ ִڸ . -ƴϿ -Ȱ ־? ڳ 𸣴±. Ź Ϸ Ǹ ǥ ˾ƾ. ٶ ʾ. ٸ ָ ҿ . ⼭ Ѽ ڰ ״ϱ ŵ Ϳ []̶ ְ ׷ ƹ ־ Ͼɼ. - - Գ? ? ʼտ ִ° ΰ? ׷ ? { ִ ̸ ÿ} -λ -... Ѽ 簡 Ա ׷... 踦 ȵ ׸̱.. diff --git "a/objmon/talk/\307\322\276\306\271\374-1" "b/objmon/talk/\307\322\276\306\271\374-1" deleted file mode 100644 index a311bda..0000000 --- "a/objmon/talk/\307\322\276\306\271\374-1" +++ /dev/null @@ -1,22 +0,0 @@ -ճ - ճడ '' ʵƿ ֳ. - -ճฦ ãָ ϳ ְڳ... -й -е ΰ? ׷ Ѵ 츮 Ҹ 'α' Ƹ. -α -״ ٳ...׸ ̰ '' Գ. - -׷ й İ ͽ '' ְڳ. - - 'ͽ' İ.׷ Ѱ ״ 㿡 ִٳ. θ ؼ.. -ͽ -'' . Ƹ й ? - - Ƿɵ ϰӸ '' ΰ ֳ. - - ߰ 캸 ٶ ̷ װ '' ֳ. - -װ Ƹ ̳ ׿ 'ֹ' ٴ° ϰԳ. -ֹ - ֹ ϴ°? ׷ ˼ָ ˼ Գ ο ٸ̳. diff --git "a/objmon/talk/\307\330\300\373_\274\261\300\345-99" "b/objmon/talk/\307\330\300\373_\274\261\300\345-99" deleted file mode 100644 index 8fa9bbc..0000000 --- "a/objmon/talk/\307\330\300\373_\274\261\300\345-99" +++ /dev/null @@ -1,7 +0,0 @@ - - ̼ 򰡿 ܳ. '' . - ACTION PLAYER -װ ο ҹ . ٵ '' ߳? - ATTACK -̷ ϳ!!! !!! - diff --git "a/objmon/talk/\307\340\300\316-44" "b/objmon/talk/\307\340\300\316-44" deleted file mode 100644 index 1e54f5a..0000000 --- "a/objmon/talk/\307\340\300\316-44" +++ /dev/null @@ -1,2 +0,0 @@ -ȳ - ˾ƿ..? Ȱͱݼ ٱ. û Ž縦 ̰ ִ. diff --git "a/objmon/talk/\307\340\300\316-48" "b/objmon/talk/\307\340\300\316-48" deleted file mode 100644 index 8eae46f..0000000 --- "a/objmon/talk/\307\340\300\316-48" +++ /dev/null @@ -1,4 +0,0 @@ -ȳ - ž ̻ [ҹ] 鸮.. Ȥ Ƽ? -ҹ - ž Ա Ű ƹ ϴ. ϰ 鸮 ҹ ϸ Ȱ ̶ ִ ž ؼ û Ӹ ΰ ִ ̿. ϰ ãư ر ϴ, ƹ ʾƿ. ڵ þ.. ū̿.. diff --git "a/objmon/talk/\307\366\260\250-81" "b/objmon/talk/\307\366\260\250-81" deleted file mode 100644 index 9888e54..0000000 --- "a/objmon/talk/\307\366\260\250-81" +++ /dev/null @@ -1,35 +0,0 @@ -ȳ -.. ڳ״ ΰ? ? [] - -..? װ Ϸ.. ( Դ Ͻÿ) -ž -ƴ.. װ ڳװ  ˾? ϴ? [׷ϴ] -׷ϴ -.. װ ڳ׿ Ѱ ڳ׿ Ƿ ε... ڳװ ذ Ҽ 𸣰ڱ.. ¶ ڳװ ̰  Ȱ ְڳ. ĥ Ȱ ̶ ִ ž ̶ Ǹ ѱ ҳ. ׷ û װ ϰ . ؾ 𸣰ھ...[] - -..? .. ž ô ÷ ǵ Ҽ ֳ? ȱ׷? [] - -ڳװ ذϰڴٱ.. .. û ׾.. Ǫ ̶.. .. ڳ׿ ñڳ.. ڳװ ġ ̶ ִ ɼ ´ٸ ״뿡 ڳ..  غٰ? [] - -.. ~~ ״븸 ϰڳ.. ٸ Ź ֳ. Ŷ ְڳ.. [ڸ] -ڸ -? ΰ? ... .. ٱ ִ 'ȸ㰡'ߴٰ ϰ ׷ װ տ ٰɼ.. [׷] -׷ -׷.. Źϳ.. ε ϰ. -̰ -? װ ? [] - -ƴ? ׷ ϳ? ڳװ ׷  ͳ. װ ѻ ϰ ƹ Ƶƿ ߴٳ... ( ˱δ?) ׷  ͳ? [] - -.. ׷ Ź ְڳ? ͱݼ ָ ߴٴµ ذ ְԳ. [][̹ذ] - -... ׷.. ǿ ƹ ܼ ٳ.. ڳװ ȭ ϸ鼭 ã ذϰ ٽ ׷ ̰ 鿩 ְڳ. -̹ذ -̹ ڳװ ذ ߴٱ? װ  ? װ ϳ..? ( ̸ ÿ.) -ϵ -ƴ? ϵ..? ׺ ̻ǰ 谡 ־? ... ׺ Ҹ Ǿµ.. .. ׺ Ͻô? (ϴ簡 Ѹ ÿ.) -깰 -... ¾. и .. ڳװ ذѰ ̱... . ڳ׸ ̰ 鿩 ְڳ. Ű ʿ '㰡' ϰԳ ׷ 踦 ٰɼ.. - - - diff --git "a/objmon/talk/\310\253\261\315-1" "b/objmon/talk/\310\253\261\315-1" deleted file mode 100644 index f96c65b..0000000 --- "a/objmon/talk/\310\253\261\315-1" +++ /dev/null @@ -1,3 +0,0 @@ -ӹ - ״ɷ ϰڴ... ڰ Ŀͼ Ķ. - diff --git "a/objmon/talk/\310\255\271\253\260\341-80" "b/objmon/talk/\310\255\271\253\260\341-80" deleted file mode 100644 index 7cf4a17..0000000 --- "a/objmon/talk/\310\255\271\253\260\341-80" +++ /dev/null @@ -1,30 +0,0 @@ -ȳ -.. ڳ ̰  ? ϱ.. ̰ ü ִٴ ڳ׵ ̱. [̰] -̰ -~~ ڱ  Ȱ  .. ϳ . [?] - - ̰ Ű ¼ߴµ 4 ڱ ̳༮ 鼭 ϴ.. ̾.. ü  Ȱ 𸣰ھ. ̰ ̷ Ȱ ༮ ϴ.. ٳ ༮ ο ׻̿ dz Ͼ ̰ ȳ. ƹ ̰ ɻġ ʴ ִ° . ڱ 翡 ִ [] ;±.. ׷ ڳ״ ̷ Ϸ Գ? ( Ͻÿ.) - -? ڳ׵ Ƴ? ڳװ  ׳ฦ ? [Ź] -Ź - Ź ް ã Դٱ? ~~ ׳൵ ߴ ̱. ׳ ϸ û ʴ ε.. ¶ ڳ״ Ź ޾ ٱ ? ̰ ־ ٱ . ׷ ̷ .. 켱 ϴٴ ˷ֱ ڳ׿ Ź . װ ׳࿡ ְ ڴٰ ְԳ. [] - give - 츮 ְ ޾Ҵ о.. ̰ ׳࿡ .. Źϳ.. ׸ ڳ׿ ϳ . [?] - give - ִ öϽ. ׳ ö ̰ ̰ ٱ 尣 ٰɼ... - -ڳװ ֿ  ˰ ? ƴ ص ˰ڳ. ͱݼ Ź߰.. ȱ׷? .. ڴ ־ ʹ θ ̾.. ڳ״ ְ ִ ? [¾ƿ] -¾ƿ -.. ڳ׿ Ϸ. ڳװ װ 𸣰ڱ. Ʊ ڳ ̰ µ߿ 㰡 ָ ұ ó? [] - -.. ִ ұվȿ ִ ȭ ֳ. [ȭ] -ƴϿ - ôٱ? װ .. ִ ұվȿ ִ ȭ ֳ. [ȭ?] -ȭ - ȭ ϳ⿡ ѹ ָ µ ׶ ̰ ȿ ȭ濡Լ ָ .. ... [?] -? -Ʊ ̰ȿ ־ ༮ Ⱦ.. ȭ浵 ġ ŵ.. ׳༮ ٸ ༮ó ȴٸ ȭ濡Լ ָ ´ٴ° Ұ.. ٳ ʾҴ ȭ ȭ Ҹ ϳ. Ʊ 鼭 ̴ ұ ȭ ȭ մ ε, ׳༮ ٸ ó عٰ ȭ ٸ... ϴ° ɼ. ϵ ǹ̳. [ϵ?] -ϵ? - ϵ ٷ ̰ .. װ ° 縮 .. ׷ ڴٸ ε ϰ... .. -ö - ö ϵ ٴϴٺ ã ų.. ų.. ö϶ 𸣰 ö ȭϰ ڱ ſ ׷ ΰ ̻ . diff --git "a/objmon/talk/\310\346\260\313\274\272\301\326-10" "b/objmon/talk/\310\346\260\313\274\272\301\326-10" deleted file mode 100644 index a942bfe..0000000 --- "a/objmon/talk/\310\346\260\313\274\272\301\326-10" +++ /dev/null @@ -1,10 +0,0 @@ - -˼ '' '' ְԳ. - GIVE 346 - ٴ° ݵ ϰ. - -˼ , DZ 캸 'â'  ãƺԳ. -â -̰ ϰ â ְ, â ϳ '' Ű ֳ. - - ߿  õ浵 ִµ, ׿ ̾߱⸦ غ 𸣳. diff --git "a/objmon/talk/\310\346\260\313\274\272\301\326\300\307_\272\316\300\316-10" "b/objmon/talk/\310\346\260\313\274\272\301\326\300\307_\272\316\300\316-10" deleted file mode 100644 index 7e435f0..0000000 --- "a/objmon/talk/\310\346\260\313\274\272\301\326\300\307_\272\316\300\316-10" +++ /dev/null @@ -1,10 +0,0 @@ - - ڱ Ÿ ȭӴ ˼ عȾ. - -ִ տ ̰ 'ϰ' ִϴ. -ϰ -װ 4 '' ־. - -4 ׸ '' Ѱ ִϴ. - - ˼ ž ֱ⸦ ٸ ־. 鿡 '' Դٰ ̾߱ ϼ. diff --git "a/objmon/\261\344\261\336_\270\355\267\311\274\255" "b/objmon/\261\344\261\336_\270\355\267\311\274\255" deleted file mode 100644 index 81f5cc9..0000000 --- "a/objmon/\261\344\261\336_\270\355\267\311\274\255" +++ /dev/null @@ -1,14 +0,0 @@ - - - ϴ... - -: й ΰ. - -: ĥ ߿ ϳ - Żߴ. - Ͽ ߰϶. - 뿡 ϸ űͰ â ܳҴ Ѵ. - Ͽ ߰϶. - -۽: ȴ . - diff --git "a/objmon/\263\260\300\272_\271\256\274\255" "b/objmon/\263\260\300\272_\271\256\274\255" deleted file mode 100644 index 3794f34..0000000 --- "a/objmon/\263\260\300\272_\271\256\274\255" +++ /dev/null @@ -1,11 +0,0 @@ ------------------------------ - -ο ....߰... -ο Žϴ.... -󰡿...... .... -......Į.......... -...... -.......߰ϱ ٶ... -(κ ) - ------------------------------ diff --git "a/objmon/\265\277\310\255\303\245" "b/objmon/\265\277\310\255\303\245" deleted file mode 100644 index 8e88c36..0000000 --- "a/objmon/\265\277\310\255\303\245" +++ /dev/null @@ -1,9 +0,0 @@ - Ҵϴ..... -..... -밭 ̷ ̾߱Ⱑ . -׷ ̵ ι̶ . -غ ٷδ ̵ Ҵٴ ִ. - '' . -߿ 𸥴. - -......̸ ڰ . diff --git "a/objmon/\272\260\303\244_\301\366\265\265" "b/objmon/\272\260\303\244_\301\366\265\265" deleted file mode 100644 index 16682d3..0000000 --- "a/objmon/\272\260\303\244_\301\366\265\265" +++ /dev/null @@ -1,6 +0,0 @@ - - - | - ä_________|_______ 칰 - - diff --git "a/objmon/\272\264\271\375\274\255" "b/objmon/\272\264\271\375\274\255" deleted file mode 100644 index 439abcb..0000000 --- "a/objmon/\272\264\271\375\274\255" +++ /dev/null @@ -1,53 +0,0 @@ - - *************************************************** - - 輮ġ - - ֹ ǰ ־ Ͼ ִ. - ʰ Ģ Ѵ. - ﳪȷ ʿ ϸ ٸʿ - ﳪȷ ؾߵȴ. - ߸ ϴ° 뿡 ޾Ƶ̱ - ٽ ѹ Ҿ öȸҼ ִ. - ϴ Ͼ ׿ ִ. - ߹ߵǸ ڰ ⿡ ձ - Ե θ Ҽ ִ. - ̶ 븦 ̸ ġ - Ѿ ü ִ. - ձ ణ ޴´. - ڽ ڵ ް ȴ. - й ʿ ׸ 񰡰 ư ȴ. - ϴ ˾ƺ - Ұ̴. ؼ Ѵ. - - *************************************************** - ڰ̳ Ǹ ɼ ִ. - ׵ ׸ڻ̷ , - ż ̵Ҽ ִ. Ҽӿ ڱ Ÿ - ϸ ظ ִ. - - ̵ Ӿ ؾ߸ ߰Ҽ ִ. - - տ ݵ ־ ϸ ڰ - ԵǾ ־ Ѵ. Ұ ġḦ - ־ Ѵ. - - ׻ ׷ ٳ ظ - ʴ´. - - ս ȯ̳ ̵ Ұϳ սǹ ϴ - ĵ ȯ յ - ϴ° ϴ. ѻ ȯ ؼ - ݹ ؾ Ѵ. - - ϱ ٶ. - *************************************************** - 忡 ȣƷ - ο . ߸ Ű Ͱų Ҷ - ãƿ. - - *************************************************** - .... - - . - һ .... diff --git "a/objmon/\272\270\271\260\301\366\265\265" "b/objmon/\272\270\271\260\301\366\265\265" deleted file mode 100644 index cc7ceb6..0000000 --- "a/objmon/\272\270\271\260\301\366\265\265" +++ /dev/null @@ -1,36 +0,0 @@ - ó Դϴ. - - +---------------------------------------------+ - | [ ========== ] | - | / _____ \ | - | / | | \ | - | | - | " " " " | - | /\ " " " | - | /\/ \ ---> X " " " | - | /\/ \ \/\ " " " | - | / \ \ / \ | - | \|/ \|/ \|/ / | - +---------------------------------------------+ - - - -**** * * - -忡 ܵΰ 濡 ڸ Ҵ. -׷, δ ʹ ġ ִ -"Ķ " ִٴ ̴. -  ʴ°̴. -׷, ڸ ֵΰ, ϵ ´. -װ û ȣŵ Ű ִٰ , پ ϵ - ãƼ ƿ ̴. . - -**** * * - -.. - 踦 Ҿٴ.. -ٴٵ ٰ Ҿ , Ҿȴ -𸣰ڴ. ׶ ű ־µ.. -Ƹ ű ̴. - ;߰ڴ. - diff --git "a/objmon/\301\276\301\267_\274\322\260\263\274\255" "b/objmon/\301\276\301\267_\274\322\260\263\274\255" deleted file mode 100644 index 3b67e92..0000000 --- "a/objmon/\301\276\301\267_\274\322\260\263\274\255" +++ /dev/null @@ -1,217 +0,0 @@ - -************************************************************* - - - -************************************************************* - - - ̾ Դϴ - Ưġ ؼ ϼž մϴ - -: - -ڰ - ڰ Ҽӿ Ҽ ִ ɷ ֽϴ - ϸ, Ҽӿ  - ֽϴ - : - - ż - - Ưġ: - ø - - õ : - - ΰ - - -ǹ - ָ԰ Ͽ ŸҼ ִ ɷ ϴ - ǹ ȥ Ҽ ֽϴ -⵵ ο ִ ɷ ϴ - : - Ͱ - - - Ưġ: - - - ø - õ : - - ΰ - - - - ڴ žӽ ġɷ ϰ ֽϴ - ҿ Ƴ Ž ĥ ֽϴ. -¿ ־ ܷ ɷ ϰ ֽϴ - : - ȥ - ſ - - Ưġ: - žӽ - õ : - ΰ - 䱫 - ͽ - -˻ - ˻  ɼɶ οԴϴ - پ ɷ Դϴ/ - : - Ͱ - - - Ưġ: - - ø - õ : - ΰ - - - - - - ּ ڵ ּ -ֽϴ. 谡 ĥ , ǿ -ּ ɼ ֽϴ - : - - - - Ưġ: - - õ : - ΰ - - 䱫 - - - ν Ǹ ϴ Դϴ. - ȭ ϸ ε ¡ϱ⵵ մϴ. ̿ - Ƿ ĥ , ϰ - ظ Խϴ. -׸ ׸ 񰡸 ġ ˷ ֽϴ. - : - ȥ - ſ - - Ưġ: - - žӽ - õ : - ΰ - - ͽ - - - - ε ؼ ϴµ پ ɷ ϰ -ֽϴ. ߰Ҽ ְ θ ã ֽϴ. -谡 ӿ ȳԴϴ. - : - - Ȱ - - Ưġ: - ø - õ : - ΰ - - - - 谡 ӿ ϳԴϴ - 踦 ְ κ ĥ ֽϴ -ɽ ̴ٰ Ҽ ֽϴ. õ - 𸣴 س ֽϴ. -Ư پ ɷ ϰ Ƴ -ֽϴ. - : - - Ҹġ - ڹ - - - ż - - Ưġ: - ø - õ : - ΰ - - - - ñ ֽϴ. -׵ Ҽ , Ӱ ¾ -˴ϴ. ׷ Ҵ Ư ο ɷ ˴ϴ. - : - - ȸ ɷ - Ưġ: - - õ : - - - ߿մϴ! - -: - - - Ű Դϴ. ÿ ĥ -߿ ϳ Ǹ ο ˷ֽϴ - Ưġ: - +1 - žӽ -1 - - ź Դϴ. -ּ Ź ɷ ϰ ֽϴ. ׷ մϴ. - Ưġ: - +2 - -1 - -1 -ͽ - Ǹ ڿ 簡 ɼֽϴ - Ưġ: - žӽ +1 - -1 - - Ŵ ڷ οԴϴ - Ưġ: - +2 - -1 - žӽ -1 -䱫 - 䱫 پ ︳ϴ - Ưġ: - +1 - -1 - - ۰ ø ճ øմϴ. - ڰ, , ɼ ֽϴ. - Ưġ: - ø +1 - -1 -ΰ - 𿡼 ִ ûϰ Դϴ - Ưġ: - +1 - - 糳 ߸ 鿡 ĥ ڶ -Ǹϰ Ҽ ֽϴ. - Ưġ: - +1 - +1 - ø -1 - -û ŵ ---- -Ÿ, Ǫϴ, , - - ų . - -Ѵ. - diff --git "a/objmon/\301\337\260\243\260\350_\301\366\265\265" "b/objmon/\301\337\260\243\260\350_\301\366\265\265" deleted file mode 100644 index b41b3ea..0000000 --- "a/objmon/\301\337\260\243\260\350_\301\366\265\265" +++ /dev/null @@ -1,21 +0,0 @@ - - - ͽ - - - - - - - - - ߰ - - - - - - - â - - diff --git "a/objmon/\306\304\307\307\267\347\275\272_\265\316\267\347\270\266\261\342" "b/objmon/\306\304\307\307\267\347\275\272_\265\316\267\347\270\266\261\342" deleted file mode 100644 index f1b9325..0000000 --- "a/objmon/\306\304\307\307\267\347\275\272_\265\316\267\347\270\266\261\342" +++ /dev/null @@ -1,16 +0,0 @@ -List of Elven Runes and Meanings: - -AHN Negate/Dispel NOX Poison -BET Small ORT Magic -CORP Death POR Move/Movement -DES Lower/Down QUAS Illusion -EX Freedom REL Change -FLAM Flame SANCT Protect/Protection -GRAV Energy/Field TYM Time -HUR Wind UUS Raise/Up -IHN Make/Create/Cause VAS Great -JUX Danger/Trap/Harm WIS Know/Knowledge -KAL Summon/Invoke XEN Creature -LOR Light YLEM Matter -MANI Light/Healing ZU Sleep - diff --git "a/objmon/\306\363\260\241_\301\366\265\265" "b/objmon/\306\363\260\241_\301\366\265\265" deleted file mode 100644 index 2ec770f..0000000 --- "a/objmon/\306\363\260\241_\301\366\265\265" +++ /dev/null @@ -1,15 +0,0 @@ - - ä - - - - - - - - ä - - - - - diff --git "a/objmon/\307\245\301\366\306\307" "b/objmon/\307\245\301\366\306\307" deleted file mode 100644 index 48fc5ac..0000000 --- "a/objmon/\307\245\301\366\306\307" +++ /dev/null @@ -1,20 +0,0 @@ - - >>>>> ֺ <<<<< - [巹Ͼ ] [Ҹ] [] - *ġ : - -------------------- - [] [ž] - [Ȱ] [ȭ] - [˼] --------------- - [и] [] [串] - [] [] [̵] [ͽų] - - []---------------------------------------------[Ʈ] - [] <縷Ա> <-> - []------------------ - - [Ѽ]----------------------------[ʼ] - [â] - []----------- [] - << >> - diff --git "a/player/\305\270/\305\270\300\314" "b/player/\305\270/\305\270\300\314" deleted file mode 100644 index 37382ee..0000000 Binary files "a/player/\305\270/\305\270\300\314" and /dev/null differ diff --git "a/player/\305\270/\305\327\275\272\305\344\275\272" "b/player/\305\270/\305\327\275\272\305\344\275\272" deleted file mode 100644 index 48756de..0000000 Binary files "a/player/\305\270/\305\327\275\272\305\344\275\272" and /dev/null differ diff --git a/resources_manifest/path-alias.v1.tsv b/resources_manifest/path-alias.v1.tsv index 0f4f65b..13475c1 100644 --- a/resources_manifest/path-alias.v1.tsv +++ b/resources_manifest/path-alias.v1.tsv @@ -1,4 +1,6 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 +2E6769746875622F776F726B666C6F77732F63692E796D6C .github/workflows/ci.yml .github/workflows/ci.yml 67f5ca68ecb4d8633e65a637a0fd423b60a95686 +524541444D452E6D64 README.md README.md ea728fd4725a5088c248e01df3a7d5bdef0713a1 62696E2F434F50595249474854 bin/COPYRIGHT bin/COPYRIGHT 367e10ed244f0d7cfff758e039c6d9306a938b1a 62696E2F494E5354414C4C bin/INSTALL bin/INSTALL 330c1d8fd718696d9fe1506ff253697905c247c1 62696E2F4D414E4946455354 bin/MANIFEST bin/MANIFEST f06df90c10e3d4758d9422ebf2da0c2cef92be49 @@ -6,6 +8,7 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 62696E2F524541444D45 bin/README bin/README 894be3d5dec58baf5947f86acdb72b691b2e9288 62696E2F667270 bin/frp bin/frp 8118ce78b2e5beb850616862b4c3cba8db68482b 62696E2F6672702E646F63 bin/frp.doc bin/frp.doc fb7c4cd234ca76c0b8b50eea6e3ebcf88108be24 +646F636B65722F6C65676163792D72756E74696D652E446F636B657266696C65 docker/legacy-runtime.Dockerfile docker/legacy-runtime.Dockerfile 07d84b6cf95f3d5da46bf59333e085862708da44 646F63732F626F6172645F6D616B65 docs/board_make docs/board_make ae5d5e1860d64bf09dfc6480f8bc2e4d7c38e37b 646F63732F636D645F6974616C docs/cmd_ital docs/cmd_ital 90ccd4a0d456887b005f0e28e386b1c0b34857b5 646F63732F636D645F6C697374 docs/cmd_list docs/cmd_list 3cd357e1a83e11b6a27625e5faa1b415f7d5783e @@ -19,6 +22,7 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 646F63732F646D5F696E74726F docs/dm_intro docs/dm_intro 4b2e51e605aedcefce16b6c56261a8cbacf33785 646F63732F6F626A5F666C6167 docs/obj_flag docs/obj_flag 8d138e750c04ee05ddf2d3acf5f42a3e01ca5e86 646F63732F6F626A5F6D616B65 docs/obj_make docs/obj_make d00397d82db2768427b6511a2b8f968c79af0f4f +646F63732F7265766976652F626173656C696E652E6D64 docs/revive/baseline.md docs/revive/baseline.md 0247e3c6d0d856bc3137b5eacb7d031d1e128e96 646F63732F726F6D5F636F6D62 docs/rom_comb docs/rom_comb 33b72e88565c23b00b40e5aa434a1dc7b0391915 646F63732F726F6D5F666C6167 docs/rom_flag docs/rom_flag 09084c08a8f60d29bff49966c5bbf05cdd5bfdb4 646F63732F726F6D5F6D616B65 docs/rom_make docs/rom_make 84f330eaed2153534b360b6e215a182ba482238f @@ -255,7 +259,7 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 68656C702F77656C636F6D652E73617665 help/welcome.save help/welcome.save aae62333c722501ef024b4d9f38fbb7706d5ae5b 68656C702F78666C616773 help/xflags help/xflags f8093d3da9ff3968abbacb72bdee3824d33c3eee 68656C702F787472617073 help/xtraps help/xtraps 4ea00f43fc4ad8c91241752f24e6f28bbe57e45f -68656C702FA6B3A9AB help/┳œ help/star 01a95dbfa47bb47558b76de0b2fd2d2c3b1219e5 +68656C702FA6B3A9AB help/┳œ help/┳œ 01a95dbfa47bb47558b76de0b2fd2d2c3b1219e5 6C6F672F444D5F6E657773 log/DM_news log/DM_news c5323e56355759ed5880557eb0aecf6bc15af398 6C6F672F524541444D45 log/README log/README 9c2b48bf624328246b5d185ba3a6ff1f229ee30e 6C6F672F53554943494445 log/SUICIDE log/SUICIDE bd5936ef83a2f7435b54f26457cff9fda23de786 @@ -3696,9 +3700,18 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 726F6F6D732F7230382F723038333030 rooms/r08/r08300 rooms/r08/r08300 133393648ca6deabb130f444c41f3e0907598024 726F6F6D732F7230382F723038333031 rooms/r08/r08301 rooms/r08/r08301 d40811e3c85ae7728aa1fcb990c2861d2b2ce995 726F6F6D732F7230392F723039303030 rooms/r09/r09000 rooms/r09/r09000 8105cea03fecd4f43ccb0490d6eede4f52ce5d59 +727573742F2E67697469676E6F7265 rust/.gitignore rust/.gitignore ea8c4bf7f35f6f77f75d92ad8ce8349f6e81ddba +727573742F436172676F2E6C6F636B rust/Cargo.lock rust/Cargo.lock 363617ecca42a5f1bf91274583c3108c46ceaef1 +727573742F436172676F2E746F6D6C rust/Cargo.toml rust/Cargo.toml 57571c9e5b35f411b2c7cdc0f99c33fa565e3436 +727573742F6D7568616E2D7265736F757263652D6666692F436172676F2E746F6D6C rust/muhan-resource-ffi/Cargo.toml rust/muhan-resource-ffi/Cargo.toml 258ba3355d945c478743ca0fe68af38ce7c762e9 +727573742F6D7568616E2D7265736F757263652D6666692F7372632F6C69622E7273 rust/muhan-resource-ffi/src/lib.rs rust/muhan-resource-ffi/src/lib.rs 8eaf7b594ab4df146a5bf45395232486db6c0a2d +727573742F6D7568616E2D7265736F757263652D696E6465782F436172676F2E746F6D6C rust/muhan-resource-index/Cargo.toml rust/muhan-resource-index/Cargo.toml 61015e90b580b69f447a0dd852f49b1526296656 +727573742F6D7568616E2D7265736F757263652D696E6465782F7372632F6C69622E7273 rust/muhan-resource-index/src/lib.rs rust/muhan-resource-index/src/lib.rs 5ac569cd333421a0d5abb17f09c1c428a5f3f662 +736372697074732F6275696C642D6C65676163792E7368 scripts/build-legacy.sh scripts/build-legacy.sh a9d3c4929426ce6ce8db3ffbc553c4f09c201c28 +736372697074732F72756E2D736D6F6B652E7368 scripts/run-smoke.sh scripts/run-smoke.sh 83ac595e1728c0051e4cdbbbacdd3f1068360c2d 7372632F2E67697469676E6F7265 src/.gitignore src/.gitignore 874c63cfa699b0cb28ada8b48e0f107ee5716f85 7372632F4D5548414E2E455845 src/MUHAN.EXE src/MUHAN.EXE d59004c47a2ecd27578baedc660240c83748bfea -7372632F4D616B6566696C65 src/Makefile src/Makefile bdb255eed96c828dfb3a70e549165c6f058c0266 +7372632F4D616B6566696C65 src/Makefile src/Makefile 28cf9f67cc44301675f2f25faab964bf4ea64574 7372632F524541444D45 src/README src/README 87fd10753452b565f8d879789b05682fcffc6bdb 7372632F524541444D452E757064617465 src/README.update src/README.update 58e5c810a43a6f165725ed79216fbf7d328025a6 7372632F616374696F6E2E63 src/action.c src/action.c 645a8d62ba99ba186559e9cd1b6aa6ca8b80ef4e @@ -3709,20 +3722,21 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 7372632F626F6172642E63 src/board.c src/board.c 46779420805544e77e2406724f9af539ea194e72 7372632F626F6172642E68 src/board.h src/board.h e7ab2f91382418f795150a1d659dc8dae6619168 7372632F636F6D6D616E355F6F6C642E63 src/comman5_old.c src/comman5_old.c 8d0edbaaf06f3f385593e220f7b3091e1c240a3b -7372632F636F6D6D616E64312E63 src/command1.c src/command1.c d654ac92a7d6e608216c00f15dee52dd83dde1cf +7372632F636F6D6D616E64312E63 src/command1.c src/command1.c 5634779b611fdcc135ed10670ffeabd46186d194 7372632F636F6D6D616E6431302E63 src/command10.c src/command10.c 671d456ff3dbba205ae4a4d9a56f04f3e74e28b8 -7372632F636F6D6D616E6431312E63 src/command11.c src/command11.c 0838efb982c799ec6d1c5a75fe80e7fd06478d5c +7372632F636F6D6D616E6431312E63 src/command11.c src/command11.c 4b3f5aba3bb43662537b398868fae1dd77cb8c8b 7372632F636F6D6D616E6431322E63 src/command12.c src/command12.c 2a95713b801232075feb1e09eaa09764c853b9d0 7372632F636F6D6D616E64322E63 src/command2.c src/command2.c b7c3c869b6f1ec43c835972eb31ab489e34047e3 7372632F636F6D6D616E64332E63 src/command3.c src/command3.c c6cb2879cfe4aeb94940081ff40cb27169c8741b -7372632F636F6D6D616E64342E63 src/command4.c src/command4.c 0c17f2f8b7b05754d8880f5db5bfab72dae9f0ed +7372632F636F6D6D616E64342E63 src/command4.c src/command4.c 796096e18fb6bd3c7d1b8eef22eaa578e091569c 7372632F636F6D6D616E64352E63 src/command5.c src/command5.c c4aea9c44f7e9e1f901161d9d922f78e7f340163 7372632F636F6D6D616E64362E63 src/command6.c src/command6.c a10a9fbc7038ef2a25c14cc98982a39014d5677e 7372632F636F6D6D616E64372E63 src/command7.c src/command7.c a0f926c972984a806eb6a29c475b85355d97c259 -7372632F636F6D6D616E64382E63 src/command8.c src/command8.c 565ad879b6f8219adb77ae7a0efcb4411935db1b +7372632F636F6D6D616E64382E63 src/command8.c src/command8.c bdf9aae7c06085975d21282760ba09493b29c518 7372632F636F6D6D616E64392E63 src/command9.c src/command9.c cdb53bba08f2dc94383291cd0a0a68004fe79d55 +7372632F636F6D7061745F6C65676163792E68 src/compat_legacy.h src/compat_legacy.h 68dd8efeef140939f85f778a73125fbdc2e61480 7372632F636F6D70726573732E63 src/compress.c src/compress.c 3b82ccb4352ad6cffe5db9a04bebae98678efcb8 -7372632F63726561747572652E63 src/creature.c src/creature.c 7434bd7b922910c6d5fc846b27a8763a6f0744f1 +7372632F63726561747572652E63 src/creature.c src/creature.c 615a8cc9050ada4079f798904ecc6d39cc5107f8 7372632F646D312E63 src/dm1.c src/dm1.c d9c40269a3e0df1bd16e7d48df073c4a596dee3c 7372632F646D322E63 src/dm2.c src/dm2.c 83c580b9977ea67c8512e5cd50bad63bb4e6af53 7372632F646D332E63 src/dm3.c src/dm3.c c5c1d980a8f2d9e87edd63ffb7bf4eff45e4c736 @@ -3730,11 +3744,11 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 7372632F646D352E63 src/dm5.c src/dm5.c c0694216e2311ea672ed893bfacd0c18b50cecb0 7372632F646D362E63 src/dm6.c src/dm6.c 24cc60961c3de0cefe322a0cfd9c00d3ac673fc2 7372632F66696C6573312E63 src/files1.c src/files1.c a20c7d2e64d754910b4855250102e26625699599 -7372632F66696C6573322E63 src/files2.c src/files2.c 4cc0f0ac11a400cf59e056464c64aeafa91fcdc4 -7372632F66696C6573332E63 src/files3.c src/files3.c 29a516424fabd0e232e9da3404b8362e490b3845 +7372632F66696C6573322E63 src/files2.c src/files2.c 4a13e0fe9f694c06e039cd61920cbdc658f7907e +7372632F66696C6573332E63 src/files3.c src/files3.c b51877d1546ae7164430f98f8dbe188aa148c4df 7372632F66696E6765722E63 src/finger.c src/finger.c 33b5a76cd3eb8eb567d8366da7f16e44686814b8 7372632F676C6F62616C2E63 src/global.c src/global.c 91bfcd78159f2c628a697170259d2c4774a8e6fc -7372632F696F2E63 src/io.c src/io.c 8320aebee82b29862cf1392bdd66ff62f435847b +7372632F696F2E63 src/io.c src/io.c 6935fa06f14dd18d46b359d0d7d9fa9ff0b317df 7372632F6B7374626C2E68 src/kstbl.h src/kstbl.h 91ddd9634ca5723d2a3e2d8616e6376d9a86b5a9 7372632F6D61676963312E63 src/magic1.c src/magic1.c e355a0bf38e466f6041f336fbbbb49643db11f6c 7372632F6D61676963322E63 src/magic2.c src/magic2.c 671527df86a916c2645b7a408e70b2835501165b @@ -3744,11 +3758,11 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 7372632F6D61676963362E63 src/magic6.c src/magic6.c 192aff9d8315fa2e99fb8d7a62e08ac1e2bb2802 7372632F6D61676963372E63 src/magic7.c src/magic7.c 9e83ae31147ddf9c066bfab90e05a34226a66db8 7372632F6D61676963382E63 src/magic8.c src/magic8.c d0ca35c7ad873f6943f7ed897ac48e232d9fcdc9 -7372632F6D61696E2E63 src/main.c src/main.c 18496c3b0beb4c0d43b8e517167ae8cc8685c550 -7372632F6D65787465726E2E68 src/mextern.h src/mextern.h 94bb41a316b480ba41c81d0f96805ae85fc620d6 -7372632F6D6973632E63 src/misc.c src/misc.c 668fa88f6ce36f5fd98f8a0df10076afe3d234ec +7372632F6D61696E2E63 src/main.c src/main.c 85cf14feb0ae082ce33526adcc5f6eb7c6330b76 +7372632F6D65787465726E2E68 src/mextern.h src/mextern.h 131b724f78d8a6381041f44b6756126e98c54c2d +7372632F6D6973632E63 src/misc.c src/misc.c 1bc73eaf87b404a926f900b5f03778228ff4866a 7372632F6D7374727563742E68 src/mstruct.h src/mstruct.h 155855d83e99c77f7a60be8635bcb027f2b35c8b -7372632F6D747970652E68 src/mtype.h src/mtype.h aa2b8543cde90ec7dd1523ec0254ac3cb97c07a9 +7372632F6D747970652E68 src/mtype.h src/mtype.h 04035e050f3f073ed17bab6e7f92f3a3f5e4cd8d 7372632F6D7568616E2E6D616B src/muhan.mak src/muhan.mak 4532a017041e8d5422017c2d1f3778c0b34c2ca1 7372632F6D7568616E2E6D6470 src/muhan.mdp src/muhan.mdp 9f50508d9d9a55859fff883e115d0bc83d52bbc8 7372632F6D7568616E2E6E6362 src/muhan.ncb src/muhan.ncb df96e53d7f7185691c91231a1859b0edcba4d905 @@ -3758,14 +3772,21 @@ legacy_path_hex legacy_path_cp949 normalized_utf8_path blob_sha1 7372632F706C6973742E63 src/plist.c src/plist.c ed8bacde82d885527e20c373d42c50de41fa57d1 7372632F706F73742E63 src/post.c src/post.c a51c75953436b8865886178944d888f21c4e6215 7372632F7265736F757263652E68 src/resource.h src/resource.h 01b50bca4253387933af937ed4bdd260c413c9a4 -7372632F726F6F6D2E63 src/room.c src/room.c 0bd56eb2267fcb47921fba2b1b9733b4348fb6f4 +7372632F7265736F757263655F706174682E63 src/resource_path.c src/resource_path.c 0b6531de14529e5170186eadd1faf959b7af8eef +7372632F7265736F757263655F706174682E68 src/resource_path.h src/resource_path.h 21c20736632337538c851d90c5e2cf1e924a5507 +7372632F726F6F6D2E63 src/room.c src/room.c d4644342708cf893f2c860e299ebde5a1ccc62d7 7372632F732E63 src/s.c src/s.c 07a1597abb6077f8f8b1842675e881e5c0823acd 7372632F73702E63 src/sp.c src/sp.c 7b95df958a197649b503c35a9ffb14802377d7ab 7372632F7370656369616C312E63 src/special1.c src/special1.c 01a6152060986275e03d70cd20fb301a4d51954d 7372632F73746172746D2E63 src/startm.c src/startm.c ffad559ef077ed5fa79f621eaa3d925f5913e542 7372632F7374727374722E63 src/strstr.c src/strstr.c 0412c5838682725f7c4d411d0739d171cbcbc42c -7372632F7570646174652E63 src/update.c src/update.c 358b2f7d89a1e1b13e0b52796616ca1efd5200b1 +7372632F7570646174652E63 src/update.c src/update.c 54cf6c28a6ce1180da2d76f2622118b3b6d6f650 7372632F7570646174652E68 src/update.h src/update.h e7f84585060e8b643b10045bd36ab5b7ed427d31 +74657374732F736D6F6B652F636F6D706172655F7265736F6C766572732E7079 tests/smoke/compare_resolvers.py tests/smoke/compare_resolvers.py b8edbeb21d4d66f10175af4e037028c277e990c2 +74657374732F736D6F6B652F72705F70726F62652E63 tests/smoke/rp_probe.c tests/smoke/rp_probe.c 4fe642901c6eb8b0a8a768510d76df3db54a7a53 +74657374732F736D6F6B652F73657373696F6E5F736D6F6B652E7079 tests/smoke/session_smoke.py tests/smoke/session_smoke.py a916aa7766b04c2d20663d81ec63671ab02e654c +746F6F6C732F7265766976652F657874726163742D6C65676163792D626C6F62732E7368 tools/revive/extract-legacy-blobs.sh tools/revive/extract-legacy-blobs.sh 7a3b042571508d174d27bd403ca2587a3849f836 +746F6F6C732F7265766976652F7265706F72742D6D697373696E672D70617468732E7368 tools/revive/report-missing-paths.sh tools/revive/report-missing-paths.sh dba83ee9f162caf88ab83471f5a5017b1423b2d9 7574696C2F4D414B4546494C45 util/MAKEFILE util/MAKEFILE e3064e9f85f91d574d016ce4609a73470fae767c 7574696C2F524541444D452E7574696C util/README.util util/README.util 7e627909f6fb16ba2305a6f72b87ee995cf4df1c 7574696C2F646F7332756E6978 util/dos2unix util/dos2unix 654eed379891b0b3225603e31d660f279d0b7b0b diff --git a/resources_manifest/resource-map.v1.json b/resources_manifest/resource-map.v1.json index 1915897..57e7b20 100644 --- a/resources_manifest/resource-map.v1.json +++ b/resources_manifest/resource-map.v1.json @@ -1,4 +1,24 @@ [ + { + "legacy_path_hex": "2E6769746875622F776F726B666C6F77732F63692E796D6C", + "legacy_path_cp949": ".github/workflows/ci.yml", + "normalized_utf8_path": ".github/workflows/ci.yml", + "blob_sha1": "67f5ca68ecb4d8633e65a637a0fd423b60a95686", + "sha256": "b6c9399c83848985e86c9899173b935d7a8d14140d27bcd12cc1c06d7c3c16e4", + "size": 4696, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "524541444D452E6D64", + "legacy_path_cp949": "README.md", + "normalized_utf8_path": "README.md", + "blob_sha1": "ea728fd4725a5088c248e01df3a7d5bdef0713a1", + "sha256": "57bf0baa90dbe6fc933d77eed61b9bdeaaaff36686dd2f41ef6144be56e5133b", + "size": 4104, + "kind": "text", + "text_encoding": "utf-8" + }, { "legacy_path_hex": "62696E2F434F50595249474854", "legacy_path_cp949": "bin/COPYRIGHT", @@ -69,6 +89,16 @@ "kind": "text", "text_encoding": "cp949" }, + { + "legacy_path_hex": "646F636B65722F6C65676163792D72756E74696D652E446F636B657266696C65", + "legacy_path_cp949": "docker/legacy-runtime.Dockerfile", + "normalized_utf8_path": "docker/legacy-runtime.Dockerfile", + "blob_sha1": "07d84b6cf95f3d5da46bf59333e085862708da44", + "sha256": "539d7f5899b52da901b971e505605d0ac98c931873deabe3a8592fae07371aaf", + "size": 273, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "646F63732F626F6172645F6D616B65", "legacy_path_cp949": "docs/board_make", @@ -199,6 +229,16 @@ "kind": "text", "text_encoding": "cp949" }, + { + "legacy_path_hex": "646F63732F7265766976652F626173656C696E652E6D64", + "legacy_path_cp949": "docs/revive/baseline.md", + "normalized_utf8_path": "docs/revive/baseline.md", + "blob_sha1": "0247e3c6d0d856bc3137b5eacb7d031d1e128e96", + "sha256": "fea7e5d17399a433b27728b8d8f991c724c4a721c2a4badc5d91391403eebebc", + "size": 1590, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "646F63732F726F6D5F636F6D62", "legacy_path_cp949": "docs/rom_comb", @@ -2562,7 +2602,7 @@ { "legacy_path_hex": "68656C702FA6B3A9AB", "legacy_path_cp949": "help/┳œ", - "normalized_utf8_path": "help/star", + "normalized_utf8_path": "help/┳œ", "blob_sha1": "01a95dbfa47bb47558b76de0b2fd2d2c3b1219e5", "sha256": "0de9616a3201e3ab7ad56b7ac33891fe6007227f98fc7303eb8697f9ccac7f13", "size": 803, @@ -36969,6 +37009,96 @@ "kind": "binary", "text_encoding": "binary" }, + { + "legacy_path_hex": "727573742F2E67697469676E6F7265", + "legacy_path_cp949": "rust/.gitignore", + "normalized_utf8_path": "rust/.gitignore", + "blob_sha1": "ea8c4bf7f35f6f77f75d92ad8ce8349f6e81ddba", + "sha256": "44c92e3a70ad3307b7056871c2bdb096d8bfa9373f5bf06a79bb6324a20ff2fb", + "size": 8, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F436172676F2E6C6F636B", + "legacy_path_cp949": "rust/Cargo.lock", + "normalized_utf8_path": "rust/Cargo.lock", + "blob_sha1": "363617ecca42a5f1bf91274583c3108c46ceaef1", + "sha256": "eaabb401edae18fc59623848e3d785bc99116700a1ac2de7a126093064634553", + "size": 3547, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F436172676F2E746F6D6C", + "legacy_path_cp949": "rust/Cargo.toml", + "normalized_utf8_path": "rust/Cargo.toml", + "blob_sha1": "57571c9e5b35f411b2c7cdc0f99c33fa565e3436", + "sha256": "071a5e839d765478f51593d834a766892836888fd7abb5d77b48820cf24c8efe", + "size": 91, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F6D7568616E2D7265736F757263652D6666692F436172676F2E746F6D6C", + "legacy_path_cp949": "rust/muhan-resource-ffi/Cargo.toml", + "normalized_utf8_path": "rust/muhan-resource-ffi/Cargo.toml", + "blob_sha1": "258ba3355d945c478743ca0fe68af38ce7c762e9", + "sha256": "c4c7b89748649ff427476da79d14acc2f5ed26ba138a3d4959a8aef4c45e7275", + "size": 193, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F6D7568616E2D7265736F757263652D6666692F7372632F6C69622E7273", + "legacy_path_cp949": "rust/muhan-resource-ffi/src/lib.rs", + "normalized_utf8_path": "rust/muhan-resource-ffi/src/lib.rs", + "blob_sha1": "8eaf7b594ab4df146a5bf45395232486db6c0a2d", + "sha256": "5228d4cc1206227167bb9ef535f126641e4b79f5ad566d56aed5534d7f1b99c6", + "size": 1492, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F6D7568616E2D7265736F757263652D696E6465782F436172676F2E746F6D6C", + "legacy_path_cp949": "rust/muhan-resource-index/Cargo.toml", + "normalized_utf8_path": "rust/muhan-resource-index/Cargo.toml", + "blob_sha1": "61015e90b580b69f447a0dd852f49b1526296656", + "sha256": "8c984b86bfdc2f85af092c09c97f8d6b336aa70cfb460586fec9d785a5d899ae", + "size": 126, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "727573742F6D7568616E2D7265736F757263652D696E6465782F7372632F6C69622E7273", + "legacy_path_cp949": "rust/muhan-resource-index/src/lib.rs", + "normalized_utf8_path": "rust/muhan-resource-index/src/lib.rs", + "blob_sha1": "5ac569cd333421a0d5abb17f09c1c428a5f3f662", + "sha256": "1c79819c8632477c1d35dca9954bf99401c8ed130db6f3a98642de30e59818d3", + "size": 1897, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "736372697074732F6275696C642D6C65676163792E7368", + "legacy_path_cp949": "scripts/build-legacy.sh", + "normalized_utf8_path": "scripts/build-legacy.sh", + "blob_sha1": "a9d3c4929426ce6ce8db3ffbc553c4f09c201c28", + "sha256": "25d53d63acb6af32782cb44e58ccad066be8872524a53b53452b6a08f584f895", + "size": 996, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "736372697074732F72756E2D736D6F6B652E7368", + "legacy_path_cp949": "scripts/run-smoke.sh", + "normalized_utf8_path": "scripts/run-smoke.sh", + "blob_sha1": "83ac595e1728c0051e4cdbbbacdd3f1068360c2d", + "sha256": "00304bee90f445986adb678dac6168257dda603437408e9b3919979ba6821a76", + "size": 2522, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "7372632F2E67697469676E6F7265", "legacy_path_cp949": "src/.gitignore", @@ -36993,9 +37123,9 @@ "legacy_path_hex": "7372632F4D616B6566696C65", "legacy_path_cp949": "src/Makefile", "normalized_utf8_path": "src/Makefile", - "blob_sha1": "bdb255eed96c828dfb3a70e549165c6f058c0266", - "sha256": "0fc54501de6c4723d3b2290a06d1ef8f8342109372dea9aa9b3b20e2d5be481d", - "size": 1217, + "blob_sha1": "28cf9f67cc44301675f2f25faab964bf4ea64574", + "sha256": "d6ceb24f7fbf9bf6aafddf93b60f27a738883135e5cda7a3dfbd022f2c4b89fe", + "size": 1669, "kind": "text", "text_encoding": "cp949" }, @@ -37103,9 +37233,9 @@ "legacy_path_hex": "7372632F636F6D6D616E64312E63", "legacy_path_cp949": "src/command1.c", "normalized_utf8_path": "src/command1.c", - "blob_sha1": "d654ac92a7d6e608216c00f15dee52dd83dde1cf", - "sha256": "dc3256118013e588096d11019c3cdb5dd59937a714345fcad21768543b29044c", - "size": 23504, + "blob_sha1": "5634779b611fdcc135ed10670ffeabd46186d194", + "sha256": "69fb27ba98e82d287f209c0ea412b860a3d9b620451a2813f51dfd15452ae577", + "size": 23581, "kind": "text", "text_encoding": "cp949" }, @@ -37123,9 +37253,9 @@ "legacy_path_hex": "7372632F636F6D6D616E6431312E63", "legacy_path_cp949": "src/command11.c", "normalized_utf8_path": "src/command11.c", - "blob_sha1": "0838efb982c799ec6d1c5a75fe80e7fd06478d5c", - "sha256": "b883cd3ac56c03f4e1fac1d9094532898b084aeb61958dd59217cb4bf17beede", - "size": 39671, + "blob_sha1": "4b3f5aba3bb43662537b398868fae1dd77cb8c8b", + "sha256": "91c67d491802f3befebec4ca0a277f40372e3f08ad6b743ed6069310706809df", + "size": 39693, "kind": "text", "text_encoding": "cp949" }, @@ -37163,9 +37293,9 @@ "legacy_path_hex": "7372632F636F6D6D616E64342E63", "legacy_path_cp949": "src/command4.c", "normalized_utf8_path": "src/command4.c", - "blob_sha1": "0c17f2f8b7b05754d8880f5db5bfab72dae9f0ed", - "sha256": "8a06a0cad6a161775a603937da99fd2708711e08272f499345e897a659c1c15e", - "size": 33576, + "blob_sha1": "796096e18fb6bd3c7d1b8eef22eaa578e091569c", + "sha256": "35c572fa0650dd4d9532a3cbc23595afcc816a7fc435ace15f00a23ce3ec6905", + "size": 34021, "kind": "text", "text_encoding": "cp949" }, @@ -37203,9 +37333,9 @@ "legacy_path_hex": "7372632F636F6D6D616E64382E63", "legacy_path_cp949": "src/command8.c", "normalized_utf8_path": "src/command8.c", - "blob_sha1": "565ad879b6f8219adb77ae7a0efcb4411935db1b", - "sha256": "2e5a6a18620ff99a4cdbb05cd255ba31b6debf81f90a6803f53356618d8ec512", - "size": 48867, + "blob_sha1": "bdf9aae7c06085975d21282760ba09493b29c518", + "sha256": "61837c36536f173eaacbbb81aa0a9544219ab1620643e4ad9b3562f733ae2793", + "size": 48916, "kind": "text", "text_encoding": "cp949" }, @@ -37219,6 +37349,16 @@ "kind": "text", "text_encoding": "cp949" }, + { + "legacy_path_hex": "7372632F636F6D7061745F6C65676163792E68", + "legacy_path_cp949": "src/compat_legacy.h", + "normalized_utf8_path": "src/compat_legacy.h", + "blob_sha1": "68dd8efeef140939f85f778a73125fbdc2e61480", + "sha256": "72f1eaa5c837ea927e6a68e6bdd91b1ab9b0eb089f018b1d1f1eef4a38252403", + "size": 238, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "7372632F636F6D70726573732E63", "legacy_path_cp949": "src/compress.c", @@ -37233,9 +37373,9 @@ "legacy_path_hex": "7372632F63726561747572652E63", "legacy_path_cp949": "src/creature.c", "normalized_utf8_path": "src/creature.c", - "blob_sha1": "7434bd7b922910c6d5fc846b27a8763a6f0744f1", - "sha256": "af77759401efdf2dc630ff97f41e37d7d8a0e15929705d9c3397b7c760bbfdad", - "size": 27573, + "blob_sha1": "615a8cc9050ada4079f798904ecc6d39cc5107f8", + "sha256": "21a0e9eac5f83ec1d494b16634fc98022687b8f8bab00a4a15a353c327873e09", + "size": 27603, "kind": "text", "text_encoding": "cp949" }, @@ -37313,9 +37453,9 @@ "legacy_path_hex": "7372632F66696C6573322E63", "legacy_path_cp949": "src/files2.c", "normalized_utf8_path": "src/files2.c", - "blob_sha1": "4cc0f0ac11a400cf59e056464c64aeafa91fcdc4", - "sha256": "ab818d493a7f6c9b705a81727c8ee3ff8c355979a8113b070363444336c95efa", - "size": 18864, + "blob_sha1": "4a13e0fe9f694c06e039cd61920cbdc658f7907e", + "sha256": "3343b9f76571923d8f5acb4873262176a2f37e792740432a79a61883e9c6592f", + "size": 18179, "kind": "text", "text_encoding": "ascii" }, @@ -37323,9 +37463,9 @@ "legacy_path_hex": "7372632F66696C6573332E63", "legacy_path_cp949": "src/files3.c", "normalized_utf8_path": "src/files3.c", - "blob_sha1": "29a516424fabd0e232e9da3404b8362e490b3845", - "sha256": "e976270c17d7d6bc3f5e0336b18c62e0748f82d50fcb646bbc51a093e19cc248", - "size": 8679, + "blob_sha1": "b51877d1546ae7164430f98f8dbe188aa148c4df", + "sha256": "edd670552811fba3cd639fff0ef0558689f49de5bb0fc5dbb21d5af55f28f5a9", + "size": 8709, "kind": "text", "text_encoding": "ascii" }, @@ -37353,9 +37493,9 @@ "legacy_path_hex": "7372632F696F2E63", "legacy_path_cp949": "src/io.c", "normalized_utf8_path": "src/io.c", - "blob_sha1": "8320aebee82b29862cf1392bdd66ff62f435847b", - "sha256": "f6a1fe8a789a566799f23dc409bf87812d7d9f19cbd05df2542b606e6ff09cc6", - "size": 31330, + "blob_sha1": "6935fa06f14dd18d46b359d0d7d9fa9ff0b317df", + "sha256": "dc548704de2dd6c7777f07779ad5926e1a45c0f642e5298a325b626c3dac8caf", + "size": 31358, "kind": "text", "text_encoding": "cp949" }, @@ -37453,9 +37593,9 @@ "legacy_path_hex": "7372632F6D61696E2E63", "legacy_path_cp949": "src/main.c", "normalized_utf8_path": "src/main.c", - "blob_sha1": "18496c3b0beb4c0d43b8e517167ae8cc8685c550", - "sha256": "4f0f289bd8e8a7bb5f795f846258eb6a3526e1bf82f0fdea87c05f8dd89ed1e4", - "size": 3465, + "blob_sha1": "85cf14feb0ae082ce33526adcc5f6eb7c6330b76", + "sha256": "b9864f0bdab49a0f440160c957d77089ded15a0d8b13bec800ccda3030612e0e", + "size": 3492, "kind": "text", "text_encoding": "cp949" }, @@ -37463,9 +37603,9 @@ "legacy_path_hex": "7372632F6D65787465726E2E68", "legacy_path_cp949": "src/mextern.h", "normalized_utf8_path": "src/mextern.h", - "blob_sha1": "94bb41a316b480ba41c81d0f96805ae85fc620d6", - "sha256": "a40abe4a85f657f90ccec5a92f63bb83f25edb7d5d6f472f4c669effd9dd0a36", - "size": 9732, + "blob_sha1": "131b724f78d8a6381041f44b6756126e98c54c2d", + "sha256": "fcac9816d04f2b57dd73a777bc3ebd324db6bc030ef25a883bc7089c032cad3a", + "size": 9861, "kind": "text", "text_encoding": "cp949" }, @@ -37473,9 +37613,9 @@ "legacy_path_hex": "7372632F6D6973632E63", "legacy_path_cp949": "src/misc.c", "normalized_utf8_path": "src/misc.c", - "blob_sha1": "668fa88f6ce36f5fd98f8a0df10076afe3d234ec", - "sha256": "2d602f1ac7d7bae5150d5c677e9a47c1c27caa069cc2956b876ab04bc199f9d0", - "size": 19080, + "blob_sha1": "1bc73eaf87b404a926f900b5f03778228ff4866a", + "sha256": "c20393c75f30e8216e0013c209da77a66a68e23d04a9d56cfbcd2e15fbaae84e", + "size": 19110, "kind": "text", "text_encoding": "cp949" }, @@ -37493,9 +37633,9 @@ "legacy_path_hex": "7372632F6D747970652E68", "legacy_path_cp949": "src/mtype.h", "normalized_utf8_path": "src/mtype.h", - "blob_sha1": "aa2b8543cde90ec7dd1523ec0254ac3cb97c07a9", - "sha256": "6f315b93aee8e5edfc4aefc8d81506566f7a10a8e4af2fe6583b406bee298654", - "size": 24270, + "blob_sha1": "04035e050f3f073ed17bab6e7f92f3a3f5e4cd8d", + "sha256": "2fcdac340f826628cde2d53c08573bf80911955943927ea3f1851606c1ed499a", + "size": 24277, "kind": "text", "text_encoding": "cp949" }, @@ -37589,13 +37729,33 @@ "kind": "text", "text_encoding": "ascii" }, + { + "legacy_path_hex": "7372632F7265736F757263655F706174682E63", + "legacy_path_cp949": "src/resource_path.c", + "normalized_utf8_path": "src/resource_path.c", + "blob_sha1": "0b6531de14529e5170186eadd1faf959b7af8eef", + "sha256": "33c23283fb3912f6ef0609a702c595302ab3122f5d61200c9d7b5e0c587c1118", + "size": 7946, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "7372632F7265736F757263655F706174682E68", + "legacy_path_cp949": "src/resource_path.h", + "normalized_utf8_path": "src/resource_path.h", + "blob_sha1": "21c20736632337538c851d90c5e2cf1e924a5507", + "sha256": "bc06ee5f30bd1df1eefb240519e0ca7e7f4d48a774539676f0ba0bcc97b5b2f7", + "size": 334, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "7372632F726F6F6D2E63", "legacy_path_cp949": "src/room.c", "normalized_utf8_path": "src/room.c", - "blob_sha1": "0bd56eb2267fcb47921fba2b1b9733b4348fb6f4", - "sha256": "0a64be593eaa6d95c86a543fc3815bf19003f6a09ac26819260d0d295a946e27", - "size": 24049, + "blob_sha1": "d4644342708cf893f2c860e299ebde5a1ccc62d7", + "sha256": "7c64ff3a78ed6393bc8719094f30242371e151bd18f7dc39441bb90a3938127f", + "size": 24086, "kind": "text", "text_encoding": "cp949" }, @@ -37653,9 +37813,9 @@ "legacy_path_hex": "7372632F7570646174652E63", "legacy_path_cp949": "src/update.c", "normalized_utf8_path": "src/update.c", - "blob_sha1": "358b2f7d89a1e1b13e0b52796616ca1efd5200b1", - "sha256": "89dfa6815850636c646034393056579fc9b3fab82ab58295d83b6cbecdf2cbf2", - "size": 30105, + "blob_sha1": "54cf6c28a6ce1180da2d76f2622118b3b6d6f650", + "sha256": "5d4be50419ebd79dcd97018b83b06d0674fed6436a1bf1eabd06f2c58873b902", + "size": 30199, "kind": "text", "text_encoding": "cp949" }, @@ -37669,6 +37829,56 @@ "kind": "text", "text_encoding": "cp949" }, + { + "legacy_path_hex": "74657374732F736D6F6B652F636F6D706172655F7265736F6C766572732E7079", + "legacy_path_cp949": "tests/smoke/compare_resolvers.py", + "normalized_utf8_path": "tests/smoke/compare_resolvers.py", + "blob_sha1": "b8edbeb21d4d66f10175af4e037028c277e990c2", + "sha256": "3869e166ce6a5102d299e77a1a288cfec69b49d23b7a4a4b106bfee1084f8458", + "size": 2876, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "74657374732F736D6F6B652F72705F70726F62652E63", + "legacy_path_cp949": "tests/smoke/rp_probe.c", + "normalized_utf8_path": "tests/smoke/rp_probe.c", + "blob_sha1": "4fe642901c6eb8b0a8a768510d76df3db54a7a53", + "sha256": "a534f145c7d05d3fb7fabf40701eb7bdd7f053734ad2efaca1fe4cf16c570db3", + "size": 1411, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "74657374732F736D6F6B652F73657373696F6E5F736D6F6B652E7079", + "legacy_path_cp949": "tests/smoke/session_smoke.py", + "normalized_utf8_path": "tests/smoke/session_smoke.py", + "blob_sha1": "a916aa7766b04c2d20663d81ec63671ab02e654c", + "sha256": "7c7ac7cdde5c27c7b39f59adf1c4e28d522643e2462efecfff58b69b1ff0f703", + "size": 3087, + "kind": "text", + "text_encoding": "utf-8" + }, + { + "legacy_path_hex": "746F6F6C732F7265766976652F657874726163742D6C65676163792D626C6F62732E7368", + "legacy_path_cp949": "tools/revive/extract-legacy-blobs.sh", + "normalized_utf8_path": "tools/revive/extract-legacy-blobs.sh", + "blob_sha1": "7a3b042571508d174d27bd403ca2587a3849f836", + "sha256": "67c883a23e25d1114627ff0bb2928bb1e08f4fb33a63b2c2217667099226de62", + "size": 4570, + "kind": "text", + "text_encoding": "ascii" + }, + { + "legacy_path_hex": "746F6F6C732F7265766976652F7265706F72742D6D697373696E672D70617468732E7368", + "legacy_path_cp949": "tools/revive/report-missing-paths.sh", + "normalized_utf8_path": "tools/revive/report-missing-paths.sh", + "blob_sha1": "dba83ee9f162caf88ab83471f5a5017b1423b2d9", + "sha256": "c87e6aa1e3a0033b4c65986ba34fdadaad056b7a88898883659c8c026596b649", + "size": 1181, + "kind": "text", + "text_encoding": "ascii" + }, { "legacy_path_hex": "7574696C2F4D414B4546494C45", "legacy_path_cp949": "util/MAKEFILE", diff --git a/resources_utf8/.github/workflows/ci.yml b/resources_utf8/.github/workflows/ci.yml new file mode 100644 index 0000000..67f5ca6 --- /dev/null +++ b/resources_utf8/.github/workflows/ci.yml @@ -0,0 +1,160 @@ +name: CI + +on: + push: + +permissions: + contents: read + +jobs: + build-and-smoke: + name: ${{ matrix.runner }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-latest + smoke_expect_hints: "1" + - runner: ubuntu-22.04-arm + smoke_expect_hints: "0" + - runner: windows-latest + smoke_expect_hints: "1" + - runner: macos-latest + smoke_expect_hints: "1" + + steps: + - name: Checkout (default) + if: matrix.runner != 'macos-latest' + uses: actions/checkout@v4 + + - name: Checkout (macOS sparse, manual) + if: matrix.runner == 'macos-latest' + shell: bash + run: | + set -euo pipefail + git init . + git remote add origin "https://x-access-token:${{ github.token }}@github.com/${{ github.repository }}.git" + git sparse-checkout init --no-cone + printf '%s\n' \ + '/src/' \ + '/tests/' \ + '/resources_manifest/' \ + '/resources_utf8/' \ + '/rooms/' \ + '/post/' \ + '/log/' \ + '/README.md' > .git/info/sparse-checkout + git fetch --no-tags --depth=1 origin "${{ github.sha }}" + git checkout --force FETCH_HEAD + + - name: Setup Python (Linux/macOS) + if: matrix.runner != 'windows-latest' + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Setup MSYS2 (Windows) + if: matrix.runner == 'windows-latest' + uses: msys2/setup-msys2@v2 + with: + update: true + install: >- + make + gcc + python + + - name: Install build deps (Ubuntu) + if: startsWith(matrix.runner, 'ubuntu') + shell: bash + run: | + set -euo pipefail + sudo apt-get update + sudo apt-get install -y build-essential + + - name: Build (Linux/macOS) + if: matrix.runner != 'windows-latest' + shell: bash + run: | + set -euo pipefail + make -C src clean >/dev/null 2>&1 || true + if [[ "${{ matrix.runner }}" == ubuntu* ]]; then + make -C src -j"$(getconf _NPROCESSORS_ONLN || echo 2)" CC=gcc + else + make -C src -j"$(getconf _NPROCESSORS_ONLN || echo 2)" CC=cc + fi + + - name: Build (Windows/MSYS2) + if: matrix.runner == 'windows-latest' + shell: msys2 {0} + run: | + set -euo pipefail + make -C src clean >/dev/null 2>&1 || true + make -C src -j2 CC=gcc + + - name: Smoke test (Linux/macOS) + if: matrix.runner != 'windows-latest' + shell: bash + run: | + set -euo pipefail + export MUHAN_HOME="$GITHUB_WORKSPACE" + log_file="/tmp/frp.log" + port="$((40000 + RANDOM % 1000))" + + ./src/frp.new -r "$port" >"$log_file" 2>&1 & + pid=$! + + cleanup() { + kill -9 "$pid" >/dev/null 2>&1 || true + wait "$pid" 2>/dev/null || true + } + trap cleanup EXIT + + sleep 2 + if ! kill -0 "$pid" >/dev/null 2>&1; then + echo "smoke failed: server exited immediately" + tail -n 200 "$log_file" || true + exit 1 + fi + + if ! MUD_PORT="$port" SMOKE_EXPECT_HINTS='${{ matrix.smoke_expect_hints }}' python tests/smoke/session_smoke.py; then + echo "smoke failed: session scenario" + tail -n 200 "$log_file" || true + exit 1 + fi + + - name: Smoke test (Windows/MSYS2) + if: matrix.runner == 'windows-latest' + shell: msys2 {0} + run: | + set -euo pipefail + export MUHAN_HOME="$(pwd)" + log_file="/tmp/frp.log" + bin="./src/frp.new" + port="$((40000 + RANDOM % 1000))" + + if [[ ! -x "$bin" && -x "./src/frp.new.exe" ]]; then + bin="./src/frp.new.exe" + fi + + "$bin" -r "$port" >"$log_file" 2>&1 & + pid=$! + + cleanup() { + kill -9 "$pid" >/dev/null 2>&1 || true + wait "$pid" 2>/dev/null || true + } + trap cleanup EXIT + + sleep 2 + if ! kill -0 "$pid" >/dev/null 2>&1; then + echo "smoke failed: server exited immediately" + tail -n 200 "$log_file" || true + exit 1 + fi + + if ! MUD_PORT="$port" SMOKE_EXPECT_HINTS='${{ matrix.smoke_expect_hints }}' python tests/smoke/session_smoke.py; then + echo "smoke failed: session scenario" + tail -n 200 "$log_file" || true + exit 1 + fi diff --git a/resources_utf8/README.md b/resources_utf8/README.md new file mode 100644 index 0000000..ea728fd --- /dev/null +++ b/resources_utf8/README.md @@ -0,0 +1,102 @@ +# 무한대전(MUHAN) 레거시 MUD 복구 프로젝트 + +무한대전은 1990년대 스타일의 텍스트 기반 MUD(Multi-User Dungeon) 게임입니다. +이 저장소는 오래된 C 코드베이스와 게임 리소스를 현대 개발환경(특히 Linux 컨테이너)에서 다시 구동할 수 있도록 복구하는 작업을 담고 있습니다. + +## 게임 개요 +- 장르: 텍스트 기반 온라인 RPG(MUD) +- 핵심 요소: 방/이동/전투/NPC 대화/플레이어 저장 +- 기술 특성: 레거시 C 소스 + 다수의 파일 기반 리소스 + +## 복구 배경 +기존 코드/데이터는 다음 문제를 가지고 있었습니다. +- 비ASCII(주로 CP949 계열) 파일명으로 인해 macOS에서 체크아웃 불가 파일 발생 +- 레거시 컴파일 관행(구식 선언/시그니처/헤더 누락)으로 최신 툴체인에서 빌드 실패 +- 리소스 경로가 과거 바이트 경로에 강하게 결합되어 이식성 저하 + +## 이번 복구의 핵심 +1. **리소스 복원 및 정규화** +- Git blob 기반으로 누락 리소스를 복구 +- `resources_utf8/`에 UTF-8 안전 경로 트리 구성 +- `resources_manifest/resource-map.v1.json` + `path-alias.v1.tsv` 생성 + +2. **C 런타임 경로 해석 계층 도입** +- 레거시 바이트 경로 -> 정규화 경로 해석기 추가 +- 주요 파일 접근 지점(`talk/ddesc/help/player`)에 해석 계층 적용 +- `MUHAN_HOME` 환경변수로 런타임 루트 오버라이드 지원 + +3. **현대 빌드/실행 복원** +- GNU89 기반 빌드로 복원 +- Linux amd64 컨테이너에서 서버 빌드 및 부팅 가능 +- 스모크 테스트 스크립트로 핵심 시나리오 자동 검증 + +4. **Rust 2단계 기반 마련** +- 리소스 인덱스/경로 해석을 Rust 크레이트로 분리 +- C <-> Rust FFI 경로 해석 인터페이스 연결 +- C resolver와 Rust resolver 결과 동치 검증 도구 제공 + +## 빠른 실행 +```bash +# 1) 누락 경로 리포트 +./tools/revive/report-missing-paths.sh + +# 2) 리소스 정규화/manifest 재생성 +./tools/revive/extract-legacy-blobs.sh resources_utf8 resources_manifest + +# 3) 통합 스모크(C-only + Rust resolver) +./scripts/run-smoke.sh +``` + +## 디렉터리 가이드 +- `tools/revive/`: 복구 유틸리티 스크립트 +- `resources_utf8/`: 정규화된 리소스 트리 +- `resources_manifest/`: 경로/리소스 매핑 데이터 +- `src/`: 레거시 C 서버 소스 + 경로 해석 계층 +- `rust/`: 리소스 인덱스/FFI 크레이트 +- `scripts/`, `tests/smoke/`: 빌드/부팅/회귀 검증 자동화 +- `docs/revive/`: 기준선/복구 메모 + +## 참고 +- 원본 레거시 데이터의 바이트 경로 정보는 manifest에 보존됩니다. +- macOS 네이티브보다 Linux 컨테이너 기반 실행을 우선 권장합니다. + +## macOS 호환 패치 내역 +- 브랜치: `feat/macos-compat` +- 목적: macOS(Apple clang)에서 네이티브 빌드/기동이 가능하도록 레거시 C 코드 호환성 보강 +주요 수정: +- 누락 함수 선언 보강(`scwrite`, `broadcast_eaves`, `find_enm_crt`, `special_cmd`, `log_fl`, `log_dmcmd`) +- `qsort` 비교 함수 시그니처를 표준형(`const void *`)으로 맞춤 +- `command8.c`에 `` 추가(문자 분류 함수 선언 누락 해결) +- `isnumber` 이름을 `is_number_str`로 변경(macOS libc 심볼 충돌 회피) +- `load_family()`에서 `fopen` 실패 시 `NULL` 체크 추가(시작 시 segfault 방지) +- macOS에서 clang 경고를 오류로 승격하지 않도록 `src/Makefile`에 Darwin 전용 완화 플래그 추가 + +## 플랫폼별 컴파일/실행 명령 +아래 명령은 모두 저장소 루트에서 실행합니다. + +### macOS 네이티브 (Apple clang) +```bash +# 컴파일 +make -C src -j1 CC=cc + +# 실행 +MUHAN_HOME="$PWD" ./src/frp.new -r 4102 +``` + +### Linux (Docker, C-only 권장) +```bash +# 컴파일 +./scripts/build-legacy.sh c + +# 실행(스모크 포함) +./scripts/run-smoke.sh +``` + +### Linux (Docker, Rust resolver 포함) +```bash +# 컴파일(Rust FFI + C 서버) +./scripts/build-legacy.sh rust + +# 실행 및 검증(C-only + Rust resolver 통합 스모크) +./scripts/run-smoke.sh +``` diff --git a/resources_utf8/docker/legacy-runtime.Dockerfile b/resources_utf8/docker/legacy-runtime.Dockerfile new file mode 100644 index 0000000..07d84b6 --- /dev/null +++ b/resources_utf8/docker/legacy-runtime.Dockerfile @@ -0,0 +1,11 @@ +FROM --platform=linux/amd64 rust:1.77 + +WORKDIR /work +ENV MUHAN_HOME=/work + +# Keep runtime tooling explicit for smoke/debug sessions. +RUN apt-get update \ + && apt-get install -y --no-install-recommends python3 ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +CMD ["bash"] diff --git a/resources_utf8/docs/revive/baseline.md b/resources_utf8/docs/revive/baseline.md new file mode 100644 index 0000000..0247e3c --- /dev/null +++ b/resources_utf8/docs/revive/baseline.md @@ -0,0 +1,53 @@ +# Muhan Revival Baseline + +## Snapshot +- Repository: `/Users/comfuture/Project/muhan` +- Commit (HEAD): `4266c30752d5ab8351b29d5b9c4897654cf0741d` +- Date: 2026-02-08 + +## Filesystem vs HEAD +- Total tracked paths in HEAD: `3803` +- Existing on macOS checkout: `3711` +- Missing due filename/encoding constraints: `92` +- Missing by top-level directory: +- `help`: `1` +- `objmon`: `89` +- `player`: `2` + +Reference command: +```bash +tools/revive/report-missing-paths.sh +``` + +## Resource normalization outputs +- Normalized resource tree: `resources_utf8/` +- Manifest: `resources_manifest/resource-map.v1.json` +- Alias table: `resources_manifest/path-alias.v1.tsv` +- Manifest entries: `3803` +- Paths containing non-ASCII bytes in legacy tree: `92` + +Reference command: +```bash +tools/revive/extract-legacy-blobs.sh resources_utf8 resources_manifest +``` + +## Known compile baseline (before fixes) +- Legacy code requires GNU89 compatibility behavior. +- Primary hard blockers observed: +- `Port` multiple definition (`src/mtype.h` defines storage in header). +- `enemy_status` function pointer signature mismatch in command table. +- Many implicit function declaration/header issues on modern compilers. + +## Repro commands +```bash +# Missing path report +tools/revive/report-missing-paths.sh + +# Generate normalized resources + manifests +tools/revive/extract-legacy-blobs.sh resources_utf8 resources_manifest + +# Linux container compile (legacy baseline) +docker run --rm --platform linux/amd64 \ + -v "$(pwd)":/work -w /work gcc:14 bash -lc \ + 'make -C src clean >/dev/null 2>&1 || true; make -C src CC=gcc -j4' +``` diff --git a/resources_utf8/help/star b/resources_utf8/help/star deleted file mode 100644 index 01a95db..0000000 --- a/resources_utf8/help/star +++ /dev/null @@ -1,22 +0,0 @@ -DM *commands -Many of these commands have options or require parameters. -Type help * to find the correct syntax and options. -*********************************************************************** - * *Ȱ * - *߰ * * - *â * *ָ - *̸ * * - *ġ * * - *ΰ *缳 * - * *ֹ *׷ - * * *Ʈ - * * * - *̸ *޸ *̸ - *ġ * * - *ֱ *ε *ü - *ȣ *̺ *ϱ - * * * - * * *̵ - * -*********************************************************************** -NOTE: Eavesdrop function is not a *. Set the DM's flag #16. diff --git "a/help/\246\263\251\253" "b/resources_utf8/help/\342\224\263\305\223" similarity index 100% rename from "help/\246\263\251\253" rename to "resources_utf8/help/\342\224\263\305\223" diff --git a/resources_utf8/rust/.gitignore b/resources_utf8/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/resources_utf8/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/resources_utf8/rust/Cargo.lock b/resources_utf8/rust/Cargo.lock new file mode 100644 index 0000000..363617e --- /dev/null +++ b/resources_utf8/rust/Cargo.lock @@ -0,0 +1,137 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "muhan-resource-ffi" +version = "0.1.0" +dependencies = [ + "muhan-resource-index", +] + +[[package]] +name = "muhan-resource-index" +version = "0.1.0" +dependencies = [ + "tempfile", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" diff --git a/resources_utf8/rust/Cargo.toml b/resources_utf8/rust/Cargo.toml new file mode 100644 index 0000000..57571c9 --- /dev/null +++ b/resources_utf8/rust/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = [ + "muhan-resource-index", + "muhan-resource-ffi", +] +resolver = "2" diff --git a/resources_utf8/rust/muhan-resource-ffi/Cargo.toml b/resources_utf8/rust/muhan-resource-ffi/Cargo.toml new file mode 100644 index 0000000..258ba33 --- /dev/null +++ b/resources_utf8/rust/muhan-resource-ffi/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "muhan-resource-ffi" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["staticlib", "cdylib"] + +[dependencies] +muhan-resource-index = { path = "../muhan-resource-index" } diff --git a/resources_utf8/rust/muhan-resource-ffi/src/lib.rs b/resources_utf8/rust/muhan-resource-ffi/src/lib.rs new file mode 100644 index 0000000..8eaf7b5 --- /dev/null +++ b/resources_utf8/rust/muhan-resource-ffi/src/lib.rs @@ -0,0 +1,66 @@ +use muhan_resource_index::{load_alias_tsv, resolve_from_map, AliasMap}; +use std::ffi::CStr; +use std::os::raw::{c_char, c_int}; +use std::ptr; +use std::sync::OnceLock; + +static MAP: OnceLock = OnceLock::new(); + +#[no_mangle] +pub extern "C" fn mr_manifest_load(manifest_path: *const c_char) -> c_int { + if manifest_path.is_null() { + return -1; + } + + let path = unsafe { CStr::from_ptr(manifest_path) }; + let path = match path.to_str() { + Ok(v) => v, + Err(_) => return -1, + }; + + let loaded = match load_alias_tsv(path) { + Ok(m) => m, + Err(_) => return -1, + }; + + if MAP.set(loaded).is_err() { + // already initialized; treat as success + return 0; + } + + 0 +} + +#[no_mangle] +pub extern "C" fn mr_resolve_legacy_path( + legacy_path: *const c_char, + out: *mut c_char, + out_len: usize, +) -> c_int { + if legacy_path.is_null() || out.is_null() || out_len == 0 { + return -1; + } + + let map = match MAP.get() { + Some(m) => m, + None => return -1, + }; + + let path_bytes = unsafe { CStr::from_ptr(legacy_path) }.to_bytes(); + let normalized = match resolve_from_map(map, path_bytes) { + Some(v) => v, + None => return -1, + }; + + let bytes = normalized.as_bytes(); + if bytes.len() + 1 > out_len { + return -1; + } + + unsafe { + ptr::copy_nonoverlapping(bytes.as_ptr(), out as *mut u8, bytes.len()); + *out.add(bytes.len()) = 0; + } + + 0 +} diff --git a/resources_utf8/rust/muhan-resource-index/Cargo.toml b/resources_utf8/rust/muhan-resource-index/Cargo.toml new file mode 100644 index 0000000..61015e9 --- /dev/null +++ b/resources_utf8/rust/muhan-resource-index/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "muhan-resource-index" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[dev-dependencies] +tempfile = "3" diff --git a/resources_utf8/rust/muhan-resource-index/src/lib.rs b/resources_utf8/rust/muhan-resource-index/src/lib.rs new file mode 100644 index 0000000..5ac569c --- /dev/null +++ b/resources_utf8/rust/muhan-resource-index/src/lib.rs @@ -0,0 +1,66 @@ +use std::collections::HashMap; +use std::fs; +use std::path::Path; + +pub type AliasMap = HashMap; + +pub fn legacy_path_hex(path_bytes: &[u8]) -> String { + let mut s = String::with_capacity(path_bytes.len() * 2); + for b in path_bytes { + s.push_str(&format!("{:02X}", b)); + } + s +} + +pub fn load_alias_tsv>(path: P) -> std::io::Result { + let text = fs::read_to_string(path)?; + let mut map = AliasMap::new(); + + for (idx, line) in text.lines().enumerate() { + if idx == 0 && line.starts_with("legacy_path_hex\t") { + continue; + } + if line.trim().is_empty() { + continue; + } + let mut it = line.split('\t'); + let legacy_hex = it.next().unwrap_or("").trim(); + let _legacy_cp949 = it.next().unwrap_or(""); + let normalized = it.next().unwrap_or("").trim(); + if !legacy_hex.is_empty() && !normalized.is_empty() { + map.insert(legacy_hex.to_string(), normalized.to_string()); + } + } + + Ok(map) +} + +pub fn resolve_from_map<'a>(map: &'a AliasMap, legacy_path_bytes: &[u8]) -> Option<&'a str> { + let key = legacy_path_hex(legacy_path_bytes); + map.get(&key).map(String::as_str) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + + #[test] + fn test_hex() { + assert_eq!(legacy_path_hex(b"objmon/talk"), "6F626A6D6F6E2F74616C6B"); + } + + #[test] + fn test_load_and_resolve() { + let mut f = tempfile::NamedTempFile::new().unwrap(); + writeln!( + f, + "legacy_path_hex\tlegacy_path_cp949\tnormalized_utf8_path\tblob_sha1\n6F626A\tobj\tobj_utf8\tdeadbeef" + ) + .unwrap(); + + let map = load_alias_tsv(f.path()).unwrap(); + assert_eq!(resolve_from_map(&map, b"obj"), Some("obj_utf8")); + assert_eq!(resolve_from_map(&map, b"none"), None); + } +} diff --git a/resources_utf8/scripts/build-legacy.sh b/resources_utf8/scripts/build-legacy.sh new file mode 100644 index 0000000..a9d3c49 --- /dev/null +++ b/resources_utf8/scripts/build-legacy.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "$0")/.." && pwd)" +mode="${1:-c}" + +if [[ "$mode" == "c" ]]; then + exec docker run --rm --platform linux/amd64 \ + -v "$repo_root:/work" \ + -w /work \ + gcc:14 bash -lc ' + set -euo pipefail + make -C src clean >/dev/null 2>&1 || true + make -C src -j4 CC=gcc + ' +fi + +if [[ "$mode" == "rust" ]]; then + docker run --rm --platform linux/amd64 \ + -v "$repo_root:/work" \ + -w /work/rust \ + rust:1.77 bash -lc ' + set -euo pipefail + export PATH="/usr/local/cargo/bin:$PATH" + cargo build -p muhan-resource-ffi --release + ' + + exec docker run --rm --platform linux/amd64 \ + -v "$repo_root:/work" \ + -w /work \ + gcc:14 bash -lc ' + set -euo pipefail + make -C src clean >/dev/null 2>&1 || true + make -C src -j4 CC=gcc USE_RUST_RESOLVER=1 RUST_FFI_LIB=/work/rust/target/release/libmuhan_resource_ffi.a + ' +fi + +echo "unknown mode: $mode (expected: c|rust)" >&2 +exit 2 diff --git a/resources_utf8/scripts/run-smoke.sh b/resources_utf8/scripts/run-smoke.sh new file mode 100644 index 0000000..83ac595 --- /dev/null +++ b/resources_utf8/scripts/run-smoke.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "$0")/.." && pwd)" + +run_server_smoke() { + local image="$1" + local label="$2" + local port="$3" + + echo "[${label}] boot + session smoke (port=${port})" + docker run --rm --platform linux/amd64 \ + -e MUD_PORT="$port" \ + -v "$repo_root:/work" \ + -w /work \ + "$image" bash -lc ' + set -euo pipefail + mkdir -p /home + ln -sfn /work /home/muhan + export MUHAN_HOME=/work + + ./src/frp.new -r "$MUD_PORT" >/tmp/frp.log 2>&1 & + pid=$! + trap "kill -9 $pid >/dev/null 2>&1 || true" EXIT + + sleep 1 + if ! kill -0 "$pid" >/dev/null 2>&1; then + echo "smoke failed: server exited immediately" >&2 + echo "----- /tmp/frp.log (tail) -----" >&2 + tail -n 200 /tmp/frp.log >&2 || true + exit 1 + fi + + if ! python3 tests/smoke/session_smoke.py; then + echo "smoke failed: session scenario" >&2 + echo "----- /tmp/frp.log (tail) -----" >&2 + tail -n 200 /tmp/frp.log >&2 || true + exit 1 + fi + + if ! kill -0 "$pid" >/dev/null 2>&1; then + echo "smoke failed: server exited early" >&2 + echo "----- /tmp/frp.log (tail) -----" >&2 + tail -n 200 /tmp/frp.log >&2 || true + exit 1 + fi + ' +} + +echo "[c-only] build" +"$repo_root/scripts/build-legacy.sh" c +run_server_smoke gcc:14 "c-only" 4100 + +echo "[rust-resolver] build" +"$repo_root/scripts/build-legacy.sh" rust + +echo "[rust-resolver] resolver parity" +docker run --rm --platform linux/amd64 \ + -v "$repo_root:/work" \ + -w /work \ + gcc:14 bash -lc ' + set -euo pipefail + export MUHAN_HOME=/work + + gcc -std=gnu89 -fcommon -finput-charset=cp949 -I src \ + tests/smoke/rp_probe.c src/resource_path.c -o /tmp/rp_probe_c + + gcc -std=gnu89 -fcommon -finput-charset=cp949 -DUSE_RUST_RESOLVER -I src \ + tests/smoke/rp_probe.c src/resource_path.c \ + /work/rust/target/release/libmuhan_resource_ffi.a -ldl -lpthread \ + -o /tmp/rp_probe_rust + + python3 tests/smoke/compare_resolvers.py \ + --probe-a /tmp/rp_probe_c \ + --probe-b /tmp/rp_probe_rust \ + --manifest /work/resources_manifest/resource-map.v1.json \ + --muhan-home /work + ' + +run_server_smoke gcc:14 "rust-resolver" 4101 + +echo "[rust] unit tests" +docker run --rm --platform linux/amd64 \ + -v "$repo_root:/work" \ + -w /work/rust \ + rust:1.77 bash -lc ' + set -euo pipefail + export PATH="/usr/local/cargo/bin:$PATH" + cargo test --workspace + ' + +echo "smoke completed" diff --git a/resources_utf8/src/Makefile b/resources_utf8/src/Makefile index bdb255e..28cf9f6 100644 --- a/resources_utf8/src/Makefile +++ b/resources_utf8/src/Makefile @@ -6,10 +6,24 @@ # -DNODUPLE ɼ ־ֱ⸦ ٶ. # ũŰ ΰ , -DOBJLEVEL ָ . -CFLAGS = -g -O2 -DFINGERACCT -DCHECKDOUBLE -DSUICIDE -DOBJLEVEL -DDEBUG +LEGACY_CHARSET_FLAGS ?= +CFLAGS = -g -O2 -std=gnu89 -fcommon -DFINGERACCT -DCHECKDOUBLE -DSUICIDE -DOBJLEVEL -DDEBUG $(LEGACY_CHARSET_FLAGS) + +ifeq ($(shell uname -s),Darwin) +CFLAGS += -Wno-error=implicit-function-declaration -Wno-error=return-mismatch -Wno-error=incompatible-function-pointer-types +endif + LIBS = -lm CC = cc OUTFILE = frp.new +EXTRA_LIBS = + +ifeq ($(USE_RUST_RESOLVER),1) +CFLAGS += -DUSE_RUST_RESOLVER +RUST_FFI_LIB ?= ../rust/target/release/libmuhan_resource_ffi.a +EXTRA_LIBS += $(RUST_FFI_LIB) -ldl -lpthread +endif + OBJECTS = global.o main.o files1.o files2.o files3.o bank.o command1.o command2.o \ command3.o command4.o command5.o command6.o command7.o \ @@ -17,10 +31,10 @@ OBJECTS = global.o main.o files1.o files2.o files3.o bank.o command1.o command2. magic3.o magic4.o magic5.o magic6.o magic7.o magic8.o \ dm1.o dm2.o dm3.o dm4.o dm5.o dm6.o io.o \ player.o creature.o room.o object.o update.o post.o action.o misc.o \ - special1.o compress.o alias.o board.o + special1.o compress.o alias.o board.o resource_path.o $(OUTFILE): $(OBJECTS) - $(CC) $(CFLAGS) $(OBJECTS) -o $(OUTFILE) $(LIBS) + $(CC) $(CFLAGS) $(OBJECTS) -o $(OUTFILE) $(LIBS) $(EXTRA_LIBS) chmod 777 $(OUTFILE) # strip $(OUTFILE) diff --git a/resources_utf8/src/command1.c b/resources_utf8/src/command1.c index d654ac9..5634779 100644 --- a/resources_utf8/src/command1.c +++ b/resources_utf8/src/command1.c @@ -10,6 +10,7 @@ #include "kstbl.h" #include "mstruct.h" #include "mextern.h" +#include "resource_path.h" #include #ifndef WIN32 @@ -84,7 +85,7 @@ char file[80]; str[25]=0; sprintf(tmp,"%s/%s/%s",PLAYERPATH,first_han(str),str); last_login[fd]=0; - if (!stat(tmp,&f_stat)) last_login[fd]=f_stat.st_ctime; + if (!rp_stat(tmp,&f_stat)) last_login[fd]=f_stat.st_ctime; if(load_ply(str, &ply_ptr) < 0) { strcpy(Ply[fd].extr->tempstr[0], str); @@ -427,7 +428,7 @@ input which causes a crash. */ logn("all_cmd","\n%s-%d (%d): %s\n",Ply[fd].ply->name,fd,Ply[fd].ply->rom_num,str); -#endif RECORD_ALL +#endif /* RECORD_ALL */ switch(param) { case 1: @@ -610,7 +611,7 @@ cmd *cmnd; Ply[fd].ply->class!=ZONEMAKER))) { print(fd, "\"%s\": ̷ ɾ ׿.", cmnd->str[0]); - RETURN(fd, command, 1); + Ply[fd].io->fn = command; Ply[fd].io->fnparam = 1; return(0); } /* ɾ .. ð ó=> else if(match > 1) { @@ -640,7 +641,7 @@ char *name; int rtn=0; sprintf(path, "%s/simul/%s", PLAYERPATH, name); - fp = fopen(path, "r"); + fp = rp_fopen(path, "r"); if(!fp) return(0); diff --git a/resources_utf8/src/command11.c b/resources_utf8/src/command11.c index 0838efb..4b3f5ab 100644 --- a/resources_utf8/src/command11.c +++ b/resources_utf8/src/command11.c @@ -479,6 +479,8 @@ int load_family() sprintf(file, "%s/family/family_list", PLAYERPATH); fp = fopen(file, "r"); + if(!fp) + return(0); fnum =0 ; do { diff --git a/resources_utf8/src/command4.c b/resources_utf8/src/command4.c index 0c17f2f..796096e 100644 --- a/resources_utf8/src/command4.c +++ b/resources_utf8/src/command4.c @@ -9,6 +9,7 @@ #include "mstruct.h" #include "mextern.h" +#include "resource_path.h" #ifndef WIN32 @@ -20,6 +21,22 @@ #include +static int spell_name_cmp(const void *a, const void *b) +{ + return(strcmp((const char *)a, (const char *)b)); +} + +static void view_file_resolved(fd, file) +int fd; +char *file; +{ + char resolved[512]; + if(resolve_legacy_path(file, resolved, sizeof(resolved)) == 0) + view_file(fd, 1, resolved); + else + view_file(fd, 1, file); +} + /**********************************************************************/ /* health */ /**********************************************************************/ @@ -128,18 +145,18 @@ cmd *cmnd; if(cmnd->num < 2) { strcat(file, "/helpfile"); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } if(!strcmp(cmnd->str[1], "ּ")) { strcat(file, "/spellfile"); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } if(!strcmp(cmnd->str[1], "å")) { strcat(file, "/policy"); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } @@ -161,7 +178,7 @@ cmd *cmnd; if(match == 1) { sprintf(file, "%s/help.%d", DOCPATH, cmdlist[num].cmdno); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } else if(match > 1) { @@ -198,7 +215,7 @@ cmd *cmnd; */ sprintf(file, "%s/spell.%d", DOCPATH, spllist[num].splno); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } @@ -220,7 +237,7 @@ cmd *cmnd; sprintf(file, "%s/welcome", DOCPATH); - view_file(fd, 1, file); + view_file_resolved(fd, file); return(DOPROMPT); } @@ -341,7 +358,7 @@ char *instr; if(!j) strcat(str, "."); else { - qsort((void *)spl, j, 20, strcmp); + qsort((void *)spl, j, 20, spell_name_cmp); for(i=0; i + /**********************************************************************/ /* give */ /**********************************************************************/ @@ -734,7 +736,7 @@ cmd *cmnd; } } - if(!dum_ptr->name[0]) return; + if(!dum_ptr->name[0]) return(0); if(save_ply(dum_ptr->name, dum_ptr) < 0) merror("savegame", NONFATAL); @@ -772,7 +774,7 @@ creature *ply_ptr; } } - if(!dum_ptr->name[0]) return; + if(!dum_ptr->name[0]) return(0); if(save_ply(dum_ptr->name, dum_ptr) < 0) merror("savegame", NONFATAL); @@ -1335,7 +1337,7 @@ cmd *cmnd; } -void enemy_status(ply_ptr, cmnd) +int enemy_status(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { @@ -1350,13 +1352,13 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PBLIND)) { print(fd, "ƹ͵ ʽϴ!\n"); - return; + return(0); } if(crt_ptr==NULL) { if(cmnd->num < 2) { print(fd, " ¸ ðڽϱ?\n"); - return; + return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, @@ -1365,11 +1367,12 @@ cmd *cmnd; if(crt_ptr==NULL) { print(fd, "׷ ⿡ ϴ.\n"); - return; + return(0); } print(fd, "%s : ", crt_ptr->name); display_status(fd, crt_ptr); print(fd, "\n"); + return(0); } diff --git a/resources_utf8/src/compat_legacy.h b/resources_utf8/src/compat_legacy.h new file mode 100644 index 0000000..68dd8ef --- /dev/null +++ b/resources_utf8/src/compat_legacy.h @@ -0,0 +1,14 @@ +#ifndef COMPAT_LEGACY_H +#define COMPAT_LEGACY_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/resources_utf8/src/creature.c b/resources_utf8/src/creature.c index 7434bd7..615a8cc 100644 --- a/resources_utf8/src/creature.c +++ b/resources_utf8/src/creature.c @@ -9,6 +9,7 @@ #include "mstruct.h" #include "mextern.h" +#include "resource_path.h" #ifdef WIN32 #include @@ -586,7 +587,7 @@ creature *crt_ptr; if(name[i] == ' ') name[i] = '_'; sprintf(file,"%s/ddesc/%s_%d",OBJPATH,name,crt_ptr->level); - fd = open(file,O_RDONLY,0); + fd = rp_open(file,O_RDONLY,0); if (fd){ n = read(fd,tmp,2048); tmp[n] = 0; diff --git a/resources_utf8/src/files2.c b/resources_utf8/src/files2.c index 4cc0f0a..4a13e0f 100644 --- a/resources_utf8/src/files2.c +++ b/resources_utf8/src/files2.c @@ -1,739 +1,740 @@ -/* - * FILES2.C: - * - * Additional file routines, including memory management. - * - * Copyright (C) 1991, 1992, 1993 Brett J. Vickers - * - */ - -#include "mstruct.h" -#include "mextern.h" - -#ifdef WIN32 -#include -#endif - -typedef struct queue_tag { /* General queue tag data struct */ - int index; - struct queue_tag *next; - struct queue_tag *prev; -} qtag; - -typedef struct rsparse { /* Sparse pointer array for rooms */ - room *rom; - qtag *q_rom; -} rsparse; - -typedef struct csparse { /* Sparse pointer array for creatures */ - creature *crt; - qtag *q_crt; -} csparse; - -typedef struct osparse { /* Sparse pointer array for objects */ - object *obj; - qtag *q_obj; -} osparse; - -static rsparse Rom[RMAX]; /* Pointer array declared */ -static csparse Crt[CMAX]; -static osparse Obj[OMAX]; - -static qtag *Romhead=0; /* Queue header and tail pointers */ -static qtag *Romtail=0; -static qtag *Crthead=0; -static qtag *Crttail=0; -static qtag *Objhead=0; -static qtag *Objtail=0; - -int Rsize=0; /* Queue sizes */ -int Csize=0; -int Osize=0; - -/**********************************************************************/ -/* load_rom */ -/**********************************************************************/ - -/* This function accepts a room number as its first argument and then */ -/* returns a dblpointer to that room's data in the second parameter. */ -/* If the room has already been loaded, the pointer is simply returned. */ -/* Otherwise, the room is loaded into memory. If a maximal number of */ -/* rooms is already in the memory, then the least recently used room */ -/* is stored back to disk, and the memory is freed. */ - -int load_rom(index, rom_ptr) -int index; -room **rom_ptr; -{ - int fd; - qtag *qt; - char file[256], filebak[256]; - - if(index >= RMAX || index < 0) - return(-1); - - /* Check if room is already loaded, and if so return pointer */ - - if(Rom[index].rom) { - front_queue(&Rom[index].q_rom, &Romhead, &Romtail, &Rsize); - *rom_ptr = Rom[index].rom; - } - - /* Otherwise load the room, store rooms if queue size becomes */ - /* too big, and return a pointer to the newly loaded room */ - - else { - sprintf(file, "%s/r%02d/r%05d", ROOMPATH, index/1000,index); - fd = open(file, O_RDONLY | O_BINARY, 0); - if(fd < 0) - return(-1); - *rom_ptr = (room *)malloc(sizeof(room)); - if(!*rom_ptr) - merror("load_rom", FATAL); - if(read_rom(fd, *rom_ptr) < 0) { - close(fd); - return(-1); - } - close(fd); - - (*rom_ptr)->rom_num = index; - - qt = (qtag *)malloc(sizeof(qtag)); - if(!qt) - merror("load_rom", FATAL); - qt->index = index; - Rom[index].rom = *rom_ptr; - Rom[index].q_rom = qt; - put_queue(&qt, &Romhead, &Romtail, &Rsize); - - while(Rsize > RQMAX) { - - pull_queue(&qt, &Romhead, &Romtail, &Rsize); - if(Rom[qt->index].rom->first_ply) { - put_queue(&qt, &Romhead, &Romtail, &Rsize); - continue; - } - sprintf(file, "%s/r%02d/r%05d", ROOMPATH, qt->index/1000,qt->index); - sprintf(filebak, "%s~", file); - rename(file, filebak); - fd = open(file, O_RDWR | O_CREAT | O_BINARY, ACC); - if(fd < 1) - return(-1); - if(!Rom[qt->index].rom) - merror("load_rom", NONFATAL); - if(write_rom(fd, Rom[qt->index].rom, PERMONLY) < 0) { - close(fd); - unlink(file); - rename(filebak, file); - merror("write_rom", NONFATAL); - return(-1); - } - close(fd); - unlink(filebak); - free_rom(Rom[qt->index].rom); - Rom[qt->index].rom = 0; - free(qt); - } - } - - add_permobj_rom(*rom_ptr); - return(0); - -} - -int is_rom_loaded(num) -int num; -{ - return(Rom[num].rom != 0); -} - -/**********************************************************************/ -/* reload_rom */ -/**********************************************************************/ - -/* This function reloads a room from disk, if it's already loaded. This */ -/* allows you to make changes to a room, and then reload it, even if it's */ -/* already in the memory room queue. */ - -int reload_rom(num) -int num; -{ - room *rom_ptr; - ctag *cp; - otag *op; - char file[80]; - int fd; - - if(!Rom[num].rom) - return(0); - - sprintf(file, "%s/r%02d/r%05d", ROOMPATH, num/1000,num); - fd = open(file, O_RDONLY | O_BINARY, 0); - if(fd < 0) - return(-1); - rom_ptr = (room *)malloc(sizeof(room)); - if(!rom_ptr) - merror("reload_rom", FATAL); - if(read_rom(fd, rom_ptr) < 0) { - close(fd); - return(-1); - } - close(fd); - - rom_ptr->first_ply = Rom[num].rom->first_ply; - Rom[num].rom->first_ply = 0; - - add_permcrt_rom(rom_ptr); - if(!rom_ptr->first_mon) { - rom_ptr->first_mon = Rom[num].rom->first_mon; - Rom[num].rom->first_mon = 0; - } - - if(!rom_ptr->first_obj) { - rom_ptr->first_obj = Rom[num].rom->first_obj; - Rom[num].rom->first_obj = 0; - } - - free_rom(Rom[num].rom); - Rom[num].rom = rom_ptr; - - cp = rom_ptr->first_ply; - while(cp) { - cp->crt->parent_rom = rom_ptr; - cp = cp->next_tag; - } - - cp = rom_ptr->first_mon; - while(cp) { - cp->crt->parent_rom = rom_ptr; - cp = cp->next_tag; - } - - op = rom_ptr->first_obj; - while(op) { - op->obj->parent_rom = rom_ptr; - op = op->next_tag; - } - - return(0); - -} - -/**********************************************************************/ -/* resave_rom */ -/**********************************************************************/ - -/* This function saves an already-loaded room back to memory without */ -/* altering its position on the queue. */ - -int resave_rom(num) -int num; -{ - char file[256], filebak[256]; - int fd; - - if(!Rom[num].rom) - return(0); - - sprintf(file, "%s/r%02d/r%05d", ROOMPATH, num/1000,num); - sprintf(filebak, "%s~", file); - rename(file, filebak); - fd = open(file, O_RDWR | O_CREAT | O_BINARY, ACC); - if(fd < 1) - return(-1); - if(write_rom(fd, Rom[num].rom, PERMONLY) < 0) { - close(fd); - unlink(file); - rename(filebak, file); - return(-1); - } - close(fd); - unlink(filebak); - - return(0); - -} - -/**********************************************************************/ -/* resave_all_rom */ -/**********************************************************************/ - -/* This function saves all memory-resident rooms back to disk. If the */ -/* permonly parameter is non-zero, then only permanent items in those */ -/* rooms are saved back. */ - -void resave_all_rom(permonly) -int permonly; -{ - qtag *qt; - char file[80]; - int fd; - - qt = Romhead; - while(qt) { - if(!Rom[qt->index].rom) { - qt = qt->next; - continue; - } - - sprintf(file, "%s/r%02d/r%05d", ROOMPATH, qt->index/1000,qt->index); - fd = open(file, O_RDWR | O_CREAT | O_BINARY, ACC); - if(fd < 1) - return; - if(write_rom(fd, Rom[qt->index].rom, permonly) < 0) { - close(fd); - return; - } - close(fd); - qt = qt->next; - } -} - -/**********************************************************************/ -/* save_all_ply */ -/**********************************************************************/ - -/* This function saves all players currently in memory. */ - -void save_all_ply() -{ - int i; - - for(i=0; iname[0]) - savegame(Ply[i].ply, 0); - } -} - -/**********************************************************************/ -/* flush_rom */ -/**********************************************************************/ - -/* This function flushes out the room queue and clears the room sparse */ -/* pointer array, without saving anything to file. It also clears all */ -/* memory used by loaded rooms. Call this function before leaving the */ -/* program. */ - -void flush_rom() -{ - qtag *qt; - - while(1) { - pull_queue(&qt, &Romhead, &Romtail, &Rsize); - if(!qt) break; - free_rom(Rom[qt->index].rom); - Rom[qt->index].rom = 0; - free(qt); - } -} - -/**********************************************************************/ -/* flush_crt */ -/**********************************************************************/ - -/* This function flushes out the monster queue and clears the monster */ -/* sparse pointer array without saving anything to file. It also */ -/* clears all memory used by loaded creatures. Call this function */ -/* before leaving the program. */ - -void flush_crt() -{ - qtag *qt; - - while(1) { - pull_queue(&qt, &Crthead, &Crttail, &Csize); - if(!qt) break; - free_crt(Crt[qt->index].crt); - Crt[qt->index].crt = 0; - free(qt); - } -} - -/**********************************************************************/ -/* flush_obj */ -/**********************************************************************/ - -/* This function flushes out the object queue and clears the object */ -/* sparse pointer array without saving anything to file. It also */ -/* clears all memory used by loaded objects. Call this function */ -/* leaving the program. */ - -void flush_obj() -{ - qtag *qt; - - while(1) { - pull_queue(&qt, &Objhead, &Objtail, &Osize); - if(!qt) break; - free_obj(Obj[qt->index].obj); - Obj[qt->index].obj = 0; - free(qt); - } -} - -/**********************************************************************/ -/* load_crt */ -/**********************************************************************/ - -/* This function returns a pointer to the monster given by the index in */ -/* the first parameter. The pointer is returned in the second. If the */ -/* monster is already in memory, then a pointer is merely returned. */ -/* Otherwise, the monster is loaded into memory and a pointer is re- */ -/* turned. If there are too many monsters in memory, then the least */ -/* recently used one is freed from memory. */ - -int load_crt(index, mon_ptr) -int index; -creature **mon_ptr; -{ - int fd; - long n; - qtag *qt; - char file[256]; - - if(index >= CMAX || index < 0) - return(-1); - - /* Check if monster is already loaded, and if so return pointer */ - - if(Crt[index].crt) { - front_queue(&Crt[index].q_crt, &Crthead, &Crttail, &Csize); - *mon_ptr = (creature *)malloc(sizeof(creature)); - **mon_ptr = *Crt[index].crt; - } - - /* Otherwise load the monster, erase monsters if queue size */ - /* becomes too big, and return a pointer to the newly loaded monster */ - - else { - sprintf(file, "%s/m%02d", MONPATH, index/MFILESIZE); - fd = open(file, O_RDONLY | O_BINARY, 0); - if(fd < 0) { - *mon_ptr = 0; - return(-1); - } - *mon_ptr = (creature *)malloc(sizeof(creature)); - if(!*mon_ptr) - merror("load_crt", FATAL); - n = lseek(fd, (long)((index%MFILESIZE)*sizeof(creature)), 0); - if(n < 0L) { - free(*mon_ptr); - close(fd); - *mon_ptr = 0; - return(-1); - } - n = read(fd, *mon_ptr, sizeof(creature)); - close(fd); - if(n < sizeof(creature)) { - free(*mon_ptr); - *mon_ptr = 0; - return(-1); - } - - (*mon_ptr)->fd = -1; - qt = (qtag *)malloc(sizeof(qtag)); - if(!qt) - merror("load_crt", FATAL); - qt->index = index; - Crt[index].crt = (creature *)malloc(sizeof(creature)); - *Crt[index].crt = **mon_ptr; - Crt[index].q_crt = qt; - put_queue(&qt, &Crthead, &Crttail, &Csize); - - while(Csize > CQMAX) { - pull_queue(&qt, &Crthead, &Crttail, &Csize); - free_crt(Crt[qt->index].crt); - Crt[qt->index].crt = 0; - free(qt); - } - } - - (*mon_ptr)->lasttime[LT_HEALS].ltime = time(0); - (*mon_ptr)->lasttime[LT_HEALS].interval = 60L; - (*mon_ptr)->first_enm= 0; - - return(0); - -} - -/**********************************************************************/ -/* load_obj */ -/**********************************************************************/ - -/* This function loads the object specified by the first parameter, and */ -/* returns a pointer to it in the second parameter. If the object has */ -/* already been loaded before, then a pointer is merely returned. */ -/* Otherwise, the object is loaded into memory and the pointer is */ -/* returned. If there are too many objects in memory, then the least */ -/* recently used objects are freed from memory. */ - -int load_obj(index, obj_ptr) -int index; -object **obj_ptr; -{ - int fd; - long n; - qtag *qt; - char file[256]; - - if(index >= OMAX || index < 0) - return(-1); - - /* Check if object is already loaded, and if so return pointer */ - - if(Obj[index].obj) { - front_queue(&Obj[index].q_obj, &Objhead, &Objtail, &Osize); - *obj_ptr = (object *)malloc(sizeof(object)); - **obj_ptr = *Obj[index].obj; - } - - /* Otherwise load the object, erase objects if queue size */ - /* becomes too big, and return a pointer to the newly loaded object */ - - else { - sprintf(file, "%s/o%02d", OBJPATH, index/OFILESIZE); - fd = open(file, O_RDONLY | O_BINARY, 0); - if(fd < 0) - return(-1); - *obj_ptr = (object *)malloc(sizeof(object)); - if(!*obj_ptr) - merror("load_obj", FATAL); - n = lseek(fd, (long)((index%OFILESIZE)*sizeof(object)), 0); - if(n < 0L) { - close(fd); - return(-1); - } - n = read(fd, *obj_ptr, sizeof(object)); - close(fd); - if(n < sizeof(object)) - return(-1); - - qt = (qtag *)malloc(sizeof(qtag)); - if(!qt) - merror("load_obj", FATAL); - qt->index = index; - Obj[index].obj = (object *)malloc(sizeof(object)); - *Obj[index].obj = **obj_ptr; - Obj[index].q_obj = qt; - put_queue(&qt, &Objhead, &Objtail, &Osize); - while(Osize > OQMAX) { - pull_queue(&qt, &Objhead, &Objtail, &Osize); - free_obj(Obj[qt->index].obj); - Obj[qt->index].obj = 0; - free(qt); - } - } - - return(0); - -} - -/***********************************************************************/ -/* save_ply */ -/***********************************************************************/ - -/* This function saves the player specified by the string in the first */ -/* parameter, and uses the player in the second parameter. */ - -int save_ply(str, ply_ptr) -char *str; -creature *ply_ptr; -{ - char file[256], filebak[256]; - int fd, n; -#ifdef COMPRESS - char *a_buf, *b_buf; - int size; -#endif - - sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(str), str); - sprintf(filebak, "%s~", file); - rename(file, filebak); - fd = open(file, O_RDWR | O_CREAT | O_BINARY, ACC); - if(fd < 0) { - rename(filebak, file); - return(-1); - } - -#ifdef COMPRESS - a_buf = (char *)malloc(100000); - if(!a_buf) merror("Memory allocation", FATAL); - n = write_crt_to_mem(a_buf, ply_ptr, 0); - if(n > 100000) merror(ply_ptr->name, FATAL); - b_buf = (char *)malloc(n); - if(!b_buf) merror("Memory allocation", FATAL); - size = compress(a_buf, b_buf, n); - n = write(fd, b_buf, size); - free(a_buf); - free(b_buf); -#else - n = write_crt(fd, ply_ptr, 0); - if(n < 0) { - close(fd); - unlink(file); - rename(filebak, file); - return(-1); - } -#endif - - close(fd); - unlink(filebak); - return(0); - -} - -/***********************************************************************/ -/* load_ply */ -/***********************************************************************/ - -/* This function loads the player specified by the string in the first */ -/* parameter, and returns the player in the second parameter. */ - -int load_ply(str, ply_ptr) -char *str; -creature **ply_ptr; -{ - char file[80]; - int fd, n; -#ifdef COMPRESS - char *a_buf, *b_buf; - int size; -#endif - - sprintf(file, "%s/%s/%s", PLAYERPATH, first_han(str), str); - fd = open(file, O_RDONLY | O_BINARY, 0); - if(fd < 0) - return(-1); - - *ply_ptr = (creature *)malloc(sizeof(creature)); - if(!*ply_ptr) - merror("load_ply", FATAL); - -#ifdef COMPRESS - a_buf = (char *)malloc(50000); - if(!a_buf) merror("Memory allocation", FATAL); - size = read(fd, a_buf, 50000); - if(size >= 50000) merror("Player too large", FATAL); - if(size < 1) { - close(fd); - return(-1); - } - b_buf = (char *)malloc(100000); - if(!b_buf) merror("Memory allocation", FATAL); - n = uncompress(a_buf, b_buf, size); - if(n > 100000) merror("Player too large", FATAL); - n = read_crt_from_mem(b_buf, *ply_ptr, 0); - free(a_buf); - free(b_buf); -#else - n = read_crt(fd, *ply_ptr); - if(n < 0) { - close(fd); - return(-1); - } -#endif - - close(fd); - return(0); - -} - -/**********************************************************************/ -/* put_queue */ -/**********************************************************************/ - -/* put_queue places the queue tag pointed to by the first paramater onto */ -/* a queue whose head and tail tag pointers are the second and third */ -/* parameters. If parameters 2 & 3 are 0, then a new queue is created. */ -/* The fourth parameter points to a queue size counter which is */ -/* incremented. */ - -void put_queue(qt, headptr, tailptr, sizeptr) -qtag **qt; -qtag **headptr; -qtag **tailptr; -int *sizeptr; -{ - *sizeptr = *sizeptr + 1; - - if(!*headptr) { - *headptr = *qt; - *tailptr = *qt; - (*qt)->next = 0; - (*qt)->prev = 0; - } - - else { - (*headptr)->prev = *qt; - (*qt)->next = *headptr; - (*qt)->prev = 0; - *headptr = *qt; - } -} - -/**********************************************************************/ -/* pull_queue */ -/**********************************************************************/ - -/* pull_queue removes the last queue tag on the queue specified by the */ -/* second and third parameters and returns that tag in the first */ -/* parameter. The fourth parameter points to a queue size counter */ -/* which is decremented. */ - -void pull_queue(qt, headptr, tailptr, sizeptr) -qtag **qt; -qtag **headptr; -qtag **tailptr; -int *sizeptr; -{ - if(!*tailptr) - *qt = 0; - else { - *sizeptr = *sizeptr - 1; - *qt = *tailptr; - if((*qt)->prev) { - (*qt)->prev->next = 0; - *tailptr = (*qt)->prev; - } - else { - *headptr = 0; - *tailptr = 0; - } - } -} - -/**********************************************************************/ -/* front_queue */ -/**********************************************************************/ - -/* front_queue removes the queue tag pointed to by the first parameter */ -/* from the queue (specified by the second and third parameters) and */ -/* places it back at the head of the queue. The fourth parameter is a */ -/* pointer to a queue size counter, and it remains unchanged. */ - -void front_queue(qt, headptr, tailptr, sizeptr) -qtag **qt; -qtag **headptr; -qtag **tailptr; -int *sizeptr; -{ - if((*qt)->prev) { - ((*qt)->prev)->next = (*qt)->next; - if(*qt == *tailptr) - *tailptr = (*qt)->prev; - } - if((*qt)->next) { - ((*qt)->next)->prev = (*qt)->prev; - if(*qt == *headptr) - *headptr = (*qt)->next; - } - if(!(*qt)->prev && !(*qt)->next) { - *headptr = 0; - *tailptr = 0; - } - (*qt)->next = 0; - (*qt)->prev = 0; - *sizeptr = *sizeptr - 1; - - put_queue(qt, headptr, tailptr, sizeptr); -} +/* + * FILES2.C: + * + * Additional file routines, including memory management. + * + * Copyright (C) 1991, 1992, 1993 Brett J. Vickers + * + */ + +#include "mstruct.h" +#include "mextern.h" +#include "resource_path.h" + +#ifdef WIN32 +#include +#endif + +typedef struct queue_tag { /* General queue tag data struct */ + int index; + struct queue_tag *next; + struct queue_tag *prev; +} qtag; + +typedef struct rsparse { /* Sparse pointer array for rooms */ + room *rom; + qtag *q_rom; +} rsparse; + +typedef struct csparse { /* Sparse pointer array for creatures */ + creature *crt; + qtag *q_crt; +} csparse; + +typedef struct osparse { /* Sparse pointer array for objects */ + object *obj; + qtag *q_obj; +} osparse; + +static rsparse Rom[RMAX]; /* Pointer array declared */ +static csparse Crt[CMAX]; +static osparse Obj[OMAX]; + +static qtag *Romhead=0; /* Queue header and tail pointers */ +static qtag *Romtail=0; +static qtag *Crthead=0; +static qtag *Crttail=0; +static qtag *Objhead=0; +static qtag *Objtail=0; + +int Rsize=0; /* Queue sizes */ +int Csize=0; +int Osize=0; + +/**********************************************************************/ +/* load_rom */ +/**********************************************************************/ + +/* This function accepts a room number as its first argument and then */ +/* returns a dblpointer to that room's data in the second parameter. */ +/* If the room has already been loaded, the pointer is simply returned. */ +/* Otherwise, the room is loaded into memory. If a maximal number of */ +/* rooms is already in the memory, then the least recently used room */ +/* is stored back to disk, and the memory is freed. */ + +int load_rom(index, rom_ptr) +int index; +room **rom_ptr; +{ + int fd; + qtag *qt; + char file[256], filebak[256]; + + if(index >= RMAX || index < 0) + return(-1); + + /* Check if room is already loaded, and if so return pointer */ + + if(Rom[index].rom) { + front_queue(&Rom[index].q_rom, &Romhead, &Romtail, &Rsize); + *rom_ptr = Rom[index].rom; + } + + /* Otherwise load the room, store rooms if queue size becomes */ + /* too big, and return a pointer to the newly loaded room */ + + else { + sprintf(file, "%s/r%02d/r%05d", ROOMPATH, index/1000,index); + fd = rp_open(file, O_RDONLY | O_BINARY, 0); + if(fd < 0) + return(-1); + *rom_ptr = (room *)malloc(sizeof(room)); + if(!*rom_ptr) + merror("load_rom", FATAL); + if(read_rom(fd, *rom_ptr) < 0) { + close(fd); + return(-1); + } + close(fd); + + (*rom_ptr)->rom_num = index; + + qt = (qtag *)malloc(sizeof(qtag)); + if(!qt) + merror("load_rom", FATAL); + qt->index = index; + Rom[index].rom = *rom_ptr; + Rom[index].q_rom = qt; + put_queue(&qt, &Romhead, &Romtail, &Rsize); + + while(Rsize > RQMAX) { + + pull_queue(&qt, &Romhead, &Romtail, &Rsize); + if(Rom[qt->index].rom->first_ply) { + put_queue(&qt, &Romhead, &Romtail, &Rsize); + continue; + } + sprintf(file, "%s/r%02d/r%05d", ROOMPATH, qt->index/1000,qt->index); + sprintf(filebak, "%s~", file); + rename(file, filebak); + fd = rp_open(file, O_RDWR | O_CREAT | O_BINARY, ACC); + if(fd < 1) + return(-1); + if(!Rom[qt->index].rom) + merror("load_rom", NONFATAL); + if(write_rom(fd, Rom[qt->index].rom, PERMONLY) < 0) { + close(fd); + unlink(file); + rename(filebak, file); + merror("write_rom", NONFATAL); + return(-1); + } + close(fd); + unlink(filebak); + free_rom(Rom[qt->index].rom); + Rom[qt->index].rom = 0; + free(qt); + } + } + + add_permobj_rom(*rom_ptr); + return(0); + +} + +int is_rom_loaded(num) +int num; +{ + return(Rom[num].rom != 0); +} + +/**********************************************************************/ +/* reload_rom */ +/**********************************************************************/ + +/* This function reloads a room from disk, if it's already loaded. This */ +/* allows you to make changes to a room, and then reload it, even if it's */ +/* already in the memory room queue. */ + +int reload_rom(num) +int num; +{ + room *rom_ptr; + ctag *cp; + otag *op; + char file[80]; + int fd; + + if(!Rom[num].rom) + return(0); + + sprintf(file, "%s/r%02d/r%05d", ROOMPATH, num/1000,num); + fd = rp_open(file, O_RDONLY | O_BINARY, 0); + if(fd < 0) + return(-1); + rom_ptr = (room *)malloc(sizeof(room)); + if(!rom_ptr) + merror("reload_rom", FATAL); + if(read_rom(fd, rom_ptr) < 0) { + close(fd); + return(-1); + } + close(fd); + + rom_ptr->first_ply = Rom[num].rom->first_ply; + Rom[num].rom->first_ply = 0; + + add_permcrt_rom(rom_ptr); + if(!rom_ptr->first_mon) { + rom_ptr->first_mon = Rom[num].rom->first_mon; + Rom[num].rom->first_mon = 0; + } + + if(!rom_ptr->first_obj) { + rom_ptr->first_obj = Rom[num].rom->first_obj; + Rom[num].rom->first_obj = 0; + } + + free_rom(Rom[num].rom); + Rom[num].rom = rom_ptr; + + cp = rom_ptr->first_ply; + while(cp) { + cp->crt->parent_rom = rom_ptr; + cp = cp->next_tag; + } + + cp = rom_ptr->first_mon; + while(cp) { + cp->crt->parent_rom = rom_ptr; + cp = cp->next_tag; + } + + op = rom_ptr->first_obj; + while(op) { + op->obj->parent_rom = rom_ptr; + op = op->next_tag; + } + + return(0); + +} + +/**********************************************************************/ +/* resave_rom */ +/**********************************************************************/ + +/* This function saves an already-loaded room back to memory without */ +/* altering its position on the queue. */ + +int resave_rom(num) +int num; +{ + char file[256], filebak[256]; + int fd; + + if(!Rom[num].rom) + return(0); + + sprintf(file, "%s/r%02d/r%05d", ROOMPATH, num/1000,num); + sprintf(filebak, "%s~", file); + rename(file, filebak); + fd = rp_open(file, O_RDWR | O_CREAT | O_BINARY, ACC); + if(fd < 1) + return(-1); + if(write_rom(fd, Rom[num].rom, PERMONLY) < 0) { + close(fd); + unlink(file); + rename(filebak, file); + return(-1); + } + close(fd); + unlink(filebak); + + return(0); + +} + +/**********************************************************************/ +/* resave_all_rom */ +/**********************************************************************/ + +/* This function saves all memory-resident rooms back to disk. If the */ +/* permonly parameter is non-zero, then only permanent items in those */ +/* rooms are saved back. */ + +void resave_all_rom(permonly) +int permonly; +{ + qtag *qt; + char file[80]; + int fd; + + qt = Romhead; + while(qt) { + if(!Rom[qt->index].rom) { + qt = qt->next; + continue; + } + + sprintf(file, "%s/r%02d/r%05d", ROOMPATH, qt->index/1000,qt->index); + fd = rp_open(file, O_RDWR | O_CREAT | O_BINARY, ACC); + if(fd < 1) + return; + if(write_rom(fd, Rom[qt->index].rom, permonly) < 0) { + close(fd); + return; + } + close(fd); + qt = qt->next; + } +} + +/**********************************************************************/ +/* save_all_ply */ +/**********************************************************************/ + +/* This function saves all players currently in memory. */ + +void save_all_ply() +{ + int i; + + for(i=0; iname[0]) + savegame(Ply[i].ply, 0); + } +} + +/**********************************************************************/ +/* flush_rom */ +/**********************************************************************/ + +/* This function flushes out the room queue and clears the room sparse */ +/* pointer array, without saving anything to file. It also clears all */ +/* memory used by loaded rooms. Call this function before leaving the */ +/* program. */ + +void flush_rom() +{ + qtag *qt; + + while(1) { + pull_queue(&qt, &Romhead, &Romtail, &Rsize); + if(!qt) break; + free_rom(Rom[qt->index].rom); + Rom[qt->index].rom = 0; + free(qt); + } +} + +/**********************************************************************/ +/* flush_crt */ +/**********************************************************************/ + +/* This function flushes out the monster queue and clears the monster */ +/* sparse pointer array without saving anything to file. It also */ +/* clears all memory used by loaded creatures. Call this function */ +/* before leaving the program. */ + +void flush_crt() +{ + qtag *qt; + + while(1) { + pull_queue(&qt, &Crthead, &Crttail, &Csize); + if(!qt) break; + free_crt(Crt[qt->index].crt); + Crt[qt->index].crt = 0; + free(qt); + } +} + +/**********************************************************************/ +/* flush_obj */ +/**********************************************************************/ + +/* This function flushes out the object queue and clears the object */ +/* sparse pointer array without saving anything to file. It also */ +/* clears all memory used by loaded objects. Call this function */ +/* leaving the program. */ + +void flush_obj() +{ + qtag *qt; + + while(1) { + pull_queue(&qt, &Objhead, &Objtail, &Osize); + if(!qt) break; + free_obj(Obj[qt->index].obj); + Obj[qt->index].obj = 0; + free(qt); + } +} + +/**********************************************************************/ +/* load_crt */ +/**********************************************************************/ + +/* This function returns a pointer to the monster given by the index in */ +/* the first parameter. The pointer is returned in the second. If the */ +/* monster is already in memory, then a pointer is merely returned. */ +/* Otherwise, the monster is loaded into memory and a pointer is re- */ +/* turned. If there are too many monsters in memory, then the least */ +/* recently used one is freed from memory. */ + +int load_crt(index, mon_ptr) +int index; +creature **mon_ptr; +{ + int fd; + long n; + qtag *qt; + char file[256]; + + if(index >= CMAX || index < 0) + return(-1); + + /* Check if monster is already loaded, and if so return pointer */ + + if(Crt[index].crt) { + front_queue(&Crt[index].q_crt, &Crthead, &Crttail, &Csize); + *mon_ptr = (creature *)malloc(sizeof(creature)); + **mon_ptr = *Crt[index].crt; + } + + /* Otherwise load the monster, erase monsters if queue size */ + /* becomes too big, and return a pointer to the newly loaded monster */ + + else { + sprintf(file, "%s/m%02d", MONPATH, index/MFILESIZE); + fd = rp_open(file, O_RDONLY | O_BINARY, 0); + if(fd < 0) { + *mon_ptr = 0; + return(-1); + } + *mon_ptr = (creature *)malloc(sizeof(creature)); + if(!*mon_ptr) + merror("load_crt", FATAL); + n = lseek(fd, (long)((index%MFILESIZE)*sizeof(creature)), 0); + if(n < 0L) { + free(*mon_ptr); + close(fd); + *mon_ptr = 0; + return(-1); + } + n = read(fd, *mon_ptr, sizeof(creature)); + close(fd); + if(n < sizeof(creature)) { + free(*mon_ptr); + *mon_ptr = 0; + return(-1); + } + + (*mon_ptr)->fd = -1; + qt = (qtag *)malloc(sizeof(qtag)); + if(!qt) + merror("load_crt", FATAL); + qt->index = index; + Crt[index].crt = (creature *)malloc(sizeof(creature)); + *Crt[index].crt = **mon_ptr; + Crt[index].q_crt = qt; + put_queue(&qt, &Crthead, &Crttail, &Csize); + + while(Csize > CQMAX) { + pull_queue(&qt, &Crthead, &Crttail, &Csize); + free_crt(Crt[qt->index].crt); + Crt[qt->index].crt = 0; + free(qt); + } + } + + (*mon_ptr)->lasttime[LT_HEALS].ltime = time(0); + (*mon_ptr)->lasttime[LT_HEALS].interval = 60L; + (*mon_ptr)->first_enm= 0; + + return(0); + +} + +/**********************************************************************/ +/* load_obj */ +/**********************************************************************/ + +/* This function loads the object specified by the first parameter, and */ +/* returns a pointer to it in the second parameter. If the object has */ +/* already been loaded before, then a pointer is merely returned. */ +/* Otherwise, the object is loaded into memory and the pointer is */ +/* returned. If there are too many objects in memory, then the least */ +/* recently used objects are freed from memory. */ + +int load_obj(index, obj_ptr) +int index; +object **obj_ptr; +{ + int fd; + long n; + qtag *qt; + char file[256]; + + if(index >= OMAX || index < 0) + return(-1); + + /* Check if object is already loaded, and if so return pointer */ + + if(Obj[index].obj) { + front_queue(&Obj[index].q_obj, &Objhead, &Objtail, &Osize); + *obj_ptr = (object *)malloc(sizeof(object)); + **obj_ptr = *Obj[index].obj; + } + + /* Otherwise load the object, erase objects if queue size */ + /* becomes too big, and return a pointer to the newly loaded object */ + + else { + sprintf(file, "%s/o%02d", OBJPATH, index/OFILESIZE); + fd = rp_open(file, O_RDONLY | O_BINARY, 0); + if(fd < 0) + return(-1); + *obj_ptr = (object *)malloc(sizeof(object)); + if(!*obj_ptr) + merror("load_obj", FATAL); + n = lseek(fd, (long)((index%OFILESIZE)*sizeof(object)), 0); + if(n < 0L) { + close(fd); + return(-1); + } + n = read(fd, *obj_ptr, sizeof(object)); + close(fd); + if(n < sizeof(object)) + return(-1); + + qt = (qtag *)malloc(sizeof(qtag)); + if(!qt) + merror("load_obj", FATAL); + qt->index = index; + Obj[index].obj = (object *)malloc(sizeof(object)); + *Obj[index].obj = **obj_ptr; + Obj[index].q_obj = qt; + put_queue(&qt, &Objhead, &Objtail, &Osize); + while(Osize > OQMAX) { + pull_queue(&qt, &Objhead, &Objtail, &Osize); + free_obj(Obj[qt->index].obj); + Obj[qt->index].obj = 0; + free(qt); + } + } + + return(0); + +} + +/***********************************************************************/ +/* save_ply */ +/***********************************************************************/ + +/* This function saves the player specified by the string in the first */ +/* parameter, and uses the player in the second parameter. */ + +int save_ply(str, ply_ptr) +char *str; +creature *ply_ptr; +{ + char file[256], filebak[256]; + int fd, n; +#ifdef COMPRESS + char *a_buf, *b_buf; + int size; +#endif + + sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(str), str); + sprintf(filebak, "%s~", file); + rename(file, filebak); + fd = rp_open(file, O_RDWR | O_CREAT | O_BINARY, ACC); + if(fd < 0) { + rename(filebak, file); + return(-1); + } + +#ifdef COMPRESS + a_buf = (char *)malloc(100000); + if(!a_buf) merror("Memory allocation", FATAL); + n = write_crt_to_mem(a_buf, ply_ptr, 0); + if(n > 100000) merror(ply_ptr->name, FATAL); + b_buf = (char *)malloc(n); + if(!b_buf) merror("Memory allocation", FATAL); + size = compress(a_buf, b_buf, n); + n = write(fd, b_buf, size); + free(a_buf); + free(b_buf); +#else + n = write_crt(fd, ply_ptr, 0); + if(n < 0) { + close(fd); + unlink(file); + rename(filebak, file); + return(-1); + } +#endif + + close(fd); + unlink(filebak); + return(0); + +} + +/***********************************************************************/ +/* load_ply */ +/***********************************************************************/ + +/* This function loads the player specified by the string in the first */ +/* parameter, and returns the player in the second parameter. */ + +int load_ply(str, ply_ptr) +char *str; +creature **ply_ptr; +{ + char file[80]; + int fd, n; +#ifdef COMPRESS + char *a_buf, *b_buf; + int size; +#endif + + sprintf(file, "%s/%s/%s", PLAYERPATH, first_han(str), str); + fd = rp_open(file, O_RDONLY | O_BINARY, 0); + if(fd < 0) + return(-1); + + *ply_ptr = (creature *)malloc(sizeof(creature)); + if(!*ply_ptr) + merror("load_ply", FATAL); + +#ifdef COMPRESS + a_buf = (char *)malloc(50000); + if(!a_buf) merror("Memory allocation", FATAL); + size = read(fd, a_buf, 50000); + if(size >= 50000) merror("Player too large", FATAL); + if(size < 1) { + close(fd); + return(-1); + } + b_buf = (char *)malloc(100000); + if(!b_buf) merror("Memory allocation", FATAL); + n = uncompress(a_buf, b_buf, size); + if(n > 100000) merror("Player too large", FATAL); + n = read_crt_from_mem(b_buf, *ply_ptr, 0); + free(a_buf); + free(b_buf); +#else + n = read_crt(fd, *ply_ptr); + if(n < 0) { + close(fd); + return(-1); + } +#endif + + close(fd); + return(0); + +} + +/**********************************************************************/ +/* put_queue */ +/**********************************************************************/ + +/* put_queue places the queue tag pointed to by the first paramater onto */ +/* a queue whose head and tail tag pointers are the second and third */ +/* parameters. If parameters 2 & 3 are 0, then a new queue is created. */ +/* The fourth parameter points to a queue size counter which is */ +/* incremented. */ + +void put_queue(qt, headptr, tailptr, sizeptr) +qtag **qt; +qtag **headptr; +qtag **tailptr; +int *sizeptr; +{ + *sizeptr = *sizeptr + 1; + + if(!*headptr) { + *headptr = *qt; + *tailptr = *qt; + (*qt)->next = 0; + (*qt)->prev = 0; + } + + else { + (*headptr)->prev = *qt; + (*qt)->next = *headptr; + (*qt)->prev = 0; + *headptr = *qt; + } +} + +/**********************************************************************/ +/* pull_queue */ +/**********************************************************************/ + +/* pull_queue removes the last queue tag on the queue specified by the */ +/* second and third parameters and returns that tag in the first */ +/* parameter. The fourth parameter points to a queue size counter */ +/* which is decremented. */ + +void pull_queue(qt, headptr, tailptr, sizeptr) +qtag **qt; +qtag **headptr; +qtag **tailptr; +int *sizeptr; +{ + if(!*tailptr) + *qt = 0; + else { + *sizeptr = *sizeptr - 1; + *qt = *tailptr; + if((*qt)->prev) { + (*qt)->prev->next = 0; + *tailptr = (*qt)->prev; + } + else { + *headptr = 0; + *tailptr = 0; + } + } +} + +/**********************************************************************/ +/* front_queue */ +/**********************************************************************/ + +/* front_queue removes the queue tag pointed to by the first parameter */ +/* from the queue (specified by the second and third parameters) and */ +/* places it back at the head of the queue. The fourth parameter is a */ +/* pointer to a queue size counter, and it remains unchanged. */ + +void front_queue(qt, headptr, tailptr, sizeptr) +qtag **qt; +qtag **headptr; +qtag **tailptr; +int *sizeptr; +{ + if((*qt)->prev) { + ((*qt)->prev)->next = (*qt)->next; + if(*qt == *tailptr) + *tailptr = (*qt)->prev; + } + if((*qt)->next) { + ((*qt)->next)->prev = (*qt)->prev; + if(*qt == *headptr) + *headptr = (*qt)->next; + } + if(!(*qt)->prev && !(*qt)->next) { + *headptr = 0; + *tailptr = 0; + } + (*qt)->next = 0; + (*qt)->prev = 0; + *sizeptr = *sizeptr - 1; + + put_queue(qt, headptr, tailptr, sizeptr); +} diff --git a/resources_utf8/src/files3.c b/resources_utf8/src/files3.c index 29a5164..b51877d 100644 --- a/resources_utf8/src/files3.c +++ b/resources_utf8/src/files3.c @@ -9,6 +9,7 @@ #include "mstruct.h" #include "mextern.h" +#include "resource_path.h" #include #include @@ -270,7 +271,7 @@ creature *crt_ptr; crt_name[i] = '_'; sprintf(path, "%s/talk/%s-%d", MONPATH, crt_name, crt_ptr->level); - fp = fopen(path, "r"); + fp = rp_fopen(path, "r"); if(!fp) return(0); i = 0; diff --git a/resources_utf8/src/io.c b/resources_utf8/src/io.c index 8320aeb..6935fa0 100644 --- a/resources_utf8/src/io.c +++ b/resources_utf8/src/io.c @@ -592,13 +592,13 @@ void output_buf() void print(fd, fmt, i1, i2, i3, i4, i5, i6) int fd; unsigned char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char msg[3072]; char *fmt2; int i = 0, j = 0, k, n, otail, ohead; int num, loc, ind = -1, len, flags = 0; - int arg[8]; + long arg[8]; char type; char *prestr; char *Josa[6][2]={ {"","",},{"","",},{"","",},{"","",},{"","",},}; @@ -661,10 +661,10 @@ int i1, i2, i3, i4, i5, i6; switch(type) { case 'm': - arg[ind] = (int)(prestr=crt_str(arg[ind], num, flags|CAP)); + arg[ind] = (long)(prestr=crt_str(arg[ind], num, flags|CAP)); continue; case 'M': - arg[ind] = (int)(prestr=crt_str(arg[ind], num, flags)); + arg[ind] = (long)(prestr=crt_str(arg[ind], num, flags)); continue; case 'S': prestr=(char *)arg[ind]; @@ -676,31 +676,31 @@ int i1, i2, i3, i4, i5, i6; case '2': case '3': case '4': - if(under_han(prestr)) arg[ind]=(int)Josa[*((char *)arg[ind])-'0'][0]; - else arg[ind] = (int)Josa[*((char *)arg[ind])-'0'][1]; + if(under_han(prestr)) arg[ind] = (long)Josa[*((char *)arg[ind])-'0'][0]; + else arg[ind] = (long)Josa[*((char *)arg[ind])-'0'][1]; break; - default: arg[ind]= (int)""; + default: arg[ind] = (long)""; } continue; case 'i': case 'I': - arg[ind] = (int)(prestr=obj_str(arg[ind], num, flags)); + arg[ind] = (long)(prestr=obj_str(arg[ind], num, flags)); continue; case 'C': if(F_ISSET(Ply[fd].ply,PANSIC)) { sprintf(color_buf1,"%c[%d;%sm",27, (F_ISSET(Ply[fd].ply,PBRIGH)&&atoi((char *)arg[ind])!=WHITE)?1:0, (char *)arg[ind]); - arg[ind]=(int)color_buf1; - } else arg[ind]= (int)""; + arg[ind] = (long)color_buf1; + } else arg[ind] = (long)""; continue; case 'D': if(F_ISSET(Ply[fd].ply,PANSIC)) { sprintf(color_buf2,"%c[%d;%sm",27, (F_ISSET(Ply[fd].ply,PBRIGH)&&atoi((char *)arg[ind])!=WHITE)?1:0, (char *)arg[ind]); - arg[ind]=(int)color_buf2; - } else arg[ind]= (int)""; + arg[ind] = (long)color_buf2; + } else arg[ind] = (long)""; continue; } } @@ -894,7 +894,7 @@ int fd; void broadcast(fmt, i1, i2, i3, i4, i5, i6) char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -910,7 +910,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast2(fmt, i1, i2, i3, i4, i5, i6) char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -925,7 +925,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast_all(fmt, i1, i2, i3, i4, i5, i6) char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -948,7 +948,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast_wiz(fmt, i1, i2, i3, i4, i5, i6) char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -974,7 +974,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast_eaves(fmt, i1, i2, i3, i4, i5, i6) char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -1002,7 +1002,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast_rom(ignore, rm, fmt, i1, i2, i3, i4, i5, i6) int ignore, rm; char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; @@ -1027,7 +1027,7 @@ int i1, i2, i3, i4, i5, i6; void broadcast_rom2(ignore1, ignore2, rm, fmt, i1, i2, i3, i4, i5, i6) int ignore1, ignore2, rm; char *fmt; -int i1, i2, i3, i4, i5, i6; +long i1, i2, i3, i4, i5, i6; { char fmt2[1024]; int i; diff --git a/resources_utf8/src/main.c b/resources_utf8/src/main.c index 18496c3..85cf14f 100644 --- a/resources_utf8/src/main.c +++ b/resources_utf8/src/main.c @@ -32,7 +32,7 @@ char *argv[]; #ifdef SCHED if(argc == 1) Port = schedule_g(); -#endif SCHED +#endif /* SCHED */ #ifndef DEBUG #ifndef WIN32 @@ -43,17 +43,17 @@ char *argv[]; #endif if (argc == 2) - if(isnumber(argv[1])) + if(is_number_str(argv[1])) Port = atoi(argv[1]); else if (!strcmp(argv[1],"-r")) report = 1; if (argc == 3){ - if(isnumber(argv[1])) + if(is_number_str(argv[1])) Port = atoi(argv[1]); else if (!strcmp(argv[1],"-r")) report = 1; - if(isnumber(argv[2])) + if(is_number_str(argv[2])) Port = atoi(argv[2]); else if (!strcmp(argv[2],"-r")) report = 1; @@ -80,7 +80,7 @@ char *argv[]; #ifdef RECORD_ALL mvc_log(); -#endif RECORD_ALL +#endif /* RECORD_ALL */ { long c; c = time(0); diff --git a/resources_utf8/src/mextern.h b/resources_utf8/src/mextern.h index 94bb41a..131b724 100644 --- a/resources_utf8/src/mextern.h +++ b/resources_utf8/src/mextern.h @@ -9,6 +9,7 @@ */ #include +#include "compat_legacy.h" #ifndef WIN32 @@ -130,11 +131,11 @@ extern void drop_all_bank(), get_all_bank(); /* IO.C */ extern int io_check(), accept_input(), locked_out(), addr_equal(), - remove_wait(); + remove_wait(), scwrite(); extern void sock_init(), sock_loop(), accept_connect(), output_buf(), print(), handle_commands(), disconnect(), broadcast(), broadcast2(), broadcast_all(), broadcast_wiz(), broadcast_rom(), broadcast_rom2(), - broadcast_robot_rom(), add_wait(), init_connect(), + broadcast_eaves(), broadcast_robot_rom(), add_wait(), init_connect(), waiting(), child_died(), reap_children(); /* COMMAND1.C */ @@ -195,7 +196,8 @@ extern int flee(), list(), buy(), sell(), value(), backstab(), train(), extern int give(), repair(), prt_time(), circle(), bash(), savegame(), talk(), chg_name(), moon_set(), kick(); extern int savegame_nomsg(); -extern void give_money(), talk_action(), enemy_status(); +extern void give_money(), talk_action(); +extern int enemy_status(); /* COMMAND9.C */ @@ -328,7 +330,7 @@ extern creature *find_who(), *lowest_piety(), *low_piety_alg(), *enemy_ply(); extern creature *find_crt(); extern int add_enm_crt(), del_enm_crt(), is_enm_crt(), add_charm_crt(), - del_charm_crt(), is_charm_crt(); + del_charm_crt(), is_charm_crt(), find_enm_crt(); extern void end_enm_crt(), die(), temp_perm(), die_perm_crt(), check_for_flee(), consider(), add_enm_dmg(), display_status(); @@ -368,14 +370,14 @@ extern int action(); /* MISC.C */ extern void merror(), lowercize(), zero(), delimit(), view_file(), log_f(), - sort_cmds(), load_lockouts(), please_wait(), logn(); + sort_cmds(), load_lockouts(), please_wait(), logn(), log_fl(), log_dmcmd(); extern int low(), up(), dice(), exp_to_lev(), dec_daily(), sort_cmp(), - file_exists(), isnumber(); + file_exists(), is_number_str(); extern char *crt_str(), *obj_str(); /* SPECIAL1.C */ -extern int call_war(), special_obj(), special_read(), is_bad_item(); +extern int call_war(), special_obj(), special_read(), is_bad_item(), special_cmd(); extern void check_item(), check_contain(), free_obj2(); #ifdef COMPRESS diff --git a/resources_utf8/src/misc.c b/resources_utf8/src/misc.c index 668fa88..1bc73ea 100644 --- a/resources_utf8/src/misc.c +++ b/resources_utf8/src/misc.c @@ -527,7 +527,7 @@ struct daily *dly_ptr; void log_f(fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024]; @@ -551,7 +551,7 @@ int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; void log_dm(fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024]; @@ -572,7 +572,7 @@ int i1, i2, i3, i4, i5, i6, i7, i9, i10; void log_dmcmd(fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024],str2[1024]; @@ -598,7 +598,7 @@ int i1, i2, i3, i4, i5, i6, i7, i9, i10; } void log_fl(cur_time, cur_name) -int cur_time, cur_name; +char *cur_time, *cur_name; { char file[80], file2[80]; char str[1024], str2[1024]; @@ -749,7 +749,7 @@ int duration; void logn(name,fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *name; char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024]; @@ -791,7 +791,7 @@ int i1,i2,i3,i4,i5,i6; } /*====================================================================*/ -int isnumber(str) +int is_number_str(str) char *str; /* checks if the given str contains all digits */ @@ -807,7 +807,7 @@ char *str; void log_pl(fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024]; @@ -828,7 +828,7 @@ int i1, i2, i3, i4, i5, i6, i7, i9, i10; void log_plcmd(fmt, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10) char *fmt; -int i1, i2, i3, i4, i5, i6, i7, i9, i10; +long i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; { char file[80]; char str[1024]; diff --git a/resources_utf8/src/mtype.h b/resources_utf8/src/mtype.h index aa2b854..04035e0 100644 --- a/resources_utf8/src/mtype.h +++ b/resources_utf8/src/mtype.h @@ -6,7 +6,7 @@ * Copyright (C) 1991, 1992, 1993 Brett J. Vickers * */ -int Port; +extern int Port; /* socket port number */ #define PORTNUM 4000 diff --git a/resources_utf8/src/resource_path.c b/resources_utf8/src/resource_path.c new file mode 100644 index 0000000..0b6531d --- /dev/null +++ b/resources_utf8/src/resource_path.c @@ -0,0 +1,305 @@ +#include "mstruct.h" +#include "mextern.h" +#include "resource_path.h" + +#define RP_MAX_LINE 8192 + +typedef struct rp_alias { + char *legacy_hex; + char *normalized; +} rp_alias; + +static rp_alias *g_aliases = 0; +static int g_alias_count = 0; +static int g_alias_loaded = 0; + +#ifdef USE_RUST_RESOLVER +extern int mr_manifest_load(const char *manifest_path); +extern int mr_resolve_legacy_path(const char *legacy_path, char *out, unsigned long out_sz); +static int g_rust_manifest_loaded = 0; +#endif + +static char *rp_strdup(const char *s) +{ + unsigned long n; + char *p; + + if(!s) + return 0; + + n = (unsigned long)strlen(s) + 1; + p = (char *)malloc(n); + if(!p) + return 0; + + memcpy(p, s, n); + return p; +} + +static void rp_get_runtime_root(char *out, unsigned long out_sz) +{ + char *env_root; + + if(!out || out_sz == 0) + return; + + env_root = getenv("MUHAN_HOME"); + if(env_root && env_root[0]) { + snprintf(out, out_sz, "%s", env_root); + return; + } + + snprintf(out, out_sz, "%s", MUDHOME); +} + +static int rp_path_exists(const char *path) +{ + if(!path || !path[0]) + return 0; + return access(path, F_OK) == 0; +} + +static int rp_starts_with(const char *s, const char *prefix) +{ + unsigned long n; + + if(!s || !prefix) + return 0; + + n = (unsigned long)strlen(prefix); + if(strlen(s) < n) + return 0; + + return strncmp(s, prefix, n) == 0; +} + +static void rp_bytes_to_hex(const unsigned char *in, char *out, unsigned long out_sz) +{ + static const char hex[] = "0123456789ABCDEF"; + unsigned long i, j, n; + + if(!in || !out || out_sz == 0) + return; + + n = (unsigned long)strlen((const char *)in); + j = 0; + for(i = 0; i < n && (j + 2) < out_sz; i++) { + out[j++] = hex[(in[i] >> 4) & 0x0f]; + out[j++] = hex[in[i] & 0x0f]; + } + out[j] = 0; +} + +static int rp_is_read_mode(const char *mode) +{ + if(!mode || !mode[0]) + return 1; + + if(strchr(mode, 'w') || strchr(mode, 'a') || strchr(mode, '+')) + return 0; + + return 1; +} + +static void rp_load_aliases(void) +{ + char root[512], alias_file[1024], line[RP_MAX_LINE]; + FILE *fp; + + if(g_alias_loaded) + return; + g_alias_loaded = 1; + + rp_get_runtime_root(root, sizeof(root)); + snprintf(alias_file, sizeof(alias_file), "%s/resources_manifest/path-alias.v1.tsv", root); + + fp = fopen(alias_file, "r"); + if(!fp) + return; + + while(fgets(line, sizeof(line), fp)) { + char *legacy_hex; + char *legacy_cp949; + char *normalized; + char *sha; + rp_alias *tmp; + + if(strncmp(line, "legacy_path_hex\t", 16) == 0) + continue; + + legacy_hex = strtok(line, "\t\r\n"); + legacy_cp949 = strtok(0, "\t\r\n"); + normalized = strtok(0, "\t\r\n"); + sha = strtok(0, "\t\r\n"); + + (void)legacy_cp949; + (void)sha; + + if(!legacy_hex || !normalized) + continue; + + tmp = (rp_alias *)realloc(g_aliases, sizeof(rp_alias) * (g_alias_count + 1)); + if(!tmp) + continue; + + g_aliases = tmp; + g_aliases[g_alias_count].legacy_hex = rp_strdup(legacy_hex); + g_aliases[g_alias_count].normalized = rp_strdup(normalized); + if(g_aliases[g_alias_count].legacy_hex && g_aliases[g_alias_count].normalized) + g_alias_count++; + } + + fclose(fp); +} + +static const char *rp_find_alias(const char *legacy_hex) +{ + int i; + + if(!legacy_hex) + return 0; + + rp_load_aliases(); + for(i = 0; i < g_alias_count; i++) { + if(strcmp(g_aliases[i].legacy_hex, legacy_hex) == 0) + return g_aliases[i].normalized; + } + + return 0; +} + +int resolve_legacy_path(const char *legacy_path, char *out, unsigned long out_sz) +{ + char root[512], adjusted[1024], hexbuf[2048], candidate[2048]; + const char *rel = 0; + const char *alias; + unsigned long root_len; + + if(!legacy_path || !out || out_sz == 0) + return -1; + + out[0] = 0; + + if(rp_path_exists(legacy_path)) { + snprintf(out, out_sz, "%s", legacy_path); + return 0; + } + + rp_get_runtime_root(root, sizeof(root)); + root_len = (unsigned long)strlen(root); + +#ifdef USE_RUST_RESOLVER + if(!g_rust_manifest_loaded) { + char manifest_path[1024]; + snprintf(manifest_path, sizeof(manifest_path), "%s/resources_manifest/path-alias.v1.tsv", root); + g_rust_manifest_loaded = (mr_manifest_load(manifest_path) == 0) ? 1 : -1; + } + + if(g_rust_manifest_loaded == 1) { + if(mr_resolve_legacy_path(legacy_path, candidate, sizeof(candidate)) == 0) { + if(candidate[0] == '/') { + snprintf(out, out_sz, "%s", candidate); + } else { + char rust_joined[2048]; + snprintf(rust_joined, sizeof(rust_joined), "%s/resources_utf8/%s", root, candidate); + snprintf(out, out_sz, "%s", rust_joined); + } + return rp_path_exists(out) ? 0 : -1; + } + } +#endif + + adjusted[0] = 0; + if(rp_starts_with(legacy_path, MUDHOME) && strcmp(root, MUDHOME) != 0) { + snprintf(adjusted, sizeof(adjusted), "%s%s", root, legacy_path + strlen(MUDHOME)); + if(rp_path_exists(adjusted)) { + snprintf(out, out_sz, "%s", adjusted); + return 0; + } + } + + if(rp_starts_with(legacy_path, MUDHOME "/")) + rel = legacy_path + strlen(MUDHOME) + 1; + else if(root_len > 0 && rp_starts_with(legacy_path, root) && legacy_path[root_len] == '/') + rel = legacy_path + root_len + 1; + else if(legacy_path[0] != '/') + rel = legacy_path; + + if(rel && rel[0]) { + rp_bytes_to_hex((const unsigned char *)rel, hexbuf, sizeof(hexbuf)); + alias = rp_find_alias(hexbuf); + + if(alias && alias[0]) { + snprintf(candidate, sizeof(candidate), "%s/resources_utf8/%s", root, alias); + if(rp_path_exists(candidate)) { + snprintf(out, out_sz, "%s", candidate); + return 0; + } + } + + snprintf(candidate, sizeof(candidate), "%s/resources_utf8/%s", root, rel); + if(rp_path_exists(candidate)) { + snprintf(out, out_sz, "%s", candidate); + return 0; + } + } + + if(adjusted[0]) { + snprintf(out, out_sz, "%s", adjusted); + return rp_path_exists(adjusted) ? 0 : -1; + } + + snprintf(out, out_sz, "%s", legacy_path); + return rp_path_exists(legacy_path) ? 0 : -1; +} + +FILE *rp_fopen(const char *path, const char *mode) +{ + char resolved[2048]; + + if(rp_is_read_mode(mode)) { + if(resolve_legacy_path(path, resolved, sizeof(resolved)) == 0) + return fopen(resolved, mode); + } else { + char root[512], adjusted[2048]; + rp_get_runtime_root(root, sizeof(root)); + if(rp_starts_with(path, MUDHOME) && strcmp(root, MUDHOME) != 0) { + snprintf(adjusted, sizeof(adjusted), "%s%s", root, path + strlen(MUDHOME)); + return fopen(adjusted, mode); + } + } + + return fopen(path, mode); +} + +int rp_open(const char *path, int flags, int mode) +{ + char resolved[2048]; + int read_only; + + read_only = ((flags & O_ACCMODE) == O_RDONLY) && !(flags & O_CREAT); + + if(read_only) { + if(resolve_legacy_path(path, resolved, sizeof(resolved)) == 0) + return open(resolved, flags, mode); + } else { + char root[512], adjusted[2048]; + rp_get_runtime_root(root, sizeof(root)); + if(rp_starts_with(path, MUDHOME) && strcmp(root, MUDHOME) != 0) { + snprintf(adjusted, sizeof(adjusted), "%s%s", root, path + strlen(MUDHOME)); + return open(adjusted, flags, mode); + } + } + + return open(path, flags, mode); +} + +int rp_stat(const char *path, struct stat *st) +{ + char resolved[2048]; + + if(resolve_legacy_path(path, resolved, sizeof(resolved)) == 0) + return stat(resolved, st); + + return stat(path, st); +} diff --git a/resources_utf8/src/resource_path.h b/resources_utf8/src/resource_path.h new file mode 100644 index 0000000..21c2073 --- /dev/null +++ b/resources_utf8/src/resource_path.h @@ -0,0 +1,12 @@ +#ifndef RESOURCE_PATH_H +#define RESOURCE_PATH_H + +#include +#include + +int resolve_legacy_path(const char *legacy_path, char *out, unsigned long out_sz); +FILE *rp_fopen(const char *path, const char *mode); +int rp_open(const char *path, int flags, int mode); +int rp_stat(const char *path, struct stat *st); + +#endif diff --git a/resources_utf8/src/room.c b/resources_utf8/src/room.c index 0bd56eb..d464434 100644 --- a/resources_utf8/src/room.c +++ b/resources_utf8/src/room.c @@ -225,6 +225,9 @@ int num; ctag *cg, *temp, *prev; char str[160]; + if(!crt_ptr || !rom_ptr) + return; + crt_ptr->parent_rom = rom_ptr; crt_ptr->rom_num = rom_ptr->rom_num; diff --git a/resources_utf8/src/update.c b/resources_utf8/src/update.c index 358b2f7..54cf6c2 100644 --- a/resources_utf8/src/update.c +++ b/resources_utf8/src/update.c @@ -70,7 +70,7 @@ void update_game() #ifdef RECORD_ALL if(t- last_allcmd >= 300) update_allcmd(t); -#endif RECORD_ALL +#endif /* RECORD_ALL */ } /**********************************************************************/ @@ -773,7 +773,8 @@ long t; if(strlen(new_rom->name) < 2) return; - load_crt(mrand(732, 755), &crt_ptr); + if(load_crt(mrand(732, 755), &crt_ptr) < 0 || !crt_ptr) + continue; add_crt_rom(crt_ptr, new_rom); } broadcast("\n巹Ͼƿ ī Ͽ ħ߽ϴ. \"϶!!\""); @@ -794,7 +795,8 @@ long t; for (tmp; tmp < 10; tmp++) { rom_num = mrand(3601, 3630); - load_crt(mrand(265, 299), &crt_ptr); + if(load_crt(mrand(265, 299), &crt_ptr) < 0 || !crt_ptr) + continue; if(load_rom(rom_num, &new_rom) < 0) continue; add_crt_rom(crt_ptr, new_rom); } @@ -840,7 +842,7 @@ long t; #ifdef RECORD_ALL sprintf(path,"%s/%s",LOGPATH,"all_cmd"); unlink(path); -#endif RECORD_ALL +#endif /* RECORD_ALL */ #ifndef WIN32 kill(getpid(), 9); #endif diff --git a/resources_utf8/tests/smoke/compare_resolvers.py b/resources_utf8/tests/smoke/compare_resolvers.py new file mode 100644 index 0000000..b8edbeb --- /dev/null +++ b/resources_utf8/tests/smoke/compare_resolvers.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +import argparse +import json +import os +import pathlib +import subprocess +import sys + + +def run_probe(probe: str, hex_lines: list[str]) -> dict[str, tuple[int, str]]: + payload = ("\n".join(hex_lines) + "\n").encode("ascii") + p = subprocess.run([probe], input=payload, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) + out = p.stdout.decode("utf-8", errors="replace").splitlines() + + result: dict[str, tuple[int, str]] = {} + for line in out: + parts = line.split("\t", 2) + if len(parts) < 3: + continue + key, rc_s, resolved = parts[0], parts[1], parts[2] + try: + rc = int(rc_s) + except ValueError: + rc = -999 + result[key] = (rc, resolved) + return result + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--probe-a", required=True) + ap.add_argument("--probe-b", required=True) + ap.add_argument("--manifest", default="resources_manifest/resource-map.v1.json") + ap.add_argument("--muhan-home", default=os.environ.get("MUHAN_HOME", "/work")) + args = ap.parse_args() + + manifest = json.loads(pathlib.Path(args.manifest).read_text(encoding="utf-8")) + hex_lines = [row["legacy_path_hex"] for row in manifest] + + a = run_probe(args.probe_a, hex_lines) + b = run_probe(args.probe_b, hex_lines) + + mismatches = [] + missing = [] + + for row in manifest: + h = row["legacy_path_hex"] + expected_utf8 = os.path.realpath(os.path.join(args.muhan_home, "resources_utf8", row["normalized_utf8_path"])) + raw = bytes.fromhex(h) + has_non_ascii = any(b >= 0x80 for b in raw) + + if h not in a or h not in b: + missing.append(h) + continue + + a_rc, a_path = a[h] + b_rc, b_path = b[h] + + a_real = os.path.realpath(a_path) if a_path else "" + b_real = os.path.realpath(b_path) if b_path else "" + + if a_rc != 0 or b_rc != 0 or a_real != b_real: + mismatches.append((h, a_rc, a_path, b_rc, b_path, expected_utf8)) + continue + + if has_non_ascii and a_real != expected_utf8: + mismatches.append((h, a_rc, a_path, b_rc, b_path, expected_utf8)) + + if missing: + print(f"resolver parity failed: missing probe rows={len(missing)}") + for h in missing[:20]: + print(f" missing: {h}") + return 1 + + if mismatches: + print(f"resolver parity failed: mismatches={len(mismatches)}") + for h, a_rc, a_path, b_rc, b_path, expected in mismatches[:20]: + print(f" {h}") + print(f" c: rc={a_rc} path={a_path}") + print(f" rust: rc={b_rc} path={b_path}") + print(f" exp: {expected}") + return 1 + + print(f"resolver parity ok: {len(manifest)} paths") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/resources_utf8/tests/smoke/rp_probe.c b/resources_utf8/tests/smoke/rp_probe.c new file mode 100644 index 0000000..4fe6429 --- /dev/null +++ b/resources_utf8/tests/smoke/rp_probe.c @@ -0,0 +1,60 @@ +#include +#include +#include + +#include "resource_path.h" + +static int hexval(int c) +{ + if(c >= '0' && c <= '9') return c - '0'; + if(c >= 'a' && c <= 'f') return c - 'a' + 10; + if(c >= 'A' && c <= 'F') return c - 'A' + 10; + return -1; +} + +int main(void) +{ + char line[8192]; + + while(fgets(line, sizeof(line), stdin)) { + unsigned char legacy[4096]; + char out[4096]; + char *p; + int len, i, rc; + + p = line; + while(*p && *p != '\n' && *p != '\r') p++; + *p = 0; + + len = (int)strlen(line); + if(len == 0) { + continue; + } + + if(len % 2 != 0 || len / 2 >= (int)sizeof(legacy)) { + printf("%s\t-9\t\n", line); + continue; + } + + for(i = 0; i < len / 2; i++) { + int hi = hexval((unsigned char)line[i * 2]); + int lo = hexval((unsigned char)line[i * 2 + 1]); + if(hi < 0 || lo < 0) { + printf("%s\t-8\t\n", line); + fflush(stdout); + goto next_line; + } + legacy[i] = (unsigned char)((hi << 4) | lo); + } + legacy[len / 2] = 0; + + out[0] = 0; + rc = resolve_legacy_path((const char *)legacy, out, sizeof(out)); + printf("%s\t%d\t%s\n", line, rc, (rc == 0) ? out : ""); + fflush(stdout); +next_line: + ; + } + + return 0; +} diff --git a/resources_utf8/tests/smoke/session_smoke.py b/resources_utf8/tests/smoke/session_smoke.py new file mode 100644 index 0000000..a916aa7 --- /dev/null +++ b/resources_utf8/tests/smoke/session_smoke.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +import os +import random +import socket +import string +import time + +HOST = "127.0.0.1" +PORT = int(os.environ.get("MUD_PORT", "4000")) +ENC = "cp949" +EXPECT_HINTS = os.environ.get("SMOKE_EXPECT_HINTS", "1") not in ("0", "false", "False") + + +def recv_some(sock: socket.socket, timeout: float = 0.5) -> bytes: + sock.settimeout(timeout) + chunks = [] + while True: + try: + data = sock.recv(4096) + if not data: + break + chunks.append(data) + if len(data) < 4096: + break + except socket.timeout: + break + return b"".join(chunks) + + +def send_line(sock: socket.socket, text: str, wait: float = 0.6) -> bytes: + sock.sendall(text.encode(ENC) + b"\n") + time.sleep(wait) + return recv_some(sock) + + +def wait_port(host: str, port: int, sec: float = 40.0) -> None: + t0 = time.time() + while time.time() - t0 < sec: + try: + with socket.create_connection((host, port), timeout=0.5): + return + except OSError: + time.sleep(0.2) + raise RuntimeError("server port not ready") + + +def mk_name() -> str: + # Keep first char "타" so legacy first_han() folder stays under player/타. + second = chr(0xAC00 + random.randint(0, 11171)) + third = chr(0xAC00 + random.randint(0, 11171)) + return "타" + second + third + + +def main() -> None: + wait_port(HOST, PORT) + + name = mk_name() + password = "pw" + "".join(random.choice(string.digits) for _ in range(4)) + + transcript = bytearray() + transcript2 = bytearray() + + # Session 1: create player + run core commands. + with socket.create_connection((HOST, PORT), timeout=3.0) as sock: + time.sleep(0.7) + transcript.extend(recv_some(sock, 1.0)) + + for step in [ + name, + "y", + "남", + "4", + "12 10 12 10 10", + "1", + "선", + "7", + password, + "환영", + "도움말", + "건강", + "저장", + ]: + transcript.extend(send_line(sock, step)) + + time.sleep(0.5) + + # Session 2: login existing player (save/load round-trip path). + with socket.create_connection((HOST, PORT), timeout=3.0) as sock: + time.sleep(0.7) + transcript2.extend(recv_some(sock, 1.0)) + for step in [ + name, + password, + "건강", + "도움말", + ]: + transcript2.extend(send_line(sock, step)) + + transcript.extend(transcript2) + + text = transcript.decode(ENC, errors="ignore") + + if len(transcript) < 200: + raise RuntimeError("smoke failed: too little server output") + + if EXPECT_HINTS: + hints = ["도움", "환영", "건강", "이름"] + if not any(h in text for h in hints): + raise RuntimeError("smoke failed: expected response hints not found") + + if len(transcript2) < 60: + raise RuntimeError("smoke failed: reconnect transcript too small") + + +if __name__ == "__main__": + main() diff --git a/resources_utf8/tools/revive/extract-legacy-blobs.sh b/resources_utf8/tools/revive/extract-legacy-blobs.sh new file mode 100644 index 0000000..7a3b042 --- /dev/null +++ b/resources_utf8/tools/revive/extract-legacy-blobs.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$repo_root" + +out_root="${1:-resources_utf8}" +manifest_dir="${2:-resources_manifest}" + +python3 - "$out_root" "$manifest_dir" <<'PY' +import json +import hashlib +import pathlib +import shutil +import subprocess +import sys +import unicodedata +from typing import Tuple + +out_root = pathlib.Path(sys.argv[1]) +manifest_dir = pathlib.Path(sys.argv[2]) + +if out_root.exists(): + shutil.rmtree(out_root) +if manifest_dir.exists(): + shutil.rmtree(manifest_dir) +out_root.mkdir(parents=True, exist_ok=True) +manifest_dir.mkdir(parents=True, exist_ok=True) + + +def run_git(*args: str) -> bytes: + return subprocess.run(["git", *args], check=True, stdout=subprocess.PIPE).stdout + + +def safe_seg(seg: bytes) -> Tuple[str, bool]: + try: + return seg.decode("cp949"), True + except UnicodeDecodeError: + return f"__legacy_hex_{seg.hex().upper()}", False + + +def classify_blob(data: bytes) -> Tuple[str, str]: + if b"\x00" in data: + return "binary", "binary" + ctrl = sum(1 for b in data if (b < 9) or (13 < b < 32)) + if data and (ctrl / len(data)) > 0.02: + return "binary", "binary" + try: + txt = data.decode("utf-8") + if all(ord(ch) < 128 for ch in txt): + return "text", "ascii" + return "text", "utf-8" + except UnicodeDecodeError: + pass + try: + data.decode("cp949") + return "text", "cp949" + except UnicodeDecodeError: + return "binary", "binary" + + +exclude_roots = [] +for p in (out_root, manifest_dir): + posix = p.as_posix().strip("/") + if posix: + exclude_roots.append(posix.encode("utf-8")) + +raw = run_git("ls-tree", "-r", "-z", "HEAD") +entries = [] +for e in (x for x in raw.split(b"\x00") if x): + _, path_b = e.split(b"\t", 1) + if any(path_b == root or path_b.startswith(root + b"/") for root in exclude_roots): + continue + entries.append(e) +manifest = [] +used_paths = {} +used_fs_keys = {} + +for entry in entries: + meta, path_b = entry.split(b"\t", 1) + _, typ_b, sha_b = meta.split(b" ", 2) + if typ_b != b"blob": + continue + + sha = sha_b.decode("ascii") + segs = path_b.split(b"/") + norm_segs = [] + for s in segs: + decoded, _ = safe_seg(s) + norm_segs.append(decoded) + + candidate = "/".join(norm_segs) + # macOS default filesystems are case-insensitive + Unicode-normalized. + # Reserve path keys in that view as well to avoid silent overwrite. + while True: + fs_key = unicodedata.normalize("NFD", candidate).casefold() + exact_conflict = candidate in used_paths and used_paths[candidate] != path_b + fs_conflict = fs_key in used_fs_keys and used_fs_keys[fs_key] != path_b + if not exact_conflict and not fs_conflict: + break + + p = pathlib.PurePosixPath(candidate) + stem = p.stem if p.stem else p.name + suffix = p.suffix if p.suffix else "" + parent = str(p.parent) + alt_name = f"{stem}__{sha[:8]}{suffix}" + candidate = f"{parent}/{alt_name}" if parent != "." else alt_name + + used_paths[candidate] = path_b + used_fs_keys[unicodedata.normalize("NFD", candidate).casefold()] = path_b + blob = run_git("cat-file", "-p", sha) + + out_path = out_root / pathlib.PurePosixPath(candidate) + out_path.parent.mkdir(parents=True, exist_ok=True) + out_path.write_bytes(blob) + + kind, encoding = classify_blob(blob) + try: + cp949_path = path_b.decode("cp949") + except UnicodeDecodeError: + cp949_path = "" + + manifest.append({ + "legacy_path_hex": path_b.hex().upper(), + "legacy_path_cp949": cp949_path, + "normalized_utf8_path": candidate, + "blob_sha1": sha, + "sha256": hashlib.sha256(blob).hexdigest(), + "size": len(blob), + "kind": kind, + "text_encoding": encoding, + }) + +manifest.sort(key=lambda x: x["normalized_utf8_path"]) +(manifest_dir / "resource-map.v1.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") +with (manifest_dir / "path-alias.v1.tsv").open("w", encoding="utf-8", newline="") as fp: + fp.write("legacy_path_hex\tlegacy_path_cp949\tnormalized_utf8_path\tblob_sha1\n") + for row in manifest: + cp949 = row["legacy_path_cp949"].replace("\t", " ").replace("\n", " ") + norm = row["normalized_utf8_path"].replace("\t", " ").replace("\n", " ") + fp.write(f"{row['legacy_path_hex']}\t{cp949}\t{norm}\t{row['blob_sha1']}\n") + +print(f"generated_entries={len(manifest)}") +PY diff --git a/resources_utf8/tools/revive/report-missing-paths.sh b/resources_utf8/tools/revive/report-missing-paths.sh new file mode 100644 index 0000000..dba83ee --- /dev/null +++ b/resources_utf8/tools/revive/report-missing-paths.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" +cd "$repo_root" + +python3 - <<'PY' +import os +import subprocess +from collections import Counter + +def hex_bytes(b: bytes) -> str: + out = [] + for x in b: + if 32 <= x <= 126 and x != 92: + out.append(chr(x)) + else: + out.append(f"\\x{x:02X}") + return "".join(out) + +p = subprocess.run(["git", "ls-tree", "-r", "-z", "--name-only", "HEAD"], check=True, stdout=subprocess.PIPE) +paths = [x for x in p.stdout.split(b"\x00") if x] + +missing = [] +for pb in paths: + if not os.path.lexists(pb): + missing.append(pb) + +print(f"total={len(paths)}") +print(f"missing={len(missing)}") +print(f"exists={len(paths)-len(missing)}") + +by_top = Counter() +for pb in missing: + top = pb.split(b"/", 1)[0].decode("ascii", "replace") + by_top[top] += 1 + +if missing: + print("missing_by_top:") + for k in sorted(by_top): + print(f" {k}: {by_top[k]}") + +print("missing_paths:") +for pb in missing: + try: + cp949 = pb.decode("cp949") + except UnicodeDecodeError: + cp949 = "" + print(f"{hex_bytes(pb)}\t{cp949}") +PY diff --git a/scripts/run-smoke.sh b/scripts/run-smoke.sh index 83ac595..7db555f 100755 --- a/scripts/run-smoke.sh +++ b/scripts/run-smoke.sh @@ -62,10 +62,10 @@ docker run --rm --platform linux/amd64 \ set -euo pipefail export MUHAN_HOME=/work - gcc -std=gnu89 -fcommon -finput-charset=cp949 -I src \ + gcc -std=gnu89 -fcommon -I src \ tests/smoke/rp_probe.c src/resource_path.c -o /tmp/rp_probe_c - gcc -std=gnu89 -fcommon -finput-charset=cp949 -DUSE_RUST_RESOLVER -I src \ + gcc -std=gnu89 -fcommon -DUSE_RUST_RESOLVER -I src \ tests/smoke/rp_probe.c src/resource_path.c \ /work/rust/target/release/libmuhan_resource_ffi.a -ldl -lpthread \ -o /tmp/rp_probe_rust diff --git a/src/.gitignore b/src/.gitignore index 874c63c..b829f74 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,2 +1,2 @@ *.o - +frp.new diff --git a/src/Makefile b/src/Makefile index 28cf9f6..8184c9c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,10 +1,10 @@ -# ޼ -Wall -# ٸ ɼ -DRECORD_ALL 뷮 ..debug -# -DDEBUG. -# ˴ٿ . -DAUTOSHUTDOWN -# ũ savegame_nomsg Լ ְ , 簡 ǰ -# -DNODUPLE ɼ ־ֱ⸦ ٶ. -# ũŰ ΰ , -DOBJLEVEL ָ . +# 수남이 에라 메세지 -Wall +# 또 다른 컴파일 옵션 -DRECORD_ALL 용량많아 지웠음..debug넣음 +# 정균이 -DDEBUG없앰. +# 오토셧다운 없앰. -DAUTOSHUTDOWN +# 라토크 savegame_nomsg 함수를 넣고 싶은 경우 즉, 복사가 많이 되고 있을때에는 +# -DNODUPLE 옵션을 넣어주기를 바람. +# 크로키 레벨 제한을 두고 싶지 않은 경우, -DOBJLEVEL 을 삭제해 주면 됨. LEGACY_CHARSET_FLAGS ?= CFLAGS = -g -O2 -std=gnu89 -fcommon -DFINGERACCT -DCHECKDOUBLE -DSUICIDE -DOBJLEVEL -DDEBUG $(LEGACY_CHARSET_FLAGS) @@ -31,7 +31,8 @@ OBJECTS = global.o main.o files1.o files2.o files3.o bank.o command1.o command2. magic3.o magic4.o magic5.o magic6.o magic7.o magic8.o \ dm1.o dm2.o dm3.o dm4.o dm5.o dm6.o io.o \ player.o creature.o room.o object.o update.o post.o action.o misc.o \ - special1.o compress.o alias.o board.o resource_path.o + special1.o compress.o alias.o board.o resource_path.o utf8_text.o \ + player_path.o $(OUTFILE): $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) -o $(OUTFILE) $(LIBS) $(EXTRA_LIBS) @@ -44,7 +45,7 @@ auth: auth.o mv auth ../bin clean: - rm $(OBJECTS) + rm -f $(OBJECTS) $(OUTFILE) port: rm -f io.o main.o; @@ -53,4 +54,3 @@ port: fing: finger.o $(CC) finger.o -o fing mv fing ../bin - diff --git a/src/README b/src/README index 87fd107..47a7256 100644 --- a/src/README +++ b/src/README @@ -1,43 +1,43 @@ - . + 컴파일 방법. * LINUX - 丮 ϰ ϸ mtype.h ǵ 丮 ġ ˴ϴ. + 디렉토리를 변경하고자 하면 mtype.h에서 정의된 디렉토리를 고치면 됩니다. - κ ̱ ۵ ʵǴ 쵵 - ֽϴ. + 대부분의 기능이 아직 설계중이기 때문에 작동이 않되는 경우도 + 있습니다. - util 丮 ִ ƿ ٽ ؼ ڽ ýۿ - Ѽ ô° ϴ. - ߿ ٿ ϵ Ǽ startm̶ ƿ Ͽµ, - ̰ 30 ӵ带 ٽ ý ݴϴ. + util 디렉토리에 있는 각종 유틸도 다시 컴파일해서 자신의 시스템에 + 적용시켜서 쓰시는것이 좋습니다. + 개발중에 다운이 하도 많이 되서 startm이란 유틸을 개발 하였는데, + 이것은 30초 단위로 머드를 다시 부팅시켜 줍니다. - make ԷϽø ٷ frp.new Ǹ bin/ - frp īϼż Ͻø ˴ϴ. + make를 입력하시면 바로 frp.new 실행파일이 생성되며 이 파일을 bin/에 + frp로 카피하셔서 실행하시면 됩니다. * WINDOWS95 - ϴ \home\muhan\̶ 丮 ġ - 󿡼 â bin丮 muhan.exe Ѵ. - ׷ â Ǹ鼭 Ѵ ۵ϱ Ѵ. - ̶ ǻʹ ݵ Ʈũ Ͽ Ѵ. - ϸ VC++ muhan.mdp Ʈ о Ѵ. - mtype.h ִ 丮 ڽ ȯ濡 ° ģ. + 컴파일 않하는 경우 \home\muhan\이라는 디렉토리에 설치한후 + 윈도우상에서 도스창을 열고 bin디렉토리의 muhan.exe를 실행한다. + 그럼 도스창이 정지되면서 무한대전이 작동하기 시작한다. + 이때 컴퓨터는 반드시 네트워크가 가능하여야 한다. + 컴파일을 원하면 VC++에서 muhan.mdp 프로젝트 파일을 읽어들인 다음 컴파일을 한다. + mtype.h에 있는 디렉토리를 자신의 환경에 맞게 고친다. - util 丮 editor list Ͽ ƿ ؾ Ѵ. - editor ϱؼ ý ansi.sys ߰Ͽ Ѵ. + util 디렉토리에서 editor와 list를 컴파일하여 지원 유틸을 제작해야 한다. + editor를 사용하기위해서는 부팅시 ansi.sys를 추가하여야 한다. - ڵ常 ۼǾ ȯ ޸ ƹ Ÿ ׽Ʈ -  ̷ ʾҴ.  ߻ϴ - Ͽ ϼϿ Ѵ. + 윈도우버젼은 코드만 작성되었을뿐 리눅스환경과 달리 아무런 베타 테스트나 + 운영이 이루어지지 않았다. 때문에 서버로 운영할 경우 발생하는 모든 + 문제에 대해 스스로 개발하여 완성하여야 한다. - WinSock Code Ͽ ֽ John Freeman 縦 帳ϴ. + WinSock Code를 제공하여 주신 John Freeman에게 감사를 드립니다. - * Link Ͽ.... + * Link에 관하여.... - ũ Ǵµ 쿡 ũ ʴ´. - include src丮 ũ - ϸ ϴ. - 󿡼 src丮 include util丮 - editor list丮 īϿ Ϸ Ѵ. + 리눅스에서는 링크가 설정되는데 윈도우에서는 링크가 설정되지 않는다. + 따라서 모든 include 파일은 리눅스에서는 src디렉토리로 링크를 + 설정하면 편리하다. + 윈도우상에서는 src디렉토리의 include 를 수정시 util디렉토리의 + editor와 list디렉토리로 카피하여 동일한 파일로 만들어야 한다. diff --git a/src/README.update b/src/README.update index 58e5c81..9e7a0c7 100644 --- a/src/README.update +++ b/src/README.update @@ -1,77 +1,77 @@ -Ѵ 1.1 - аŸ ߰. - -- аŸ ο аŸ ؼ [аŸ ] ϰ, - аŸ [аŸ ] ؼ . - аŸ θ Ҽ , аŸ θ װ - Ÿ ȴ. ġ ̵ , - аŸ ȣ ̸ ؼ . - -- : аŸ Ҽ ,  аŸ - ̸ ٸ аŸ £ Ҽ . - аŸ θ ӵ忡 Ǹ - ʰ ȴ. +무한대전 1.1 + 패거리 전쟁의 추가. + -- 한쪽의 패거리가 싸울 패거리에 대해서 [패거리명 선전포고] 명령을 하고, + 상대 패거리에서도 [패거리명 선전포고]를 해서 전쟁이 성립. + 선전포고 명령은 패거리의 두목만이 할수 있으며, 패거리의 두목이 죽게 + 돼면 전쟁이 끝이 나게 된다. 전쟁으로 인한 경험치등의 이득은 없으며, + 단지 패거리 상호간의 재미를 위해서 만들어진 기능. + -- 문제점 : 전쟁은 두 패거리간에만 할수 있으며, 어떤 패거리에서 전쟁중 + 이면 다른 패거리들은 전쟁에 참가 할수 없다. + 패거리 두목이 전쟁중 머드에서 나가게 되면 전쟁이 끝이 나지 + 않게 된다. -Ѵ 1.2 Ÿ - ߰. - -- ࿡ Ա, ɰ 繰 ߰. - 濡 40 ÷׸ ɾ༭ ־ . - -- : [### Ա], [### ], [], [### ] [### ޾] - 繰 ɵ ࿡ . - 繰԰ ޸ ࿡ 繰̶ ʿġ . - ÷̾ ̸ ڵ 繰 üũ. - -- Ϸ, /player 丮 ȿ 丮, - /bank 丮 ־ . (/home/muhan/player/bank) +무한대전 1.2 베타 + 은행 기능의 추가. + -- 은행에서의 입금, 출금 기능과 사물함의 기능을 추가. + 은행으로 사용할 방에 40번 플래그를 걸어줘서 은행으로 만들어둬야 함. + -- 기능 : [###냥 입금], [###냥 출금], [보관], [### 보관] [### 받아] + 보관등의 사물함 기능도 은행에서 사용함. + 기존의 사물함과 달리 은행에 사물함이란 아이템이 필요치 않음. + 플레이어의 이름에 따라서 자동으로 사물함이 체크됨. + -- 은행 기능을 사용하려면, /player 디렉토리 안에 서브 디렉토리로, + /bank 디렉토리가 있어야 가능. (/home/muhan/player/bank) -Ѵ 1.2 - . - -- [ Ա], [ ], [ ], [ ޾] ɰ, - [ܵ ], [ܵ ޾] [/] . +무한대전 1.2 + 은행 기능의 향상. + -- [모두 입금], [모두 출금], [모두 보관], [모두 받아] 등의 명령과, + [모든단도 보관], [모든단도 받아] 등 [모두/모든] 명령이 가능. - Ұ ÷. - -- ӹ ʿ "ȭ ؼ ޾ " Ұؼ - ´ ÷̾ ؼ, ҰҰ ÷׸ . - Ϳ ÷ ȣ 49. + 소각 금지 아이템 플래그. + -- 임무에 필요한 "대화로 인해서 받아지는 아이템"들을 소각해서 돈벼락을 + 맞는 플레이어의 증가로 인해서, 소각불가 플래그를 만듬. + 에디터에서의 플래그 번호는 49번. - 丮 . - -- mtype.h PATH Ͽ, 丮 Ҽ ְ . - MUDHOME κ ν ٸ board.c ȭϳ 丮 - ʰ ۵Ҽ ְ . + 디렉토리 구조. + -- mtype.h 내의 PATH 지정을 변경하여, 쉽게 디렉토리를 변경할수 있게 함. + MUDHOME 부분을 수정함으로써 다른 board.c 등의 화일내의 디렉토리를 + 수정하지 않고도 제대로 작동할수 있게 함. - option ο. - -- ҽ ϴ Ƽ ɼ Ҽ - ְ . - -- , ΰ ʴٸ, Makefile ɼǿ - -DOBJLEVEL ϸ . + 아이템 레벨 제한의 컴파일 option 부여. + -- 레벨제한이 없는 소스를 원하는 사람들이 많아서 컴파일 옵션으로 선택할수 + 있게 함. + -- 만약, 레벨제한을 두고 싶지 않다면, 컴파일 전에 Makefile 의 컴파일 옵션에 + -DOBJLEVEL 을 제거한후 컴파일을 하면 레벨제한이 없게 됨. -Ѵ 1.3 - ü ׷ ǥ - -- ü ׷ ǥش. ɰ ϴ. - Լ display_status( ũ, ) ̴. +무한대전 1.3 + 몹의 남은 체력 그래프 표시 + -- 몹의 남은 체력을 그래프로 표시해준다. 상태 명령과 동일하다. + 함수는 display_status(소켓 디스크립터, 대상몹 포인터) 이다. - mrand ũ - -- mrand ũΰ Ǿ. - 0 Ͼ° Ҵ. + mrand 매크로 버그 잡음 + -- mrand 매크로가 수정되었다. + 0으로 나눌때 방폭이 일어나는것을 막았다. - ǵ - -- ִ. update Լ õȴ. + 초인의돌 + -- 초인의 돌을 사용할 수 있다. update 함수와 관련된다. - κ ߰ - -- ڰ 纸Ⱑ ߰Ǿ. + 묘사부분 추가 + -- 사용자가 서 있을때 나오는 묘사보기가 추가되었다. - ҹ ñ - -- ҹ log_dm Ͽ ϵȴ. - Ʈ ֵ Ǿ ִ. - special ̸ ִ. + 불법 아이템 감시기능 + -- 불법 아이템을 가지고 있을시 log_dm 파일에 기록된다. + 디폴트로 아이템을 없애도록 되어 있다. + special 파일을 고쳐 이를 막을 수도 있다. - Ÿ... - -- ȳ.. --; + 기타등등... + -- 생각이 안난다.. --; -Ѵ 1.4 Beta - WIN95,NT ȣȯڵ ߰. - -- 95 ڵ带 ߰ϰ, Լ Ͽ. +무한대전 1.4 Beta + WIN95,NT용으로 호환코드 추가. + -- 윈95용 소켓코드를 추가하고, 함수를 갱신하였다. - LINUXڵ ȭ - -- 1.3ɰ ޶ . + LINUX코드의 변화 + -- 1.3기능과 달라진바 없다. - WIN95ڵ ȭ - -- ڵҾ Spy带 ݴ. + WIN95코드의 변화 + -- 코드불안정으로 Spy모드를 없앴다. diff --git a/src/action.c b/src/action.c index 645a8d6..b2786d3 100644 --- a/src/action.c +++ b/src/action.c @@ -58,7 +58,7 @@ cmd *cmnd; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, "Ѹ Ҽ ϴ!"); + print(fd, "한마디도 할수 없습니다!"); return(0); } @@ -89,7 +89,7 @@ cmd *cmnd; if(!crt_ptr || crt_ptr == ply_ptr) { i=-1; } - else if(!strcmp(cmdlist[cmdno].cmdstr,"")) i=-1; + else if(!strcmp(cmdlist[cmdno].cmdstr,"생각")) i=-1; else { for(i=0;ifullstr);i++) if(cmnd->fullstr[i]!=' ') break; for(;ifullstr);i++) if(cmnd->fullstr[i]==' ') break; @@ -103,174 +103,174 @@ cmd *cmnd; else msg_ok=0; } - if(!strcmp(cmdlist[cmdno].cmdstr, "ǥ")) { - OUTn1(" 'ǥ '̶ ġ° ̴ϴ.","\n%M ǥ մϴ."); + if(!strcmp(cmdlist[cmdno].cmdstr, "감정표현")) { + OUTn1("당신은 '감정표현 도움'이라 치는게 좋을겁니다.","\n%M이 감정표현을 연구합니다."); } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "보아")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sϴ.", "\n%M %sϴ.","\n%M %M%j %sϴ.","","3") - else OUT1(" %sϴ.", "\n%M %sϴ.","") + OUTj2("당신은 %M%j %s봅니다.", "\n%M이 당신을 %s봅니다.","\n%M이 %M%j %s봅니다.","","3") + else OUT1("당신은 %s봅니다.", "\n%M이 %s봅니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "노려봐")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s ϴ.", "\n%M %s ϴ.","\n%M %M%j %s ϴ."," ϰ ","3") - else OUT1(" %s ϴ.", "\n%M %s ϴ."," վ ") + OUTj2("당신은 %M%j %s노려 봅니다.", "\n%M이 당신을 %s노려 봅니다.","\n%M이 %M%j %s노려 봅니다.","뱁새눈을 하고 ","3") + else OUT1("당신은 %s노려 봅니다.", "\n%M이 %s노려 봅니다.","허공을 뚫어져라 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "") || !strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "끄덕") || !strcmp(cmdlist[cmdno].cmdstr, "응")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s Ÿϴ.", "\n%M ſ %s Ÿϴ.","\n%M %M %s Ÿϴ.","") - else OUT1(" %s Ÿϴ.", "\n%M %s Ÿϴ.","") + OUT2("당신은 %M에게 %s고개를 끄덕거립니다.", "\n%M이 당신에게 %s고개를 끄덕거립니다.","\n%M이 %M에게 %s고개를 끄덕거립니다.","") + else OUT1("당신은 %s고개를 끄덕거립니다.", "\n%M이 %s고개를 끄덕거립니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ƴ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "아니")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s ϴ.", "\n%M ſ %s ϴ.","\n%M %M ϴ.","") - else OUT1(" %s ϴ.", "\n%M %s ϴ.","") + OUT2("당신은 %M에게 %s고개를 가로 젓습니다.", "\n%M이 당신에게 %s고개를 가로젓습니다.","\n%M이 %M에게 고개를 가로젓습니다.","") + else OUT1("당신은 %s고개를 가로젓습니다.", "\n%M이 %s고개를 가로젓습니다.","") } - else if(!strncmp(cmdlist[cmdno].cmdstr, "",2)) { + else if(!strncmp(cmdlist[cmdno].cmdstr, "감",2)) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s մϴ.","\n%M ſ %s մϴ.", "\n%M %M %s մϴ."," ") - else OUT1(" %s մϴ.", "\n%M %s մϴ."," ") + OUT2("당신은 %M에게 %s감사해 합니다.","\n%M이 당신에게 %s감사해 합니다.", "\n%M이 %M에게 %s감사해 합니다.","진심으로 ") + else OUT1("당신은 %s감사해 합니다.", "\n%M이 %s감사해 합니다.","진심으로 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "̼")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "미소")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s̼Ҹ ϴ.","\n%M ſ %s̼Ҹ ϴ.", "\n%M %M %s̼Ҹ ϴ.","") - else OUT1(" %s̼Ҹ ϴ.", "\n%M %s̼Ҹ ϴ."," ") + OUT2("당신은 %M에게 %s미소를 보냅니다.","\n%M이 당신에게 %s미소를 짓습니다.", "\n%M이 %M에게 %s미소를 짓습니다.","") + else OUT1("당신은 %s미소를 짓습니다.", "\n%M이 %s미소를 짓습니다.","밝은 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "떨어")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s ϴ.","\n%M %s ϴ.", "\n%M %M %s ϴ."," ") - else OUT1(" %s ϴ.", "\n%M %s ϴ."," ") + OUT2("당신은 %M을 보고 %s벌벌 떱니다.","\n%M이 당신을 보고 %s벌벌 떱니다.", "\n%M이 %M를 보고 %s벌벌 떱니다.","무서워서 ") + else OUT1("당신은 %s벌벌 떱니다.", "\n%M이 %s벌벌 떱니다.","무서워서 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "해")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sմϴ.","\n%M %sմϴ.", "\n%M %M %sմϴ."," ɽ ") - else OUT1(" %sմϴ.", "\n%M %sմϴ.","ɽ ") + OUT2("당신은 %M을 %s합니다.","\n%M이 당신을 %s합니다.", "\n%M이 %M을 %s합니다.","보며 심심해 ") + else OUT1("당신은 %s합니다.", "\n%M이 %s합니다.","심심해 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ǰ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "하품")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sǰ մϴ. ~","\n%M %sǰ մϴ. ~", "\n%M %M %sǰ մϴ. ~","") - else OUT1(" %sǰ մϴ.", "\n%M %sǰ մϴ."," ") + OUT2("당신은 %M을 보고 %s하품을 합니다. 아함~","\n%M이 당신을 보고 %s하품을 합니다. 아함~", "\n%M이 %M를 보고 %s하품을 합니다. 아함~","") + else OUT1("당신은 %s하품을 합니다.", "\n%M이 %s하품을 합니다.","자지러지게 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ûȥ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "청혼")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sûȥ մϴ.","\n%M ſ %sûȥ մϴ.", "\n%M %M %sûȥ մϴ.","") - else OUT1(" %sûȥ մϴ.", "\n%M %sûȥ մϴ.","ȥڼ ") + OUT2("당신은 %M에게 %s청혼을 합니다.","\n%M이 당신에게 %s청혼을 합니다.", "\n%M이 %M에게 %s청혼을 합니다.","") + else OUT1("당신은 %s청혼을 합니다.", "\n%M이 %s청혼을 합니다.","혼자서 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "웃어")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sϴ.","\n%M %sϴ.","%M %M%j %sϴ."," ","3") - else OUT1(" %sϴ.", "\n%M %sϴ.", " ") + OUTj2("당신은 %M%j 보며 %s웃습니다.","\n%M이 당신을 보며 %s웃습니다.","%M이 %M%j 보며 %s웃습니다.","생긋 ","3") + else OUT1("당신은 %s웃습니다.", "\n%M이 %s웃습니다.", "생긋 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "̾")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "미안")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s̾ մϴ.","\n%M ſ %s̾ մϴ.", "\n%M %M %s̾ մϴ.","") - else OUT1(" %s̾ մϴ.", "\n%M %s̾ մϴ.","") + OUT2("당신은 %M에게 %s미안해 합니다.","\n%M이 당신에게 %s미안해 합니다.", "\n%M이 %M에게 %s미안해 합니다.","") + else OUT1("당신은 %s미안해 합니다.", "\n%M이 %s미안해 합니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "Ǽ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "악수")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sǼ մϴ.", "\n%M Ű %sǼ մϴ.", "\n%M %M%j %sǼ մϴ.","","2") - else OUT1(" о %sǼ ûմϴ.", "\n%M о %sǼ ûմϴ.","") + OUTj2("당신은 %M%j %s악수를 합니다.", "\n%M이 당신과 %s악수를 합니다.", "\n%M이 %M%j %s악수를 합니다.","","2") + else OUT1("당신은 손을 내밀어 %s악수를 청합니다.", "\n%M이 손을 내밀어 %s악수를 청합니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "̺")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "하이파이브")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s̺긦 մϴ.", "\n%M Ű %s̺긦 մϴ.", "\n%M %M%j ̺긦 մϴ."," ̵ ","2") - else OUT1(" %sϴ.","\n%M %sϴ.","") + OUTj2("당신은 %M%j %s하이파이브를 합니다.", "\n%M이 당신과 %s하이파이브를 합니다.", "\n%M이 %M%j 하이파이브를 합니다.","손을 높이들어 ","2") + else OUT1("당신은 손을 들어 허공에다 %s휘젓습니다.","\n%M이 손을 들어 허공에다 %s휘젓습니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ڼ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "박수")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sڼ Ĩϴ. ¦¦~", "\n%M ſ %sڼ Ĩϴ. ¦¦~", "\n%M %M %sڼ Ĩϴ. ¦¦~","") - else OUT1(" %sڼ Ĩϴ. ¦¦~", "\n%M %sڼ Ĩϴ. ¦¦~","") + OUT2("당신은 %M에게 %s박수를 칩니다. 짝짝~", "\n%M이 당신에게 %s박수를 칩니다. 짝짝~", "\n%M이 %M에게 %s박수를 칩니다. 짝짝~","") + else OUT1("당신은 %s박수를 칩니다. 짝짝~", "\n%M이 %s박수를 칩니다. 짝짝~","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "") || !strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "흡연") || !strcmp(cmdlist[cmdno].cmdstr, "담배")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s踦 մϴ.","\n%M ſ %s踦 մϴ.","\n%M %M %s踦 մϴ.","") - else OUT1(" 踦 %sǿϴ. Ǫ~~~~", "\n%M 踦 %sǿϴ. Ǫ~~","ݻ ") + OUT2("당신은 %M에게 %s담배를 권합니다.","\n%M이 당신에게 %s담배를 권합니다.","\n%M이 %M에게 %s담배를 권합니다.","") + else OUT1("당신은 담배를 %s피웁니다. 푸우~~~~", "\n%M이 담배를 %s피웁니다. 푸우~~","뻐금뻐금 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "절")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s մϴ.","\n%M ſ %s մϴ.", "\n%M %M %s մϴ."," ") - else OUT1(" %s մϴ.", "\n%M %s մϴ."," ") + OUT2("당신은 %M에게 %s절을 합니다.","\n%M이 당신에게 %s절을 합니다.", "\n%M이 %M에게 %s절을 합니다.","공손히 ") + else OUT1("당신은 %s절을 합니다.", "\n%M이 %s절을 합니다.","공손히 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "찔러")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sϴ.", "\n%M %sϴ.", "\n%M %M%j %sϴ."," ","3") - else OUT1(" ÷ %sϴ.", "\n%M ÷ %sϴ."," ") + OUTj2("당신은 %M%j %s찌릅니다.", "\n%M이 당신을 %s찌릅니다.", "\n%M이 %M%j %s찌릅니다.","쿡쿡 ","3") + else OUT1("당신은 손을 올려 허공을 %s찌릅니다.", "\n%M이 손을 올려 허공을 %s찌릅니다.","쿡쿡 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "춤")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s ϴ. '뱸.λ.~.!'", "\n%M Ű %s ϴ. '뱸.λ.~.!'","\n%M %M%j %s ϴ. '뱸.λ.~.!'","ų ","2") - else OUT1(" %s ϴ. '뱸.λ.~.!'", "\n%M %s ϴ. '뱸.λ.~.!'","ȥڼ ") + OUTj2("당신은 %M%j %s춤을 춥니다. '대구.부산.찍고~광주.턴!'", "\n%M이 당신과 %s춤을 춥니다. '대구.부산.찍고~광주.턴!'","\n%M이 %M%j %s춤을 춥니다. '대구.부산.찍고~광주.턴!'","신나게 ","2") + else OUT1("당신은 %s춤을 춥니다. '대구.부산.찍고~광주.턴!'", "\n%M이 %s춤을 춥니다. '대구.부산.찍고~광주.턴!'","혼자서 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "뷡")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "노래")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s뷡 θϴ.", "\n%M %s뷡 θϴ.\n","\n%M %M%j %s뷡 θϴ.\n","̰ ","3") - else OUT1(" %s뷡 θϴ.", "\n%M %s뷡 θϴ.\n","̰ ") + OUTj2("당신은 %M%j 위해 %s노래를 부릅니다.", "\n%M이 당신을 위해 %s노래를 부릅니다.\n","\n%M이 %M%j 위해 %s노래를 부릅니다.\n","즐겁게 ","3") + else OUT1("당신은 %s노래를 부릅니다.", "\n%M이 %s노래를 부릅니다.\n","즐겁게 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "울어")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %s Դϴ.", "\n%M ſ %s Դϴ.","\n%M %M %s Դϴ.","") - else OUT1(" %sϴ. ƾ~", "\n%M %sϴ. ƾ~"," ") + OUT2("당신은 %M에게 %s눈물을 보입니다.", "\n%M이 당신에게 %s눈물을 보입니다.","\n%M이 %M에게 %s눈물을 보입니다.","") + else OUT1("당신은 %s웁니다. 아앙~", "\n%M이 %s웁니다. 아앙~","슬프게 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "޷")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "달래")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s޷ ݴϴ.", "\n%M %s޷ ݴϴ.","\n%M %M%j %s޷ ݴϴ.","","3") - else OUT1(" %s޷ ݴϴ.", "\n%M %s޷ ݴϴ.","ڽ ") + OUTj2("당신은 %M%j %s달래 줍니다.", "\n%M이 당신을 %s달래 줍니다.","\n%M이 %M%j %s달래 줍니다.","","3") + else OUT1("당신은 %s달래 줍니다.", "\n%M이 %s달래 줍니다.","자신을 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "Ȳ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "당황")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sȲ մϴ.", "\n%M %sȲմϴ.","\n%M %M%j %sȲ մϴ.","","3") - else OUT1(" %sȲ մϴ.", "\n%M %sȲ մϴ.","") + OUTj2("당신은 %M%j 보고 %s당황해 합니다.", "\n%M이 당신을 보고 %s당황해합니다.","\n%M이 %M%j 보고 %s당황해 합니다.","","3") + else OUT1("당신은 %s당황해 합니다.", "\n%M이 %s당황해 합니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ũ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "윙크")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sũ մϴ.", "\n%M ſ %sũ մϴ.","\n%M %M %sũ մϴ.","") - else OUT1(" %sũ մϴ.", "\n%M %sũ մϴ.","") + OUT2("당신은 %M에게 %s윙크를 합니다.", "\n%M이 당신에게 %s윙크를 합니다.","\n%M이 %M에게 %s윙크를 합니다.","") + else OUT1("당신은 %s윙크를 합니다.", "\n%M이 %s윙크를 합니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ǻ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "뽀뽀")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sǻǸ մϴ.", "\n%M ſ %sǻǸ մϴ.","\n%M %M %sǻǸ մϴ.","") - else OUT1(" %sǻǸ մϴ.", "\n%M %sǻǸ մϴ.","ڱ չٴڿ ") + OUT2("당신은 %M에게 %s뽀뽀를 합니다.", "\n%M이 당신에게 %s뽀뽀를 합니다.","\n%M이 %M에게 %s뽀뽀를 합니다.","") + else OUT1("당신은 %s뽀뽀를 합니다.", "\n%M이 %s뽀뽀를 합니다.","자기 손바닥에다 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "") || !strcmp(cmdlist[cmdno].cmdstr, "߰")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "바이") || !strcmp(cmdlist[cmdno].cmdstr, "잘가")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sۺλ縦 մϴ.", "\n%M ſ %sۺλ縦 մϴ.","\n%M %M %sۺλ縦 մϴ.","") - else OUT1(" %sۺλ縦 մϴ.", "\n%M %sۺλ縦 մϴ.","") + OUT2("당신은 %M에게 %s작별인사를 합니다.", "\n%M이 당신에게 %s작별인사를 합니다.","\n%M이 %M에게 %s작별인사를 합니다.","") + else OUT1("당신은 %s작별인사를 합니다.", "\n%M이 %s작별인사를 합니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "ȳ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "안녕")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sλ縦 մϴ. \"ȳϼ~\"", "\n%M ſ %sλ縦 մϴ. \"ȳϼ~\"","\n%M %M %sλ縦 մϴ. \"ȳϼ~\"","") - else OUT1(" %sλ縦 մϴ. \"ȳϼ~\"", "\n%M %sλ縦 մϴ. \"ȳϼ~\"","") + OUT2("당신은 %M에게 %s인사를 합니다. \"안녕하세요~\"", "\n%M이 당신에게 %s인사를 합니다. \"안녕하세요~\"","\n%M이 %M에게 %s인사를 합니다. \"안녕하세요~\"","") + else OUT1("당신은 %s인사를 합니다. \"안녕하세요~\"", "\n%M이 %s인사를 합니다. \"안녕하세요~\"","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "설레")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %s Դϴ.", "\n%M %sȲմϴ.","\n%M %M%j %s Դϴ.","","3") - else OUT1(" %s Դϴ.", "\n%M %s Դϴ.","") + OUTj2("당신은 %M%j 보고 %s마음이 설레입니다.", "\n%M이 당신을 보고 %s당황해합니다.","\n%M이 %M%j 보고 %s마음이 설레입니다.","","3") + else OUT1("당신은 %s마음이 설레입니다.", "\n%M이 %s마음이 설레입니다.","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "놀려")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sϴ. ޷ո޷~~", "\n%M %sϴ. ޷ո޷~~","\n%M %M%j %sϴ. ޷ո޷~~"," ","3") - else OUT1(" %sϴ. ޷ո޷~~", "\n%M %sϴ. ޷ո޷~~"," ") + OUTj2("당신은 %M%j %s놀립니다. 메롱메롱~~", "\n%M이 당신을 %s놀립니다. 메롱메롱~~","\n%M이 %M%j 보고 %s놀립니다. 메롱메롱~~","약오르게 ","3") + else OUT1("당신은 %s놀립니다. 메롱메롱~~", "\n%M이 %s놀립니다. 메롱메롱~~","약오르게 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { - OUT1(" %sմϴ.", "\n%M %sմϴ.","ɽ ") + else if(!strcmp(cmdlist[cmdno].cmdstr, "생각")) { + OUT1("당신은 %s생각합니다.", "\n%M이 %s생각합니다.","조심스럽게 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "β")) { - OUT1(" %sβ մϴ.", "\n%M %sβ մϴ."," ") + else if(!strcmp(cmdlist[cmdno].cmdstr, "부끄러")) { + OUT1("당신은 %s부끄러워 합니다.", "\n%M이 %s부끄러워 합니다.","얼굴이 빨개져 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "구걸")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUT2(" %M %sմϴ. \"Ǭݼ~~\"", "\n%M ſ %sմϴ. \"Ǭݼ~~\"", "\n%M %M %sմϴ. \"Ǭݼ~~\"","") - else OUT1(" ٴڿ %sմϴ. \"Ǭݼ~~\"", "\n%M ٴڿ %sմϴ. \"Ǭݼ~~\"","") + OUT2("당신은 %M에게 %s구걸합니다. \"한푼줍쇼~~\"", "\n%M이 당신에게 %s구걸합니다. \"한푼줍쇼~~\"", "\n%M이 %M에게 %s구걸합니다. \"한푼줍쇼~~\"","") + else OUT1("당신은 바닥에 엎드려 %s구걸합니다. \"한푼줍쇼~~\"", "\n%M이 바닥에 엎드려 %s구걸합니다. \"한푼줍쇼~~\"","") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "구박")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sմϴ.","\n%M %sմϴ.","\n%M %M%j %sմϴ."," ","3") - else OUT1(" θ %sմϴ.","\n%M θ %sմϴ."," ") + OUTj2("당신은 %M%j %s구박합니다.","\n%M이 당신을 %s구박합니다.","\n%M이 %M%j %s구박합니다.","마구 ","3") + else OUT1("당신은 스스로를 %s구박합니다.","\n%M이 스스로를 %s구박합니다.","마구 ") } - else if(!strcmp(cmdlist[cmdno].cmdstr, "Ⱦ") || !strcmp(cmdlist[cmdno].cmdstr, "Ⱦ")) { + else if(!strcmp(cmdlist[cmdno].cmdstr, "안아") || !strcmp(cmdlist[cmdno].cmdstr, "껴안아")) { if(crt_ptr && crt_ptr!=ply_ptr) - OUTj2(" %M%j %sȽϴ.","\n%M %sȽϴ.","\n%M %M%j %sȽϴ."," ","3") - else OUT1(" %s ָ ϴ.","\n%M %s ָ ֽϴ."," ") + OUTj2("당신은 %M%j %s껴안습니다.","\n%M이 당신을 %s껴안습니다.","\n%M이 %M%j %s껴안습니다.","꼭 ","3") + else OUT1("당신은 %s껴안으려 애를 씁니다.","\n%M이 %s껴안으려 애를 쓰고 있습니다.","허공을 ") } return(0); } diff --git a/src/alias.c b/src/alias.c index 600dc3d..99fece7 100644 --- a/src/alias.c +++ b/src/alias.c @@ -1,4 +1,4 @@ -/* Ӹ , Īȣ */ +/* 줄임말 , 칭호 */ #include #include @@ -12,7 +12,7 @@ typedef struct ALIAS_COMMAND { char process[256]; } Alias_Cmd; -#define MAX_ALIAS 50 /* ִ Ӹ */ +#define MAX_ALIAS 50 /* 최대 저장 줄임말 수 */ Alias_Cmd *ply_alias[PMAX][MAX_ALIAS]; char ply_alias_num[PMAX]; @@ -136,7 +136,7 @@ char *buf1; char *buf2; { if(ply_alias_num[fd]==MAX_ALIAS) { - print(fd,"̻ Ӹ ϴ."); + print(fd,"더이상 줄임말을 설정할 수 없습니다."); return -1; } ply_alias[fd][ply_alias_num[fd]]=(Alias_Cmd *)malloc(sizeof(Alias_Cmd)); @@ -160,23 +160,23 @@ cmd *cmnd; fd=ply_ptr->fd; if(cmnd->num==1) { - /* Ǿ ִ Ӹ ش. */ + /* 현재 설정되어 있는 줄임말을 보여준다. */ if(ply_alias_num[fd]==0) { - print(fd," Ӹ ϴ."); + print(fd,"설정된 줄임말이 없습니다."); return 0; } - print(fd,"Ӹ:\n"); + print(fd,"줄임말:\n"); for(i=0;ialias,ply_alias[fd][i]->process); } return 0; } - if(!strncmp(cmnd->str[1],"",4)) { + if(!strncmp(cmnd->str[1],"숫자",4)) { if(strlen(cmnd->str[1]+4)>0) k=4; } if(cmnd->num==2) { - /* Ӹ */ + /* 줄임말 삭제 */ for(i=0;ialias,cmnd->str[1]+k)) { free(ply_alias[fd][i]); @@ -184,33 +184,33 @@ cmd *cmnd; ply_alias[fd][j-1]=ply_alias[fd][j]; ply_alias_num[fd]--; save_alias(ply_ptr); - print(fd,"Ӹ Ǿϴ."); + print(fd,"줄임말이 삭제되었습니다."); return 0; } } - print(fd," ̸ Ӹ ϴ."); + print(fd,"그 이름으로 설정된 줄임말이 없습니다."); return 0; } - /* Ӹ ߰ */ + /* 줄임말 추가 */ if(!strcmp(cmnd->str[1]+k,"~!")) { - print(fd," ڵδ Ӹ ϴ."); + print(fd,"그 코드로는 줄임말로 설정할 수 없습니다."); return 0; } if(strlen(cmnd->str[1]+k)>14) { - print(fd,"Ӹ ̰ ʹ ϴ."); + print(fd,"줄임말의 길이가 너무 깁니다."); return 0; } for(i=0;ialias,cmnd->str[1]+k)) { - print(fd," Ӹ ̹ Ǿ ֽϴ."); + print(fd,"그 줄임말은 이미 설정되어 있습니다."); return 0; } } len=cut_command(cmnd->fullstr); if(len > 70) { - print(fd, "Ӹ ü ̰ ʹ ϴ."); + print(fd, "줄임말의 전체적 길이가 너무 깁니다."); return(0); } @@ -222,7 +222,7 @@ cmd *cmnd; } buf[i+1]=0; if(add_alias(fd,cmnd->str[1]+k,buf)!=-1) - print(fd,"Ӹ Ǿϴ."); + print(fd,"줄임말이 설정되었습니다."); save_alias(ply_ptr); return 0; } @@ -237,7 +237,7 @@ creature *ply_ptr; sprintf(path, "%s/alias/%s", PLAYERPATH, ply_ptr->name); handle = creat(path, 0660); if(handle==-1) { - print(fd,"ȭϷ ϴµ Ͽϴ"); + print(fd,"화일로 저장하는데 실패하였습니다"); return; } for(i=0;ifd; if(cmnd->num<2) { title_cut_index[fd] = 1; - print(fd," %s %sԴϴ.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); + print(fd,"당신은 %s %s입니다.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); title_cut_index[fd] = 0; return 0; } len=cut_command(cmnd->fullstr); if(len>78) - print(fd,"Īȣ ʹ ϴ."); + print(fd,"칭호가 너무 깁니다."); else { ply_titles[fd]=(char *)malloc(len+1); if(ply_titles[fd]!=NULL) { strcpy(ply_titles[fd],cmnd->fullstr); save_alias(ply_ptr); title_cut_index[fd] = 1; - print(fd," %s %sԴϴ.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); + print(fd,"당신은 이제부터 %s %s입니다.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); title_cut_index[fd] = 0; } } @@ -358,14 +358,14 @@ cmd *cmnd; fd=ply_ptr->fd; if(ply_titles[fd]==NULL) { - print(fd,"Īȣ Ǿ ʽϴ."); + print(fd,"칭호가 설정되어 있지 않습니다."); return 0; } free(ply_titles[fd]); ply_titles[fd]=NULL; save_alias(ply_ptr); - print(fd," %s %sԴϴ.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); + print(fd,"당신은 이제부터 %s %s입니다.",title_ply(ply_ptr,ply_ptr),ply_ptr->name); return 0; } @@ -373,7 +373,7 @@ int color_cmp(str) char *str; { char buf[3]; - char *col[7]={"","","","","","",""}; + char *col[7]={"빨","노","파","하","보","녹","흰"}; char code[7]={31,33,34,36,35,32,37}; int i; diff --git a/src/bank.c b/src/bank.c index a08b385..c00a48f 100644 --- a/src/bank.c +++ b/src/bank.c @@ -9,6 +9,9 @@ #include #endif +#define UTF8_PREFIX_ALL "모든" +#define UTF8_PREFIX_ALL_LEN ((int)(sizeof(UTF8_PREFIX_ALL) - 1)) + int load_bank(str, obj_ptr) char *str; object **obj_ptr; @@ -70,13 +73,13 @@ cmd *cmnd; fd = ply_ptr->fd; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } if(cmnd->num < 2) { n = load_bank(ply_ptr->name, &bnk_ptr); if(n < 0) { - print(fd, "ϰ ִ ϴ."); + print(fd, "보관하고 있는 물건이 없습니다."); bnk_ptr = (object *)malloc(sizeof(object)); zero(bnk_ptr, sizeof(object)); bnk_ptr->shotsmax = 200; @@ -85,11 +88,11 @@ cmd *cmnd; free_obj(bnk_ptr); } else { - print(fd, " ̸ Դϴ.\n"); - strcpy(str, "ǰ : "); + print(fd, "당신의 이름이 새겨진 보관함입니다.\n"); + strcpy(str, "보관품의 목록 : "); n = list_obj(&str[16], ply_ptr, bnk_ptr->first_obj); if(n) print(fd, "%s.\n", str); - else print(fd, "ϰ ִ ϴ."); + else print(fd, "보관하고 있는 물건이 없습니다."); } return(0); } @@ -110,7 +113,7 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } n = load_bank(ply_ptr->name, &bnk_ptr); @@ -121,7 +124,7 @@ cmd *cmnd; F_ISSET(bnk_ptr, OCONTN); } - print(fd, " ܰ %ldԴϴ.", bnk_ptr->value); + print(fd, "당신의 잔고는 %ld냥입니다.", bnk_ptr->value); return(0); } @@ -136,7 +139,7 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } n = load_bank(ply_ptr->name, &cnt_ptr); @@ -147,12 +150,12 @@ cmd *cmnd; F_ISSET(cnt_ptr, OCONTN); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { drop_all_bank(ply_ptr, cnt_ptr,cmnd->str[1]); return(0); } - if(!strncmp(cmnd->str[1], "",4)) { - drop_all_bank(ply_ptr, cnt_ptr,cmnd->str[1]+4); + if(!strncmp(cmnd->str[1], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + drop_all_bank(ply_ptr, cnt_ptr, cmnd->str[1] + UTF8_PREFIX_ALL_LEN); return(0); } @@ -160,25 +163,25 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } if(cnt_ptr->shotscur >= cnt_ptr->shotsmax) { - print(fd, " ȿ ̻ ϴ.\n"); + print(fd, "보관함 안에 더이상 넣을 수 없습니다.\n"); return(0); } if(F_ISSET(obj_ptr, OCONTN)) { - print(fd, " ϴ.\n"); + print(fd, "보따리 종류는 보관할 수 없습니다.\n"); return(0); } del_obj_crt(obj_ptr, ply_ptr); add_obj_obj(obj_ptr, cnt_ptr); cnt_ptr->shotscur++; - print(fd, " %1i%j ׽ϴ.\n", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ׽ϴ.", + print(fd, "당신은 %1i%j 보관시켰습니다.\n", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 보관시켰습니다.", ply_ptr, "1", obj_ptr,"3"); savegame_nomsg(ply_ptr); save_bank(ply_ptr->name, cnt_ptr); @@ -199,7 +202,7 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } n = load_bank(ply_ptr->name, &cnt_ptr); @@ -216,16 +219,16 @@ cmd *cmnd; cnt += count_inv(ply_ptr, -1); if(cmnd->num < 2) { - print(fd, "κ ÷?"); + print(fd, "은행으로부터 무엇을 받으시려고요?"); return(0); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { get_all_bank(ply_ptr, cnt_ptr,cmnd->str[1]); return(0); } - if(!strncmp(cmnd->str[1], "",4)) { - get_all_bank(ply_ptr, cnt_ptr,cmnd->str[1]+4); + if(!strncmp(cmnd->str[1], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + get_all_bank(ply_ptr, cnt_ptr, cmnd->str[1] + UTF8_PREFIX_ALL_LEN); return(0); } @@ -233,13 +236,13 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ȿ ׷ ."); + print(fd, "그 안에 그런것은 없어요."); return(0); } if((weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) && cnt_ptr->parent_rom) || cnt>150) { - print(fd, " ̻ ϴ."); + print(fd, "당신은 더이상 가질 수 없습니다."); return(0); } @@ -248,8 +251,8 @@ cmd *cmnd; cnt_ptr->shotscur--; del_obj_obj(obj_ptr, cnt_ptr); - print(fd, " %1i%j ޾ҽϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %1i%j ޾ҽϴ.", + print(fd, "당신은 %1i%j 받았습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i%j 받았습니다.", ply_ptr, obj_ptr,"3"); add_obj_crt(obj_ptr, ply_ptr); @@ -258,7 +261,7 @@ cmd *cmnd; savegame_nomsg(ply_ptr); if(F_ISSET(obj_ptr, OEVENT) && !F_ISSET(obj_ptr, ONEWEV)) { - print(fd, "\n%I%j ϴ.", obj_ptr, "1"); + print(fd, "\n%I%j 사라졌습니다.", obj_ptr, "1"); del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); savegame_nomsg(ply_ptr); @@ -274,32 +277,30 @@ cmd *cmnd; { int fd, n; object *bnk_ptr; - int len; long amt; fd = ply_ptr->fd; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } if(cmnd->num != 2) { - print(fd, "󸶸 ԱϽ÷?"); + print(fd, "얼마를 입금하시려고요?"); return(0); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { amt = ply_ptr->gold; goto input_bank_all; } - len = strlen(cmnd->str[1]); - if(len>2 && !strcmp(&cmnd->str[1][len-2],"")) { + if(utf8_ends_with((unsigned char *)cmnd->str[1], (unsigned char *)"냥")) { amt = atol(cmnd->str[1]); if(amt < 1) { - print(fd, " ɼ ϴ."); + print(fd, "돈의 단위는 음수가 될수 없습니다."); return(0); } if(amt > ply_ptr->gold) { - print(fd, " ׸ŭ ʽϴ."); + print(fd, "당신은 그만큼의 돈을 가지고 있지 않습니다."); return(0); } input_bank_all : @@ -312,20 +313,20 @@ cmd *cmnd; } /* By Latok */ if( bnk_ptr->value + amt > 300000000){ - print(fd,"\n࿡ 3̻ Ա ϴ. ˼մϴ\n"); + print(fd,"\n은행에는 3억이상 입금할 수 없습니다. 죄송합니다\n"); return(0); } bnk_ptr->value += amt; ply_ptr->gold -= amt; - print(fd, " %ld Ա߽ϴ.\n", amt); - print(fd, " ܰ %ld Ǿϴ.", bnk_ptr->value); + print(fd, "당신은 %ld냥을 입금했습니다.\n", amt); + print(fd, "은행의 잔고가 %ld냥이 되었습니다.", bnk_ptr->value); save_bank(ply_ptr->name, bnk_ptr); free_obj(bnk_ptr); savegame_nomsg(ply_ptr); } else { - print(fd, " : Ա"); + print(fd, "사용법 : 몇냥 입금"); } return(0); } @@ -336,17 +337,16 @@ cmd *cmnd; { int fd, n; object *bnk_ptr; - int len; long amt; fd = ply_ptr->fd; if(!F_ISSET(ply_ptr->parent_rom, RBANK)) { - print(fd, "࿡ մϴ."); + print(fd, "은행에서만 가능합니다."); return(0); } if(cmnd->num != 2) { - print(fd, "󸶸 Ͻ÷?"); + print(fd, "얼마를 출금하시려고요?"); return(0); } n = load_bank(ply_ptr->name, &bnk_ptr); @@ -356,32 +356,31 @@ cmd *cmnd; bnk_ptr->shotsmax = 200; F_ISSET(bnk_ptr, OCONTN); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { amt = bnk_ptr->value; goto output_bank_all; } - len = strlen(cmnd->str[1]); - if(len>2 && !strcmp(&cmnd->str[1][len-2],"")) { + if(utf8_ends_with((unsigned char *)cmnd->str[1], (unsigned char *)"냥")) { amt = atol(cmnd->str[1]); if(amt < 1) { - print(fd, " ɼ ϴ."); + print(fd, "돈의 단위는 음수가 될수 없습니다."); return(0); } if(amt > bnk_ptr->value) { - print(fd, " ׸ŭ ص ʾҽϴ."); + print(fd, "당신은 그만큼의 돈을 저금해두지 않았습니다."); return(0); } output_bank_all : bnk_ptr->value -= amt; ply_ptr->gold += amt; - print(fd, " %ld ߽ϴ.\n", amt); - print(fd, " ܰ %ld Ǿϴ.", bnk_ptr->value); + print(fd, "당신은 %ld냥을 출금했습니다.\n", amt); + print(fd, "은행의 잔고가 %ld냥이 되었습니다.", bnk_ptr->value); save_bank(ply_ptr->name, bnk_ptr); free_obj(bnk_ptr); savegame_nomsg(ply_ptr); } else { - print(fd, " : "); + print(fd, "사용법 : 몇냥 출금"); } return(0); } @@ -398,7 +397,7 @@ char *part_obj; int fd, n = 1, found = 0, full = 0; int index=1; - if(!strcmp(part_obj,"")) { + if(!strcmp(part_obj,"모두")) { index=0; } fd = ply_ptr->fd; @@ -462,17 +461,17 @@ char *part_obj; if(found && last_obj) strcat(str, obj_str(last_obj, n, 0)); else { - print(fd, " ų ƹ͵ ʽϴ."); + print(fd, "당신은 보관시킬 물건을 아무것도 갖고 있지 않습니다."); return; } if(full) - print(fd, "̻ ų ϴ."); + print(fd, "더이상 물건을 보관시킬 수 없습니다."); if(full == found) return; - print(fd, " %1i%j ׽ϴ.\n", str,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ׽ϴ.", + print(fd, "당신은 %1i%j 보관시켰습니다.\n", str,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 보관시켰습니다.", ply_ptr, "1", str,"3"); savegame_nomsg(ply_ptr); save_bank(ply_ptr->name, cnt_ptr); @@ -498,7 +497,7 @@ char *part_obj; if(ply_ptr->ready[i]) cnt++; cnt += count_inv(ply_ptr, -1); - if(!strcmp(part_obj,"")) { + if(!strcmp(part_obj,"모두")) { index=0; } last_obj = 0; str[0] = 0; @@ -553,7 +552,7 @@ char *part_obj; ply_ptr->gold += obj_ptr->value; free_obj(obj_ptr); last_obj = 0; - print(fd, "\n %ld ֽϴ.", + print(fd, "\n당신은 이제 %ld냥을 가지고 있습니다.", ply_ptr->gold); } else { @@ -568,19 +567,19 @@ char *part_obj; if(found && last_obj) strcat(str, obj_str(last_obj, n, 0)); else if(!found) { - print(fd, "ǰ ƹ͵ ϴ."); + print(fd, "보관품이 아무것도 없습니다."); return; } if(heavy) { - print(fd, " ִ ʹ ſ ϴ.\n"); + print(fd, "가지고 있는 물건이 너무 무거워 들 수가 없습니다.\n"); if(heavy == found) return; } if(!strlen(str)) return; - print(fd, " %1i%j ޾ҽϴ.", str,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %1i%j ޾ҽϴ.", + print(fd, "당신은 %1i%j 받았습니다.", str,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i%j 받았습니다.", ply_ptr, str,"3"); save_bank(ply_ptr->name, cnt_ptr); free_obj(cnt_ptr); @@ -595,6 +594,3 @@ char *part_obj; - - - diff --git a/src/bank_check.c b/src/bank_check.c index 8c8982c..bd43d00 100644 --- a/src/bank_check.c +++ b/src/bank_check.c @@ -30,7 +30,7 @@ void main() n = load_bank(ply_ptr->name, &bnk_ptr); if(n < 0){ - printf("ϰ ִ ϴ."); + printf("보관하고 있는 물퓽� 없습니다."); bnk_ptr = (object *)malloc(sizeof(object)); zero(bnk_ptr, sizeof(object)); bnk_ptr->shotsmax = 200; @@ -39,11 +39,11 @@ void main() free_obj(bnk_ptr); } else { - printf( " ̸ Դϴ.\n"); - strcpy(str, "ǰ : "); + printf( "당신의 이름이 새겨진 보관함입니다.\n"); + strcpy(str, "보관품의 목록 : "); n = list_obj(&str[16], ply_ptr, bnk_ptr->first_obj); if(n) printf( "%s.\n", str); - else printf( "ϰ ִ ϴ."); - printf( "࿡ ܰ %1dԴϴ.", bnk_ptr->value); + else printf( "보관하고 있는 물퓽� 없습니다."); + printf( "은행에 잔고는 %1d냥입니다.", bnk_ptr->value); } } diff --git a/src/board.c b/src/board.c index 4677942..37dadb3 100644 --- a/src/board.c +++ b/src/board.c @@ -1,4 +1,4 @@ -/* Խ */ +/* 게시판 */ #include @@ -75,10 +75,10 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; obj_ptr = find_obj(ply_ptr, rom_ptr->first_obj, - "Խ", 1); + "게시판", 1); if(!obj_ptr) { - print(fd,"̰ Խ ϴ."); + print(fd,"이곳에는 게시판이 없습니다."); return 0; } @@ -90,7 +90,7 @@ cmd *cmnd; return DOPROMPT; } -/* Խ */ +/* 게시판 보기 */ void list_board(fd, param, str) int fd; int param; @@ -101,9 +101,9 @@ char *str; int i,handle; switch(param) { - case 0: /* Խ */ + case 0: /* 게시판 보기 시작 */ broadcast_rom(fd,Ply[fd].ply->parent_rom->rom_num, - "\n%M Խ ϴ.",Ply[fd].ply); + "\n%M이 게시판을 봅니다.",Ply[fd].ply); board_handle[fd] = 0; i = 1; while(board_dir[i].num>0) { @@ -112,18 +112,18 @@ char *str; } exit_while: if(board_dir[i].num<0) { - print(fd,"߸ ԽԴϴ."); + print(fd,"잘못된 게시판입니다."); RETURN(fd, command, 1); } sprintf(name,"%s/board_index",board_dir[i].dir); if((handle=open(name,O_RDONLY))==-1) { - print(fd,"εȭ ϴ."); + print(fd,"인덱스화일을 읽을수 없습니다."); RETURN(fd, command, 1); } board_pos[fd]=lseek(handle,0,SEEK_END); if(board_pos[fd]intrpt &= ~1; RETURN(fd, list_board, 1); @@ -185,10 +185,10 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; obj_ptr = find_obj(ply_ptr, rom_ptr->first_obj, - "Խ", 1); + "게시판", 1); if(!obj_ptr) { - print(fd,"̰ Խ ϴ."); + print(fd,"이곳에는 게시판이 없습니다."); return 0; } @@ -214,9 +214,9 @@ unsigned char *str; struct tm *tt; switch(param) { - case 0: /* Խ غ */ + case 0: /* 게시판 쓰기 준비 */ broadcast_rom(fd,Ply[fd].ply->parent_rom->rom_num, - "\n%M Խǿ ϴ.",Ply[fd].ply); + "\n%M이 게시판에 글을 씁니다.",Ply[fd].ply); board_handle[fd] = 0; i = 1; while(board_dir[i].num>0) { @@ -225,20 +225,20 @@ unsigned char *str; } exit_while: if(board_dir[i].num<0) { - print(fd,"߸ ԽԴϴ."); + print(fd,"잘못된 게시판입니다."); RETURN(fd, command, 1); } sprintf(name,"%s/board_index",board_dir[i].dir); if((handle=open(name,O_RDWR))==-1) { - print(fd,"εȭ ϴ."); + print(fd,"인덱스화일을 읽을수 없습니다."); RETURN(fd, command, 1); } board_handle[fd]=handle; sprintf(name,"%s/%s",board_dir[i].dir,Ply[fd].ply->name); if((handle=creat(name,0644))==-1) { - print(fd,"ȭ ϴ."); + print(fd,"화일을 생성할 수 없습니다."); close(board_handle[fd]); RETURN(fd, command, 1); } @@ -246,7 +246,7 @@ unsigned char *str; board_handle2[fd]=handle; F_SET(Ply[fd].ply,PREADI); - print(fd,": "); + print(fd,"제목: "); output_buf(); Ply[fd].io->intrpt &= ~1; RETURN(fd, write_board, 1); @@ -255,7 +255,7 @@ unsigned char *str; if(strlen(str)==0) { close(board_handle[fd]); close(board_handle2[fd]); - print(fd,"Խù ۼ մϴ."); + print(fd,"게시물 작성을 취소합니다."); RETURN(fd,command,1); } @@ -263,8 +263,8 @@ unsigned char *str; board_title[fd][40]=0; board_pos[fd]=1; - print(fd,"Խù ۼմϴ. ÷ ó [.] ԷϽʽÿ.\n"); - print(fd,"߰ Ͻ÷ ó [!!] ԷϽʽÿ.\n\n"); + print(fd,"게시물을 작성합니다. 끝내시려면 행의 처음에 [.]을 입력하십시요.\n"); + print(fd,"중간에 취소하시려면 행의 처음에 [!!]를 입력하십시요.\n\n"); F_SET(Ply[fd].ply,PREADI); print(fd,"%3ld: ",board_pos[fd]); output_buf(); @@ -278,7 +278,7 @@ unsigned char *str; close(board_handle[fd]); sprintf(name,"%s/%s",board_dir[board_num[fd]].dir,Ply[fd].ply->name); unlink(name); - print(fd,"Խù ۼ մϴ."); + print(fd,"게시물 작성을 취소합니다."); RETURN(fd,command,1); } if(str[0]=='.') { @@ -306,7 +306,7 @@ unsigned char *str; sizeof(struct BOARD_INDEX)); close(board_handle[fd]); - print(fd,"Խù ϵǾϴ."); + print(fd,"게시물이 등록되었습니다."); RETURN(fd, command, 1); } write(board_handle2[fd],str,strlen(str)); @@ -337,19 +337,19 @@ cmd *cmnd; i++; } if(board_dir[i].num<0) { - print(fd,"߸ ԽԴϴ."); + print(fd,"잘못된 게시판입니다."); return 0; } sprintf(name,"%s/board_index",board_dir[i].dir); if((handle=open(name,O_RDWR))==-1) { - print(fd,"εȭ ϴ."); + print(fd,"인덱스화일을 읽을수 없습니다."); return 0; } number=lseek(handle,0,SEEK_END)/sizeof(struct BOARD_INDEX); if(cmnd->val[0]>number || cmnd->val[0]<1) { - print(fd,"  ԽùԴϴ."); + print(fd,"범위에 벗어나는 게시물입니다."); close(handle); return 0; } @@ -357,19 +357,19 @@ cmd *cmnd; lseek(handle,(cmnd->val[0]-1)*sizeof(struct BOARD_INDEX),SEEK_SET); read(handle,&board_index,sizeof(struct BOARD_INDEX)); if(board_index.readnum<0 && ply_ptr->classparent_rom->rom_num, - "\n%M Խ нϴ.",ply_ptr); + "\n%M이 게시판의 글을 읽습니다.",ply_ptr); - print(fd,"\nȣ: %d ø: %s : %s\n", + print(fd,"\n번호: %d 올린이: %s 제목: %s\n", board_index.num, board_index.upload, board_index.title); - print(fd,"ø: 19%d %d %d %d %d ", + print(fd,"올린날: 19%d년 %d월 %d일 %d시 %d분 ", board_index.year,board_index.month, board_index.day, board_index.hour,board_index.min); - print(fd,"ټ: %d Ƚ: %d\n", + print(fd,"총줄수: %d 읽은횟수: %d\n", board_index.line, board_index.readnum); print(fd,"---------------------------------------------------------------\n"); @@ -399,17 +399,17 @@ cmd *cmnd; fd=ply_ptr->fd; - if(cmnd->num<2 || strcmp(cmnd->str[1],"Խ") + if(cmnd->num<2 || strcmp(cmnd->str[1],"게시판") || (cmnd->val[1]==1 && ply_ptr->class ۻ"); + print(fd, "사용법: 게시판 <번호> 글삭제"); return 0; } obj_ptr=find_obj(ply_ptr,ply_ptr->parent_rom->first_obj, - "Խ", 1); + "게시판", 1); if(!obj_ptr || obj_ptr->special!=SP_BOARD) { - print(fd, "̰ Խ ϴ."); + print(fd, "이곳에는 게시판이 없습니다."); return 0; } @@ -420,35 +420,35 @@ cmd *cmnd; } exit_while: if(board_dir[i].num<0) { - print(fd,"߸ ԽԴϴ."); + print(fd,"잘못된 게시판입니다."); return 0; } sprintf(name,"%s/board_index",board_dir[i].dir); if((handle=open(name,O_RDWR))==-1) { - print(fd,"εȭ ϴ."); + print(fd,"인덱스화일을 읽을수 없습니다."); return 0; } if(lseek(handle,0,SEEK_END)val[1]*sizeof(struct BOARD_INDEX)) { - print(fd, "  ԽùԴϴ."); + print(fd, "범위에 벗어나는 게시물입니다."); return 0; } lseek(handle,(cmnd->val[1]-1)*sizeof(struct BOARD_INDEX),SEEK_SET); read(handle,&board_index,sizeof(struct BOARD_INDEX)); if(strcmp(board_index.upload,ply_ptr->name) && ply_ptr->classval[1]-1)*sizeof(struct BOARD_INDEX),SEEK_SET); write(handle,&board_index,sizeof(struct BOARD_INDEX)); diff --git a/src/comman5_old.c b/src/comman5_old.c index 8d0edba..0210ae9 100644 --- a/src/comman5_old.c +++ b/src/comman5_old.c @@ -41,7 +41,7 @@ cmd *cmnd; i = LT(ply_ptr, LT_ATTCK); if(ply_ptr->class==0) { - print(fd," ֽϴ."); + print(fd,"당신은 전투가 금지된 직업을 갖고 있습니다."); return 0; } if(t < i) { @@ -50,14 +50,14 @@ cmd *cmnd; } if(cmnd->num < 2 || F_ISSET(ply_ptr, PBLIND)) { - print(fd, " Ͻ÷?"); + print(fd, "누구를 공격하시려구요?"); return(0); } rom_ptr = ply_ptr->parent_rom; if(ply_is_attacking(ply_ptr,cmnd)) { - print(fd, " ο ݾƿ!"); + print(fd, "당신은 지금 싸우고 있잖아요!"); return(0); } @@ -70,7 +70,7 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[1]) < 2) { - print(fd, "׷ ϴ."); + print(fd, "그런건 여기 없습니다."); return(0); } @@ -113,7 +113,7 @@ creature *crt_ptr; return(0); if (crt_ptr->type != MONSTER) { if(is_charm_crt(ply_ptr->name, crt_ptr) && F_ISSET(ply_ptr, PCHARM)) { - print(fd, " %S%j ʹ ؼ ׷ ϴ.", crt_ptr->name,"3"); + print(fd, "당신은 %S%j 너무 좋아해서 그럴수 없습니다.", crt_ptr->name,"3"); return(0); } else @@ -123,8 +123,8 @@ creature *crt_ptr; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, "\n 巯ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "\n당신의 모습이 서서히 드러났습니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러났습니다.", ply_ptr); } @@ -138,27 +138,27 @@ creature *crt_ptr; } if(crt_ptr->type == MONSTER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(add_enm_crt(ply_ptr->name, crt_ptr) < 0) { - print(fd, " %M%j մϴ.", crt_ptr,"3"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j մϴ.", + print(fd, "당신은 %M%j 공격합니다.", crt_ptr,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j 공격합니다.", ply_ptr, "1",crt_ptr,"3"); } if(F_ISSET(crt_ptr, MMGONL)) { - print(fd, "\n %M ƹ ҿ µ մϴ.", + print(fd, "\n당신의 무기는 %M에게 아무 소용이 없는듯 합니다.", crt_ptr); return(0); } if(F_ISSET(crt_ptr, MENONL) && ply_ptr->class < CARETAKER) { if(!ply_ptr->ready[WIELD-1] || ply_ptr->ready[WIELD-1]->adjustment < 1) { - print(fd, "\n %M ƹ ҿ µ մϴ.", + print(fd, "\n당신의 무기는 %M에게 아무 소용이 없는듯 합니다.", crt_ptr); return(0); } @@ -166,35 +166,35 @@ creature *crt_ptr; } else { if(F_ISSET(ply_ptr->parent_rom, RNOKIL)) { - print(fd, " ο ϴ."); + print(fd, "이 곳에서는 싸울 수 없습니다."); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && ply_ptr->level < 128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ϴٴ° Ƽ."); + print(fd, "당신은 선하다는걸 아세요."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && ply_ptr->level <128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ڴ ؼ ϴ."); + print(fd, "그 사용자는 선해서 공격할 수 없습니다."); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && ply_ptr->level < 128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ϴٴ° Ƽ."); + print(fd, "당신은 선하다는걸 아세요."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && ply_ptr->level <128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ڴ ؼ ϴ."); + print(fd, "그 사용자는 선해서 공격할 수 없습니다."); return (0); } } ply_ptr->lasttime[LT_ATTCK].interval += 3; - print(crt_ptr->fd, "\n%M%j մϴ!", ply_ptr,"1"); + print(crt_ptr->fd, "\n%M%j 당신을 공격합니다!", ply_ptr,"1"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j մϴ!", ply_ptr, "1",crt_ptr,"3"); + "\n%M%j %M%j 공격합니다!", ply_ptr, "1",crt_ptr,"3"); } count = 1; @@ -211,9 +211,9 @@ creature *crt_ptr; if(ply_ptr->ready[WIELD-1]) { if(ply_ptr->ready[WIELD-1]->shotscur < 1) { - print(fd, "\n%S%j μ Ƚϴ.", + print(fd, "\n%S%j 부서져 버렸습니다.", ply_ptr->ready[WIELD-1]->name,"1"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %S%j μ Ƚϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 %S%j 부서져 버렸습니다.", ply_ptr, ply_ptr->ready[WIELD-1]->name,"1"); add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; @@ -226,7 +226,7 @@ creature *crt_ptr; if (F_ISSET(ply_ptr, PFEARS)) n += 2; if (F_ISSET(ply_ptr, PBLIND)) n += 5; - if(mrand(1,30) >= n) { /* 20 */ + if(mrand(1,30) >= n) { /* 원래값 20 */ if(ply_ptr->ready[WIELD-1]) { n = mdice(ply_ptr->ready[WIELD-1]) + bonus[(int)ply_ptr->strength] + @@ -261,11 +261,11 @@ creature *crt_ptr; if(ply_ptr->class == PALADIN) { if(ply_ptr->alignment < 0) { n /= 2; - print(fd, "\n ϴ."); + print(fd, "\n당신의 악행이 양심을 괴롭힙니다."); } else if(ply_ptr->alignment > 250) { n += mrand(1,3); - print(fd, "\n ɷ 谡ŵϴ."); + print(fd, "\n당신의 선행이 능력을 배가시킵니다."); } } @@ -274,18 +274,18 @@ creature *crt_ptr; (ply_ptr->ready[WIELD-1] && F_ISSET(ply_ptr->ready[WIELD-1],OALCRT))) { ANSI(fd, GREEN); - print(fd, "\n %M ġŸ Ƚϴ.",crt_ptr); + print(fd, "\n당신은 %M에게 치명타를 날렸습니다.",crt_ptr); ANSI(fd, WHITE); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ġŸ Ƚϴ.", ply_ptr); + "\n%M이 치명타를 날렸습니다.", ply_ptr); n *= mrand(3,6); if(ply_ptr->ready[WIELD-1] && (!F_ISSET(ply_ptr->ready[WIELD-1], ONSHAT)) && ((mrand(1,100) < 3) || (F_ISSET(ply_ptr->ready[WIELD-1],OALCRT)))) { if(!F_ISSET(ply_ptr->ready[WIELD-1], ONEWEV)) { - print(fd, "\n%S%j μϴ.", + print(fd, "\n%S%j 산산히 부서집니다.", ply_ptr->ready[WIELD-1]->name,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%s %S%j μϴ.", - F_ISSET(ply_ptr, PMALES) ? "":"׳", + "\n%s의 %S%j 산산히 부서집니다.", + F_ISSET(ply_ptr, PMALES) ? "그":"그녀", ply_ptr->ready[WIELD-1]->name,"1"); free_obj(ply_ptr->ready[WIELD-1]); ply_ptr->ready[WIELD-1] = 0; @@ -295,22 +295,22 @@ creature *crt_ptr; else if(mrand(1,100) <= (5-p) && ply_ptr->ready[WIELD-1] && !F_ISSET(ply_ptr->ready[WIELD-1], OCURSE)) { ANSI(fd, GREEN); - print(fd, "\n ⸦ ߷Ƚϴ."); + print(fd, "\n당신은 무기를 떨어뜨렸습니다."); ANSI(fd, WHITE); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ⸦ ߷Ƚϴ.", ply_ptr); + "\n%M이 무기를 떨어뜨렸습니다.", ply_ptr); n = 0; add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; compute_thaco(ply_ptr); } - print(fd, "\n %M %d ŭ ظ ־ϴ.", crt_ptr, n); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j %dŭ ظ ϴ.",ply_ptr, "1",crt_ptr,"3",n); - print(crt_ptr->fd, "\n %MԼ %d ŭ ظ Ծϴ.", + print(fd, "\n당신은 %M에게 %d 만큼의 피해를 주었습니다.", crt_ptr, n); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j %d만큼의 피해를 입힙니다.",ply_ptr, "1",crt_ptr,"3",n); + print(crt_ptr->fd, "\n당신은 %M에게서 %d 만큼의 피해를 입었습니다.", ply_ptr, n); - /* */ + /* 상태출력 */ st=(float)(crt_ptr->hpcur-n)/crt_ptr->hpmax; if(crt_ptr->hpcur-n < 1) st=0; st=st*15; @@ -364,9 +364,9 @@ creature *crt_ptr; } if(crt_ptr->hpcur < 1) { - print(fd, "\n %M%j ׿ϴ.", crt_ptr,"3"); + print(fd, "\n당신은 %M%j 죽였습니다.", crt_ptr,"3"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", crt_ptr,"3"); + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); return(1); } @@ -374,8 +374,8 @@ creature *crt_ptr; check_for_flee(ply_ptr, crt_ptr); } else { - print(fd, "\n ƽϴ."); - print(crt_ptr->fd, "\n%M%j ƽϴ.", ply_ptr,"1"); + print(fd, "\n허공을 쳤습니다."); + print(crt_ptr->fd, "\n%M%j 허공을 쳤습니다.", ply_ptr,"1"); } } return(0); @@ -402,7 +402,7 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PBLIND)){ ANSI(fd, RED); - print(fd, " ־ ֽϴ!\n"); + print(fd, "당신은 눈이 멀어 있습니다!\n"); ANSI(fd, WHITE); return(0); } @@ -413,8 +413,8 @@ cmd *cmnd; } if((sum > 30) && !((cmnd->num == 2) && !strcmp(cmnd->str[1], "l"))) { - print(fd, "%-14s [ ]", ""); - print(fd, " %-14s [ ]\n", ""); + print(fd, "%-14s [레벨 직업]", "사용자"); + print(fd, " %-14s [레벨 직업]\n", "사용자"); print(fd, "-------------------------------"); print(fd, "-----------------------------\n"); for(i=0; iclass < SUB_DM) - if(Ply[i].ply!=ply_ptr) continue; /* Ǿ ڽ ... */ + if(Ply[i].ply!=ply_ptr) continue; /* 투명되어도 자신은 나오도록... */ total++; ANSI(fd, WHITE); print(fd, "%-13s%s ", Ply[i].ply->name, @@ -468,7 +468,7 @@ cmd *cmnd; ANSI(fd, GREEN); print(fd, "[%s%02d ] ", (Ply[i].ply->level>=100)? "" : " ", Ply[i].ply->level); - /* һ̻ */ + /* 불사이상 빨강색 */ /* if(Ply[i].ply->class>=CARETAKER) { ANSI(fd,BOLD); ANSI(fd,RED); @@ -498,7 +498,7 @@ cmd *cmnd; } else { ANSI(fd, BLUE); - print(fd, "[߸] "); + print(fd, "[중립] "); } ANSI(fd, WHITE); title_cut_index[fd]=1; @@ -508,11 +508,11 @@ cmd *cmnd; #endif } } - if(total!=1) print(fd, "\n %d ڰ Ѵ ̿ϰ ֽϴ.",total); - else print(fd, "\n ȥڼ ܷ Ѵ ̿ϰ ֽϴ."); + if(total!=1) print(fd, "\n총 %d명의 사용자가 무한대전을 이용하고 있습니다.",total); + else print(fd, "\n당신 혼자서 외로이 무한대전을 이용하고 있습니다."); if(AT_WAR) - print(fd, "\n%s аŸ %s аŸ Դϴ.", + print(fd, "\n%s 패거리와 %s 패거리가 전쟁중입니다.", family_str[AT_WAR/16], family_str[AT_WAR%16]); return(0); @@ -535,7 +535,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ˻Ͻ÷?"); + print(fd, "누구를 검색하시려구요?"); return(0); } @@ -544,16 +544,16 @@ cmd *cmnd; if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || F_ISSET(ply_ptr, PBLIND) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, " ̿ ƴմϴ."); + print(fd, "현재 이용중이 아닙니다."); return(0); } ANSI(fd, YELLOW); - print(fd, "%-18s %-4s [] %-4s %-20s %-4s %-10s\n", "", "", "", "Īȣ", "", ""); + print(fd, "%-18s %-4s [레벨] %-4s %-20s %-4s %-10s\n", "사용자", "성별", "직업", "칭호", "나이", "종족"); print(fd, "----------------------------------------------------------------------------\n"); print(fd, "%-18s %-4s [ %02d ] %-4.4s %-20s %-4d ", crt_ptr->name, - F_ISSET(crt_ptr, PMALES) ? " ":" ", + F_ISSET(crt_ptr, PMALES) ? " 남":" 여", crt_ptr->level, class_str[(int)crt_ptr->class], title_ply(ply_ptr,crt_ptr), @@ -619,7 +619,7 @@ cmd *cmnd; if((!F_ISSET(xp->ext, XINVIS) || F_ISSET(ply_ptr,PDINVI)) && !F_ISSET(xp->ext, XNOSEE)){ found++; - print(fd, "\nⱸ ãҽϴ: %s.", xp->ext->name); + print(fd, "\n출구를 찾았습니다: %s.", xp->ext->name); } xp = xp->next_tag; } @@ -629,7 +629,7 @@ cmd *cmnd; if(F_ISSET(op->obj, OHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(op->obj, OINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n %1i%j ãҽϴ.", op->obj,"3"); + print(fd, "\n당신은 %1i%j 찾았습니다.", op->obj,"3"); } op = op->next_tag; } @@ -640,7 +640,7 @@ cmd *cmnd; mrand(1,100) <= chance) if(!F_ISSET(cp->crt, PINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %S%j ãƳϴ.", cp->crt->name,"3"); + print(fd, "\n당신은 숨어있는 %S%j 찾아내었습니다.", cp->crt->name,"3"); } cp = cp->next_tag; } @@ -650,18 +650,18 @@ cmd *cmnd; if(F_ISSET(cp->crt, MHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(cp->crt, MINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %1M%j ãƳϴ.", cp->crt,"3"); + print(fd, "\n당신은 숨어있는 %1M%j 찾아내었습니다.", cp->crt,"3"); } cp = cp->next_tag; } - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֺ ϴ.", ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주변을 샅샅이 뒤져봅니다.", ply_ptr); if(found) - broadcast_rom(fd, ply_ptr->rom_num, "\n%s ߰Ѱ !", - F_ISSET(ply_ptr, MMALES) ? "":"׳"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%s가 뭘 발견한것 같군요!", + F_ISSET(ply_ptr, MMALES) ? "그":"그녀"); else - print(fd, " ƹ͵ ã ߽ϴ.\n"); + print(fd, "당신은 아무것도 찾지 못했습니다.\n"); return(0); @@ -706,8 +706,8 @@ char *str; case 1: ANSI(fd, BOLD); ANSI(fd, RED); - print(fd, "ſ ͸ մϴ.\n"); - print(fd, " ȣ ־ֽʽÿ : "); + print(fd, "당신에 관한 데이터를 완전히 삭제합니다.\n"); + print(fd, "당신의 현재 암호를 넣어주십시요 : "); ANSI(fd, NORMAL); ANSI(fd, WHITE); F_SET(Ply[fd].ply,PREADI); @@ -715,23 +715,26 @@ char *str; case 2: F_CLR(Ply[fd].ply,PREADI); if(!strcmp(ply_ptr->password, str)) { - print(fd, "¥? (¥/)"); + print(fd, "찐짜로? (찐짜로/뻥으로)"); F_SET(Ply[fd].ply,PREADI); RETURN(fd, suicide, 3); } else { - print(fd, "ȣ Ʋϴ.\n ʾҽϴ."); + print(fd, "암호가 틀립니다.\n삭제되지 않았습니다."); RETURN(fd, command, 1); } case 3: F_CLR(Ply[fd].ply,PREADI); - if(!strcmp(str,"¥")) { + if(!strcmp(str,"찐짜로")) { if(F_ISSET(ply_ptr, PFAMIL)) { edit_member(ply_ptr->name, ply_ptr->class, ply_ptr->daily[DL_EXPND].max, 2); } - broadcast_all("\n### %s ڻû Ͽϴ.\n", Ply[fd].ply->name); + broadcast_all("\n### %s님이 자살신청을 하였습니다.\n", Ply[fd].ply->name); all_broad_time=time(0); - sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(Ply[fd].ply->name), Ply[fd].ply->name); + if(player_path_from_name(Ply[fd].ply->name, file, sizeof(file)) < 0) { + print(fd, "플레이어 경로를 만들 수 없습니다."); + RETURN(fd, command, 1); + } sprintf(file2,"%s/alias/%s",PLAYERPATH,Ply[fd].ply->name); sprintf(file3,"%s/bank/%s",PLAYERPATH,Ply[fd].ply->name); sprintf(temp, "mv %s %s/suic/%s", file, PLAYERPATH, Ply[fd].ply->name); @@ -741,7 +744,7 @@ char *str; t = time(0); strcpy(buf,ctime(&t)); buf[strlen(buf)-1] = 0; - logn("SUICIDE","%s : %s (%s) ڻû Ͽϴ.\n", buf,Ply[fd].ply->name, Ply[fd].io->address); + logn("SUICIDE","%s : %s (%s)님이 자살신청을 하였습니다.\n", buf,Ply[fd].ply->name, Ply[fd].io->address); #endif disconnect(fd); system(temp); @@ -750,7 +753,7 @@ char *str; return; } else { - print(fd, " ʾҽϴ."); + print(fd, "삭제되지 않았습니다."); RETURN(fd, command, 1); } } @@ -799,21 +802,21 @@ cmd *cmnd; chance = MIN(90, 5 + 2*((ply_ptr->level+3)/4) + 3*bonus[(int)ply_ptr->dexterity]); - print(fd, " ֽ  մϴ."); + print(fd, "당신은 애써 숨어보려고 합니다."); if(F_ISSET(ply_ptr, PBLIND)) chance = MIN(chance, 20); if(mrand(1,100) <= chance) { F_SET(ply_ptr, PHIDDN); - print(fd, "\n ϴ."); + print(fd, "\n당신은 성공적으로 숨었습니다."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j ׸ ̷ ϴ.", ply_ptr,"1"); + "\n%M%j 그림자 사이로 숨었습니다.", ply_ptr,"1"); } else { F_CLR(ply_ptr, PHIDDN); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j ֽ  մϴ.", ply_ptr,"1"); + "\n%M%j 애써 숨어보려고 합니다.", ply_ptr,"1"); } @@ -825,12 +828,12 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, "׷ ."); + print(fd, "그런것은 여기 없어요."); return(0); } if(F_ISSET(obj_ptr,ONOTAK)){ - print(fd," װ ϴ."); + print(fd,"당신은 그것을 숨길 수 없습니다."); return (0); } if(ply_ptr->class == THIEF || ply_ptr->class == ASSASSIN) @@ -843,14 +846,14 @@ cmd *cmnd; chance = MIN(90, 5 + 3*((ply_ptr->level+3)/4) + 3*bonus[(int)ply_ptr->dexterity]); - print(fd, " װ ܺ մϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j ܺ մϴ.", + print(fd, "당신은 그것을 숨겨보려고 합니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j 숨겨보려고 합니다.", ply_ptr, "1",obj_ptr,"3"); if(mrand(1,100) <= chance) { F_SET(obj_ptr, OHIDDN); - print(fd, "\n ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j ϴ.", + print(fd, "\n당신은 성공적으로 숨겼습니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j 어딘가 숨깁니다.", ply_ptr, "1", obj_ptr,"3"); } else @@ -873,37 +876,37 @@ cmd *cmnd; fd = ply_ptr->fd; - print(fd," :\n"); - print(fd," ̾߱: %s\n", F_ISSET(ply_ptr, PIGNOR) ? "̼" : " "); - print(fd," : %s\n", F_ISSET(ply_ptr, PNOBRD) ? "̼" : " "); - print(fd," ȯȣ : %s\n", F_ISSET(ply_ptr, PNOBR2) ? "̼" : " "); - print(fd," 纸 : %s\n", F_ISSET(ply_ptr, PDSCRP) ? " " : "̼"); - print(fd," ȯ : %s\n", F_ISSET(ply_ptr, PNOSUM) ? " Ұ " : " "); - print(fd," ġ : "); + print(fd,"현재 설정 상태:\n"); + print(fd," 이야기듣기: %s\n", F_ISSET(ply_ptr, PIGNOR) ? "미설정" : " 설정 "); + print(fd," 잡담듣기 : %s\n", F_ISSET(ply_ptr, PNOBRD) ? "미설정" : " 설정 "); + print(fd," 환호듣기 : %s\n", F_ISSET(ply_ptr, PNOBR2) ? "미설정" : " 설정 "); + print(fd," 묘사보기 : %s\n", F_ISSET(ply_ptr, PDSCRP) ? " 설정 " : "미설정"); + print(fd," 소환 : %s\n", F_ISSET(ply_ptr, PNOSUM) ? " 불가 " : " 가능 "); + print(fd," 도망수치 : "); if(F_ISSET(ply_ptr, PWIMPY)) print(fd, "%-6d\n", ply_ptr->WIMPYVALUE); - else print(fd, "̼\n"); - print(fd," : %s\n", F_ISSET(ply_ptr, PNOCMP) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PPROMP) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PLECHO) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PANSIC) ? " " : "̻"); - print(fd," : %s\n", F_ISSET(ply_ptr, PBRIGH) ? " " : "̻"); - print(fd," ̸ : %s\n", F_ISSET(ply_ptr, PNORNM) ? "̼" : " "); - print(fd," ª : %s\n", F_ISSET(ply_ptr, PNOSDS) ? "̼" : " "); - print(fd," 伳 : %s\n", F_ISSET(ply_ptr, PNOLDS) ? "̼" : " "); - print(fd," ⱸ : %s\n", F_ISSET(ply_ptr, PNOEXT) ? "׷" : "ؽƮ"); - print(fd," аŸȯ: %s\n", F_ISSET(ply_ptr, PFRTUN) ? " " : "̼"); + else print(fd, "미설정\n"); + print(fd," 행삽입 : %s\n", F_ISSET(ply_ptr, PNOCMP) ? " 설정 " : "미설정"); + print(fd," 상태 : %s\n", F_ISSET(ply_ptr, PPROMP) ? " 출력 " : "미설정"); + print(fd," 반향 : %s\n", F_ISSET(ply_ptr, PLECHO) ? " 설정 " : "미설정"); + print(fd," 색 : %s\n", F_ISSET(ply_ptr, PANSIC) ? " 사용 " : "미사용"); + print(fd," 밝은색 : %s\n", F_ISSET(ply_ptr, PBRIGH) ? " 사용 " : "미사용"); + print(fd," 방이름 : %s\n", F_ISSET(ply_ptr, PNORNM) ? "미설정" : " 출력 "); + print(fd," 짧은설명 : %s\n", F_ISSET(ply_ptr, PNOSDS) ? "미설정" : " 출력 "); + print(fd," 긴설명 : %s\n", F_ISSET(ply_ptr, PNOLDS) ? "미설정" : " 출력 "); + print(fd," 출구 : %s\n", F_ISSET(ply_ptr, PNOEXT) ? "그래프" : "텍스트"); + print(fd," 패거리귀환: %s\n", F_ISSET(ply_ptr, PFRTUN) ? " 설정 " : "미설정"); /* - if(F_ISSET(ply_ptr, PNOAAT)) strcat(str, " ȯմϴ.\n"); - if(F_ISSET(ply_ptr, PHASTE)) strcat(str, "Ȱ ⸦ ϰ ֽϴ\n"); - if(F_ISSET(ply_ptr, PPRAYD)) strcat(str, " ȣ ްֽϴ\n"); - if(F_ISSET(ply_ptr, PPOWER)) strcat(str, " ֽϴ\n"); - if(F_ISSET(ply_ptr, PSLAYE)) strcat(str, " ⿡ Ⱑ ϴ\n"); - if(F_ISSET(ply_ptr, PMEDIT)) strcat(str, " 繰 Ծϴ\n"); + if(F_ISSET(ply_ptr, PNOAAT)) strcat(str, "수동공격으로 전환합니다.\n"); + if(F_ISSET(ply_ptr, PHASTE)) strcat(str, "활보법으로 기를 운행하고 있습니다\n"); + if(F_ISSET(ply_ptr, PPRAYD)) strcat(str, "신의 보호를 받고있습니다\n"); + if(F_ISSET(ply_ptr, PPOWER)) strcat(str, "기공으로 힘을 모으고 있습니다\n"); + if(F_ISSET(ply_ptr, PSLAYE)) strcat(str, "당신의 무기에 살기가 감돕니다\n"); + if(F_ISSET(ply_ptr, PMEDIT)) strcat(str, "당신은 참선으로 사물을 꿰뚤어봅니다\n"); print(fd,"%s\n",str); */ - print(fd, "[ ]̶ ġø ڼ ֽϴ.\n"); + print(fd, "[설정 도움말]이라고 치시면 자세한 설정사항을 볼 수 있습니다.\n"); return(0); } /**********************************************************************/ @@ -923,20 +926,20 @@ cmd *cmnd; char *str; int flags; } setkeys[]={ - { "̾߱", PIGNOR }, - { "", PNOBRD }, - { "ȯȣ", PNOBR2 }, - { "纸", PDSCRP }, - { "ȯ", PNOSUM }, - { "", PNOCMP }, - { "", PPROMP }, - { "", PLECHO }, - { "", PANSIC }, - { "", PBRIGH }, - { "̸", PNORNM }, - { "ª", PNOSDS }, - { "伳", PNOLDS }, - { "ⱸ", PNOEXT }, + { "이야기듣기", PIGNOR }, + { "잡담듣기", PNOBRD }, + { "환호듣기", PNOBR2 }, + { "묘사보기", PDSCRP }, + { "소환", PNOSUM }, + { "행삽입", PNOCMP }, + { "상태", PPROMP }, + { "반향", PLECHO }, + { "색", PANSIC }, + { "밝은색", PBRIGH }, + { "방이름", PNORNM }, + { "짧은설명", PNOSDS }, + { "긴설명", PNOLDS }, + { "출구", PNOEXT }, { NULL, -1 }, }; @@ -959,18 +962,18 @@ cmd *cmnd; i++; } - if(!strcmp(cmnd->str[1], "ġ")) { + if(!strcmp(cmnd->str[1], "도망수치")) { F_SET(ply_ptr, PWIMPY); ply_ptr->WIMPYVALUE = cmnd->val[1] == 1L ? 10 : cmnd->val[1]; ply_ptr->WIMPYVALUE = MAX(ply_ptr->WIMPYVALUE, 2); if(ply_ptr->WIMPYVALUE==0) F_CLR(ply_ptr,PWIMPY); } - else if(!strcmp(cmnd->str[1], "аŸȯ")) { + else if(!strcmp(cmnd->str[1], "패거리귀환")) { if(F_ISSET(ply_ptr, PFAMIL)) { F_SET(ply_ptr, PFRTUN); - print(fd, "аŸ ȯ մϴ.\n"); + print(fd, "패거리 존으로 귀환을 합니다.\n"); } - else print(fd, " аŸ ԵǾ ʽϴ.\n"); + else print(fd, "당신은 패거리에 가입되어 있지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "hexline")) { F_SET(ply_ptr, PHEXLN); @@ -984,9 +987,9 @@ cmd *cmnd; F_SET(ply_ptr, PROBOT); print(fd, "Robot mode on.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "수동공격")) { F_SET(ply_ptr, PNOAAT); - print(fd, " մϴ.\n"); + print(fd, "수동으로 공격합니다.\n"); } flag_list(ply_ptr,cmnd); @@ -1011,80 +1014,80 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num == 1) { - print(fd, "[ ]̶ ġø ׵ ֽϴ.\n"); + print(fd, "[해제 도움말]이라고 치시면 모든 설정사항들을 볼 수 있습니다.\n"); return(0); } - if(!strcmp(cmnd->str[1], "ź")) { + if(!strcmp(cmnd->str[1], "잡담듣기거부")) { F_CLR(ply_ptr, PNOBRD); - print(fd, " ϴ.\n"); + print(fd, "이제부터 잡담을 듣습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { /* compact */ + else if(!strcmp(cmnd->str[1], "행삽입")) { /* compact */ F_CLR(ply_ptr, PNOCMP); - print(fd, " ޼ Ҷ ʽϴ.\n"); + print(fd, "이제부터 메세지를 출력할때 한행을 삽입하지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "반향")) { F_CLR(ply_ptr, PLECHO); - print(fd, " ޼ ʽϴ.\n"); + print(fd, "당신의 메세지가 반향되지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "̸")) { + else if(!strcmp(cmnd->str[1], "방이름")) { F_SET(ply_ptr, PNORNM); - print(fd, " ̸ ʽϴ.\n"); + print(fd, "이제부터 방이름을 출력하지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "간단")) { F_SET(ply_ptr, PNOSDS); - print(fd, " ʽϴ.\n"); + print(fd, "방의 간단한 설명을 보지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "Ϲ")) { + else if(!strcmp(cmnd->str[1], "일반")) { F_SET(ply_ptr, PNOLDS); - print(fd, " ڼ ʽϴ.\n"); + print(fd, "방의 자세한 설명을 보지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "hexline")) { F_CLR(ply_ptr, PHEXLN); print(fd, "Hex line disabled.\n"); } - else if(!strcmp(cmnd->str[1], "ġ")) { + else if(!strcmp(cmnd->str[1], "도망수치")) { F_CLR(ply_ptr, PWIMPY); - print(fd, "ġ Ǿϴ.\n"); + print(fd, "도망수치 설정이 해제되었습니다.\n"); } else if(!strcmp(cmnd->str[1], "eavesdropper")) { F_CLR(ply_ptr, PEAVES); print(fd, "Eavesdropper mode disabled.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "상태")) { F_CLR(ply_ptr, PPROMP); - print(fd, " ¸ ʽϴ.\n"); + print(fd, "당신의 상태를 보여주지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "~robot~")) { F_CLR(ply_ptr, PROBOT); print(fd, "Robot mode off.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "색")) { F_CLR(ply_ptr, PANSIC); - print(fd, " ޼ µ˴ϴ.\n"); + print(fd, "이제부터 메세지가 모두 흑백으로 출력됩니다.\n"); } - else if(!strcmp(cmnd->str[1], "ȯź")) { + else if(!strcmp(cmnd->str[1], "소환거부")) { F_CLR(ply_ptr, PNOSUM); - print(fd, " ٸ ȯ ֽϴ.\n"); + print(fd, "이제부터 다른사람이 당신을 소환할 수 있습니다.\n"); } - else if(!strcmp(cmnd->str[1], "̾߱ź")) { + else if(!strcmp(cmnd->str[1], "이야기듣기거부")) { F_CLR(ply_ptr, PIGNOR); - print(fd, " ̾߱⸦ ϴ.\n"); + print(fd, "이제부터 개인적인 이야기를 듣습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "수동공격")) { F_CLR(ply_ptr, PNOAAT); - print(fd, " ڵ մϴ.\n"); + print(fd, "이제부터 자동으로 공격합니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "밝은색")) { F_CLR(ply_ptr,PBRIGH); - print(fd,"ο մϴ.\n"); + print(fd,"어두운 색으로 출력합니다.\n"); } - else if(!strcmp(cmnd->str[1], "аŸȯ")) { + else if(!strcmp(cmnd->str[1], "패거리귀환")) { F_CLR(ply_ptr, PFRTUN); - print(fd," ȯմϴ.\n"); + print(fd,"광장으로 귀환합니다.\n"); } else - print(fd, "߸ Ǿϴ.\n"); + print(fd, "잘못 지정되었습니다.\n"); return(0); @@ -1118,4 +1121,3 @@ cmd *cmnd; update_ply(ply_ptr); return(DISCONNECT); } - diff --git a/src/command1.c b/src/command1.c index 5634779..58bcb74 100644 --- a/src/command1.c +++ b/src/command1.c @@ -10,6 +10,7 @@ #include "kstbl.h" #include "mstruct.h" #include "mextern.h" +#include "player_path.h" #include "resource_path.h" #include @@ -49,7 +50,7 @@ unsigned char *str; char tmp[256]; char file[80]; struct tm *login_tt; - char *wday[7]={"","","ȭ","","","","",}; + char *wday[7]={"일","월","화","수","목","금","토",}; switch(param) { case -1: str[0]=0; @@ -60,36 +61,53 @@ char file[80]; return; */ RETURN(fd, login, 1); } - print(fd, "\n ̸ Դϱ? "); + print(fd, "\n당신의 이름은 무엇입니까? "); RETURN(fd, login, 1); case 1: - if(strlen(str)==0) { - print(fd, "̸ ̻̾ մϴ.\n"); - print(fd, "\n ̸ Դϱ? "); + unsigned long name_len; + unsigned long name_bytes; + + if(!utf8_validate((unsigned char *)str, (unsigned long)strlen(str))) { + print(fd, "이름이 UTF-8 형식이 아닙니다.\n"); + print(fd, "\n당신의 이름은 무엇입니까? "); + RETURN(fd, login, 1); + } + + name_len = utf8_codepoint_len((unsigned char *)str); + name_bytes = (unsigned long)strlen((char *)str); + if(name_len == 0) { + print(fd, "이름은 한 자 이상이어야 합니다.\n"); + print(fd, "\n당신의 이름은 무엇입니까? "); RETURN(fd, login, 1); } - if(strlen(str) > 12) { - print(fd, "̸ ʹ ϴ.\n\n"); - print(fd, " ̸ Դϱ? "); + if(name_len > PLAYER_NAME_MAX_CODEPOINTS) { + print(fd, "이름이 너무 깁니다.\n\n"); + print(fd, "당신의 이름은 무엇입니까? "); RETURN(fd, login, 1); } - if(!ishan(str)) { - print(fd, "̸ ѱ۷ ž մϴ.\n\n"); - print(fd, " ̸ Դϱ? "); + if(name_bytes > PLAYER_NAME_MAX_BYTES) { + print(fd, "이름은 최대 %ld바이트까지 가능합니다.\n\n", (long)PLAYER_NAME_MAX_BYTES); + print(fd, "당신의 이름은 무엇입니까? "); + RETURN(fd, login, 1); + } + + if(!player_name_is_valid((unsigned char *)str, PLAYER_NAME_MIN_CODEPOINTS, PLAYER_NAME_MAX_CODEPOINTS)) { + print(fd, "이름에 사용할 수 없는 문자가 있습니다.\n\n"); + print(fd, "당신의 이름은 무엇입니까? "); RETURN(fd, login, 1); } lowercize(str, 1); - str[25]=0; - sprintf(tmp,"%s/%s/%s",PLAYERPATH,first_han(str),str); - last_login[fd]=0; - if (!rp_stat(tmp,&f_stat)) last_login[fd]=f_stat.st_ctime; + last_login[fd]=0; + if(player_path_from_name((char *)str, tmp, sizeof(tmp)) == 0) { + if (!rp_stat(tmp,&f_stat)) last_login[fd]=f_stat.st_ctime; + } if(load_ply(str, &ply_ptr) < 0) { strcpy(Ply[fd].extr->tempstr[0], str); - print(fd, "\n%S%j Ͻðڽϱ(/ƴϿ)? ", str,"4"); + print(fd, "\n%S%j 하시겠습니까(예/아니오)? ", str,"4"); RETURN(fd, login, 2); } @@ -98,9 +116,9 @@ char file[80]; Ply[fd].ply = ply_ptr; if(strcmp(str , Ply[fd].ply->name)) { - scwrite(fd, "\nŸ ջǾϴ.\n",25); + scwrite(fd, "\n데이타가 손상되었습니다.\n",25); if(str[0]==0 || pass_num[fd]>=3) - scwrite(fd," ϴ.",18); + scwrite(fd,"접속을 끊습니다.",18); disconnect(fd); return; } @@ -108,53 +126,54 @@ char file[80]; /* uninit_ply(ply_ptr); */ - scwrite(fd, "\nڻ û ̵Դϴ.\n", 18); + scwrite(fd, "\n자살 신청한 아이디입니다.\n", 18); disconnect(fd); return; } if(checkdouble(ply_ptr->name)) { - scwrite(fd, "̻ϱ.. -_-;.\n", 25); + scwrite(fd, "이상하군요.. -_-;.\n", 25); disconnect(fd); return; } - print(fd, "ȣ ־ ֽʽÿ: "); + print(fd, "암호를 넣어 주십시요: "); print(fd,"%c%c%c", 255,251,1); RETURN(fd, login, 3); } case 2: - if(strcmp(str,"") && str[0]!='y' && str[0]!='Y') { + if(strcmp(str,"예") && str[0]!='y' && str[0]!='Y') { Ply[fd].extr->tempstr[0][0] = 0; - print(fd, " ̸ Դϱ? "); + print(fd, "당신의 이름은 무엇입니까? "); RETURN(fd, login, 1); } else { - print(fd, "\n[] ʽÿ."); + print(fd, "\n[엔터]를 누르십시요."); RETURN(fd, create_ply, 1); } case 3: check_item(Ply[fd].ply); if(strcmp(str, Ply[fd].ply->password)) { - scwrite(fd, "\nȣ Ʋϴ. ", 18); + scwrite(fd, "\n암호가 틀립니다. ", 18); pass_num[fd]++; if(str[0]==0 || pass_num[fd] >= 3) { t = time(0); strcpy(str3, (char *)ctime(&t)); str3[strlen(str3)-1] = 0; log_fl(str3, Ply[fd].ply->name); - scwrite(fd," ϴ.\n\n",18); + scwrite(fd,"접속을 끊습니다.\n\n",18); disconnect(fd); return; } else { - print(fd,"ٽ ԷϽʽÿ.\nȣ ٽ Էϼ: "); + print(fd,"다시 입력하십시요.\n암호를 다시 입력하세요: "); RETURN(fd, login, 3); } } else { print(fd, "%c%c%c\n",255,252,1); - strcpy(tempstr, Ply[fd].ply->name); + strncpy((char *)tempstr, Ply[fd].ply->name, sizeof(tempstr)-1); + tempstr[sizeof(tempstr)-1] = 0; for(i=0; iname, @@ -167,7 +186,7 @@ char file[80]; t = time(0); strcpy(str2, (char *)ctime(&t)); str2[strlen(str2)-1] = 0; - logn("sui_crash","%s: %s (%s) ڻϿϴ.\n", + logn("sui_crash","%s: %s (%s) 는 자살하였습니다.\n", str2, Ply[fd].ply->name, Ply[fd].io->address); disconnect(fd); return; @@ -175,13 +194,23 @@ char file[80]; Ply[fd].ply->fd = fd; - init_ply(Ply[fd].ply); - init_alias(Ply[fd].ply); + if(init_ply(Ply[fd].ply) < 0) { + scwrite(fd, "\n서버 초기화 중 오류가 발생했습니다.\n", + (int)strlen("\n서버 초기화 중 오류가 발생했습니다.\n")); + if(Ply[fd].ply) { + free_crt(Ply[fd].ply); + Ply[fd].ply = 0; + } + pass_num[fd] = 0; + print(fd, "\n당신의 이름은 무엇입니까? "); + RETURN(fd, login, 1); + } + init_alias(Ply[fd].ply); if(last_login[fd]) { login_tt=localtime(&last_login[fd]); - print(fd,"\n ӽð: %d %d(%s) %d %dԴϴ.\n", + print(fd,"\n마지막 접속시간: %d월 %d일(%s) %d시 %d분입니다.\n", login_tt->tm_mon+1, login_tt->tm_mday, wday[login_tt->tm_wday], login_tt->tm_hour, login_tt->tm_min); } @@ -214,19 +243,19 @@ char *str; zero(Ply[fd].ply, sizeof(creature)); Ply[fd].ply->fd = -1; Ply[fd].ply->rom_num = 1; - print(fd, " Դϱ, Դϱ(/)? "); + print(fd, "당신은 남자입니까, 여자입니까(남자/여자)? "); RETURN(fd, create_ply, 2); case 2: - if(strncmp(str,"", 2) && strncmp(str,"",2)) { - print(fd, "Է ߸Ǿϴ.\n\n Դϱ, Դϱ(/)? "); + if(strncmp(str,"남", 2) && strncmp(str,"여",2)) { + print(fd, "입력이 잘못되었습니다.\n\n당신은 남자입니까, 여자입니까(남자/여자)? "); RETURN(fd, create_ply, 2); } - if(!strncmp(str,"",2)) + if(!strncmp(str,"남",2)) F_SET(Ply[fd].ply, PMALES); - print(fd, "\n ֽϴ.\n"); - print(fd, "1. 2.ǹ 3. 4. \n"); - print(fd, "5. 6. 7. 8. \n"); - print(fd, " : "); + print(fd, "\n다음과 같은 직업이 있습니다.\n"); + print(fd, "1.자 객 2.권법가 3.불제자 4.검 사\n"); + print(fd, "5.도술사 6.무 사 7.포 졸 8.도 둑\n"); + print(fd, "직업을 고르세요: "); RETURN(fd, create_ply, 3); case 3: switch(low(str[0])) { @@ -238,12 +267,12 @@ char *str; case '6': Ply[fd].ply->class = PALADIN; break; case '7': Ply[fd].ply->class = RANGER; break; case '8': Ply[fd].ply->class = THIEF; break; - default: print(fd, " : "); + default: print(fd, "직업을 고르세요: "); RETURN(fd, create_ply, 3); } - print(fd, "\n 54 5 ɷġ Ҽ ֽϴ.\n\ -3̻ 18 ġ ## ## ## ## ## 5 ɷġ ֽʽÿ.\n\ -ɷ: ø žӽ\n: 12 10 12 10 10\n\n"); + print(fd, "\n당신은 54점으로 다음 5가지 능력치를 구성할수 있습니다.\n\ +3이상 18이하의 수치로 ## ## ## ## ##의 형식으로 5가지 능력치를 적어주십시요.\n\ +능력: 힘 민첩 맷집 지식 신앙심\n예: 12 10 12 10 10\n\n"); /* Strength, Dexterity, Constitution, Intelligence, Piety. */ print(fd, ": "); @@ -259,21 +288,21 @@ char *str; if(k>4) break; } if(k<5) { - print(fd, "5 ɷġ θ Ĵ ֽʽÿ.\n"); + print(fd, "5가지 능력치 모두를 위의 형식대로 적어 주십시요.\n"); print(fd, ": "); RETURN(fd, create_ply, 4); } sum = 0; for(i=0; i<5; i++) { if(num[i] < 3 || num[i] > 18) { - print(fd, " ɷġ 3̻ 18Ϸ ؾ մϴ.\n"); + print(fd, "각 능력치는 3이상 18이하로 설정해야 합니다.\n"); print(fd, ": "); RETURN(fd, create_ply, 4); } sum += num[i]; } if(sum > 54) { - print(fd, " ɷġ 54 ʰҼ ϴ.\n"); + print(fd, "각 능력치의 합이 54점을 초과할수 없습니다.\n"); print(fd, ": "); RETURN(fd, create_ply, 4); } @@ -282,8 +311,8 @@ char *str; Ply[fd].ply->constitution = num[2]; Ply[fd].ply->intelligence = num[3]; Ply[fd].ply->piety = num[4]; - print(fd, "\nſ ͼ ⸦ ʽÿ.\n"); - print(fd, "1. 2. 3. 4.â 5..\n"); + print(fd, "\n당신에게 익숙한 무기를 고르십시요.\n"); + print(fd, "1.도 2.검 3.봉 4.창 5.궁.\n"); print(fd, ": "); RETURN(fd, create_ply, 5); case 5: @@ -293,28 +322,28 @@ char *str; case '3': Ply[fd].ply->proficiency[2]=1024; break; case '4': Ply[fd].ply->proficiency[3]=1024; break; case '5': Ply[fd].ply->proficiency[4]=1024; break; - default: print(fd, "ٽ .\n: "); + default: print(fd, "다시 고르세요.\n: "); RETURN(fd, create_ply, 5); } - print(fd, "\n ٸ ϰ "); - print(fd, "\n Լ ĥ ϴ."); - print(fd, "\n׷ Ҽ ְ ĥ "); - print(fd, "\nٸ 鿡 ֽϴ.\n"); - print(fd, "\n ʽÿ(/): "); + print(fd, "\n선한 구성원은 다른사람을 공격하지 못하고 공격 받을수도 없으며"); + print(fd, "\n그 구성원에게서 물건을 훔칠수도 없습니다."); + print(fd, "\n그러나 악한 구성원은 공격할수도 있고 물건을 훔칠수도 있으며"); + print(fd, "\n다른 악한 구성원들에게 공격을 받을 수도 있습니다.\n"); + print(fd, "\n성향을 고르십시요(선함/악함): "); RETURN(fd, create_ply, 6); case 6: - if(!strncmp(str,"",2)) + if(!strncmp(str,"악",2)) F_SET(Ply[fd].ply, PCHAOS); - else if(!strncmp(str,"",2)) + else if(!strncmp(str,"선",2)) F_CLR(Ply[fd].ply, PCHAOS); else { - print(fd, " ʽÿ(/): "); + print(fd, "성향을 고르십시요(선함/악함): "); RETURN(fd, create_ply, 6); } - print(fd, "\n ֽϴ."); - print(fd, "\n1. 2. 3.ͽ 4. "); - print(fd, "\n5. 6. 7. 8."); - print(fd, "\n ʽÿ: "); + print(fd, "\n다음과 같은 종족들이 있습니다."); + print(fd, "\n1.난장이족 2.용 신 족 3.땅귀신족 4.요 괴 족"); + print(fd, "\n5.거 인 족 6.토 신 족 7.인 간 족 8.도깨비족"); + print(fd, "\n종족을 고르십시요: "); RETURN(fd, create_ply, 7); case 7: switch(low(str[0])) { @@ -328,7 +357,7 @@ char *str; case '7': Ply[fd].ply->race = HUMAN; break; } if(!Ply[fd].ply->race) { - print(fd, "\n ʽÿ: "); + print(fd, "\n종족을 고르십시요: "); RETURN(fd, create_ply, 7); } @@ -370,32 +399,43 @@ char *str; break; } - print(fd, "\n ȣ ʽÿ(3̻ 14): "); + print(fd, "\n새 암호를 넣으십시요(3자이상 14자이하): "); print(fd,"%c%c%c",255,251,1); RETURN(fd, create_ply, 8); case 8: if(strlen(str) > 14) { - print(fd, "Էµ ȣ ʹ ϴ.\nȣ ٽ ʽÿ(3̻ 14): "); + print(fd, "입력된 암호가 너무 깁니다.\n암호를 다시 넣으십시요(3자이상 14자이하): "); RETURN(fd, create_ply, 8); } if(strlen(str) < 3) { - print(fd, "Էµ ȣ ʹ ªϴ.\nȣ ٽ ʽÿ(3̻ 14): "); + print(fd, "입력된 암호가 너무 짧습니다.\n암호를 다시 넣으십시요(3자이상 14자이하): "); RETURN(fd, create_ply, 8); } - strncpy(Ply[fd].ply->password, str, 14); + strncpy(Ply[fd].ply->password, str, sizeof(Ply[fd].ply->password) - 1); + Ply[fd].ply->password[sizeof(Ply[fd].ply->password) - 1] = 0; strcpy(Ply[fd].ply->name, Ply[fd].extr->tempstr[0]); up_level(Ply[fd].ply); Ply[fd].ply->fd = fd; - init_ply(Ply[fd].ply); - init_alias(Ply[fd].ply); + if(init_ply(Ply[fd].ply) < 0) { + scwrite(fd, "\n서버 초기화 중 오류가 발생했습니다.\n", + (int)strlen("\n서버 초기화 중 오류가 발생했습니다.\n")); + if(Ply[fd].ply) { + free_crt(Ply[fd].ply); + Ply[fd].ply = 0; + } + pass_num[fd] = 0; + print(fd, "\n당신의 이름은 무엇입니까? "); + RETURN(fd, login, 1); + } + init_alias(Ply[fd].ply); F_SET(Ply[fd].ply,PLECHO); F_SET(Ply[fd].ply,PPROMP); Ply[fd].ply->gold = 500; save_ply(Ply[fd].ply->name, Ply[fd].ply); print(fd, "%c%c%c\n",255,252,1); - print(fd, "[ȯ]̶ ġø ʺ е鿡 Ǵ ֽϴ.\n"); - print(fd, " 5 ̵ ֽϴ.\n"); + print(fd, "[환영]이라고 치시면 초보자 분들에게 도움이 되는 많은 정보를 얻을수 있습니다.\n"); + print(fd, "레벨 5 가 되지 않으면 아이디가 삭제될 수도 있습니다.\n"); RETURN(fd, command, 1); } @@ -458,8 +498,8 @@ logn("all_cmd","\n%s-%d (%d): %s\n",Ply[fd].ply->name,fd,Ply[fd].ply->rom_num,st lowercize(str, 0); parse(str, &cmnd); n = 0; - /* ļ м .. */ -/* print(fd,"ļ м....\n"); + /* 파서 분석 시험용.. */ +/* print(fd,"파서 분석....\n"); for(i=0;iname,fd,Ply[fd].ply->rom_num,st n = PROMPT; if(n == DISCONNECT) { - scwrite(fd, "ȳ ʽÿ!\n\n\n", 19); + scwrite(fd, "안녕히 가십시요!\n\n\n", 19); disconnect(fd); return; } else if(n == PROMPT) { if(F_ISSET(Ply[fd].ply, PPROMP)) - sprintf(str, "(%d ü %d ): ", + sprintf(str, "(%d 체력 %d 도력): ", Ply[fd].ply->hpcur, Ply[fd].ply->mpcur); else strcpy(str, ": "); @@ -512,7 +552,7 @@ cmd *cmnd; /* include for processing hangul command */ if(j!=0) if(str[j-1]==' ' || str[j-1]=='.' || str[j-1]=='!' || str[j-1]=='?') { - strncpy(cmnd->str[n++],"",20); + strncpy(cmnd->str[n++],"말",20); cmnd->val[m] = 1L; } else { @@ -609,13 +649,13 @@ cmd *cmnd; if(match == 0 || (cmnd->str[0][0]=='*' && (Ply[fd].ply->classclass!=ZONEMAKER))) { - print(fd, "\"%s\": ̷ ɾ ׿.", + print(fd, "\"%s\": 이런 명령어는 없네요.", cmnd->str[0]); Ply[fd].io->fn = command; Ply[fd].io->fnparam = 1; return(0); } -/* ɾ .. ð ó=> +/* 가장 비슷한 명령어를 쓰기 위해 수정.. 여러 낱말이 나올경우 에러처리=>사용 else if(match > 1) { - print(fd, " 𸣰ڳ׿."); + print(fd, "명령을 잘 모르겠네요."); RETURN(fd, command, 1); } */ @@ -690,39 +730,70 @@ char *str; int index; int ishan(str) unsigned char *str; { - int i; - for(i=0;i 0xD7A3UL) + return 0; + i += c; } + return 1; } int is_hangul(str) unsigned char *str; /* one character */ { - /* ѱ ˻ */ - if(str[0]>=0xb0 && str[0]<=0xc8 && str[1]>=0xa1 && str[1]<=0xfe) return 1; - return 0; + unsigned long c, cp, n; + + if(!str) + return 0; + + n = (unsigned long)strlen((char *)str); + if(!utf8_next_codepoint(str, n, &c, &cp)) + return 0; + if(cp < 0xAC00UL || cp > 0xD7A3UL) + return 0; + + return 1; } int under_han(str) unsigned char *str; { - unsigned char high,low; - int len; + unsigned char tmp[512]; + unsigned long len; + char *p; - len=strlen(str); - if(len<2) return 0; - if(str[len-1]==')') while(str[len]!='(') len--; + if(!str) + return 0; - high=str[len-2]; - low=str[len-1]; + len = (unsigned long)strlen((char *)str); + if(len == 0) + return 0; + if(len >= sizeof(tmp)) + len = sizeof(tmp) - 1; - if(!is_hangul(&str[len-2])) return 0; + memcpy(tmp, str, len); + tmp[len] = 0; - high=KStbl[(high-0xb0)*94+low-0xa1] & 0x1f; - if(high<2 || high>28) return 0; - return 1; + if(len > 0 && tmp[len - 1] == ')') { + p = strrchr((char *)tmp, '('); + if(p) + *p = 0; + } + + return utf8_has_jongseong_last(tmp); } @@ -733,15 +804,15 @@ unsigned char *str; int len,i; char *p = "temp"; static unsigned char *exam[]={ - "", "", "", "", "", - "", "", "", "", "", - "", "", "", "", "", - "ī", "Ÿ", "", "", "" }; + "가", "가", "나", "다", "다", + "라", "마", "바", "바", "사", + "사", "아", "자", "자", "차", + "카", "타", "파", "하", "" }; static unsigned char *johab_exam[]={ - "a", "a", "a", "a", "a", - "a", "a", "a", "a", "a", - "a", "a", "a", "a", "a", - "a", "?a", "?a", "?a", "" }; + "늏", "똞", "륾", "봞", "쁝", + "쏿", "쟞", "쨅", "쮉", "촡", + "캻", "큑", "퇫", "펈", "픞", + "훍", "?a", "?a", "?a", "" }; len=strlen(str); if(len<2) return p; @@ -780,12 +851,12 @@ cmd *cmnd; fd=ply_ptr->fd; if(ply_is_attacking(ply_ptr,cmnd)) { - print(fd," ο ִ Դϴ!!"); + print(fd,"당신은 싸우고 있는 중입니다!!"); return 0; } if(rom_ply->rom_num==1001) { - print(fd," ̹ 忡 ֽϴ!"); + print(fd,"당신은 이미 광장에 와 있습니다!"); return 0; } @@ -796,12 +867,12 @@ cmd *cmnd; cp = ply_ptr->first_fol; } if(cp){ - print(fd," ׷쿡 ."); + print(fd,"먼저 그룹에서 나오세요."); return(0); } if(ply_ptr->level>20 && ply_ptr->classmpcur = 0; /* ply_ptr->experience -= (ply_ptr->experience)/100000; @@ -809,8 +880,8 @@ cmd *cmnd; } - print(fd, " \"ȯ!\"̶ ġ ̻ 򰡷 ϴ."); - if(!F_ISSET(ply_ptr,PDMINV)) broadcast_rom(fd,ply_ptr->rom_num,"\n%m ڱ ϴ!",ply_ptr); + print(fd, "당신이 \"귀환!\"이라고 외치자 이상한 힘에 의해 어딘가로 빨려들어갑니다."); + if(!F_ISSET(ply_ptr,PDMINV)) broadcast_rom(fd,ply_ptr->rom_num,"\n%m님이 갑자기 사라집니다!",ply_ptr); del_ply_rom(ply_ptr,rom_ply); if(!F_ISSET(ply_ptr,PFRTUN)) @@ -818,7 +889,7 @@ cmd *cmnd; else load_rom(3300 + ply_ptr->daily[DL_EXPND].max, &rom_ply); add_ply_rom(ply_ptr,rom_ply); - if(!F_ISSET(ply_ptr,PDMINV)) broadcast_rom(fd,ply_ptr->rom_num, "\n%m ڱ ڿ Բ Ÿϴ!",ply_ptr); + if(!F_ISSET(ply_ptr,PDMINV)) broadcast_rom(fd,ply_ptr->rom_num, "\n%m님이 갑자기 자욱한 연기와 함께 나타났습니다!",ply_ptr); return 0; } @@ -843,15 +914,35 @@ cmd *cmnd; int str_compare(str1,str2) unsigned char *str1,*str2; { - int i=0; + unsigned long i, j, n1, n2, c1, c2, cp1, cp2; + + n1 = (unsigned long)strlen((char *)str1); + n2 = (unsigned long)strlen((char *)str2); + if(!utf8_validate(str1, n1) || !utf8_validate(str2, n2)) { + i = 0; + while(str1[i] != 0 && str2[i] != 0 && str1[i] == str2[i]) + i++; + if(str1[i] != 0) + return 0; + return (int)i; + } - while(str1[i]!=0 && str2[i]!=0) { - if(str1[i]==str2[i] && str1[i+1]==str2[i+1]) i+=2; - else if(str1[i]==str2[i] && str1[i]<128) i++; - else break; + i = 0; + j = 0; + while(i < n1 && j < n2) { + if(!utf8_next_codepoint(str1 + i, n1 - i, &c1, &cp1)) + break; + if(!utf8_next_codepoint(str2 + j, n2 - j, &c2, &cp2)) + break; + if(cp1 != cp2) + break; + i += c1; + j += c2; } - if(str1[i]!=0) return 0; - return i; + + if(i != n1) + return 0; + return (int)i; } char *cut_space(str) @@ -868,9 +959,3 @@ char *str; return buf; } - - - - - - diff --git a/src/command10.c b/src/command10.c index 671d456..1f80623 100644 --- a/src/command10.c +++ b/src/command10.c @@ -30,17 +30,17 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != ASSASSIN && ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, "ϰ ڰ ִ Դϴ.\n"); + print(fd, "도둑과 자객만 사용할 수 있는 기술입니다.\n"); return(0); } if(!F_ISSET(ply_ptr, PHIDDN)){ - print(fd, " ֽϴ.\n"); + print(fd, "먼저 숨어야 이 기술을 쓸 수 있습니다.\n"); return(0); } if(cmnd->num < 2) { - print(fd, " ÷?\n"); + print(fd, "어디로 몰래 가시려구요?\n"); return(0); } @@ -48,37 +48,37 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, " ʿ ⱸ ϴ.\n"); + print(fd, "그 쪽에는 출구가 없습니다.\n"); return(0); } if(F_ISSET(ext_ptr, XLOCKD)) { - print(fd, " ⱸ ֽϴ.\n"); + print(fd, "그 출구는 잠겨져 있습니다.\n"); return(0); } else if(F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ڱ.\n"); + print(fd, "먼저 문을 열어야 겠군요.\n"); return(0); } if(F_ISSET(ext_ptr, XFLYSP) && !F_ISSET(ply_ptr, PFLYSP)) { - print(fd, " ʿ Ƽ ֽϴ.\n"); + print(fd, "그 쪽에는 날아서만 갈 수 있습니다.\n"); return(0); } if(F_ISSET(ext_ptr, XNAKED) && weight_ply(ply_ptr)) { - print(fd, " δ ϴ.\n"); + print(fd, "그 쪽으로는 뭘 들고는 갈 수 없습니다.\n"); return(0); } t = Time%24L; if(F_ISSET(ext_ptr, XNGHTO) && (t>6 && t < 20)) { - print(fd, " ⱸ 㿡 ֽϴ.\n"); + print(fd, "그 출구는 밤에만 갈 수 있습니다.\n"); return(0); } if(F_ISSET(ext_ptr, XDAYON) && (t<6 || t > 20)) { - print(fd, " ⱸ ֽϴ.\n"); + print(fd, "그 출구는 낮에만 갈 수 있습니다.\n"); return(0); } @@ -87,11 +87,11 @@ cmd *cmnd; while(cp) { if(F_ISSET(cp->crt, MPGUAR)) { if(!F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < CARETAKER){ - print(fd, "%M%j θϴ.\n", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 가로막습니다.\n", cp->crt,"1"); return(0); } if(F_ISSET(cp->crt, MDINVI) && ply_ptr->class < CARETAKER) { - print(fd, "%M%j θϴ.\n", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 가로막습니다.\n", cp->crt,"1"); return(0); } } @@ -100,11 +100,11 @@ cmd *cmnd; } if(F_ISSET(ext_ptr, XFEMAL) && F_ISSET(ply_ptr, PMALES)){ - print(fd, " δ ֽϴ.\n"); + print(fd, "그 쪽으로는 여성만 갈 수 있습니다.\n"); return(0); } if(F_ISSET(ext_ptr, XMALES) && !F_ISSET(ply_ptr, PMALES)){ - print(fd, " δ ֽϴ.\n"); + print(fd, "그 쪽으로는 남성만 갈 수 있습니다.\n"); return(0); } @@ -116,21 +116,21 @@ cmd *cmnd; if(mrand(1,100) < fall) { dmg = mrand(5, 15+fall/10); if(ply_ptr->hpcur <= dmg){ - print(fd, " ̿ ϴ..\n"); + print(fd, "당신은 깊은 구덩이에 빠졌습니다..\n"); ply_ptr->hpcur=0; - broadcast_rom(fd, ply_ptr->rom_num, "%M ̿ ׾ϴ.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 구덩이에 빠져서 죽었습니다.\n"); die(ply_ptr, ply_ptr); return(0); } ply_ptr->hpcur -= dmg; - print(fd, " %dŭ ó Ծϴ.\n", + print(fd, "당신은 떨어져서 %d만큼의 상처를 입었습니다.\n", dmg); - broadcast_rom(fd, ply_ptr->rom_num, "%M ̿ ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "%M이 구덩이에 빠졌습니다.", ply_ptr); if(ply_ptr->hpcur < 1) { - print(fd, " ׾ϴ.\n"); + print(fd, "당신은 죽었습니다.\n"); die(ply_ptr, ply_ptr); } @@ -152,7 +152,7 @@ cmd *cmnd; if(mrand(1,100) > chance) { - print(fd," ż ϴµ Ͽϴ.\n"); + print(fd,"당신은 은신술을 사용하는데 실패하였습니다.\n"); F_CLR(ply_ptr, PHIDDN); cp = rom_ptr->first_mon; @@ -160,7 +160,7 @@ cmd *cmnd; if(F_ISSET(cp->crt, MBLOCK) && is_enm_crt(ply_ptr->name, cp->crt) && !F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < CARETAKER) { - print(fd, "%M θϴ.\n", cp->crt); + print(fd, "%M가 당신의 길을 가로막습니다.\n", cp->crt); return(0); } cp = cp->next_tag; @@ -175,51 +175,51 @@ cmd *cmnd; load_rom(ext_ptr->room, &rom_ptr); if(rom_ptr == old_rom_ptr) { - print(fd, "δ ϴ.\n"); + print(fd, "그쪽으로는 지도가 없습니다.\n"); return(0); } n = count_vis_ply(rom_ptr); if(rom_ptr->lolevel > ply_ptr->level && ply_ptr->class < INVINCIBLE/*CARETAKER*/) { - print(fd, "δ %d̻ ֽϴ.\n", + print(fd, "그쪽으로는 레벨 %d이상만 갈 수 있습니다.\n", rom_ptr->lolevel); return(0); } else if(ply_ptr->level > rom_ptr->hilevel && rom_ptr->hilevel && ply_ptr->class < CARETAKER) { - print(fd, "δ %dϸ ֽϴ.\n", + print(fd, "그쪽으로는 레벨 %d이하만 갈 수 있습니다.\n", rom_ptr->hilevel+1); return(0); } else if((F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || (F_ISSET(rom_ptr, RTHREE) && n > 2)) { - print(fd, " 濡 áϴ.\n"); + print(fd, "그 방에는 정원이 가득 찼습니다.\n"); return(0); } else if(F_ISSET(rom_ptr, RFAMIL) && !F_ISSET(ply_ptr, PFAMIL)) { - print(fd, "װ аŸ ڸ ֽϴ."); + print(fd, "그곳에는 패거리 가입자만 갈 수 있습니다."); return(0); } else if(ply_ptr->class < DM && F_ISSET(rom_ptr, RONFML) && (ply_ptr->daily[DL_EXPND].max != rom_ptr->special)) { - print(fd, "װ Դϴ."); + print(fd, "그곳은 당신이 갈 수 없는 곳입니다."); return(0); } else if(ply_ptr->class < DM && F_ISSET(rom_ptr, RONMAR) && (ply_ptr->daily[DL_MARRI].max != rom_ptr->special)) { - print(fd, "װ Դϴ."); + print(fd, "그곳은 사유지입니다."); return(0); } if(!F_ISSET(ply_ptr, PHIDDN)) - if(strcmp(ext_ptr->name, "") && strcmp(ext_ptr->name, "") - && strcmp(ext_ptr->name, "") && !F_ISSET(ply_ptr, PDMINV)) { - broadcast_rom(fd, old_rom_ptr->rom_num, "%M %s ϴ.", + if(strcmp(ext_ptr->name, "위") && strcmp(ext_ptr->name, "밑") + && strcmp(ext_ptr->name, "밖") && !F_ISSET(ply_ptr, PDMINV)) { + broadcast_rom(fd, old_rom_ptr->rom_num, "%M이 %s쪽으로 갔습니다.", ply_ptr, ext_ptr->name); } else if(!F_ISSET(ply_ptr, PDMINV)) { - broadcast_rom(fd, old_rom_ptr->rom_num, "%M %s ϴ.", + broadcast_rom(fd, old_rom_ptr->rom_num, "%M이 %s쪽으로 갔습니다.", ply_ptr, ext_ptr->name); } @@ -264,18 +264,18 @@ if(ply_ptr->following) } if(!cp) { - print(fd, " ׷쿡 ʽϴ.\n"); + print(fd, "당신은 그룹에 속해있지 않습니다.\n"); return(0); } len = found = cut_command(cmnd->fullstr); cmnd->fullstr[255] = 0; if(len==0) { - print(fd, "׷鿡 Ͻ÷?\n"); + print(fd, "그룹원들에게 무슨말을 하시려구요?\n"); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ʽϴ.\n"); + print(fd, "입이 막혀 말이 나오질 않습니다.\n"); return(0); } @@ -284,10 +284,10 @@ if(ply_ptr->following) while(cp) { if((F_ISSET(cp->crt, PIGNOR) && (ply_ptr->class < CARETAKER)) && !F_ISSET(cp->crt,PDMINV)) - print(fd, "%s ̾߱ ź Դϴ.\n", cp->crt->name); + print(fd, "%s는 이야기 듣기 거부 상태입니다.\n", cp->crt->name); else ANSI(fd, MAGENTA); - print(cp->crt->fd, "%M ׷鿡 \"%s\" մϴ.\n", + print(cp->crt->fd, "%M이 그룹원들에게 \"%s\"라고 말합니다.\n", ply_ptr, &cmnd->fullstr[0]); ANSI(fd, WHITE); if (!F_ISSET(cp->crt,PDMINV)) @@ -296,21 +296,21 @@ if(ply_ptr->following) } if(!found) { - print(fd, " ׷쿡 ʽϴ.\n"); + print(fd, "당신은 그룹에 속해있지 않습니다.\n"); return(0); } if((F_ISSET(leader, PIGNOR) && (ply_ptr->class < CARETAKER)) && !F_ISSET(leader,PDMINV)) - print(fd, "%s ̾߱ ź Դϴ.\n", leader->name); + print(fd, "%s님은 이야기 듣기 거부 상태입니다.\n", leader->name); else ANSI(fd, MAGENTA); - print(leader->fd, "%M ׷鿡 \"%s\" մϴ.\n", + print(leader->fd, "%M이 그룹원들에게 \"%s\"라고 말합니다.\n", ply_ptr, &cmnd->fullstr[0]); ANSI(fd, WHITE); if (found) - broadcast_eaves("# %s ׷鿡 \"%s\" մϴ.", ply_ptr->name, + broadcast_eaves("# %s님이 그룹원들에게 \"%s\"라고 말합니다.", ply_ptr->name, &cmnd->fullstr[0]); return(0); @@ -469,9 +469,9 @@ creature *crt_ptr; if(n) { if(!F_ISSET(ply_ptr->ready[n-1], ONEWEV)) { - broadcast_rom(ply_ptr->fd,ply_ptr->rom_num,"%M %m %s νϴ.", + broadcast_rom(ply_ptr->fd,ply_ptr->rom_num,"%M가 %m님의 %s를 부숴버립니다.", crt_ptr, ply_ptr, ply_ptr->ready[n-1]->name); - print(ply_ptr->fd,"%M %s νϴ.\n",crt_ptr, + print(ply_ptr->fd,"%M가 당신의 %s를 부숴버립니다.\n",crt_ptr, ply_ptr->ready[n-1]->name); free_obj(ply_ptr->ready[n-1]); ply_ptr->ready[n-1] = 0; @@ -504,12 +504,12 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " Ͻ÷?\n"); + print(fd, "무엇을 구입하시려구요?\n"); return(0); } if(cmnd->num < 3 ) { - print(fd, ": ≮> <> \n"); + print(fd, "사용법: <괴물이름> <물건> 구입\n"); return(0); } @@ -517,12 +517,12 @@ cmd *cmnd; cmnd->val[1]); if(!crt_ptr) { - print(fd, "װ ϴ.\n"); + print(fd, "그것은 여기 없습니다.\n"); return(0); } if (!F_ISSET(crt_ptr,MPURIT)){ - print(fd, " %mԼ ϴ.\n",crt_ptr); + print(fd, "당신은 %m에게서 물건을 구입할 수 없습니다.\n",crt_ptr); return(0); } @@ -539,7 +539,7 @@ cmd *cmnd; } if (!maxitem){ - print(fd, "%M%j ʽϴ.\n",crt_ptr, "0"); + print(fd, "%M%j 팔 물건을 갖고 있지 않습니다.\n",crt_ptr, "0"); return(0); } @@ -557,7 +557,7 @@ cmd *cmnd; } if(!found){ - print(fd, "%M%j \"̾մϴ. ׷ ʽϴ.\" մϴ.\n", crt_ptr, "1"); + print(fd, "%M%j \"미안합니다. 그런 물건은 갖고 있지 않습니다.\"라고 말합니다.\n", crt_ptr, "1"); return(0); } @@ -565,7 +565,7 @@ cmd *cmnd; if((weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr)) || cnt>150) { - print(fd, " ̻ ϴ.\n"); + print(fd, "당신은 더이상 가질 수 없습니다.\n"); return(0); } @@ -573,12 +573,12 @@ cmd *cmnd; amt = MAX(10,obj_ptr->value*1); if(ply_ptr->gold < amt){ print(fd, - "%M%j \"%dԴϴ. ټ ϴ.\" մϴ.\n",crt_ptr,"1", amt); + "%M%j \"%d냥입니다. 깎아줄순 없습니다.\"라고 말합니다.\n",crt_ptr,"1", amt); } else { - print(fd, " %m %d ݴϴ.\n",crt_ptr,amt); - print(fd, "%M%j \"ϴ. %s%j ֽϴ.\" մϴ.\n",crt_ptr,"1", obj_ptr->name,"1"); - broadcast_rom(fd, ply_ptr->rom_num, "%M %m %i %d ݴϴ.\n", ply_ptr, crt_ptr, obj_ptr, amt); + print(fd, "당신은 %m에게 %d냥을 줍니다.\n",crt_ptr,amt); + print(fd, "%M%j \"고맙습니다. 여기 %s%j 있습니다.\"라고 말합니다.\n",crt_ptr,"1", obj_ptr->name,"1"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 %m에게 %i를 구입할 돈 %d냥을 줍니다.\n", ply_ptr, crt_ptr, obj_ptr, amt); ply_ptr->gold -= amt; add_obj_crt(obj_ptr, ply_ptr); } @@ -608,7 +608,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ϱ?\n"); + print(fd, "누구의 물건을 봅니까?\n"); return(0); } @@ -617,12 +617,12 @@ cmd *cmnd; cmnd->val[1]); if(!crt_ptr) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 사람은 없습니다.\n"); return(0); } if(!F_ISSET(crt_ptr,MPURIT)){ - print(fd, "%M ƹ͵ ϴ.\n",crt_ptr); + print(fd, "%M는 아무것도 없습니다.\n",crt_ptr); return(0); } @@ -640,16 +640,16 @@ cmd *cmnd; } if(!maxitem){ - print(fd, "%M ϴ.\n",crt_ptr); + print(fd, "%M은 팔 물건이 없습니다.\n",crt_ptr); return(0); } - print(fd, "%M ǵ:\n",crt_ptr); + print(fd, "%M의 물건들:\n",crt_ptr); for (i=0;icarry[i], &(obj_ptr[i])) < 0) || (crt_ptr->carry[i] == 0)) - print(fd,"%d) .\n",i+1); + print(fd,"%d) � 매진.\n",i+1); else - print(fd,"%d) %-22s %ld\n",i+1, + print(fd,"%d) %-22s %ld냥\n",i+1, (obj_ptr[i])->name,MAX(10,((obj_ptr[i])->value))); print(fd,"\n"); return(0); @@ -675,12 +675,12 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ȯϽ÷?\n"); + print(fd, "누구와 교환하시려구요?\n"); return(0); } if(cmnd->num < 3) { - print(fd, ": <> ≮> ȯ\n"); + print(fd, "사용법: <물건> <괴물이름> 교환\n"); return(0); } @@ -688,12 +688,12 @@ cmd *cmnd; cmnd->val[2]); if(!crt_ptr) { - print(fd, "װ ϴ.\n"); + print(fd, "그것은 여기 없습니다.\n"); return(0); } if(!F_ISSET(crt_ptr,MTRADE)){ - print(fd, " %M%j ϴ.\n",crt_ptr, "2"); + print(fd, "당신은 %M%j 교역할 수 없습니다.\n",crt_ptr, "2"); print(fd, "%x %d %d %d\n",crt_ptr->flags[4],F_ISSET(crt_ptr,36),F_ISSET(crt_ptr,37),F_ISSET(crt_ptr,38)); return(0); } @@ -702,12 +702,12 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ.\n"); + print(fd, "당신은 그런 물건을 갖고 있지 않습니다.\n"); return(0); } if(F_ISSET(obj_ptr, ONAMED)) { - print(fd, " ִ ƴմϴ.\n"); + print(fd, "교역할 수 있는 물건이 아닙니다.\n"); return(0); } @@ -726,7 +726,7 @@ cmd *cmnd; } if(!maxitem){ - print(fd, "%M%j ʽϴ.\n",crt_ptr,"0"); + print(fd, "%M%j 교역할 물건을 갖고있지 않습니다.\n",crt_ptr,"0"); return(0); } @@ -741,45 +741,45 @@ cmd *cmnd; } if(!found || ((obj_ptr->shotscur <= obj_ptr->shotsmax/10)&&(obj_ptr->type != MISC))) - print(fd,"%M%j \" ׷ ʿ!\" մϴ.\n",crt_ptr,"1"); + print(fd,"%M%j \"난 그런거 필요없어요!\"라고 말합니다.\n",crt_ptr,"1"); else{ if (crt_ptr->carry[found+4] == 0){ del_obj_crt(obj_ptr, ply_ptr); - /* ȯ */ + /* 교환한 물건을 몹이 가지고 있을 이유 없음 */ /* add_obj_crt(obj_ptr, crt_ptr); */ - print(fd, "%M%j \"ϴ! %i%j ʿߴµ ߵƱ.\n", + print(fd, "%M%j \"고맙습니다! %i%j 필요했는데 잘됐군요.\n", crt_ptr,"1",obj_ptr,"1"); - print(fd, "׷ ſ ٰ µ..\" մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num,"%M %m %i ȯմϴ.\n", + print(fd, "그런데 당신에게 줄게 없는데..\"라고 말합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num,"%M이 %m에게 %i를 교환합니다.\n", ply_ptr,crt_ptr,obj_ptr); } else if(!(load_obj((obj_list[found-1][1]), &trd_ptr) < 0)){ if(trd_ptr->questnum && Q_ISSET(ply_ptr, trd_ptr->questnum-1)) { - print(fd, " ̹ ӹ ϼ߽ϴ.\n"); + print(fd, "당신은 이미 임무를 완수했습니다.\n"); return(0); } del_obj_crt(obj_ptr, ply_ptr); - /* ȯ */ + /* 교환한 물건을 몹이 가지고 있을 이유 없음 */ /* add_obj_crt(obj_ptr, crt_ptr); */ add_obj_crt(trd_ptr, ply_ptr); - print(fd,"%M \"ϴ. %i ãֽôٴ..\n", + print(fd,"%M가 \"고맙습니다. 절 위해 %i를 찾아주시다니..\n", crt_ptr,obj_ptr); - print(fd,"ſ %i ϰͽϴ.\" մϴ.\n",trd_ptr); - print(fd,"%M ſ %i ݴϴ.\n",crt_ptr,trd_ptr); - broadcast_rom(fd, ply_ptr->rom_num,"%M %m %i ȯմϴ.\n", + print(fd,"당신에게 %i로 보답을 하고싶습니다.\"라고 말합니다.\n",trd_ptr); + print(fd,"%M가 당신에게 %i를 줍니다.\n",crt_ptr,trd_ptr); + broadcast_rom(fd, ply_ptr->rom_num,"%M이 %m에게 %i를 교환합니다.\n", ply_ptr,crt_ptr,obj_ptr); - /* broadcast_rom(fd, ply_ptr->rom_num,"%M %m %i ݴϴ.\n", */ + /* broadcast_rom(fd, ply_ptr->rom_num,"%M이 %m에게 %i를 줍니다.\n", */ /* ply_ptr,crt_ptr,obj_ptr); */ /* if return object is a quest item */ if(trd_ptr->questnum) { - print(fd, "ӹ ϼ߽ϴ! ʽÿ!\n"); - print(fd, " װ ٽ ֿ ϴ.\n"); + print(fd, "임무를 완수했습니다! 버리지 마십시요!\n"); + print(fd, "당신은 버리면 그걸 다시 주울 수 없습니다.\n"); Q_SET(ply_ptr, trd_ptr->questnum-1); ply_ptr->experience += quest_exp[trd_ptr->questnum-1]; - print(fd, " ġ %ld ϴ.\n", + print(fd, "당신은 경험치 %ld 를 얻었습니다.\n", quest_exp[trd_ptr->questnum-1]); add_prof(ply_ptr,quest_exp[trd_ptr->questnum-1]); } diff --git a/src/command11.c b/src/command11.c index 4b3f5ab..da0358f 100644 --- a/src/command11.c +++ b/src/command11.c @@ -50,24 +50,24 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(len==0) { - print(fd, " ǥϽ÷?\n"); + print(fd, "무슨말을 표현하시려구요?\n"); return(0); } if(F_ISSET(ply_ptr, PSILNC)){ - print(fd, " ݴ װ ϴ.\n"); + print(fd, "당신은 지금당장 그것을 할 수 없습니다.\n"); return(0); } F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PLECHO)){ ANSI(fd, CYAN); - print(fd, ":%M %s.", ply_ptr, &cmnd->fullstr[index]); + print(fd, ":%M이 %s.", ply_ptr, &cmnd->fullstr[index]); ANSI(fd, NORMAL); ANSI(fd, WHITE); } else - print(fd, ". ϴ.\n"); + print(fd, "예. 좋습니다.\n"); - broadcast_rom(fd, rom_ptr->rom_num, "\n:%M %s.", + broadcast_rom(fd, rom_ptr->rom_num, "\n:%M이 %s.", ply_ptr, &cmnd->fullstr[index]); paste_command(cmnd->fullstr,len); @@ -115,43 +115,43 @@ char *str; output_buf(); switch (param) { case 0: - print(fd," ȣ ԷϽʽÿ: "); + print(fd,"현재 암호를 입력하십시요: "); output_buf(); Ply[fd].io->intrpt &= ~1; RETURN(fd,chpasswd,1); break; case 1: if (!strcmp(ply_ptr->password,str)){ - print(fd,"\n ȣ ԷϽʽÿ: "); + print(fd,"\n새 암호를 입력하십시요: "); /* output_buf(); Ply[fd].io->intrpt &= ~1; */ RETURN(fd,chpasswd,2); } else { print(fd, "%c%c%c\n\r", 255, 252, 1); - print(fd,"ȣ ƲȽϴ.\n"); - print(fd,"ȣ ʾҽϴ.\n"); + print(fd,"암호가 틀렸습니다.\n"); + print(fd,"암호가 변경되지 않았습니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } case 2: if (strlen(str) <3){ print(fd, "%c%c%c\n\r", 255, 252, 1); - print(fd,"ȣ ʹ ªϴ.\n"); - print(fd,"ȣ ʾҽϴ.\n"); + print(fd,"암호가 너무 짧습니다.\n"); + print(fd,"암호가 변경되지 않았습니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } else if (strlen(str) > 14){ print(fd, "%c%c%c\n\r", 255, 252, 1); - print(fd,"ȣ ʹ ϴ.\n"); - print(fd,"ȣ ʾҽϴ..\n"); + print(fd,"암호가 너무 깁니다.\n"); + print(fd,"암호가 변경되지 않았습니다..\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } else{ strcpy(Ply[fd].extr->tempstr[1], str); - print(fd,"\n ȣ ٽ ʽÿ: "); + print(fd,"\n새 암호를 다시 넣으십시요: "); /* output_buf(); Ply[fd].io->intrpt &= ~1; */ RETURN(fd,chpasswd,3); @@ -161,15 +161,15 @@ char *str; if(!strcmp(Ply[fd].extr->tempstr[1],str)){ strcpy(ply_ptr->password,str); print(fd, "%c%c%c\n\r", 255, 252, 1); - print(fd,"ȣ Ǿϴ.\n"); + print(fd,"암호가 변경되었습니다.\n"); F_CLR(Ply[fd].ply, PREADI); save_ply(ply_ptr->name,ply_ptr); RETURN(fd, command, 1); } else{ print(fd, "%c%c%c\n\r", 255, 252, 1); - print(fd,"ȣ Ʋϴ.\n"); - print(fd,"ȣ ʾҽϴ.\n"); + print(fd,"암호가 서로 틀립니다.\n"); + print(fd,"암호가 변경되지 않았습니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } @@ -196,24 +196,24 @@ extern void vote_cmnd(); str[0] = 0; if(((18 + ply_ptr->lasttime[LT_HOURS].interval/86400L) < 21) && ply_ptr->class < INVINCIBLE) { - print(fd, " ǥ ̰ ƴմϴ.\n"); + print(fd, "당신은 투표할 나이가 아닙니다.\n"); return(0); } if (!F_ISSET(ply_ptr->parent_rom,RELECT)){ - print(fd,"ǥҰ ƴմϴ.\n"); + print(fd,"투표소가 아닙니다.\n"); return(0); } sprintf(Ply[fd].extr->tempstr[0],"%s/ISSUE",POSTPATH); fp = fopen(Ply[fd].extr->tempstr[0],"r"); if(!fp){ - print(fd,"ǥ Ȱ ׿.\n"); + print(fd,"투표할 안건이 없네요.\n"); return(0); } fgets(tmp, 256,fp); if (feof(fp)) { - print(fd," ǥ Ȱ ϴ.\n"); + print(fd,"현재 투표할 안건이 없습니다.\n"); return(0); } fclose(fp); @@ -223,7 +223,7 @@ extern void vote_cmnd(); lowercize(str,1); /* if (n <1){ - print(fd,"ǥð ƴմϴ.\n"); + print(fd,"투표시간이 아닙니다.\n"); return(0); } else if (n == 2 && str){ for (i=1;itempstr[1][1] = 1; @@ -287,8 +287,8 @@ char *str; } else { fclose(fp); - print(fd," ̹ ǥ ߽ϴ.\n"); - print(fd," ٲٽðڽϱ? (y/n): "); + print(fd,"당신은 이미 투표를 했습니다.\n"); + print(fd,"당신의 선택을 바꾸시겠습니까? (y/n): "); output_buf(); Ply[fd].io->intrpt &= ~1; RETURN(fd,vote_cmnd,1); @@ -310,14 +310,14 @@ char *str; tmp[1023] = 0; fclose(fp); print(fd,"\n%s",tmp); - print(fd," ? : "); + print(fd,"당신의 선택은? : "); output_buf(); Ply[fd].extr->tempstr[1][1] = 1; Ply[fd].io->intrpt &= ~1; RETURN(fd,vote_cmnd,2); } - print(fd,"ߴմϴ.\n"); + print(fd,"중단합니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); @@ -325,7 +325,7 @@ char *str; case 2: c = low(str[0]); if (c != 'a' && c != 'b' && c != 'c' && c != 'd' && c != 'e' && c != 'f' && c != 'g'){ - print(fd,"߸ Դϴ. ߴմϴ.\n"); + print(fd,"잘못된 선택입니다. 중단합니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } @@ -357,7 +357,7 @@ char *str; break; } print(fd,"\n%s",tmp); - print(fd," ? : "); + print(fd,"당신의 선택은? : "); output_buf(); Ply[fd].extr->tempstr[1][1] = n; @@ -381,7 +381,7 @@ char *str; write(i,Ply[fd].extr->tempstr[2],n); close(i); - print(fd,"ǥ Ͽϴ.\n"); + print(fd,"투표를 하였습니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); break; @@ -398,12 +398,12 @@ cmd *cmnd; struct stat f_stat; creature *player; - char tmp[80]; + char tmp[256]; int fd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ?\n"); + print(fd, "누구의 정보를 보고 싶으세요?\n"); return(0); } cmnd->str[1][0] = up(cmnd->str[1][0]); @@ -412,26 +412,25 @@ cmd *cmnd; if (!player){ if(load_ply(cmnd->str[1], &player) < 0){ - print(fd,"׷ ڴ ϴ.\n"); + print(fd,"그런 사용자는 없습니다.\n"); return (0); } if (ply_ptr->class < DM && player->class == DM) { - print(fd," ϴ.\n"); + print(fd,"당신은 그 사용자의 정보를 볼 수 없습니다.\n"); return (0); } - sprintf(tmp,"%s/%s/%s",PLAYERPATH,first_han(cmnd->str[1]), cmnd->str[1]); - if (stat(tmp,&f_stat)){ - print(fd,"׷ ڴ ϴ.\n"); + if(player_path_from_name(cmnd->str[1], tmp, sizeof(tmp)) < 0 || stat(tmp,&f_stat)){ + print(fd,"그런 사용자는 없습니다.\n"); return (0); } print(fd,"%s %+25s %s\n",player->name, race_str[player->race],class_str[player->class] ); - print(fd," ӽð: %s",ctime(&f_stat.st_ctime)); + print(fd,"마지막 접속시간: %s",ctime(&f_stat.st_ctime)); if(F_ISSET(player, SUICD)) { - print(fd, " ڴ ڻû Դϴ.\n"); + print(fd, "그 사용자는 자살신청한 사용자입니다.\n"); } free_crt(player); } @@ -439,36 +438,36 @@ cmd *cmnd; if(ply_ptr->class < SUB_DM && F_ISSET(player, PDMINV) && (player->class == SUB_DM)) { print(fd,"%s %+25s %s\n",player->name, race_str[player->race],class_str[player->class] ); - print(fd," ӽð: %s",ctime(&f_stat.st_ctime)); + print(fd,"마지막 접속시간: %s",ctime(&f_stat.st_ctime)); return(0); } if (F_ISSET(player, PDMINV) && (ply_ptr->class < SUB_DM || (ply_ptr->class == SUB_DM && player->class == DM))) { - print(fd," ϴ.\n"); + print(fd,"당신은 그 사용자의 정보를 볼 수 없습니다.\n"); return (0); } print(fd,"%s %+25s %s\n",player->name, race_str[player->race], class_str[player->class]); - print(fd," Դϴ.\n"); + print(fd,"현재 접속 중 입니다.\n"); } sprintf(tmp,"%s/%s",POSTPATH,cmnd->str[1]); if (stat(tmp,&f_stat)){ - print(fd," ϴ.\n"); + print(fd,"받은 편지가 없습니다.\n"); return (0); } if (f_stat.st_atime > f_stat.st_ctime) - print(fd," ¥: %s",ctime(&f_stat.st_atime)); + print(fd,"읽지 않은 편지가 도착한 날짜: %s",ctime(&f_stat.st_atime)); else - print(fd," ¥: %s",ctime(&f_stat.st_ctime)); + print(fd,"새 편지가 도착한 날짜: %s",ctime(&f_stat.st_ctime)); } /****************************************************************************** -* аŸ +* 패거리 ******************************************************************************/ int load_family() @@ -505,13 +504,13 @@ extern void add_family(); F_SET(ply_ptr, PREADI); if(F_ISSET(ply_ptr, PFAMIL)) { - print(fd," ̹ аŸ Ǿֽϴ.\n"); + print(fd,"당신은 이미 패거리에 가입이 되어있습니다.\n"); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } if(F_ISSET(ply_ptr, PRDFML)) { - print(fd," ̹ Խû صΰ ֽϴ.\n"); + print(fd,"당신은 이미 가입신청을 해두고 있습니다.\n"); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } @@ -536,49 +535,49 @@ char *str; #endif switch(param) { case 0 : - print(fd, " аŸ ֽϴ.\n"); - print(fd, "\n%-20s %-20s\n\n","аŸ̸","θ ̸"); + print(fd, "다음과 같은 패거리가 있습니다.\n"); + print(fd, "\n%-20s %-20s\n\n","패거리이름","두목 이름"); for(num = 1; num < ftotal; num++) { print(fd,"%-20s %-20s\n",family_str[num], fmboss_str[num]); } - print(fd,"\n  аŸ Ͻʴϱ? "); - print(fd, "\nаŸ ̸ Է ֽʽÿ. "); + print(fd,"\n당신은 어떤 패거리에 가입을 원하십니까? "); + print(fd, "\n패거리의 이름을 입력해 주십시요. "); RETURN(fd,add_family,1); case 1 : for(num = 0; num < ftotal; num++){ if(!strcmp(str, family_str[num])) { - if(!strcmp(fmboss_str[num], "*ü*")) { - print(fd, "ü аŸԴϴ."); + if(!strcmp(fmboss_str[num], "*해체*")) { + print(fd, "해체된 패거리입니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } crt_ptr = find_who(fmboss_str[num]); if(!crt_ptr) { - print(fd, "аŸ θ %s ̿ ƴմϴ.",fmboss_str[num]); + print(fd, "패거리의 두목인 %s님이 현재 이용중이 아닙니다.",fmboss_str[num]); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } ply_ptr->daily[DL_EXPND].max = family_num[num]; - print(fd, "%s Ͻðڽϱ? (/ƴϿ) ",family_str[num]); + print(fd, "%s에 가입을 하시겠습니까? (예/아니오) ",family_str[num]); RETURN(fd, add_family, 2); } } - print(fd,"\n߸ Դϴ.\n"); + print(fd,"\n잘못된 선택입니다.\n"); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); case 2 : - if(strcmp(str, "")) { - print(fd,"\n û մϴ."); + if(strcmp(str, "예")) { + print(fd,"\n가입 신청을 취소합니다."); ply_ptr->daily[DL_EXPND].max = 0; F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } crt_ptr = find_who(fmboss_str[(ply_ptr->daily[DL_EXPND].max)] ) ; - print(crt_ptr->fd, "\n>>> %s аŸ ϱ⸦ մϴ.", ply_ptr->name ); + print(crt_ptr->fd, "\n>>> %s님이 당신의 패거리에 가입하기를 원합니다.", ply_ptr->name ); F_SET(ply_ptr, PRDFML); - print(fd,"\n û Ͽϴ. \n"); - print(fd,"аŸ θ 㰡 ٸʽÿ."); + print(fd,"\n가입 신청을 하였습니다. \n"); + print(fd,"패거리 두목의 허가를 기다리십시요."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } @@ -602,11 +601,11 @@ cmd *cmnd; #endif if(!F_ISSET(ply_ptr, PFMBOS)) { - print(fd, "аŸ θ մϴ."); + print(fd, "패거리의 두목만이 가능합니다."); RETURN(fd, command, 1); } if(cmnd->num < 2) { - print(fd, " 㰡 Ͻðڽϱ?"); + print(fd, "누구의 가입을 허가 하시겠습니까?"); RETURN(fd, command,1 ); } @@ -616,20 +615,20 @@ cmd *cmnd; if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || F_ISSET(ply_ptr, PBLIND) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd," ̿ ƴմϴ."); + print(fd,"현재 이용중이 아닙니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } if(!F_ISSET(crt_ptr, PRDFML) || (ply_ptr->daily[DL_EXPND].max != crt_ptr->daily[DL_EXPND].max) || F_ISSET(crt_ptr, PFAMIL)) { - print(fd," аŸ Խû ƴմϴ."); + print(fd,"당신의 패거리에 가입신청을 한 사람이 아닙니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } num = ply_ptr->daily[DL_EXPND].max ; if(ply_ptr->gold < family_gold[num]*10000) { - print(fd, " ڱݻδ аŸ ϴ."); + print(fd, "당신의 자금사정으로는 패거리원을 받을수 없습니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } @@ -639,12 +638,12 @@ cmd *cmnd; edit_member(crt_ptr->name, crt_ptr->class, ply_ptr->daily[DL_EXPND].max, 1); crt_ptr->gold += family_gold[num] * 10000; ply_ptr->gold -= family_gold[num] * 10000; - print(fd,"%s аŸ 㰡Ͽϴ.\n",crt_ptr->name); - print(fd,"%sԿ ϱ Ͽϴ.",crt_ptr->name); - broadcast_all("\n### %s %s Ͽϴ.",crt_ptr->name, + print(fd,"%s님의 패거리 가입을 허가하였습니다.\n",crt_ptr->name); + print(fd,"%s님에게 가입축하금을 지급하였습니다.",crt_ptr->name); + broadcast_all("\n### %s님이 %s에 가입을 하였습니다.",crt_ptr->name, family_str[ply_ptr->daily[DL_EXPND].max ]); - print(crt_ptr->fd, "\n аŸκ ϱ ޾ҽϴ."); - print(crt_ptr->fd, "\n %ld ֽϴ.",crt_ptr->gold); + print(crt_ptr->fd, "\n당신은 당신의 패거리로부터 가입축하금을 받았습니다."); + print(crt_ptr->fd, "\n당신은 이제 %ld냥을 갖고 있습니다.",crt_ptr->gold); F_CLR(ply_ptr,PREADI); return(0); } @@ -680,45 +679,45 @@ char *str; #endif if(F_ISSET(ply_ptr, PFMBOS)) { - print(fd, "аŸ θ Ż Ҽ ϴ."); + print(fd, "패거리의 두목은 탈퇴를 할수 없습니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } if(F_ISSET(ply_ptr, PRDFML)) { - print(fd, "аŸ Խû մϴ."); + print(fd, "패거리 가입신청을 취소합니다."); F_CLR(ply_ptr, PRDFML); ply_ptr->daily[DL_EXPND].max = 0; F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } if(!F_ISSET(ply_ptr, PFAMIL) && !F_ISSET(ply_ptr, PRDFML)) { - print(fd, "  аŸ Ǿ ʽϴ."); + print(fd, "당신은 어떤 패거리에도 가입이 되어 있지 않습니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } switch(param) { case 0 : - print(fd," аŸ ŻϽ Դϱ? (/ƴϿ) "); + print(fd,"당신은 지금 현재의 패거리를 탈퇴하실 생각입니까? (예/아니오) "); RETURN(fd, exit_family, 1); case 1 : - if(strcmp(str, "")) { - print(fd, "аŸ Ż ʾҽϴ."); + if(strcmp(str, "예")) { + print(fd, "패거리를 탈퇴하지 않았습니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } else { if(ply_ptr->gold < family_gold[ply_ptr->daily[DL_EXPND].max ] * 20000 ) { - print(fd, " δ аŸŻ ϴ.\n"); - print(fd, "аŸ Ż ʾҽϴ."); + print(fd, "당신이 가진 돈으로는 패거리탈퇴비를 낼수 없습니다.\n"); + print(fd, "패거리를 탈퇴하지 않았습니다."); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } - print(fd, " аŸ Ż Ͽϴ.\n"); - broadcast_all("\n### %s %s Ż Ͽϴ.",ply_ptr->name, + print(fd, "당신은 패거리에서 탈퇴를 하였습니다.\n"); + broadcast_all("\n### %s님이 %s에서 탈퇴를 하였습니다.",ply_ptr->name, family_str[ply_ptr->daily[DL_EXPND].max]); ply_ptr->gold -= family_gold[ply_ptr->daily[DL_EXPND].max] * 20000 ; - print(fd, "\n %ld ֽϴ.",ply_ptr->gold); + print(fd, "\n당신은 이제 %ld냥을 갖고 있습니다.",ply_ptr->gold); edit_member(ply_ptr->name, ply_ptr->class, ply_ptr->daily[DL_EXPND].max, 2); F_CLR(ply_ptr, PFAMIL); ply_ptr->daily[DL_EXPND].max = 0; @@ -743,11 +742,11 @@ cmd *cmnd; #endif if(!F_ISSET(ply_ptr, PFAMIL)) { - print(fd, " аŸ ʽϴ."); + print(fd, "당신은 패거리에 속해있지 않습니다."); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ʽϴ."); + print(fd, "입이 막혀 말이 나오질 않습니다."); return(0); } @@ -755,7 +754,7 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(len == 0) { - print(fd, "аŸ鿡 Ͻ÷?"); + print(fd, "패거리원들에게 무슨 말을 하시려고요?"); return(0); } @@ -767,7 +766,7 @@ cmd *cmnd; "33", ply_ptr->name, &cmnd->fullstr[0], "37"); } } - broadcast_eaves("\n>>> %s [%s] \"%s\" ̾߱մϴ.", + broadcast_eaves("\n>>> %s님이 [%s]에게 \"%s\" 라고 이야기합니다.", ply_ptr->name, family_str[num], &cmnd->fullstr[0]); return(0); } @@ -788,7 +787,7 @@ cmd *cmnd; total = 0; if(F_ISSET(ply_ptr, PBLIND)) { - print(fd, " ־ ֽϴ!"); + print(fd, "당신은 눈이 멀어 있습니다!"); return(0); } @@ -797,32 +796,32 @@ cmd *cmnd; crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || F_ISSET(ply_ptr, PBLIND) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd," ̿ ƴմϴ."); + print(fd,"현재 이용중이 아닙니다."); RETURN(fd, command, 1); } if(!F_ISSET(crt_ptr, PFAMIL) && !F_ISSET(crt_ptr, PRDFML)) { - print(fd, "%s  аŸ ҼӵǾ ʽϴ.", crt_ptr->name); + print(fd, "%s님은 어떤 패거리에도 소속되어 있지 않습니다.", crt_ptr->name); RETURN(fd, command, 1); } if(F_ISSET(crt_ptr, PRDFML)) { - print(fd, "%s [%s] аŸ ûԴϴ.", crt_ptr->name, family_str[crt_ptr->daily[DL_EXPND].max]); + print(fd, "%s님은 [%s] 패거리에 가입을 신청중입니다.", crt_ptr->name, family_str[crt_ptr->daily[DL_EXPND].max]); RETURN(fd, command, 1); } - print(fd, "%s [%s] аŸ ֽϴ.",crt_ptr->name, family_str[crt_ptr->daily[DL_EXPND].max]); + print(fd, "%s님은 [%s] 패거리에 속해있습니다.",crt_ptr->name, family_str[crt_ptr->daily[DL_EXPND].max]); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) && !F_ISSET(ply_ptr, PRDFML)) { - print(fd, "  аŸ ҼӵǾ ʽϴ."); + print(fd, "당신은 어떤 패거리에도 소속되어 있지 않습니다."); return(0); } if(F_ISSET(ply_ptr, PRDFML)) { - print(fd, " [%s] аŸ ûԴϴ.\n\n",family_str[num]); + print(fd, "당신은 [%s] 패거리에 가입을 신청중입니다.\n\n",family_str[num]); } else { - print(fd, " [%s] аŸ ҼӵǾ ֽϴ.\n\n",family_str[num]); + print(fd, "당신은 [%s] 패거리에 소속되어 있습니다.\n\n",family_str[num]); } for(i = 0; i < Tablesize; i++) { @@ -842,7 +841,7 @@ cmd *cmnd; print(fd, "\n"); } if(total % 3 != 0) print(fd, "\n"); - print(fd, "\n %d аŸ ̿Դϴ.", total); + print(fd, "\n총 %d명의 패거리원들이 이용중입니다.", total); return(0); } @@ -857,21 +856,21 @@ cmd *cmnd; ftotal = load_family(); F_SET(ply_ptr, PREADI); - print(fd, " аŸ ֽϴ.\n"); - print(fd, "%-14s %-14s \n", "аŸ̸", "θ̸"); + print(fd, "다음과 같은 패거리가 있습니다.\n"); + print(fd, "%-14s %-14s \n", "패거리이름", "두목이름"); print(fd, "--------------------------------------------\n"); for(i = 1; i < ftotal; i++) { print(fd, "%-14s %-14s \n", family_str[i], fmboss_str[i]); } - print(fd, "\n %d аŸ Ȱ߿ ֽϴ.", ftotal-1 ); + print(fd, "\n총 %d 개의 패거리가 활동중에 있습니다.", ftotal-1 ); F_CLR(ply_ptr, PREADI); return(0); } /*************************************************************************** -* ġ ..( ̻, аŸ ) +* 경험치 전수..(초인 이상, 패거리만 가능) **************************************************************************/ -/* ϴ ƾ ְ.. ʴµ.. ʿϸ ȣؼ 밡. */ +/* 일단은 루틴만 있고.. 사용은 하지 않는데.. 필요하면 호출해서 사용가능. */ /*************************************************************************/ int trans_exp(ply_ptr, cmnd) @@ -889,56 +888,56 @@ cmd *cmnd; amt = atol(cmnd->str[1]); if(ply_ptr->class < CARETAKER) { - print(fd, " ɷδ Ҽ ϴ."); + print(fd, "당신의 능력으로는 사용할수 없습니다."); return(0); } if(!F_ISSET(ply_ptr, PFAMIL)) { - print(fd, "аŸ ڸ մϴ."); + print(fd, "패거리 가입자만 가능합니다."); return(0); } if(cmnd->num < 3) { - print(fd, " ġ Ͻ÷?"); + print(fd, "누구에게 경험치를 전수하시려고요?"); return(0); } if((amt < 1) || (amt > 100000)) { - print(fd, "1 100000 ̸ մϴ."); + print(fd, "1에서 100000점 사이만 가능합니다."); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr || crt_ptr == ply_ptr) { - print(fd, "׷ !"); + print(fd, "그런 사람은 여기 없어요!"); return(0); } if(!F_ISSET(crt_ptr, PFAMIL) || (ply_ptr->daily[DL_EXPND].max != crt_ptr->daily[DL_EXPND].max)) { - print(fd, " аŸԸ ġ մϴ."); + print(fd, "당신의 패거리사람에게만 경험치전수가 가능합니다."); return(0); } if(crt_ptr->level > 50 || crt_ptr->class == INVINCIBLE ) { - print(fd, " ׻ ġ ϴ."); + print(fd, "당신은 그사람에게 경험치를 줄 수 없습니다."); return(0); } if(ply_ptr->experience < 100000) { - print(fd, " ٸŭ ġ ʽϴ."); + print(fd, "당신은 남에게 줄만큼의 경험치를 가지고 있지 않습니다."); return(0); } ply_ptr->experience -= amt; crt_ptr->experience += amt/20; - print(fd, " %sԿ ڽ ġ %ld ־ϴ.", crt_ptr->name, amt); - print(crt_ptr->fd, "\n$$$ %s ſ ġ %ld ־ϴ.\n", ply_ptr->name, amt/10); + print(fd, "당신은 %s님에게 자신의 경험치 %ld점을 나눠주었습니다.", crt_ptr->name, amt); + print(crt_ptr->fd, "\n$$$ %s님이 당신에게 경험치 %ld점을 나눠주었습니다.\n", ply_ptr->name, amt/10); return(0); } /**************************************************************************** -* ü * +* 초인의 체력 도력 구입 * ****************************************************************************/ int buy_states(ply_ptr, cmnd) @@ -951,30 +950,30 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != CARETAKER) { - print(fd, "θ մϴ."); + print(fd, "초인만이 가능합니다."); return(0); } if(cmnd->num < 2) { - print(fd, "\"ü\" \"\" ø÷?"); + print(fd, "\"체력\" 과 \"도력\" 중 어느 것을 올리시려고요?"); return(0); } amt = (ply_ptr->experience - 100000000L) / 1000000L; if(amt < 1) { - print(fd, " ġδ ɷġ ϴ."); + print(fd, "당신의 경험치로는 능력치 향상을 할 수 없습니다."); return(0); } if(ply_ptr->gold < amt*1000000L) { - print(fd, " δ ɷġ ϴ."); + print(fd, "당신이 가진 돈으로는 능력치 향상을 할 수 없습니다."); return(0); } - if(!strcmp(cmnd->str[1], "ü")) { + if(!strcmp(cmnd->str[1], "체력")) { if(ply_ptr->hpmax >= 2000 && ply_ptr->level < 128) { - print(fd, "̻ ü ø ϴ."); + print(fd, "더이상은 체력을 올릴수 없습니다."); return(0); } ply_ptr->experience -= amt*1000000L; @@ -991,9 +990,9 @@ cmd *cmnd; ply_ptr->hpcur = ply_ptr->hpmax; } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "도력")) { if(ply_ptr->mpmax >= 2000 && ply_ptr->level < 128) { - print(fd, "̻ ø ϴ."); + print(fd, "더이상은 도력을 올릴수 없습니다."); return(0); } ply_ptr->experience -= amt*1000000L; @@ -1010,13 +1009,13 @@ cmd *cmnd; ply_ptr->mpcur = ply_ptr->mpmax; } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "힘")) { if(ply_ptr->experience - 100000000L < 2000000L) { - print(fd, " ġδ ɷġ ø ϴ."); + print(fd, "당신의 경험치로는 능력치를 올릴수 없습니다."); return(0); } if(ply_ptr->strength > 44) { - print(fd, "̻ ø ɷġԴϴ."); + print(fd, "더이상 올릴수 없는 능력치입니다."); return(0); } ply_ptr->experience -= 2000000L; @@ -1027,13 +1026,13 @@ cmd *cmnd; else ply_ptr->mpmax += 3; } - else if(!strcmp(cmnd->str[1], "ø")) { + else if(!strcmp(cmnd->str[1], "민첩")) { if(ply_ptr->experience - 100000000L < 2000000L) { - print(fd, " ġδ ɷġ ø ϴ."); + print(fd, "당신의 경험치로는 능력치를 올릴수 없습니다."); return(0); } if(ply_ptr->dexterity > 44) { - print(fd, "̻ ø ɷġԴϴ."); + print(fd, "더이상 올릴수 없는 능력치입니다."); return(0); } ply_ptr->experience -= 2000000L; @@ -1044,13 +1043,13 @@ cmd *cmnd; else ply_ptr->mpmax += 3; } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "맷집")) { if(ply_ptr->experience - 100000000L < 2000000L) { - print(fd, " ġδ ɷġ ø ϴ."); + print(fd, "당신의 경험치로는 능력치를 올릴수 없습니다."); return(0); } if(ply_ptr->constitution > 44) { - print(fd, "̻ ø ɷġԴϴ."); + print(fd, "더이상 올릴수 없는 능력치입니다."); return(0); } ply_ptr->experience -= 2000000L; @@ -1061,13 +1060,13 @@ cmd *cmnd; else ply_ptr->mpmax += 3; } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "지식")) { if(ply_ptr->experience - 100000000L < 2000000L) { - print(fd, " ġδ ɷġ ø ϴ."); + print(fd, "당신의 경험치로는 능력치를 올릴수 없습니다."); return(0); } if(ply_ptr->intelligence > 44) { - print(fd, "̻ ø ɷġԴϴ."); + print(fd, "더이상 올릴수 없는 능력치입니다."); return(0); } ply_ptr->experience -= 2000000L; @@ -1078,13 +1077,13 @@ cmd *cmnd; else ply_ptr->mpmax += 3; } - else if(!strcmp(cmnd->str[1], "žӽ")) { + else if(!strcmp(cmnd->str[1], "신앙심")) { if(ply_ptr->experience - 100000000L < 2000000L) { - print(fd, " ġδ ɷġ ø ϴ."); + print(fd, "당신의 경험치로는 능력치를 올릴수 없습니다."); return(0); } if(ply_ptr->piety > 44) { - print(fd, "̻ ø ɷġԴϴ."); + print(fd, "더이상 올릴수 없는 능력치입니다."); return(0); } ply_ptr->experience -= 2000000L; @@ -1096,19 +1095,19 @@ cmd *cmnd; } else { - print(fd, " ɷġ ø÷?"); + print(fd, "어떤 능력치를 올리시려고요?"); return(0); } ply_ptr->ndice = 4; ply_ptr->sdice = 4; if(!F_ISSET(ply_ptr, PUPDMG)) ply_ptr->pdice = 4; - broadcast_all("\n### %s ɷġ Ǿϴ!", ply_ptr->name); - print(fd, "\nմϴ! ɷġ öϴ!"); + broadcast_all("\n### %s님의 능력치가 향상이 되었습니다!", ply_ptr->name); + print(fd, "\n축하합니다! 당신의 능력치가 올랐습니다!"); return(0); } /**************************************************************************** -* ȥ * +* 결혼 * ****************************************************************************/ int marriage(ply_ptr, cmnd) @@ -1129,56 +1128,56 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RMARRI)) { - print(fd, "̰ ȥ ƴմϴ."); + print(fd, "이곳은 결혼식장이 아닙니다."); return(0); } if((18 + ply_ptr->lasttime[LT_HOURS].interval / 86400L) < 25) { - print(fd, " ȥ ִ ̰ ƴմϴ."); + print(fd, "당신은 결혼할 수 있는 나이가 아닙니다."); return(0); } if(F_ISSET(ply_ptr, PRDMAR)) { - print(fd, "ȥ û մϴ."); + print(fd, "결혼 신청을 취소합니다."); F_CLR(ply_ptr, PRDMAR); return(0); } if(F_ISSET(ply_ptr, PMARRI)) { - print(fd, " ̹ ȥݾƿ!"); + print(fd, "당신은 이미 결혼했잖아요!"); return(0); } if(cmnd->num < 2) { - print(fd, " ȥ Ͻ÷?"); + print(fd, "누구와 결혼을 하시려고요?"); return(0); } crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || F_ISSET(ply_ptr, PBLIND) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, "׷ ã ."); + print(fd, "그런 사람을 찾을 수가 없군요."); return(0); } if(F_ISSET(ply_ptr, PMALES) && F_ISSET(crt_ptr, PMALES)) { - print(fd, "ڳ ȥϽ÷?"); + print(fd, "남자끼리 결혼하시려고요?"); return(0); } if(!F_ISSET(ply_ptr, PMALES) && !F_ISSET(crt_ptr, PMALES)) { - print(fd, "ڳ ȥϽ÷?"); + print(fd, "여자끼리 결혼하시려고요?"); return(0); } if((18 + crt_ptr->lasttime[LT_HOURS].interval / 86400L) < 25) { - print(fd, "׻ ȥ ̰ ʾҽϴ."); + print(fd, "그사람은 아직 결혼할 나이가 되지 않았습니다."); return(0); } if(F_ISSET(crt_ptr, PMARRI)) { - print(fd, "׻ ̹ ȥ Դϴ."); + print(fd, "그사람은 이미 결혼한 사람입니다."); return(0); } if(!F_ISSET(crt_ptr, PRDMAR)) { - print(fd, " %sԿ ȥ ûϿϴ.", crt_ptr->name); + print(fd, "당신은 %s님에게 결혼을 신청하였습니다.", crt_ptr->name); F_SET(ply_ptr, PRDMAR); /* sprintf(file, "%s/marriage/%s", PLAYERPATH, ply_ptr->name); @@ -1187,7 +1186,7 @@ cmd *cmnd; */ sprintf(mstr, "m%s", crt_ptr->name); strcpy(ply_ptr->key[2], mstr); - print(crt_ptr->fd, "\n%C%s ſ ȥ ûմϴ.%D", + print(crt_ptr->fd, "\n%C%s님이 당신에게 결혼을 신청합니다.%D", "36", ply_ptr->name, "37"); // fclose(fp); return(0); @@ -1203,8 +1202,8 @@ cmd *cmnd; sprintf(str, "%s", &crt_ptr->key[2][1]); if(!strcmp(ply_ptr->name, str)) { - print(fd, " %s ȥû ޾ƵԴϴ.\n", crt_ptr->name); - print(crt_ptr->fd, "\n%s ȥû ޾Ƶ鿴ϴ.", + print(fd, "당신은 %s님의 결혼신청을 받아들입니다.\n", crt_ptr->name); + print(crt_ptr->fd, "\n%s님이 당신의 결혼신청을 받아들였습니다.", ply_ptr->name); F_CLR(ply_ptr, PRDMAR); F_CLR(crt_ptr, PRDMAR); @@ -1213,7 +1212,7 @@ cmd *cmnd; // sprintf(file, "%s/marriage/%s", PLAYERPATH, ply_ptr->name); // fp = fopen(file, "w+"); // fprintf(fp, "%s\n", crt_ptr->name); - broadcast_all("\n### %s԰ %s ȥ Ͽϴ.", crt_ptr->name, ply_ptr->name); + broadcast_all("\n### %s님과 %s님이 결혼을 하였습니다.", crt_ptr->name, ply_ptr->name); // sprintf(mstr, "m%s", ply_ptr->name); // strcpy(crt_ptr->key[2], mstr); sprintf(mstr, "m%s", crt_ptr->name); @@ -1222,7 +1221,7 @@ cmd *cmnd; // fclose(fp2); } else { - print(fd, "׻ ٸ ȥ غԴϴ."); + print(fd, "그사람은 다른 사람과 결혼을 준비중입니다."); // fclose(fp2); return(0); } @@ -1231,7 +1230,7 @@ cmd *cmnd; } /***************************************************************************** - m_send(ȥ ȭ) + m_send(결혼한 사람끼리의 대화) *****************************************************************************/ int m_send(ply_ptr, cmnd) @@ -1246,37 +1245,37 @@ cmd *cmnd; fd = ply_ptr->fd; if(!F_ISSET(ply_ptr, PMARRI)) { - print(fd, " ȥ ʾҽϴ."); + print(fd, "당신은 결혼하지 않았습니다."); return(0); } sprintf(str, "%s", &ply_ptr->key[2][1]); crt_ptr = find_who(str); if(!crt_ptr) { - print(fd, " ڴ ̿ ƴմϴ."); + print(fd, "당신의 배우자는 지금 이용중이 아닙니다."); return(0); } len = cut_command(cmnd->fullstr); cmnd->fullstr[255] = 0; if(len == 0) { - print(fd, " Ͻ÷?"); + print(fd, "무슨 말을 전하시려고요?"); return(0); } if(F_ISSET(ply_ptr, PLECHO)){ - print(fd, " %M \"%s\" ̾߱մϴ.", crt_ptr, + print(fd, "당신은 %M에게 \"%s\"라고 이야기합니다.", crt_ptr, &cmnd->fullstr[0]); } else - print(fd, "%sԿ Ͽϴ.", crt_ptr->name); + print(fd, "%s님에게 말을 전달하였습니다.", crt_ptr->name); - print(crt_ptr->fd, "\n%C%M%j ſ \"%s\" ̾߱մϴ.%D", + print(crt_ptr->fd, "\n%C%M%j 당신에게 \"%s\"라고 이야기합니다.%D", "34", ply_ptr, "1", &cmnd->fullstr[0], "37"); return(0); } -/* ȥ */ +/* 이혼 */ int divorce(ply_ptr, cmnd) creature *ply_ptr; @@ -1289,16 +1288,16 @@ cmd *cmnd; fd = ply_ptr->fd; if(F_ISSET(ply_ptr, PRDMAR) && !F_ISSET(ply_ptr, PMARRI)) { - print(fd, "ȥ û մϴ."); + print(fd, "결혼 신청을 취소합니다."); F_CLR(ply_ptr, PRDMAR); return(0); } if(!F_ISSET(ply_ptr, PMARRI)) { - print(fd, " ȥ ʾҽϴ."); + print(fd, "당신은 결혼하지 않았습니다."); return(0); } if(F_ISSET(ply_ptr, PRDDIV)) { - print(fd, "ȥ û մϴ."); + print(fd, "이혼 신청을 취소합니다."); F_CLR(ply_ptr, PRDDIV); return(0); } @@ -1308,25 +1307,25 @@ cmd *cmnd; if(!crt_ptr) { if(load_ply(str, &crt_ptr) < 0) { - print(fd, " ڴ ʽϴ."); + print(fd, "당신의 배우자는 존재하지 않습니다."); F_CLR(ply_ptr, PMARRI); ply_ptr->key[2][0] = 0; return(0); } - print(fd, " ڰ ʽϴ."); + print(fd, "당신의 배우자가 현재 접속중이지 않습니다."); return(0); } if(!F_ISSET(crt_ptr, PRDDIV)) { - print(fd, " ڿ ȥû Ͽϴ."); + print(fd, "당신은 당신의 배우자에게 이혼신청을 하였습니다."); F_SET(ply_ptr, PRDDIV); - print(crt_ptr->fd, "\n%C%s ſ ȥû Ͽϴ.%D", + print(crt_ptr->fd, "\n%C%s님이 당신에게 이혼신청을 하였습니다.%D", "36", ply_ptr->name, "37"); return(0); } else { - print(fd, " %s ȥû ޾ƵԴϴ.", crt_ptr->name); - print(crt_ptr->fd, "\n%s ȥû ޾Ƶ鿴ϴ.", + print(fd, "당신은 %s님의 이혼신청을 받아들입니다.", crt_ptr->name); + print(crt_ptr->fd, "\n%s님이 당신의 이혼신청을 받아들였습니다.", ply_ptr->name); F_CLR(ply_ptr, PRDMAR); F_CLR(ply_ptr, PMARRI); @@ -1334,7 +1333,7 @@ cmd *cmnd; F_CLR(crt_ptr, PRDMAR); F_CLR(crt_ptr, PMARRI); F_CLR(crt_ptr, PRDDIV); - broadcast("\n### %s԰ %s ȥ Ͽϴ.", + broadcast("\n### %s님과 %s님이 이혼을 하였습니다.", ply_ptr->name, crt_ptr->name); return(0); } @@ -1371,6 +1370,5 @@ cmd *cmnd; - diff --git a/src/command12.c b/src/command12.c index 2a95713..7b73eef 100644 --- a/src/command12.c +++ b/src/command12.c @@ -14,7 +14,7 @@ #endif /****************************************************************** - + 비교 ******************************************************************/ int obj_compare(ply_ptr, cmnd) @@ -28,14 +28,14 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " Ͻ÷?"); + print(fd, "무엇을 비교하시려고요?"); return(0); } obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런 것을 갖고 있지 않습니다."); return(0); } if(obj_ptr->type == ARMOR) { @@ -44,10 +44,10 @@ cmd *cmnd; else check_ac = obj_ptr->armor * 5; if(check_ac > 29) { - print(fd, "%I%j %d ֽϴ.", obj_ptr, + print(fd, "%I%j %d 레벨부터 입을 수 있습니다.", obj_ptr, "0", check_ac); } - else print(fd, "%I%j ֽϴ.", obj_ptr, "0"); + else print(fd, "%I%j 누구나 입을 수 있습니다.", obj_ptr, "0"); return(0); } else if(obj_ptr->type < ARMOR) { @@ -60,22 +60,22 @@ cmd *cmnd; if(ply_ptr->class >= INVINCIBLE) { if(check_dmg > 15) { - print(fd, "%I%j ˻ %d, ڰ %d, %d,\n", + print(fd, "%I%j 검사는 %d레벨, 자객 도둑은 %d레벨, 무사 포졸은 %d레벨,\n", obj_ptr, "0", (check_dmg-7)*3, (check_dmg-3)*3, (check_dmg-2)*3); - print(fd, "ǹ %d ֽϴ.", check_dmg*3); + print(fd, "권법가 불제자 도술사는 %d레벨부터 사용할 수 있습니다.", check_dmg*3); } - else print(fd, "%I%j ֽϴ.", obj_ptr, "0"); + else print(fd, "%I%j 누구나 무장할 수 있습니다.", obj_ptr, "0"); return(0); } if(check_dmg > 15) { - print(fd, "%I%j %d ֽϴ.", + print(fd, "%I%j %d 레벨부터 무장할 수 있습니다.", obj_ptr, "0", check_dmg*3); } - else print(fd, "%I%j ֽϴ.", obj_ptr, "0"); + else print(fd, "%I%j 누구나 무장할 수 있습니다.", obj_ptr, "0"); return(0); } else { - print(fd, "⳪  մϴ."); + print(fd, "무기나 방어구만 가능합니다."); return(0); } } @@ -85,7 +85,7 @@ int memo(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { - char file[80], file2[80]; + char file[256], file2[80]; char str[50], str2[71], str3[71]; int fd, fp, ff; int len, space=0, i; @@ -94,22 +94,25 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 3) { - print(fd, "  ޸ ÷?\n"); + print(fd, "누구에게 어떤 메모를 남기시려고요?\n"); return(0); } cmnd->str[1][0] = up(cmnd->str[1][0]); - sprintf(file, "%s/%s/%s", PLAYERPATH, first_han(cmnd->str[1]), cmnd->str[1]); + if(player_path_from_name(cmnd->str[1], file, sizeof(file)) < 0) { + print(fd, "그런 사용자는 없습니다.\n"); + return(0); + } ff = open(file, O_RDONLY, 0); if(ff < 0) { - print(fd, "׷ ڴ ϴ.\n"); + print(fd, "그런 사용자는 없습니다.\n"); return(0); } close(ff); len = cut_command(cmnd->fullstr); if(len > 80) { - print(fd, "޸ ʹ ϴ."); + print(fd, "메모의 내용이 너무 깁니다."); return(0); } @@ -128,7 +131,7 @@ cmd *cmnd; } cmnd->fullstr[255] = 0; if(space < 1 || strlen(&cmnd->fullstr[i+1]) < 1) { - print(fd, " ÷?"); + print(fd, "무슨 말을 남기시려고요?"); return(0); } @@ -137,14 +140,14 @@ cmd *cmnd; str[strlen(str)-1] = 0; write(fp, str, strlen(str)); - sprintf(str2, " [%s] ޸ : \n", ply_ptr->name); + sprintf(str2, " 에 [%s] 님이 남기신 메모 : \n", ply_ptr->name); write(fp, str2, strlen(str2)); write(fp, ">>>>> ", strlen(">>>>> ")); write(fp, &cmnd->fullstr[i+1], strlen(&cmnd->fullstr[i+1])); strcpy(str3, "\n"); write(fp, str3, strlen(str3)); close(fp); - print(fd, "޸ ϴ."); + print(fd, "메모를 남겼습니다."); return(0); } @@ -156,7 +159,7 @@ cmd *cmnd; creature *player; int fd; int ftotal; - char tmp[80]; + char tmp[256]; fd = ply_ptr->fd; #ifdef CHECKFAMILY @@ -167,47 +170,46 @@ cmd *cmnd; #endif if(!F_ISSET(ply_ptr, PFMBOS)) { - print(fd, "аŸ θ 밡 Դϴ.\n"); + print(fd, "패거리의 두목만이 사용가능한 명령입니다.\n"); return(0); } if(cmnd->num < 2) { - print(fd, " аŸ ѾƳ÷?\n"); + print(fd, "누구를 패거리에서 쫓아내시려고요?\n"); return(0); } cmnd->str[1][0] = up(cmnd->str[1][0]); player = find_who(cmnd->str[1]); if(ply_ptr == player) { - print(fd, "ڱ ڽ ߹Ϸ?"); + print(fd, "자기 자신을 추방하려고요?"); return(0); } if(!player) { if(load_ply(cmnd->str[1], &player) < 0) { - print(fd, "׷ ڴ ϴ.\n"); + print(fd, "그런 사용자는 없습니다.\n"); return(0); } - sprintf(tmp, "%s/%s/%s", PLAYERPATH, first_han(cmnd->str[1]), cmnd->str[1]); - if(stat(tmp, &f_stat)) { - print(fd, "׷ ڴ ϴ.\n"); + if(player_path_from_name(cmnd->str[1], tmp, sizeof(tmp)) < 0 || stat(tmp, &f_stat)) { + print(fd, "그런 사용자는 없습니다.\n"); return(0); } if(F_ISSET(player, PFAMIL)) { if(ply_ptr->daily[DL_EXPND].max == player->daily[DL_EXPND].max) { player->daily[DL_EXPND].max = 0; F_CLR(player, PFAMIL); - print(fd, "%s аŸ ߹Ͽϴ.\n", player->name); + print(fd, "%s님을 패거리에서 추방하였습니다.\n", player->name); edit_member(player->name, player->class, ply_ptr->daily[DL_EXPND].max, 2); save_ply(player->name, player); free_crt(player); return(0); } else { - print(fd, " аŸ ƴմϴ.\n"); + print(fd, "그 사람은 당신의 패거리원이 아닙니다.\n"); free_crt(player); return(0); } } else { - print(fd, " аŸ ƴմϴ.\n"); + print(fd, "그 사람은 당신의 패거리원이 아닙니다.\n"); free_crt(player); return(0); } @@ -218,17 +220,17 @@ cmd *cmnd; player->daily[DL_EXPND].max = 0; F_CLR(player, PFAMIL); edit_member(player->name, player->class, ply_ptr->daily[DL_EXPND].max, 2); - print(fd, "%s аŸ ߹Ͽϴ.\n", player->name); - print(player->fd, "\n аŸ ߹Ǿϴ.\n"); + print(fd, "%s님을 패거리에서 추방하였습니다.\n", player->name); + print(player->fd, "\n당신은 패거리에서 추방되었습니다.\n"); return(0); } else { - print(fd, " аŸ ƴմϴ.\n"); + print(fd, "그 사람은 당신의 패거리원이 아닙니다.\n"); return(0); } } else { - print(fd, " аŸ ƴմϴ.\n"); + print(fd, "그 사람은 당신의 패거리원이 아닙니다.\n"); return(0); } } @@ -256,7 +258,7 @@ int param; fclose(fp); switch(param) { - case 1: /* */ + case 1: /* 가입 */ cnum[count] = class; strcpy(str[count], name); cnum[count+1] = 0; @@ -267,7 +269,7 @@ int param; } fclose(fp); break; - case 2: /* Ż & ߹ */ + case 2: /* 탈퇴 & 추방 */ for(i=0; i< count+1; i++) { if(!strcmp(name, str[i])) { cnum[i] = -1; @@ -281,7 +283,7 @@ int param; } fclose(fp); break; - case 3: /* */ + case 3: /* 수정 */ for(i=0; i< count+1; i++) { if(!strcmp(name, str[i])) { cnum[i] = class; @@ -309,7 +311,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(!F_ISSET(ply_ptr, PFAMIL)) { - print(fd, " аŸ ԵǾ ʽϴ."); + print(fd, "당신은 패거리에 가입되어 있지 않습니다."); return(0); } num = ply_ptr->daily[DL_EXPND].max; @@ -323,14 +325,14 @@ cmd *cmnd; break; } } - print(fd, " [%s] аŸ ԵǾ ֽϴ.\n", family_str[num]); + print(fd, "당신은 [%s] 패거리에 가입되어 있습니다.\n", family_str[num]); for(i=0; iparent_rom, RONMAR)) { - print(fd, " մϴ."); + print(fd, "당신의 집에서만 가능합니다."); return(0); } if(cmnd->num != 2) { if(!file_exists(file)) { - print(fd, "ʴ ϴ."); + print(fd, "초대한 사람이 없습니다."); return(0); } fp = fopen(file, "r"); - print(fd, " ʴ : \n"); + print(fd, "당신이 초대한 사람들 : \n"); for(i=0; i<10; i++) { fscanf(fp, "%s", str[i]); if(str[i][0] == '0') break; @@ -370,8 +372,8 @@ cmd *cmnd; return(0); } - if(!ishan(cmnd->str[1])) { - print(fd, " ̸ ѱ۷ մϴ."); + if(!player_name_is_valid((unsigned char *)cmnd->str[1], 1, 12)) { + print(fd, "이름 형식이 잘못되었습니다."); return(0); } @@ -380,7 +382,7 @@ cmd *cmnd; fprintf(fp, "%s\n", cmnd->str[1]); fprintf(fp, "0"); fclose(fp); - print(fd, "ʴ ߽߰ϴ.\n"); + print(fd, "초대 대상에 추가했습니다.\n"); return(0); } @@ -407,7 +409,7 @@ cmd *cmnd; count++; } fprintf(fp, "0"); - print(fd, "ʴ 󿡼 Ͽϴ.\n"); + print(fd, "초대 대상에서 삭제하였습니다.\n"); if(count < 1) unlink(file); fclose(fp); @@ -421,7 +423,7 @@ cmd *cmnd; } fprintf(fp, "%s\n", cmnd->str[1]); fprintf(fp, "0"); - print(fd, "ʴ ߰Ͽϴ.\n"); + print(fd, "초대 대상에 추가하였습니다.\n"); fclose(fp); } return(0); @@ -479,13 +481,13 @@ cmd *cmnd; } if(!len || index == -1) { - print(fd, " ֽϴ."); + print(fd, "당신은 서 있습니다."); ply_ptr->description[0] = 0; return(0); } if(len > 31) { - print(fd, "簡 ʹ ϴ."); + print(fd, "묘사가 너무 깁니다."); return(0); } @@ -493,7 +495,7 @@ cmd *cmnd; strcat(ply_ptr->description, " "); ply_ptr->description[len+1] = 0; paste_command(cmnd->fullstr, index); - print(fd, " %s ֽϴ.", ply_ptr->description); + print(fd, "당신은 이제부터 %s서 있습니다.", ply_ptr->description); return(0); } @@ -510,22 +512,22 @@ cmd *cmnd; crt_ptr = find_who(Ply[fd].extr->talksend); if(!crt_ptr) { - print(fd, " Ͻ÷?"); + print(fd, "누구에게 말을 전하시려구요?"); return(0); } if(ply_ptr->class < DM && (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr,PDINVI))) { - print(fd, " Ͻ÷?"); + print(fd, "누구에게 말을 전하시려구요?"); return(0); } if(F_ISSET(crt_ptr, PIGNOR) && (ply_ptr->class < DM )) { - print(fd, "%s ̾߱ ź Դϴ.", crt_ptr->name); + print(fd, "%s님은 이야기 듣기 거부 상태입니다.", crt_ptr->name); return(0); } ign = Ply[crt_ptr->fd].extr->first_ignore; while(ign) { if(!strcmp(ign->enemy, ply_ptr->name)) { - print(fd, "%s ̾߱ źԴϴ.", crt_ptr->name); + print(fd, "%s님은 이야기 거부중입니다.", crt_ptr->name); return(0); } ign = ign->next_tag; @@ -535,21 +537,21 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(len == 0) { - print(fd, " Ͻ÷?"); + print(fd, "무슨 말을 전하시려구요?"); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ϴ."); + print(fd, "당신은 말을 할 수 없습니다."); return(0); } if(F_ISSET(ply_ptr, PLECHO)){ - print(fd, " %M \"%s\" ̾߱մϴ.", + print(fd, "당신은 %M에게 \"%s\"라고 이야기합니다.", crt_ptr,&cmnd->fullstr[0]); } else - print(fd, "%sԿ Ͽϴ.", crt_ptr->name); + print(fd, "%s님에게 말을 전하였습니다.", crt_ptr->name); - print(crt_ptr->fd, "\n%C%M%j ſ \"%s\" ̾߱մϴ.%D", "31", + print(crt_ptr->fd, "\n%C%M%j 당신에게 \"%s\"라고 이야기합니다.%D", "31", ply_ptr, "1", &cmnd->fullstr[0],"37"); strcpy(Ply[crt_ptr->fd].extr->talksend, ply_ptr->name); paste_command(cmnd->fullstr,len); @@ -567,4 +569,3 @@ cmd *cmnd; - diff --git a/src/command2.c b/src/command2.c index b7c3c86..60faaa0 100644 --- a/src/command2.c +++ b/src/command2.c @@ -24,6 +24,9 @@ extern long login_time[PMAX]; +#define UTF8_PREFIX_ALL "모든" +#define UTF8_PREFIX_ALL_LEN ((int)(sizeof(UTF8_PREFIX_ALL) - 1)) + /**********************************************************************/ /* look */ /**********************************************************************/ @@ -54,7 +57,7 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, BOLD); ANSI(fd, RED); - print(fd, " ־ ֽϴ!"); + print(fd, "당신은 눈이 멀어 있습니다!"); ANSI(fd, WHITE); ANSI(fd, NORMAL); return(0); @@ -64,21 +67,21 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(ext_ptr) { if(F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ⱸ ֽϴ."); + print(fd, "그 출구는 닫혀 있습니다."); return(0); } sprintf(file, "%s/r%02d/r%05d", ROOMPATH,ext_ptr->room/1000, ext_ptr->room); if(!file_exists(file)) { - print(fd, " ϴ."); + print(fd, "지도가 없습니다."); return(0); } load_rom(ext_ptr->room, &new_rom); if(!new_rom || rom_ptr == new_rom) { - print(fd, " ϴ."); + print(fd, "지도가 없습니다."); return(0); } if(F_ISSET(new_rom, RONMAR) || F_ISSET(new_rom, RONFML)) { - print(fd, " ϴ."); + print(fd, "그 방은 볼 수가 없습니다."); return(0); } display_rom(ply_ptr, new_rom); @@ -121,17 +124,17 @@ cmd *cmnd; if(obj_ptr->description[0]) print(fd, "%s\n", obj_ptr->description); else - print(fd, "Ư ϴ.\n"); + print(fd, "특별한 점이 없습니다.\n"); if(F_ISSET(ply_ptr, PKNOWA)) { if(F_ISSET(obj_ptr, OGOODO)) - print(fd, "Ǫ ä ֽϴ.\n"); + print(fd, "푸른 광채가 뻗어 나오고 있습니다.\n"); if(F_ISSET(obj_ptr, OEVILO)) - print(fd, " ä ֽϴ.\n"); + print(fd, "붉은 광채가 뻗어 나오고 있습니다.\n"); } if(F_ISSET(obj_ptr, OCONTN)) { - strcpy(str, "빰: "); + strcpy(str, "내용물: "); n = list_obj(&str[8], ply_ptr, obj_ptr->first_obj); if(n) print(fd, "%s.\n", str); @@ -140,11 +143,11 @@ cmd *cmnd; if(obj_ptr->type <= MISSILE) { print(fd, "%I%j ", obj_ptr,"0"); switch(obj_ptr->type) { - case SHARP: print(fd, "ſ īο ''Դϴ.\n"); break; - case THRUST: print(fd, "ſ ''Դϴ.\n"); break; - case POLE: print(fd, " ¦ 'â'Դϴ.\n"); break; - case BLUNT: print(fd, "ſ ''Դϴ.\n"); break; - case MISSILE: print(fd, "ſ ϰ ̴ ''Դϴ.\n"); break; + case SHARP: print(fd, "매우 날카로운 '도'입니다.\n"); break; + case THRUST: print(fd, "매우 공격적인 '검'입니다.\n"); break; + case POLE: print(fd, "날이 바짝 선 '창'입니다.\n"); break; + case BLUNT: print(fd, "매우 위력적인 '봉'입니다.\n"); break; + case MISSILE: print(fd, "매우 강력하게 보이는 '궁'입니다.\n"); break; } } @@ -152,77 +155,77 @@ cmd *cmnd; obj_ptr->type == LIGHTSOURCE || obj_ptr->type == WAND || obj_ptr->type == KEY) { if(obj_ptr->shotscur < 1) - print(fd, "װ μ Ȱų Ƚϴ.\n"); + print(fd, "그것은 부서져 버렸거나 다 써버렸습니다.\n"); else if(obj_ptr->shotscur <= obj_ptr->shotsmax/10) - print(fd, "װ μ ϴ.\n"); + print(fd, "그것은 곧 부서질것 같습니다.\n"); } return(0); } - if(!strcmp(cmnd->str[1],"")) crt_ptr=ply_ptr; + if(!strcmp(cmnd->str[1],"나")) crt_ptr=ply_ptr; else crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[1], cmnd->val[1]); if(crt_ptr) { if(!strncmp(crt_ptr->name, ply_ptr->name, strlen(crt_ptr->name))) { - print(fd," ſ ڽ ϴ.\n"); + print(fd,"당신은 거울을 들고 자신을 봅니다.\n"); broadcast_rom(fd,rom_ptr->rom_num, - "\n%M%j ſ ڽ ٶ ϴ.",ply_ptr,"1"); + "\n%M%j 거울을 들고 자신을 바라 봅니다.",ply_ptr,"1"); } else { - print(fd, " %1M%j ϴ.\n", crt_ptr,"3"); + print(fd, "당신은 %1M%j 봅니다.\n", crt_ptr,"3"); broadcast_rom(fd,rom_ptr->rom_num, - "\n%M%j %M%j ϴ.",ply_ptr,"1",crt_ptr,"3"); + "\n%M%j %M%j 봅니다.",ply_ptr,"1",crt_ptr,"3"); } if(crt_ptr->type == PLAYER && F_ISSET(crt_ptr, PMARRI)) { - print(fd, "%s %s԰ ȥ ȥԴϴ.\n", - F_ISSET(crt_ptr, PMALES) ? "":"׳", &crt_ptr->key[2][1]); + print(fd, "%s는 %s님과 결혼한 기혼자입니다.\n", + F_ISSET(crt_ptr, PMALES) ? "그":"그녀", &crt_ptr->key[2][1]); } if(crt_ptr->type != PLAYER) { if(crt_ptr->description[0]) print(fd, "%s\n", crt_ptr->description); else - print(fd, "Ư ʽϴ.\n"); + print(fd, "특별한 것은 보이지 않습니다.\n"); } else { - print(fd, "%s %s ֽϴ.\n", F_ISSET(crt_ptr, PMALES) ? "":"׳", + print(fd, "%s는 %s서 있습니다.\n", F_ISSET(crt_ptr, PMALES) ? "그":"그녀", crt_ptr->description); } if(F_ISSET(ply_ptr, PKNOWA) && crt_ptr->alignment!=0) { - print(fd, "%sԼ ", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s에게서 ", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->alignment < 0) - print(fd, " ä"); - else print(fd, "Ǫ ä"); - print(fd, " ֽϴ.\n"); + print(fd, "붉은 광채"); + else print(fd, "푸른 광채"); + print(fd, "가 뻗어 나오고 있습니다.\n"); } if(crt_ptr->hpcur < (crt_ptr->hpmax*9)/10 && (crt_ptr->hpcur > (crt_ptr->hpmax*8)/10) ) - print(fd, "%s ó Ծϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 가벼운 상처를 입었습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->hpcur < (crt_ptr->hpmax*8)/10 && (crt_ptr->hpcur > (crt_ptr->hpmax*6)/10) ) - print(fd, "%s ó Ծϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 여러군데 상처를 입었습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->hpcur < (crt_ptr->hpmax*6)/10 && (crt_ptr->hpcur > (crt_ptr->hpmax*4)/10) ) - print(fd, "%s ó Ծϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 많은 상처를 입었습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->hpcur < (crt_ptr->hpmax*4)/10 && (crt_ptr->hpcur > (crt_ptr->hpmax*2)/10) ) - print(fd, "%s ɰ ó Ծϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 심각한 상처를 입었습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->hpcur < (crt_ptr->hpmax*2)/10) - print(fd, "%s ױ Դϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 죽기 직전입니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(is_enm_crt(ply_ptr->name, crt_ptr)) - print(fd, "%s ſ ſ ȭ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 당신에게 매우 화가 난것 같습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->first_enm) { if(!strcmp(crt_ptr->first_enm->enemy, ply_ptr->name)) - print(fd, "%s Ű ο ֽϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 당신과 싸우고 있습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); else - print(fd, "%s %S%j ο ֽϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳", + print(fd, "%s는 %S%j 싸우고 있습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀", crt_ptr->first_enm->enemy,"2"); } consider(ply_ptr, crt_ptr); @@ -235,39 +238,39 @@ cmd *cmnd; cmnd->val[1]); if(crt_ptr) { - print(fd, " %M%j ϴ.\n",crt_ptr,"3"); - broadcast_rom(fd,rom_ptr->rom_num,"\n%M%j %M%j ϴ.",ply_ptr,"1",crt_ptr,"3"); + print(fd, "당신은 %M%j 봅니다.\n",crt_ptr,"3"); + broadcast_rom(fd,rom_ptr->rom_num,"\n%M%j %M%j 봅니다.",ply_ptr,"1",crt_ptr,"3"); if(crt_ptr->type == PLAYER && F_ISSET(crt_ptr, PMARRI)) { - print(fd, "%s %s԰ ȥ ȥԴϴ.\n", - F_ISSET(crt_ptr, PMALES) ? "":"׳", &crt_ptr->key[2][1]); + print(fd, "%s는 %s님과 결혼한 기혼자입니다.\n", + F_ISSET(crt_ptr, PMALES) ? "그":"그녀", &crt_ptr->key[2][1]); } if(crt_ptr->type != PLAYER) { if(crt_ptr->description[0]) print(fd, "%s\n", crt_ptr->description); else - print(fd, "Ư ʽϴ.\n"); + print(fd, "특별한 것은 보이지 않습니다.\n"); } else { - print(fd, "%s %s ֽϴ.\n", F_ISSET(crt_ptr, PMALES) ? "":"׳", + print(fd, "%s는 %s서 있습니다.\n", F_ISSET(crt_ptr, PMALES) ? "그":"그녀", crt_ptr->description); } if(F_ISSET(ply_ptr, PKNOWA) && crt_ptr->alignment>=-100 && crt_ptr->alignment<101) { - print(fd, "%sԼ ", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s에게서 ", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); if(crt_ptr->alignment < -100) - print(fd, " ä"); - else print(fd, "Ǫ ä"); - print(fd, " ֽϴ.\n"); + print(fd, "붉은 광채"); + else print(fd, "푸른 광채"); + print(fd, "가 뻗어 나오고 있습니다.\n"); } if(crt_ptr->hpcur < (crt_ptr->hpmax*3)/10) - print(fd, "%s ó Ծϴ.\n", - F_ISSET(crt_ptr, PMALES) ? "":"׳"); + print(fd, "%s는 가벼운 상처를 입었습니다.\n", + F_ISSET(crt_ptr, PMALES) ? "그":"그녀"); equip_list(fd, crt_ptr); return(0); } else - print(fd, "׷ ʽϴ.\n"); + print(fd, "그런 건 보이지 않습니다.\n"); return(0); @@ -303,8 +306,8 @@ cmd *cmnd; t=time(0); -/* ̵ . - = (0); +/* 이동 딜레이 없앰. + = 샤(0); if(ply_ptr->lasttime[LT_MOVED].ltime == t) { if(++ply_ptr->lasttime[LT_MOVED].misc > 2) { please_wait(fd, 1); @@ -326,22 +329,22 @@ cmd *cmnd; */ /* - if(!strcmp(str,"") || !strcmp(str,"") || !strcmp(str,"24") || !strcmp(str,"42") || !strcmp(str,"")) - strcpy(tempstr, ""); - else if(!strcmp(str,"") || !strcmp(str,"") || !strcmp(str,"84") || !strcmp(str,"48") || !strcmp(str,"")) - strcpy(tempstr, "ϼ"); - else if(!strcmp(str,"") || !strcmp(str,"") || !strcmp(str,"26") || !strcmp(str,"62") || !strcmp(str,"")) - strcpy(tempstr, ""); - else if(!strcmp(str,"") || !strcmp(str,"") || !strcmp(str,"86") || !strcmp(str,"68") || !strcmp(str,"")) - strcpy(tempstr, "ϵ"); + if(!strcmp(str,"ㄴㅅ") || !strcmp(str,"ㅅㄴ") || !strcmp(str,"24") || !strcmp(str,"42") || !strcmp(str,"서남")) + strcpy(tempstr, "남서"); + else if(!strcmp(str,"ㅂㅅ") || !strcmp(str,"ㅅㅂ") || !strcmp(str,"84") || !strcmp(str,"48") || !strcmp(str,"서북")) + strcpy(tempstr, "북서"); + else if(!strcmp(str,"ㄴㄷ") || !strcmp(str,"ㄷㄴ") || !strcmp(str,"26") || !strcmp(str,"62") || !strcmp(str,"동남")) + strcpy(tempstr, "남동"); + else if(!strcmp(str,"ㅂㄷ") || !strcmp(str,"ㄷㅂ") || !strcmp(str,"86") || !strcmp(str,"68") || !strcmp(str,"동북")) + strcpy(tempstr, "북동"); else */ - if(str[0]=='2' || !strcmp(str,"ɥ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(str[0]=='4' || !strcmp(str,"ɬ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(str[0]=='6' || !strcmp(str,"ɦ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(str[0]=='8' || !strcmp(str,"ɪ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(str[0]=='3' || !strcmp(str,"ɩ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(str[0]=='9' || !strcmp(str,"ɮ") || !strcmp(str,"")) strcpy(tempstr, ""); - else if(!strcmp(str,"")) strcpy(tempstr, ""); + if(str[0]=='2' || !strcmp(str,"�ⅲ�") || !strcmp(str,"ㄴ")) strcpy(tempstr, "남"); + else if(str[0]=='4' || !strcmp(str,"�В�") || !strcmp(str,"ㅅ")) strcpy(tempstr, "서"); + else if(str[0]=='6' || !strcmp(str,"�┌�") || !strcmp(str,"ㄷ")) strcpy(tempstr, "동"); + else if(str[0]=='8' || !strcmp(str,"�ぃ�") || !strcmp(str,"ㅂ")) strcpy(tempstr, "북"); + else if(str[0]=='3' || !strcmp(str,"�ð�") || !strcmp(str,"ㅁ")) strcpy(tempstr, "밑"); + else if(str[0]=='9' || !strcmp(str,"��"") || !strcmp(str,"ㅇ")) strcpy(tempstr, "위"); + else if(!strcmp(str,"나가")) strcpy(tempstr, "밖"); else strcpy(tempstr, str); xp = rom_ptr->first_ext; @@ -355,17 +358,17 @@ cmd *cmnd; } if(!found) { - print(fd, " ֽϴ."); + print(fd, "길이 막혀 있습니다."); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ϼ ϴ."); + print(fd, "당신은 움직일수 없습니다."); return(0); } if(ply_is_attacking(ply_ptr, cmnd)) { - print(fd, "ο ߿ ̵ ϴ."); + print(fd, "싸우는 중에는 이동할 수 없습니다."); return(0); } @@ -378,33 +381,33 @@ cmd *cmnd; if(dmg==30 || dmg==93 || dmg==75 || dmg==100 || dmg==150 || dmg==200 || dmg == 120 || dmg == 4 || dmg == 8 || dmg== 105 || dmg == 127) { - print(fd, " ɷ Ѿϴ. !"); + print(fd, "돌에 걸려 넘어졌습니다. 쿵!"); return(0); } */ if(F_ISSET(xp->ext, XLOCKD)) { - print(fd, " ֽϴ."); + print(fd, "문이 잠겨 있습니다."); return(0); } else if(F_ISSET(xp->ext, XCLOSD)) { - print(fd, " ֽϴ."); + print(fd, "문이 닫혀 있습니다."); return(0); } if(F_ISSET(xp->ext, XFLYSP) && !F_ISSET(ply_ptr, PFLYSP)) { - print(fd, " δ Ƽ ɰ ."); + print(fd, "그 쪽으로는 날아서 가야 될것 같군요."); return(0); } t = Time%24L; if(F_ISSET(xp->ext, XNGHTO) && (t>6 && t < 20)) { - print(fd, " ⱸ 㿡 ֽϴ."); + print(fd, "그 출구는 밤에만 열려 있습니다."); return(0); } if(F_ISSET(xp->ext, XDAYON) && (t<6 || t > 20)){ - print(fd, " ⱸ 㿡 ֽϴ."); + print(fd, "그 출구는 밤에는 닫혀 있습니다."); return(0); } @@ -413,11 +416,11 @@ cmd *cmnd; while(cp) { if(F_ISSET(cp->crt, MPGUAR)) { if(!F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < SUB_DM) { - print(fd, "%M%j ϴ.", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 막습니다.", cp->crt,"1"); return(0); } if(F_ISSET(cp->crt, MDINVI) && ply_ptr->class < SUB_DM) { - print(fd, "%M%j ϴ.", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 막습니다.", cp->crt,"1"); return(0); } } @@ -426,17 +429,17 @@ cmd *cmnd; } if(F_ISSET(xp->ext, XFEMAL) && F_ISSET(ply_ptr, PMALES)){ - print(fd, "  ֽϴ. ΰ~~"); + print(fd, "여성만 들어갈수 있습니다. 여탕인가~~"); return(0); } if(F_ISSET(xp->ext, XMALES) && !F_ISSET(ply_ptr, PMALES)){ - print(fd, "  ֽϴ."); + print(fd, "남성만 들어갈수 있습니다."); return(0); } if(F_ISSET(xp->ext, XNAKED) && weight_ply(ply_ptr)) { - print(fd, "  ϴ."); + print(fd, "뭘 가지고는 들어갈수 없습니다."); return(0); } @@ -448,16 +451,16 @@ cmd *cmnd; if(mrand(1,100) < fall) { dmg = mrand(5,15+fall/10); if(ply_ptr->hpcur <= dmg){ - print(fd, " ٰ°Ͱ ϴ."); + print(fd, "당신은 죽음이 다가오는것같은 느낌이 듭니다."); ply_ptr->hpcur=0; - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j ̿ ׾ϴ.", ply_ptr,"1"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j 구덩이에 떨어져서 죽었습니다.", ply_ptr,"1"); die(ply_ptr, ply_ptr); return(0); } ply_ptr->hpcur -= dmg; - print(fd, " ̿ %d ŭ ó Ծϴ", + print(fd, "당신은 구덩이에 떨어져서 %d 만큼의 상처를 입었습니다", dmg); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j ̿ ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j 구덩이에 떨어졌습니다.", ply_ptr,"1"); if(F_ISSET(xp->ext, XCLIMB)) return(0); @@ -474,7 +477,7 @@ cmd *cmnd; if(mrand(1,100) > chance) { - print(fd," ż ϴµ Ͽϴ.\n"); + print(fd,"당신은 은신술을 사용하는데 실패하였습니다.\n"); F_CLR(ply_ptr, PHIDDN); cp = rom_ptr->first_mon; @@ -482,7 +485,7 @@ cmd *cmnd; if(F_ISSET(cp->crt, MBLOCK) && is_enm_crt(ply_ptr->name, cp->crt) && F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < SUB_DM) { - print(fd, "%M θϴ.\n", cp->crt); + print(fd, "%M가 당신의 길을 가로막습니다.\n", cp->crt); return(0); } cp = cp->next_tag; @@ -500,35 +503,35 @@ cmd *cmnd; load_rom(xp->ext->room, &rom_ptr); if(rom_ptr == old_rom_ptr) { - print(fd, " ϴ. ſ ּ."); + print(fd, "그쪽으로 지도가 없습니다. 신에게 연락해 주세요."); return(0); } n = count_vis_ply(rom_ptr); if(rom_ptr->lolevel > ply_ptr->level && ply_ptr->class lolevel); return(0); } else if(ply_ptr->level > rom_ptr->hilevel && rom_ptr->hilevel && ply_ptr->class < CARETAKER) { - print(fd, "װ %dϿ߸ մϴ.", + print(fd, "그곳으로 갈려면 레벨 %d이하여야만 합니다.", rom_ptr->hilevel); return(0); } else if((F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || (F_ISSET(rom_ptr, RTHREE) && n > 2)) { - print(fd, " 濡 ִ ڰ ʹ ϴ."); + print(fd, "그 방에 있는 사용자가 너무 많습니다."); return(0); } else if((F_ISSET(rom_ptr, RFAMIL)) && !F_ISSET(ply_ptr, PFAMIL)) { - print(fd, "װ аŸ ڸ ֽϴ. "); + print(fd, "그곳에는 패거리 가입자만 갈 수 있습니다. "); return(0); } else if(ply_ptr->class < DM && (F_ISSET(rom_ptr, RONFML)) && (ply_ptr->daily[DL_EXPND].max != rom_ptr->special)) { - print(fd, "װ Դϴ."); + print(fd, "그곳은 당신이 갈수 없는 곳입니다."); return(0); } else if(ply_ptr->class < DM && (F_ISSET(rom_ptr, RONMAR)) && @@ -545,7 +548,7 @@ cmd *cmnd; } fclose(fp); } - print(fd, "װ Դϴ."); + print(fd, "그곳은 사유지입니다."); return(0); } @@ -553,11 +556,11 @@ cmd *cmnd; if(t-login_time[fd]<120) login_time[fd]-=120; if(ply_ptr->class == DM && !F_ISSET(ply_ptr, PDMINV)){ - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M %s ϴ.", + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M이 %s쪽으로 갔습니다.", ply_ptr, tempstr); } if(!F_ISSET(ply_ptr, PDMINV) && ply_ptr->class < DM) { - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M %s ϴ.", + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M이 %s쪽으로 갔습니다.", ply_ptr, tempstr); } @@ -576,7 +579,7 @@ cmd *cmnd; move(cp->crt, cmnd); if(F_ISSET(cp->crt, MDMFOL) && cp->crt->rom_num == old_rom_num && cp->crt->type == MONSTER) { del_crt_rom(cp->crt, old_rom_ptr); - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M %s ϴ.", cp->crt, tempstr); + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M이 %s쪽으로 갔습니다.", cp->crt, tempstr); add_crt_rom(cp->crt, rom_ptr, 1); add_active(cp->crt); } @@ -587,7 +590,7 @@ cmd *cmnd; cp = old_rom_ptr->first_mon; while(cp) { if(!F_ISSET(cp->crt, MFOLLO) || F_ISSET(cp->crt, MDMFOL)) { - /* ϶ ȵ󰡰..*/ + /* 투명일때는 안따라가게..*/ if((!F_ISSET(cp->crt,MDINVI) && F_ISSET(ply_ptr,PINVIS)) || F_ISSET(ply_ptr,PDMINV)) { cp = cp->next_tag; @@ -607,8 +610,8 @@ cmd *cmnd; cp = cp->next_tag; continue; } - print(fd, "\n%M%j ɴϴ.", cp->crt,"1"); - broadcast_rom(fd, old_rom_num, "\n%M%j %M%j 󰩴ϴ.", + print(fd, "\n%M%j 당신을 따라옵니다.", cp->crt,"1"); + broadcast_rom(fd, old_rom_num, "\n%M%j %M%j 따라갑니다.", cp->crt, "1", ply_ptr,"3"); temp = cp->next_tag; crt_ptr = cp->crt; @@ -635,7 +638,7 @@ cmd *cmnd; /* in the first parameter to say something to all the other people in */ /* the room. */ -/* say = */ +/* say = 말 */ int say(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; @@ -661,22 +664,22 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(index == -1 || strlen(&cmnd->fullstr[0]) ==0) { - print(fd, " ϰ ?"); + print(fd, "뭘 말하고 싶으세요?"); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " 鸮 ʴµ ϱ."); + print(fd, "말을 해 보았지만 이 방 밖의 사람들은 들리지 않는듯 하군요."); return(0); } F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PLECHO)){ - print(fd, " \"%s\" մϴ.", &cmnd->fullstr[0]); + print(fd, "당신은 \"%s\"라고 말합니다.", &cmnd->fullstr[0]); } else - print(fd, ". ϴ."); + print(fd, "예. 좋습니다."); - broadcast_rom(fd, rom_ptr->rom_num, "\n%C%M%j \"%s\" մϴ.%D", + broadcast_rom(fd, rom_ptr->rom_num, "\n%C%M%j \"%s\"라고 말합니다.%D", "36",ply_ptr,"1", &cmnd->fullstr[0],"37"); cmnd->fullstr[index]=' '; @@ -704,7 +707,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ֿðԿ?"); + print(fd, "뭘 주우시게요?"); return(0); } @@ -726,28 +729,28 @@ cmd *cmnd; obj_temp=NULL; obj_temp = find_obj(ply_ptr, rom_ptr->first_obj, - " ", cmnd->val[1]); + "초인의 돌", cmnd->val[1]); if(obj_temp && ply_ptr->class < CARETAKER) { if(obj_temp->value == 1001) { - print(fd, " 𰡸 ݴ° մϴ."); + print(fd, "초인의 돌의 힘이 당신이 무언가를 줍는것을 방해합니다."); return(0); } } if(cp && ply_ptr->class < CARETAKER) { - print(fd, "%M%j  ݴ մϴ.", cp->crt,"1"); + print(fd, "%M%j 당신이 어떤것을 줍는 것을 방해합니다.", cp->crt,"1"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 건 보이지 않습니다."); return(0); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { get_all_rom(ply_ptr,cmnd->str[1]); return(0); } - if(!strncmp(cmnd->str[1], "",4)) { - get_all_rom(ply_ptr,cmnd->str[1]+4); + if(!strncmp(cmnd->str[1], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + get_all_rom(ply_ptr, cmnd->str[1] + UTF8_PREFIX_ALL_LEN); return(0); } @@ -755,29 +758,29 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, "׷ ."); + print(fd, "그런건 여기 없어요."); return(0); } if(F_ISSET(obj_ptr, OINVIS)) { - print(fd, "׷ ."); + print(fd, "그런건 여기 없어요."); return(0); } if(F_ISSET(obj_ptr, ONOTAK) || F_ISSET(obj_ptr, OSCENE)) { - print(fd, " ִ ƴմϴ."); + print(fd, "주을 수 있는 물건이 아닙니다."); return(0); } if(weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) || cnt>150) { - print(fd, " ̻ ϴ.\n"); + print(fd, "당신은 더이상 가질 수 없습니다.\n"); return(0); } if(obj_ptr->questnum && Q_ISSET(ply_ptr, obj_ptr->questnum-1)) { - print(fd, " װ ֿ ϴ. %s.", - "̹ ӹ ϼϿϴ."); + print(fd, "당신은 그것을 주울수 없습니다. %s.", + "이미 당신은 임무를 완수하였습니다."); return(0); } @@ -791,23 +794,23 @@ cmd *cmnd; F_CLR(obj_ptr, OHIDDN); del_obj_rom(obj_ptr, rom_ptr); - print(fd, " %1i%j ݽϴ.", obj_ptr,"3"); + print(fd, "당신은 %1i%j 줍습니다.", obj_ptr,"3"); if(obj_ptr->questnum) { - print(fd, "ӹ ϼϿϴ. ʽÿ!."); - print(fd, " ٽô ֿ ϴ."); + print(fd, "임무를 완수하였습니다. 버리지 마십시요!."); + print(fd, "버리면 다시는 주울 수가 없습니다."); Q_SET(ply_ptr, obj_ptr->questnum-1); ply_ptr->experience += quest_exp[obj_ptr->questnum-1]; - print(fd, " ġ %ld ޾ҽϴ.", + print(fd, "당신은 경험치 %ld를 받았습니다.", quest_exp[obj_ptr->questnum-1]); add_prof(ply_ptr,quest_exp[obj_ptr->questnum-1]); } - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ݽϴ.", + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 줍습니다.", ply_ptr, "1", obj_ptr,"3"); if(obj_ptr->type == MONEY) { ply_ptr->gold += obj_ptr->value; free_obj(obj_ptr); - print(fd, "\n %ld ֽϴ.", + print(fd, "\n당신은 이제 %ld냥을 갖고 있습니다.", ply_ptr->gold); } else @@ -838,34 +841,34 @@ cmd *cmnd; } if(!cnt_ptr) { - print(fd, "׷ ʽϴ."); + print(fd, "그런것은 보이지 않습니다."); return(0); } if(!F_ISSET(cnt_ptr, OCONTN)) { - print(fd, "װ ƴմϴ."); + print(fd, "그것은 담는 종류가 아닙니다."); return(0); } - if(!strcmp(cmnd->str[2], "")) { + if(!strcmp(cmnd->str[2], "모두")) { get_all_obj(ply_ptr, cnt_ptr,cmnd->str[2]); return(0); } - if(!strncmp(cmnd->str[2], "",4)) { - get_all_obj(ply_ptr, cnt_ptr,cmnd->str[2]+4); + if(!strncmp(cmnd->str[2], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + get_all_obj(ply_ptr, cnt_ptr, cmnd->str[2] + UTF8_PREFIX_ALL_LEN); return(0); } obj_ptr = find_obj(ply_ptr, cnt_ptr->first_obj, cmnd->str[2], cmnd->val[2]); if(!obj_ptr) { - print(fd, " ȿ ׷ ."); + print(fd, "그 안에 그런것은 없어요."); return(0); } if((weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) && cnt_ptr->parent_rom) || cnt>150) { - print(fd, " ̻ ϴ."); + print(fd, "당신은 더이상 가질 수 없습니다."); return(0); } @@ -874,8 +877,8 @@ cmd *cmnd; cnt_ptr->shotscur--; del_obj_obj(obj_ptr, cnt_ptr); - print(fd, " %1i %1i%j ϴ.", cnt_ptr, obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %1i %1i%j ϴ.", + print(fd, "당신은 %1i에서 %1i%j 꺼냅니다.", cnt_ptr, obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i에서 %1i%j 꺼냅니다.", ply_ptr, cnt_ptr, obj_ptr,"3"); if(F_ISSET(cnt_ptr, OPERMT)) { @@ -888,7 +891,7 @@ cmd *cmnd; if(obj_ptr->type == MONEY) { ply_ptr->gold += obj_ptr->value; free_obj(obj_ptr); - print(fd, "\n %ld ֽϴ.", + print(fd, "\n당신은 이제 %ld냥을 가지고 있습니다.", ply_ptr->gold); } else @@ -923,7 +926,7 @@ char *part_obj; cnt += count_inv(ply_ptr, -1); - if(!strcmp(part_obj,"")) { + if(!strcmp(part_obj,"모두")) { index=0; } last_obj = 0; str[0] = 0; @@ -969,12 +972,12 @@ char *part_obj; F_CLR(obj_ptr, OHIDDN); cnt++; if(obj_ptr->questnum) { - print(fd,"ӹ ϼϿϴ! ʽÿ!.\n"); - print(fd," ٽ ֿ ϴ."); + print(fd,"임무를 완수하였습니다! 버리지 마십시요!.\n"); + print(fd,"버리면 다시 주울 수 없습니다."); Q_SET(ply_ptr, obj_ptr->questnum-1); ply_ptr->experience += quest_exp[obj_ptr->questnum-1]; - print(fd, "\n ġ %ld ޾ҽϴ.", + print(fd, "\n당신은 경험치 %ld 을 받았습니다.", quest_exp[obj_ptr->questnum-1]); add_prof(ply_ptr,quest_exp[obj_ptr->questnum-1]); } @@ -1007,7 +1010,7 @@ char *part_obj; if(found && last_obj) strcat(str, obj_str(last_obj, n, 0)); else if(!found) { - print(fd, "⿡ ƹ͵ ϴ."); + print(fd, "여기에는 아무것도 없습니다."); return; } @@ -1015,16 +1018,16 @@ char *part_obj; str[strlen(str)-2] = 0; if(heavy) { - print(fd, " ִ° ʹ ſ ̻ ϴ.\n"); + print(fd, "가지고 있는것이 너무 무거워 더이상 가질 수가 없습니다.\n"); if(heavy == found) return; } if(!strlen(str)) return; - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %S%j ݽϴ.", ply_ptr, "1",str,"3"); - print(fd, " %S%j ݽϴ.", str,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %S%j 줍습니다.", ply_ptr, "1",str,"3"); + print(fd, "당신은 %S%j 줍습니다.", str,"3"); if(dogoldmsg) - print(fd, "\n %ld ֽϴ.", + print(fd, "\n당신은 이제 %ld냥을 가지고 있습니다.", ply_ptr->gold); } @@ -1054,7 +1057,7 @@ char *part_obj; if(ply_ptr->ready[i]) cnt++; cnt += count_inv(ply_ptr, -1); - if(!strcmp(part_obj,"")) { + if(!strcmp(part_obj,"모두")) { index=0; } last_obj = 0; str[0] = 0; @@ -1106,7 +1109,7 @@ char *part_obj; ply_ptr->gold += obj_ptr->value; free_obj(obj_ptr); last_obj = 0; - print(fd, "\n %ld ֽϴ.", + print(fd, "\n당신은 이제 %ld냥을 가지고 있습니다.", ply_ptr->gold); } else { @@ -1121,20 +1124,20 @@ char *part_obj; if(found && last_obj) strcat(str, obj_str(last_obj, n, 0)); else if(!found) { - print(fd, " ȿ ƹ͵ ϴ."); + print(fd, "그 안에는 아무것도 없습니다."); return; } if(heavy) { - print(fd, " ִ ʹ ſ ϴ.\n"); + print(fd, "가지고 있는 물건이 너무 무거워 들 수가 없습니다.\n"); if(heavy == found) return; } if(!strlen(str)) return; - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i %S%j ϴ.", + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i에서 %S%j 꺼냅니다.", ply_ptr, "1",cnt_ptr, str,"3"); - print(fd, " %1i %S%j ϴ.", cnt_ptr, str,"3"); + print(fd, "당신은 %1i에서 %S%j 꺼냅니다.", cnt_ptr, str,"3"); if(F_ISSET(cnt_ptr, OPERMT)) { resave_rom(rom_ptr->rom_num); #ifdef NODUPLE @@ -1202,7 +1205,7 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, BLUE); - print(fd, " ־ ƹ͵ ϴ!"); + print(fd, "당신은 눈이 멀어서 아무것도 볼 수가 없습니다!"); ANSI(fd, WHITE); return(0); } @@ -1212,9 +1215,9 @@ cmd *cmnd; flags |= MAG; op = ply_ptr->first_obj; n=0; str[0]=0; - strcat(str, "ǰ:\n "); + strcat(str, "소지품:\n "); if(!op) { - strcat(str, "."); + strcat(str, "없음."); print(fd, "%s", str); return(0); } @@ -1265,12 +1268,11 @@ cmd *cmnd; otag *otag_ptr; object *obj_ptr, *cnt_ptr; int fd, n, match=0; - int len; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " Ƿ?"); + print(fd, "무엇을 버리실려구요?"); return(0); } @@ -1279,17 +1281,16 @@ cmd *cmnd; if(cmnd->num == 2) { - len=strlen(cmnd->str[1]); - if(len>2 && !strcmp(&cmnd->str[1][len-2],"")) { + if(utf8_ends_with((unsigned char *)cmnd->str[1], (unsigned char *)"냥")) { drop_money(ply_ptr, cmnd); return(0); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { drop_all_rom(ply_ptr,cmnd->str[1]); return(0); } - if(!strncmp(cmnd->str[1], "",4)) { - drop_all_rom(ply_ptr,cmnd->str[1]+4); + if(!strncmp(cmnd->str[1], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + drop_all_rom(ply_ptr, cmnd->str[1] + UTF8_PREFIX_ALL_LEN); return(0); } @@ -1297,28 +1298,28 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } -/* ӹ ϰ */ +/* 임무아이템 버리지 못하게 함 */ if(obj_ptr->questnum && ply_ptr->classclass < DM) { - print(fd, "̺Ʈ մϴ."); + print(fd, "이벤트 아이템은 버리지 못합니다."); return(0); } if(obj_ptr->first_obj) { for(otag_ptr=obj_ptr->first_obj; otag_ptr; otag_ptr=otag_ptr->next_tag) { if(otag_ptr->obj->questnum && ply_ptr->classobj, ONEWEV) && ply_ptr->class < DM) { - print(fd, "̺Ʈ մϴ."); + print(fd, "이벤트 아이템이 들어있으면 버리지 못합니다."); return(0); } } @@ -1328,8 +1329,8 @@ cmd *cmnd; #ifdef NODUPLE savegame_nomsg(ply_ptr); #endif - print(fd, " %1i%j Ƚϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j Ƚϴ.", + print(fd, "당신은 %1i%j 버렸습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 버렸습니다.", ply_ptr,"1", obj_ptr,"3"); if(!F_ISSET(rom_ptr, RDUMPR)) add_obj_rom(obj_ptr, rom_ptr); @@ -1337,7 +1338,7 @@ cmd *cmnd; free_obj(obj_ptr); ply_ptr->gold += 10; ply_ptr->experience += 2; - print(fd, "\n ƽϴ.\n ణ ݰ ޾ҽϴ."); + print(fd, "\n당신의 물건을 제물로 바쳤습니다.\n당신은 약간의 상금과 경험을 받았습니다."); } return(0); } @@ -1346,7 +1347,7 @@ cmd *cmnd; cnt_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[2], cmnd->val[2]); -/**** 䱸 ****/ +/**** 수정요구함 ****/ if(!cnt_ptr) cnt_ptr = find_obj(ply_ptr, rom_ptr->first_obj, cmnd->str[2], cmnd->val[2]); @@ -1365,21 +1366,21 @@ cmd *cmnd; } if(!cnt_ptr) { - print(fd, "׷ ϴ."); + print(fd, "그런 물건은 없습니다."); return(0); } if(!F_ISSET(cnt_ptr, OCONTN)) { - print(fd, "װ ִ° ƴմϴ."); + print(fd, "그것은 담을수 있는것이 아닙니다."); return(0); } - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { drop_all_obj(ply_ptr, cnt_ptr,cmnd->str[1]); return(0); } - if(!strncmp(cmnd->str[1], "",4)) { - drop_all_obj(ply_ptr, cnt_ptr,cmnd->str[1]+4); + if(!strncmp(cmnd->str[1], UTF8_PREFIX_ALL, UTF8_PREFIX_ALL_LEN)) { + drop_all_obj(ply_ptr, cnt_ptr, cmnd->str[1] + UTF8_PREFIX_ALL_LEN); return(0); } @@ -1387,36 +1388,36 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } if(obj_ptr == cnt_ptr) { - print(fd, "װ װ ڽ״ ϴ."); + print(fd, "그것을 그것 자신한테는 넣을수 없습니다."); return(0); } if(obj_ptr->questnum && ply_ptr->classclass < DM) { - print(fd, "̺Ʈ մϴ."); + print(fd, "이벤트 아이템은 버리지 못합니다."); return(0); } if(cnt_ptr->shotscur >= cnt_ptr->shotsmax) { - print(fd, "%Iȿ ̻ ϴ.\n", cnt_ptr); + print(fd, "%I안에 더이상 넣을 수 없습니다.\n", cnt_ptr); return(0); } if(F_ISSET(obj_ptr, OCONTN)) { - print(fd, " ִ ȿ ִ ϴ.\n"); + print(fd, "담을수 있는 물건 안에 담을 수 있는 물건은 넣을 수 없습니다.\n"); } if(F_ISSET(cnt_ptr, OCNDES)) { - print(fd, "%1i%j %1i%j ϴ!\n", obj_ptr, "3",cnt_ptr,"1"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %1i%j %1i ֽϴ.\n", + print(fd, "%1i%j %1i%j 삼켜 버려 흔적도 없이 사라집니다!\n", obj_ptr, "3",cnt_ptr,"1"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i%j %1i에 넣습니다.\n", ply_ptr, obj_ptr,"3", cnt_ptr); del_obj_crt(obj_ptr, ply_ptr); free(obj_ptr); @@ -1426,8 +1427,8 @@ cmd *cmnd; del_obj_crt(obj_ptr, ply_ptr); add_obj_obj(obj_ptr, cnt_ptr); cnt_ptr->shotscur++; - print(fd, " %1i%j %1i ȿ ֽϴ.\n", obj_ptr,"3", cnt_ptr); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j %1iȿ ־ϴ.", + print(fd, "당신은 %1i%j %1i 안에 넣습니다.\n", obj_ptr,"3", cnt_ptr); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j %1i안에 넣었습니다.", ply_ptr, "1", obj_ptr,"3", cnt_ptr); if(F_ISSET(cnt_ptr, OPERMT) && F_ISSET(ply_ptr->parent_rom, RBANK)) { resave_rom(rom_ptr->rom_num); @@ -1456,16 +1457,16 @@ cmd *cmnd; amt = atol(cmnd->str[1]); if(amt < 1) { - print(fd, " ɼ ϴ."); + print(fd, "돈의 단위는 음수가 될수 없습니다."); return; } if(amt > ply_ptr->gold) { - print(fd, " ׸ŭ ʽϴ."); + print(fd, "당신은 그만큼의 돈을 가지고 있지 않습니다."); return; } load_obj(0, &obj_ptr); - sprintf(obj_ptr->name, "%d", amt); + sprintf(obj_ptr->name, "%d냥", amt); obj_ptr->value = amt; add_obj_rom(obj_ptr, ply_ptr->parent_rom); @@ -1475,10 +1476,10 @@ cmd *cmnd; #endif - print(fd, " %ld Ƚϴ.\n",amt); + print(fd, "당신은 %ld냥을 버렸습니다.\n",amt); broadcast_rom2(fd, ply_ptr->fd, ply_ptr->rom_num, - "\n%M%j %ld Ƚϴ.", ply_ptr,"1", amt); + "\n%M%j %ld냥을 버렸습니다.", ply_ptr,"1", amt); } @@ -1500,7 +1501,7 @@ char *part_obj; int fd, n=1,found=0; int index=1; - if(!strcmp(part_obj,"")) index=0; + if(!strcmp(part_obj,"모두")) index=0; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; @@ -1508,7 +1509,7 @@ char *part_obj; str[0]=0; if(check_event_obj(ply_ptr)) { - print(fd, "ӹ ־ ϴ.\n"); + print(fd, "임무 아이템이 있어 모두 버릴 수 없습니다.\n"); return; } @@ -1558,7 +1559,7 @@ char *part_obj; if(F_ISSET(rom_ptr, RDUMPR)) free_obj(last_obj); } else { - print(fd, " ƹ͵ ʽϴ."); + print(fd, "당신은 아무것도 가지고 있지 않습니다."); return; } @@ -1566,11 +1567,11 @@ char *part_obj; savegame_nomsg(ply_ptr); #endif - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %S%j Ƚϴ.", ply_ptr, str,"3"); - print(fd, " %S%j Ƚϴ.", str,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %S%j 버렸습니다.", ply_ptr, str,"3"); + print(fd, "당신은 %S%j 버렸습니다.", str,"3"); if(F_ISSET(rom_ptr, RDUMPR)) - print(fd, "\n ƽϴ.\n ణ ޾ҽϴ."); + print(fd, "\n당신의 물건을 제물로 바쳤습니다.\n당신은 약간의 상금을 받았습니다."); } /**********************************************************************/ @@ -1593,7 +1594,7 @@ char *part_obj; int fd, n = 1, found = 0, full = 0; int index=1; - if(!strcmp(part_obj,"")) { + if(!strcmp(part_obj,"모두")) { index=0; } fd = ply_ptr->fd; @@ -1657,12 +1658,12 @@ char *part_obj; if(found && last_obj) strcat(str, obj_str(last_obj, n, 0)); else { - print(fd, " װ ȿ ƹ͵ ʽϴ."); + print(fd, "당신은 그것 안에 넣을 물건을 아무것도 갖고 있지 않습니다."); return; } if(full) - print(fd, "%Iȿ ̻ ϴ.", cnt_ptr); + print(fd, "%I안에 더이상 물건을 넣을 수 없습니다.", cnt_ptr); if(full == found) return; #ifdef NODUPLE @@ -1670,9 +1671,9 @@ char *part_obj; #endif - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %S%j %1iȿ ֽϴ.", ply_ptr,"1", + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %S%j %1i안에 넣습니다.", ply_ptr,"1", str,"3",cnt_ptr); - print(fd, " %S%j %1iȿ ֽϴ.", str,"3", cnt_ptr); + print(fd, "당신은 %S%j %1i안에 넣습니다.", str,"3", cnt_ptr); if(F_ISSET(cnt_ptr, OPERMT)) { resave_rom(rom_ptr->rom_num); #ifdef NODUPLE @@ -1683,10 +1684,10 @@ char *part_obj; } /**********************************************************************/ -/* burn¿ */ +/* burn태워 */ /**********************************************************************/ -/* ƴѰ ҰҼ ְϴ ̴ */ +/* 제사장이 아닌곳에서도 소각할수 있게하는 명령이다 */ long ply_burn_time[PMAX]; int burn(ply_ptr, cmnd) @@ -1701,7 +1702,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ¿÷?"); + print(fd, "무엇을 태우시려구요?"); return(0); } t=time(0); @@ -1718,33 +1719,33 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } if(F_ISSET(obj_ptr, ONOBUN)) { - print(fd, "ҰҼ Դϴ."); + print(fd, "소각할수 없는 아이템입니다."); return(0); } -/* ӹ ϰ */ +/* 임무아이템 버리지 못하게 함 */ if(obj_ptr->questnum && ply_ptr->classshotscur > 0) { - print(fd, "ӹ ¿ մϴ."); + print(fd, "임무 아이템은 태우지 못합니다."); return(0); } if(F_ISSET(obj_ptr, ONEWEV) && ply_ptr->class < SUB_DM && obj_ptr->shotscur > 0) { - print(fd, "̺Ʈ ҰҼ ϴ."); + print(fd, "이벤트 아이템은 소각할수 없습니다."); return(0); } del_obj_crt(obj_ptr, ply_ptr); - print(fd, " %1i%j ¿ϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ¿ϴ.", + print(fd, "당신은 %1i%j 태웠습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 태웠습니다.", ply_ptr,"1", obj_ptr,"3"); free_obj(obj_ptr); ply_ptr->gold += 4; ply_ptr->experience += 1; - print(fd, "\n ణ ݰ ޾ҽϴ."); + print(fd, "\n당신은 약간의 상금과 경험을 받았습니다."); if(((time(0)+mrand(1,100))%250)==9) { - print(fd,"\n ؼ ġ ϴ."); - broadcast_rom(fd,rom_ptr->rom_num,"\n %M ġ ϴ.",ply_ptr); + print(fd,"\n신이 당신의 정성이 갸륵해서 경험치와 돈벼락을 내립니다."); + broadcast_rom(fd,rom_ptr->rom_num,"\n신이 %M에게 경험치와 돈벼락을 내립니다.",ply_ptr); ply_ptr->gold+=100000; ply_ptr->experience+=10; } @@ -1757,7 +1758,7 @@ cmd *cmnd; /* auto_search */ /**********************************************************************/ -/* ڵ */ +/* 자동 수색 */ int auto_search(ply_ptr) creature *ply_ptr; @@ -1785,7 +1786,7 @@ creature *ply_ptr; if((!F_ISSET(xp->ext, XINVIS) || F_ISSET(ply_ptr,PDINVI)) && !F_ISSET(xp->ext, XNOSEE)){ found++; - print(fd, "\nⱸ ãҽϴ: %s.", xp->ext->name); + print(fd, "\n출구를 찾았습니다: %s.", xp->ext->name); } xp = xp->next_tag; } @@ -1795,7 +1796,7 @@ creature *ply_ptr; if(F_ISSET(op->obj, OHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(op->obj, OINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n %1i%j ãҽϴ.", op->obj,"3"); + print(fd, "\n당신은 %1i%j 찾았습니다.", op->obj,"3"); } op = op->next_tag; } @@ -1806,7 +1807,7 @@ creature *ply_ptr; mrand(1,100) <= chance) if(!F_ISSET(cp->crt, PINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %S%j ãƳϴ.", cp->crt->name,"3"); + print(fd, "\n당신은 숨어있는 %S%j 찾아내었습니다.", cp->crt->name,"3"); } cp = cp->next_tag; } @@ -1816,17 +1817,15 @@ creature *ply_ptr; if(F_ISSET(cp->crt, MHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(cp->crt, MINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %1M%j ãƳϴ.", cp->crt,"3"); + print(fd, "\n당신은 숨어있는 %1M%j 찾아내었습니다.", cp->crt,"3"); } cp = cp->next_tag; } if(found) - broadcast_rom(fd, ply_ptr->rom_num, "\n%s ߰Ѱ !", - F_ISSET(ply_ptr, MMALES) ? "":"׳"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%s가 뭘 발견한것 같군요!", + F_ISSET(ply_ptr, MMALES) ? "그":"그녀"); return(0); } - - diff --git a/src/command3.c b/src/command3.c index c6cb287..319a466 100644 --- a/src/command3.c +++ b/src/command3.c @@ -30,7 +30,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " Ƿ?\n"); + print(fd, "뭘 입으실려구요?\n"); return(0); } @@ -39,7 +39,7 @@ cmd *cmnd; if(cmnd->num > 1) { - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { wear_all(ply_ptr); return(0); } @@ -48,31 +48,31 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " %S%j ʽϴ.",cmnd->str[1],"3"); + print(fd, "당신은 %S%j 가지고 있지 않습니다.",cmnd->str[1],"3"); return(0); } if(!obj_ptr->wearflag || obj_ptr->wearflag == WIELD || obj_ptr->wearflag == HELD) { - print(fd, "%I%j Դ ƴմϴ.",obj_ptr,"0"); + print(fd, "%I%j 입는 물건이 아닙니다.",obj_ptr,"0"); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAG) && (ply_ptr->class == MAGE || ply_ptr->class == CLERIC)) { - print(fd, ", ڵ Ҽ ϴ."); + print(fd, "도술사, 불제자들은 사용할수 없습니다."); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOFEM) && !F_ISSET(ply_ptr,PMALES)) { - print(fd, "%I%j ڵ鸸 ֽϴ.",obj_ptr,"0"); + print(fd, "%I%j 남자들만 입을 수 있습니다.",obj_ptr,"0"); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAL) && F_ISSET(ply_ptr,PMALES)) { - print(fd, "%I%j ڵ鸸 ֽϴ.",obj_ptr,"0"); + print(fd, "%I%j 여자들만 입을 수 있습니다.",obj_ptr,"0"); return(0); } @@ -80,7 +80,7 @@ cmd *cmnd; if(obj_ptr->questnum == 0) { del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); - print(fd, "Ǫ Բ ϴ."); + print(fd, "푸른 연기와 함께 사라졌습니다."); return(0); } } @@ -91,26 +91,26 @@ cmd *cmnd; if(check_ac > 151 && obj_ptr->questnum == 0) { del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); - print(fd, "Ǫ Բ ϴ."); + print(fd, "푸른 연기와 함께 사라졌습니다."); return(0); } if(check_ac < 30) check_ac = 0; if(ply_ptr->class < INVINCIBLE && obj_ptr->questnum == 0 && !F_ISSET(obj_ptr, ONEWEV) && ply_ptr->level < check_ac) { - print(fd, " ɷδ Դϴ."); + print(fd, "당신의 능력으로는 사용할 수 없는 물건입니다."); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, OMARRI) && !F_ISSET(ply_ptr, PMARRI)) { - print(fd, "%I%j ȥ 鸸 ֽϴ.", obj_ptr, "0"); + print(fd, "%I%j 결혼한 사람들만 입을 수 있습니다.", obj_ptr, "0"); return(0); } if(obj_ptr->wearflag == NECK && ply_ptr->ready[NECK1-1] && ply_ptr->ready[NECK2-1]) { - print(fd, "̻ ϴ."); + print(fd, "더이상 목에 걸 수 없습니다."); return(0); } @@ -119,7 +119,7 @@ cmd *cmnd; ply_ptr->ready[FINGER4-1] && ply_ptr->ready[FINGER5-1] && ply_ptr->ready[FINGER6-1] && ply_ptr->ready[FINGER7-1] && ply_ptr->ready[FINGER8-1]) { - print(fd, "̻ հ ϴ."); + print(fd, "더이상 손가락에 낄 수 없습니다."); return(0); } @@ -127,32 +127,32 @@ cmd *cmnd; ply_ptr->ready[obj_ptr->wearflag-1]) { switch(obj_ptr->wearflag) { case HEAD: - print(fd, " ̹ %I%j Ӹ ֽϴ.",ply_ptr->ready[obj_ptr->wearflag-1],"3"); + print(fd, "당신은 이미 %I%j 머리에 쓰고 있습니다.",ply_ptr->ready[obj_ptr->wearflag-1],"3"); return(0); default: - print(fd, " ̹ %I%j ԰ ֽϴ.",ply_ptr->ready[obj_ptr->wearflag-1],"3"); + print(fd, "당신은 이미 %I%j 입고 있습니다.",ply_ptr->ready[obj_ptr->wearflag-1],"3"); return(0); } } if(obj_ptr->shotscur < 1) { - print(fd, "%I%j μ Ǿϴ.",obj_ptr,"0"); + print(fd, "%I%j 부서져서 입을 수 없게 되었습니다.",obj_ptr,"0"); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { - print(fd, "%I%j ƨ ٴڿ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신 몸에서 튕겨져 나가 바닥에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_crt(obj_ptr, ply_ptr); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { - print(fd, "%I%j ƨ ٴڿ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신 몸에서 튕겨져 나가 바닥에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_crt(obj_ptr, ply_ptr); return(0); @@ -161,7 +161,7 @@ switch(obj_ptr->wearflag) { if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < INVINCIBLE)){ - print(fd, "%i%j ʽϴ.",obj_ptr,"0"); + print(fd, "%i%j 당신의 직업에 맞지 않습니다.",obj_ptr,"0"); return(0); } @@ -186,7 +186,7 @@ switch(obj_ptr->wearflag) { } if(cantwear && ply_ptr->class < INVINCIBLE) { - print(fd, "%I%j ʽϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신 몸에 맞지 않습니다.", obj_ptr,"1"); return(0); } @@ -224,49 +224,49 @@ switch(obj_ptr->wearflag) { compute_ac(ply_ptr); switch(obj_ptr->wearflag) { case BODY: - print(fd, " %1i%j Ծϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j Ծϴ.", + print(fd, "당신은 %1i%j 입었습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 입었습니다.", ply_ptr, "1",obj_ptr,"3"); break; case FEET: - print(fd, " %1i%j žϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j žϴ.", + print(fd, "당신은 %1i%j 신었습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 신었습니다.", ply_ptr, "1",obj_ptr,"3"); break; case SHIELD: - print(fd, " %1i%j з ϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j з ϴ.", + print(fd, "당신은 %1i%j 방패로 삼습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 방패로 삼습니다.", ply_ptr, "1",obj_ptr,"3"); break; case ARMS: - print(fd, " %1i%j ȿ մϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ȿ մϴ.", + print(fd, "당신은 %1i%j 팔에 장착합니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 팔에 장착합니다.", ply_ptr, "1",obj_ptr,"3"); break; case HEAD: - print(fd, " %1i%j Ӹ ϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j Ӹ ϴ.", + print(fd, "당신은 %1i%j 머리에 씁니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 머리에 씁니다.", ply_ptr, "1",obj_ptr,"3"); break; case NECK: - print(fd, " %1i%j θϴ.",obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j ̴ϴ.", + print(fd, "당신은 %1i%j 목에 두릅니다.",obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 목에 겁니다.", ply_ptr, "1",obj_ptr,"3");break; case HANDS: - print(fd, " %1i%j տ ϴ.",obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j տ ϴ.", + print(fd, "당신은 %1i%j 손에 끼웁니다.",obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 손에 끼웁니다.", ply_ptr, "1",obj_ptr,"3");break; case LEGS: - print(fd, " %1i%j Խϴ.",obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j Խϴ.", + print(fd, "당신은 %1i%j 입습니다.",obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 입습니다.", ply_ptr, "1",obj_ptr,"3");break; case FACE: - print(fd, " %1i%j 󱼿 ϴ.",obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 󱼿 ϴ.", + print(fd, "당신은 %1i%j 얼굴에 씁니다.",obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 얼굴에 씁니다.", ply_ptr, "1",obj_ptr,"3");break; case FINGER: - print(fd, " %1i%j հ ϴ.",obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j հ ϴ.", + print(fd, "당신은 %1i%j 손가락에 끼웁니다.",obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 손가락에 끼웁니다.", ply_ptr, "1",obj_ptr,"3");break; default: - print(fd, " %1i%j Ծϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j Ծϴ.", + print(fd, "당신은 %1i%j 입었습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 입었습니다.", ply_ptr, "1",obj_ptr,"3"); } if(obj_ptr->use_output[0]) @@ -467,12 +467,12 @@ creature *ply_ptr; if(found) { compute_ac(ply_ptr); str[strlen(str)-2] = 0; - print(fd, " %S%j Ծϴ.", str,"3"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %S%j Ծϴ.", + print(fd, "당신은 %S%j 입었습니다.", str,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %S%j 입었습니다.", ply_ptr, str,"3"); } else - print(fd, " ʽϴ."); + print(fd, "당신은 입을 물건을 가지고 있지 않습니다."); } @@ -496,7 +496,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ?"); + print(fd, "뭘 벗고 싶으세요?"); return(0); } @@ -506,7 +506,7 @@ cmd *cmnd; i = 0; if(cmnd->num > 1) { - if(!strcmp(cmnd->str[1], "")) { + if(!strcmp(cmnd->str[1], "모두")) { remove_all(ply_ptr); return(0); } @@ -530,12 +530,12 @@ cmd *cmnd; } if(!found) { - print(fd, " װ ԰ ʽϴ."); + print(fd, "당신은 그것을 입고 있지 않습니다."); return(0); } if(F_ISSET(obj_ptr, OCURSE)) { - print(fd, "! װ ʽϴ! ֹ ."); + print(fd, "이쿠! 그것이 몸에서 떨어지지 않습니다! 저주받은 물건 같군요."); return(0); } @@ -544,8 +544,8 @@ cmd *cmnd; compute_ac(ply_ptr); compute_thaco(ply_ptr); - print(fd, " %1i%j ϴ.", obj_ptr,"3"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M %1i%j ϴ.", + print(fd, "당신은 %1i%j 벗었습니다.", obj_ptr,"3"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 %1i%j 벗었습니다.", ply_ptr, obj_ptr,"3"); F_CLR(obj_ptr, OWEARS); } @@ -583,7 +583,7 @@ creature *ply_ptr; } if(!found) { - print(fd," ġ ִ° ƹ͵ ϴ."); + print(fd,"당신은 걸치고 있는게 아무것도 없습니다."); return; } @@ -591,8 +591,8 @@ creature *ply_ptr; compute_thaco(ply_ptr); str[strlen(str)-2] = 0; - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %S%j ϴ.", ply_ptr, str,"3"); - print(fd, " %S%j ϴ.", str,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %S%j 벗었습니다.", ply_ptr, str,"3"); + print(fd, "당신은 %S%j 벗었습니다.", str,"3"); } @@ -615,16 +615,16 @@ cmd *cmnd; found = 1; if(!found) { - print(fd, " ġ ִ° ƹ͵ ϴ."); + print(fd, "당신은 걸치고 있는게 아무것도 없습니다."); return(0); } if(F_ISSET(crt_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, " ƹ͵ ϴ. ־ ֽϴ."); + print(fd, "당신은 아무것도 볼수가 없습니다. 당신은 눈이 멀어 있습니다."); ANSI(fd, WHITE); return(0); } - print(fd, " :\n"); + print(fd, "착용 장비:\n"); equip_list(fd, crt_ptr); return(0); @@ -640,45 +640,45 @@ creature *crt_ptr; { if(crt_ptr->ready[HEAD-1]) - print(fd, "[ Ӹ ] %1i\n", crt_ptr->ready[HEAD-1]); + print(fd, "[ 머리 ] %1i\n", crt_ptr->ready[HEAD-1]); if(crt_ptr->ready[FACE-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[FACE-1]); + print(fd, "[ 얼굴 ] %1i\n", crt_ptr->ready[FACE-1]); if(crt_ptr->ready[NECK1-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[NECK1-1]); + print(fd, "[ 목 ] %1i\n", crt_ptr->ready[NECK1-1]); if(crt_ptr->ready[NECK2-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[NECK2-1]); + print(fd, "[ 목 ] %1i\n", crt_ptr->ready[NECK2-1]); if(crt_ptr->ready[BODY-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[BODY-1]); + print(fd, "[ 몸 ] %1i\n", crt_ptr->ready[BODY-1]); if(crt_ptr->ready[ARMS-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[ARMS-1]); + print(fd, "[ 팔 ] %1i\n", crt_ptr->ready[ARMS-1]); if(crt_ptr->ready[HANDS-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[HANDS-1]); + print(fd, "[ 손 ] %1i\n", crt_ptr->ready[HANDS-1]); if(crt_ptr->ready[FINGER1-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER1-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER1-1]); if(crt_ptr->ready[FINGER2-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER2-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER2-1]); if(crt_ptr->ready[FINGER3-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER3-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER3-1]); if(crt_ptr->ready[FINGER4-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER4-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER4-1]); if(crt_ptr->ready[FINGER5-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER5-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER5-1]); if(crt_ptr->ready[FINGER6-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER6-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER6-1]); if(crt_ptr->ready[FINGER7-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER7-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER7-1]); if(crt_ptr->ready[FINGER8-1]) - print(fd, "[հ] %1i\n", crt_ptr->ready[FINGER8-1]); + print(fd, "[손가락] %1i\n", crt_ptr->ready[FINGER8-1]); if(crt_ptr->ready[LEGS-1]) - print(fd, "[ ٸ ] %1i\n", crt_ptr->ready[LEGS-1]); + print(fd, "[ 다리 ] %1i\n", crt_ptr->ready[LEGS-1]); if(crt_ptr->ready[FEET-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[FEET-1]); + print(fd, "[ 발 ] %1i\n", crt_ptr->ready[FEET-1]); if(crt_ptr->ready[HELD-1]) - print(fd, "[幰] %1i\n", crt_ptr->ready[HELD-1]); + print(fd, "[쥔물건] %1i\n", crt_ptr->ready[HELD-1]); if(crt_ptr->ready[SHIELD-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[SHIELD-1]); + print(fd, "[ 방패 ] %1i\n", crt_ptr->ready[SHIELD-1]); if(crt_ptr->ready[WIELD-1]) - print(fd, "[ ] %1i\n", crt_ptr->ready[WIELD-1]); + print(fd, "[ 무기 ] %1i\n", crt_ptr->ready[WIELD-1]); } /**********************************************************************/ @@ -700,7 +700,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " Ͻ÷?"); + print(fd, "무엇을 무장하시려구요?"); return(0); } @@ -712,12 +712,12 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런 물건을 가지고 있지 않습니다."); return(0); } if(obj_ptr->wearflag != WIELD) { - print(fd, " װ ϴ."); + print(fd, "당신은 그것을 무장할 수 없습니다."); return(0); } @@ -725,47 +725,47 @@ cmd *cmnd; (obj_ptr->questnum == 0 ) && !F_ISSET(obj_ptr, ONEWEV) && (obj_ptr->ndice*obj_ptr->sdice+obj_ptr->pdice ) > 14 && (ply_ptr->class == MAGE || ply_ptr->class == CLERIC )) { - print(fd, ", ڴ Ҽ ϴ."); + print(fd, "도술사, 불제자는 사용할수 없습니다."); return(0); } if((obj_ptr->type == SHARP || obj_ptr->type == THRUST) && F_ISSET(obj_ptr, ONOFEM) && !F_ISSET(ply_ptr,PMALES)) { - print(fd, "%I%j ڵ鸸 ֽϴ.",obj_ptr,"0"); + print(fd, "%I%j 남자들만 무장할 수 있습니다.",obj_ptr,"0"); return(0); } if((obj_ptr->type == SHARP || obj_ptr->type == THRUST) && F_ISSET(obj_ptr, ONOMAL) && F_ISSET(ply_ptr,PMALES)) { - print(fd, "%I%j ڵ鸸 ֽϴ.",obj_ptr,"0"); + print(fd, "%I%j 여자들만 무장할 수 있습니다.",obj_ptr,"0"); return(0); } if(ply_ptr->ready[WIELD-1]) { - print(fd, " ̹ %I%j ϰ ֽϴ.",ply_ptr->ready[WIELD-1],"3"); + print(fd, "당신은 이미 %I%j 무장하고 있습니다.",ply_ptr->ready[WIELD-1],"3"); return(0); } if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < INVINCIBLE)){ - print(fd, "%i%j ʽϴ.",obj_ptr,"0"); + print(fd, "%i%j 당신의 직업에 맞지 않습니다.",obj_ptr,"0"); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { - print(fd, "%I%j ƨ ٴڿ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신의 몸에서 튕겨져 나가 바닥에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { - print(fd, "%I%j ƨ ٴڿ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신의 몸에서 튕겨져 나가 바닥에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -792,7 +792,7 @@ cmd *cmnd; } if(cantwear && ply_ptr->class < INVINCIBLE) { - print(fd, "%I%j ũ ʽϴ.", + print(fd, "%I%j 당신의 몸 크기와 맞지 않습니다.", obj_ptr,"0"); return(0); } @@ -801,20 +801,20 @@ cmd *cmnd; if(obj_ptr->questnum == 0 && !F_ISSET(obj_ptr, ONEWEV)) { del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); - print(fd," ⸦ Ǫ ϴ."); + print(fd,"당신이 무기를 쥐자 푸른 빛을 내며 사라집니다."); return(0); } } if(!F_ISSET(obj_ptr, ONEWEV) && (obj_ptr->shotsmax > 600 || obj_ptr->shotscur > 600)) { del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); - print(fd," ⸦ Ǫ ϴ."); + print(fd,"당신이 무기를 쥐자 푸른 빛을 내며 사라집니다."); return(0); } if(F_ISSET(obj_ptr, ONSHAT) && F_ISSET(obj_ptr, OALCRT)) { del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); - print(fd," ⸦ Ǫ ϴ."); + print(fd,"당신이 무기를 쥐자 푸른 빛을 내며 사라집니다."); return(0); } check_dmg = obj_ptr->ndice * obj_ptr->sdice + obj_ptr->pdice; @@ -825,11 +825,11 @@ cmd *cmnd; check_dmg -= 2; if(ply_ptr->class < INVINCIBLE && check_dmg > 15 && !F_ISSET(obj_ptr, ONEWEV) && ply_ptr->level < (check_dmg * 3) && obj_ptr->questnum == 0) { - print(fd, " ɷδ Դϴ."); + print(fd, "당신의 능력으로는 사용할 수 없는 무기입니다."); return(0); } if(F_ISSET(obj_ptr, ONEWEV) && strcmp(obj_ptr->key[2], ply_ptr->name)) { - print(fd, "ٸ ϴ."); + print(fd, "다른 사람의 물건은 사용할 수 없습니다."); return(0); } @@ -837,8 +837,8 @@ cmd *cmnd; compute_thaco(ply_ptr); del_obj_crt(obj_ptr, ply_ptr); - print(fd, " %1i%j ¼ մϴ.", obj_ptr,"4"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1I%j մϴ.", + print(fd, "당신은 %1i%j 전투태세를 취합니다.", obj_ptr,"4"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1I%j 무장합니다.", ply_ptr, "1", obj_ptr,"4"); if(obj_ptr->use_output[0]) @@ -868,7 +868,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " Ƿ?"); + print(fd, "무엇을 쥐실려구요?"); return(0); } @@ -880,29 +880,29 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런 것을 가지고 있지 않습니다."); return(0); } if(obj_ptr->wearflag != HELD && obj_ptr->wearflag != WIELD) { - print(fd, " װ ϴ."); + print(fd, "당신은 그것을 쥘 수 없습니다."); return(0); } if(F_ISSET(obj_ptr, OEVENT) || obj_ptr->questnum > 0) { - print(fd, " װ ϴ."); + print(fd, "당신은 그것을 쥘 수 없습니다."); return(0); } if(F_ISSET(obj_ptr, ONEWEV) || obj_ptr->questnum > 0) { - print(fd, " װ ϴ."); + print(fd, "당신은 그것을 쥘 수 없습니다."); return(0); } if(ply_ptr->ready[HELD-1]) { - print(fd, " ̹ ٸ ֽϴ."); + print(fd, "당신은 이미 다른것을 쥐고 있습니다."); return(0); } if(obj_ptr->ndice * obj_ptr->sdice + obj_ptr->pdice > 100) { - print(fd, " װ ϴ."); + print(fd, "당신은 그것을 쥘 수 없습니다."); return(0); } @@ -910,23 +910,23 @@ cmd *cmnd; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < INVINCIBLE)){ - print(fd, "%i%j ʽϴ.",obj_ptr,"0"); + print(fd, "%i%j 당신의 직업에 맞지 않습니다.",obj_ptr,"0"); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { - print(fd, "%I%j տ ƨ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신의 손에서 튕겨져 나가 땅에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { - print(fd, "%I%j տ ƨ ϴ.", obj_ptr,"1"); + print(fd, "%I%j 당신의 손에서 튕겨져 나가 땅에 떨어집니다.", obj_ptr,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%MԼ %i%j ƨ ϴ.", ply_ptr, obj_ptr,"1"); + "\n%M에게서 %i%j 튕겨져 나갑니다.", ply_ptr, obj_ptr,"1"); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -935,8 +935,8 @@ cmd *cmnd; ply_ptr->ready[HELD-1] = obj_ptr; del_obj_crt(obj_ptr, ply_ptr); - print(fd, " %1i%j ϴ.", obj_ptr,"3"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %1i%j ϴ.", + print(fd, "당신은 %1i%j 쥐었습니다.", obj_ptr,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i%j 쥐었습니다.", ply_ptr, obj_ptr,"3"); if(obj_ptr->use_output[0] && obj_ptr->type != POTION) print(fd, "\n%s", obj_ptr->use_output); @@ -953,7 +953,7 @@ cmd *cmnd; /* info_obj */ /************************************************************************/ -/* 캸 ƾ. */ +/* 도둑의 물건 살펴보는 루틴. */ int info_obj(ply_ptr, cmnd) creature *ply_ptr; @@ -968,12 +968,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, "ϸ Ҽ ֽϴ."); + print(fd, "도둑만 물건을 감정할수 있습니다."); return(0); } if(cmnd->num < 2) { - print(fd, " ϽǷ?"); + print(fd, "무엇을 감정하실려구요?"); return(0); } @@ -982,27 +982,27 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } - print(fd, "̸: %s\n", obj_ptr->name); + print(fd, "이름: %s\n", obj_ptr->name); - print(fd, "ȸ %d\n", obj_ptr->shotscur); + print(fd, "사용회수 %d\n", obj_ptr->shotscur); - print(fd, ": "); + print(fd, "종류: "); if(obj_ptr->type <= MISSILE) { switch(obj_ptr->type) { - case SHARP: print(fd, ""); break; - case THRUST: print(fd, ""); break; - case BLUNT: print(fd, ""); break; - case POLE: print(fd, "â"); break; - case MISSILE: print(fd, ""); break; + case SHARP: print(fd, "도"); break; + case THRUST: print(fd, "검"); break; + case BLUNT: print(fd, "봉"); break; + case POLE: print(fd, "창"); break; + case MISSILE: print(fd, "궁"); break; } - print(fd, " .\n"); - print(fd, "Ÿġ: %d%d ϱ %d", obj_ptr->sdice, obj_ptr->ndice, + print(fd, " 무기.\n"); + print(fd, "타격치: %d면%d굴림 더하기 %d", obj_ptr->sdice, obj_ptr->ndice, obj_ptr->pdice); if(obj_ptr->adjustment) print(fd, " (+%d)\n", obj_ptr->adjustment); @@ -1012,26 +1012,26 @@ cmd *cmnd; } else { switch(obj_ptr->type) { - case ARMOR: print(fd, ""); - print(fd, "\n: %2.2d", obj_ptr->armor); break; - case POTION: print(fd, ""); break; - case SCROLL: print(fd, "ֹ"); break; - case WAND: print(fd, "ֹɸ "); break; - case CONTAINER: print(fd, " "); break; - case KEY: print(fd, ""); break; - case LIGHTSOURCE: print(fd, ""); break; - case MISC: print(fd, "𸣰"); break; + case ARMOR: print(fd, "방어구"); + print(fd, "\n방어력: %2.2d", obj_ptr->armor); break; + case POTION: print(fd, "약"); break; + case SCROLL: print(fd, "주문서"); break; + case WAND: print(fd, "주문걸린 물건"); break; + case CONTAINER: print(fd, "담는 종류"); break; + case KEY: print(fd, "열쇠"); break; + case LIGHTSOURCE: print(fd, "광원"); break; + case MISC: print(fd, "모르겠음"); break; } print(fd,"\n"); } - strcpy(str, "Ư : "); - if(F_ISSET(obj_ptr, ONOMAG)) strcat(str, " ź, "); - if(F_ISSET(obj_ptr, OGOODO)) strcat(str, " , "); - if(F_ISSET(obj_ptr, OEVILO)) strcat(str, " , "); - if(F_ISSET(obj_ptr, OENCHA)) strcat(str, " , "); - if(F_ISSET(obj_ptr, ONOMAL)) strcat(str, " , "); - if(F_ISSET(obj_ptr, ONOFEM)) strcat(str, " , "); + strcpy(str, "특성 : "); + if(F_ISSET(obj_ptr, ONOMAG)) strcat(str, "도술사 불제자 거부, "); + if(F_ISSET(obj_ptr, OGOODO)) strcat(str, "선한 사람용, "); + if(F_ISSET(obj_ptr, OEVILO)) strcat(str, "악한 사람용, "); + if(F_ISSET(obj_ptr, OENCHA)) strcat(str, "빙의 되있음, "); + if(F_ISSET(obj_ptr, ONOMAL)) strcat(str, "남성 금지, "); + if(F_ISSET(obj_ptr, ONOFEM)) strcat(str, "여성 금지, "); if(strlen(str) > 11) { @@ -1039,7 +1039,7 @@ cmd *cmnd; str[strlen(str)-1] = 0; } else - strcat(str, "Ư ."); + strcat(str, "특성 없음."); print(fd, "%s\n", str); } diff --git a/src/command4.c b/src/command4.c index 796096e..4930ea7 100644 --- a/src/command4.c +++ b/src/command4.c @@ -58,40 +58,40 @@ cmd *cmnd; ANSI(fd, RED); ANSI(fd, BOLD); ANSI(fd, BLINK); - print(fd, " ־ ֽϴ!"); + print(fd, "당신은 눈이 멀어 있습니다!"); ANSI(fd, NORMAL); ANSI(fd, WHITE); return(0); } ANSI(fd, WHITE); - print(fd, "%s : %s ( %d)", ply_ptr->name, + print(fd, "%s : %s (레벨 %d)", ply_ptr->name, title_ply(ply_ptr,ply_ptr), ply_ptr->level); if(F_ISSET(ply_ptr, PHIDDN)) { ANSI(fd, CYAN); - print(fd, " ** "); + print(fd, " *은신* "); } if(F_ISSET(ply_ptr, PPOISN)) { ANSI(fd, BLINK); ANSI(fd, GREEN); - print(fd, " *ߵ* "); + print(fd, " *중독* "); ANSI(fd, NORMAL); } if(F_ISSET(ply_ptr, PCHARM)) { ANSI(fd, BOLD); ANSI(fd, CYAN); - print(fd, " *ָ* "); + print(fd, " *최면* "); ANSI(fd, NORMAL); } if(F_ISSET(ply_ptr, PSILNC)) { ANSI(fd, BLINK); ANSI(fd, MAGENTA); - print(fd, " ** "); + print(fd, " *벙어리* "); ANSI(fd, NORMAL); } if(F_ISSET(ply_ptr, PDISEA)) { ANSI(fd, BLINK); ANSI(fd, RED); - print(fd," ** "); + print(fd," *질병* "); ANSI(fd, NORMAL); } if(ply_ptr->level < MAXALVL) @@ -101,26 +101,26 @@ cmd *cmnd; ANSI(fd, GREEN); sprintf(str,"%d/%d",ply_ptr->hpcur, ply_ptr->hpmax); - print(fd, "\n [ü ] %-16s",str); + print(fd, "\n [체 력] %-16s",str); sprintf(str,"%d/%d",ply_ptr->mpcur, ply_ptr->mpmax); - print(fd, " [ ] %-16s",str); + print(fd, " [도 력] %-16s",str); ANSI(fd, RED); - print(fd, "[]: %d\n", (100-ply_ptr->armor)); + print(fd, "[방어력]: %d\n", (100-ply_ptr->armor)); ANSI(fd, YELLOW); if (ply_ptr->class == 10) { - print(fd, " [ġ] %-16lu [ ] %ld", + print(fd, " [향상치] %-16lu [ 돈 ] %ld냥", MAX(0,ply_ptr->experience-100000000), ply_ptr->gold); } else { - print(fd, " [ǥġ] %-16lu [ ] %ld", + print(fd, " [목표치] %-16lu [ 돈 ] %ld냥", MAX(0,expneeded-ply_ptr->experience), ply_ptr->gold); } ANSI(fd, NORMAL); ANSI(fd, WHITE); - print(fd, "\n %s ֽϴ.", ply_ptr->description); + print(fd, "\n 당신은 %s서 있습니다.", ply_ptr->description); return(0); } @@ -148,13 +148,13 @@ cmd *cmnd; view_file_resolved(fd, file); return(DOPROMPT); } - if(!strcmp(cmnd->str[1], "ּ")) { + if(!strcmp(cmnd->str[1], "주술")) { strcat(file, "/spellfile"); view_file_resolved(fd, file); return(DOPROMPT); } - if(!strcmp(cmnd->str[1], "å")) { + if(!strcmp(cmnd->str[1], "정책")) { strcat(file, "/policy"); view_file_resolved(fd, file); return(DOPROMPT); @@ -182,7 +182,7 @@ cmd *cmnd; return(DOPROMPT); } else if(match > 1) { - print(fd, " 𸣰ڳ׿."); + print(fd, "명령을 잘 모르겠네요."); return(0); } @@ -204,12 +204,12 @@ cmd *cmnd; } while(spllist[c].splno != -1); if(match == 0) { - print(fd, " ɾ ϴ."); + print(fd, "그 명령어에 대한 도움말은 없습니다."); return(0); } /* else if(match > 1) { - print(fd, "ּ ̸ ߸𸣰ڳ׿."); + print(fd, "주술 이름을 잘모르겠네요."); return(0); } */ @@ -266,60 +266,60 @@ cmd *cmnd; expneeded = needed_exp[MAXALVL-2]+(ply_ptr->level-MAXALVL+1)*5000000; if(ply_ptr->alignment < -100) - strcpy(alstr, " (մϴ)"); + strcpy(alstr, " (악합니다)"); else if(ply_ptr->alignment < 101) - strcpy(alstr, " (մϴ)"); + strcpy(alstr, " (평범합니다)"); else - strcpy(alstr, " (մϴ) "); + strcpy(alstr, " (선합니다) "); for(lv=0,cnt=0; lvready[lv]) cnt++; cnt += count_inv(ply_ptr, -1); - print(fd, "\n[ ] %s [Ī ȣ] %s\n\n", ply_ptr->name, title_ply(ply_ptr,ply_ptr)); + print(fd, "\n[이 름] %s [칭 호] %s\n\n", ply_ptr->name, title_ply(ply_ptr,ply_ptr)); - print(fd, "[ ] %-20d [ ] %s\n", + print(fd, "[레 벨] %-20d [종 족] %s\n", ply_ptr->level, race_str[ply_ptr->race]); - print(fd, "[ ] %-20s [ ] %s %s\n", + print(fd, "[직 업] %-20s [성 향] %s %s\n", class_str[ply_ptr->class], - F_ISSET(ply_ptr, PCHAOS) ? "":"", alstr); + F_ISSET(ply_ptr, PCHAOS) ? "악":"선", alstr); #define INTERVAL ply_ptr->lasttime[LT_HOURS].interval - print(fd, "ӽð : "); + print(fd, "접속시간 : "); if(INTERVAL > 86400L) - print(fd, "%d ", INTERVAL/86400L); + print(fd, "%d일 ", INTERVAL/86400L); if(INTERVAL > 3600L) - print(fd, "%dð ", (INTERVAL % 86400L)/3600L); - print(fd, "%d\n\n", (INTERVAL % 3600L)/60L); + print(fd, "%d시간 ", (INTERVAL % 86400L)/3600L); + print(fd, "%d분\n\n", (INTERVAL % 3600L)/60L); - print(fd, "[ ] %-2d [ ø] %-2d [ ] %-2d\n", + print(fd, "[ 힘 ] %-2d [민 첩] %-2d [맷 집] %-2d\n", ply_ptr->strength, ply_ptr->dexterity, ply_ptr->constitution); - print(fd, "[ ] %-2d [žӽ] %-2d\n\n", + print(fd, "[지 식] %-2d [신앙심] %-2d\n\n", ply_ptr->intelligence, ply_ptr->piety); print(fd, - "[ü ] %-5d/%-5d [ġ] %lu ( %lu ġ ʿմϴ. )\n", + "[체 력] %-5d/%-5d [경험치] %lu ( %lu의 경험치가 필요합니다. )\n", ply_ptr->hpcur, ply_ptr->hpmax, ply_ptr->experience, MAX(0, expneeded-ply_ptr->experience)); - print(fd, "[ ] %-5d/%-5d [ ] %-7lu\n", + print(fd, "[도 력] %-5d/%-5d [ 돈 ] %-7lu\n", ply_ptr->mpcur, ply_ptr->mpmax, ply_ptr->gold); - print(fd, "[] %-5d [ǰ ] %d ( %d).\n\n", + print(fd, "[방어력] %-5d [소지품 무게] %d 근 (총 %d개).\n\n", (100-ply_ptr->armor), weight_ply(ply_ptr), cnt); - print(fd, "## ɷ ##\n"); - print(fd, "\n[ ] %2d%% [ ] %2d%% [ ] %2d%%\n", + print(fd, "## 무기사용능력 ##\n"); + print(fd, "\n[ 도 ] %2d%% [ 검 ] %2d%% [ 봉 ] %2d%%\n", profic(ply_ptr, SHARP), profic(ply_ptr, THRUST), profic(ply_ptr, BLUNT)); - print(fd, "[ â ] %2d%% [ ] %2d%%\n\n", + print(fd, "[ 창 ] %2d%% [ 궁 ] %2d%%\n\n", profic(ply_ptr, POLE), profic(ply_ptr, MISSILE)); - print(fd, "## ##:\n"); + print(fd, "## 주 술 계 열 ##:\n"); print(fd, - "[ ] %2d%% [ٶ] %2d%% [ ] %2d%% [ ] %2d%%\n\n", + "[ 땅 ] %2d%% [바람] %2d%% [ 불 ] %2d%% [ 물 ] %2d%%\n\n", mprofic(ply_ptr, EARTH), mprofic(ply_ptr, WIND), mprofic(ply_ptr, FIRE), mprofic(ply_ptr, WATER)); F_SET(ply_ptr, PREADI); - print(fd, "[] . ׸÷ [.] ġ: "); + print(fd, "[엔터]를 누르세요. 그만보시려면 [.]을 치세요: "); output_buf(); Ply[fd].io->intrpt &= ~1; Ply[fd].io->fn = info_2; @@ -345,18 +345,18 @@ char *instr; ply_ptr = Ply[fd].ply; if(instr[0]=='.') { - print(fd, "ߴܵǾϴ.\n"); + print(fd, "중단되었습니다.\n"); F_CLR(ply_ptr, PREADI); RETURN(fd, command, 1); } - strcpy(str, "\nֹ: "); + strcpy(str, "\n주문: "); for(i=0,j=0; i<56; i++) if(S_ISSET(ply_ptr, i)) strcpy(spl[j++], spllist[i].splstr); if(!j) - strcat(str, "."); + strcat(str, "없음."); else { qsort((void *)spl, j, 20, spell_name_cmp); for(i=0; ifd; if(cmnd->num < 2) { - print(fd, " Ͻ÷?"); + print(fd, "누구에게 말을 전하시려구요?"); return 0; } @@ -436,15 +436,15 @@ cmd *cmnd; break; } if(!crt_ptr) { - print(fd, " Ͻ÷?"); + print(fd, "누구에게 말을 전하시려구요?"); return(0); } if(ply_ptr->class < DM && (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, " Ͻ÷?"); + print(fd, "누구에게 말을 전하시려구요?"); return(0); } if(F_ISSET(crt_ptr, PIGNOR) && (ply_ptr->class < DM )) { - print(fd, "%s ̾߱ ź Դϴ.", crt_ptr->name); + print(fd, "%s님은 이야기 듣기 거부 상태입니다.", crt_ptr->name); return(0); } @@ -467,20 +467,20 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(spaces < 1 || strlen(&cmnd->fullstr[i+1]) < 1) { - print(fd, " Ͻ÷?"); + print(fd, "무슨 말을 전하시려구요?"); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ϴ."); + print(fd, "당신은 말을 할 수 없습니다."); return(0); } if(F_ISSET(ply_ptr, PLECHO)){ - print(fd, " %M \"%s\" ̾߱մϴ.", crt_ptr,&cmnd->fullstr[i+1]); + print(fd, "당신은 %M에게 \"%s\"라고 이야기합니다.", crt_ptr,&cmnd->fullstr[i+1]); } else - print(fd, "%sԿ Ͽϴ.", crt_ptr->name); + print(fd, "%s님에게 말을 전달하였습니다.", crt_ptr->name); - print(crt_ptr->fd, "\n%C%M%j ſ \"%s\" ̾߱մϴ.%D", "31",ply_ptr,"1", + print(crt_ptr->fd, "\n%C%M%j 당신에게 \"%s\"라고 이야기합니다.%D", "31",ply_ptr,"1", &cmnd->fullstr[i+1],"37"); strcpy(Ply[crt_ptr->fd].extr->talksend, ply_ptr->name); @@ -488,7 +488,7 @@ cmd *cmnd; if(ply_ptr->class > CARETAKER || crt_ptr->class > CARETAKER) return(0); - broadcast_eaves("\n--- %s %sԿ \"%s\" ̾߱մϴ.", ply_ptr->name, + broadcast_eaves("\n--- %s님이 %s님에게 \"%s\"라고 이야기합니다.", ply_ptr->name, crt_ptr->name, &cmnd->fullstr[i+1]); paste_command(cmnd->fullstr,len); @@ -525,7 +525,7 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(len==0) { - print(fd, " Ͻ÷?"); + print(fd, "무슨 말을 하시려구요?"); return(0); } @@ -534,18 +534,18 @@ cmd *cmnd; if(t>10 && F_ISSET(ply_ptr, PBRSND) && ply_ptr->classdaily[DL_BROAD])) { - print(fd," Ѱ踦 Ѱϴ."); + print(fd,"당신은 오늘 잡담의 한계를 넘겼습니다."); return(0); } } if(F_ISSET(ply_ptr, PSILNC) && ply_ptr->classlevel < 20 && ply_ptr->class < CARETAKER) { - print(fd, " δ ϴ."); + print(fd, "당신의 레벨로는 잡담을 할 수 없습니다."); return(0); } @@ -558,7 +558,7 @@ cmd *cmnd; discount += discount*(ply_ptr->level)/60; if(ply_ptr->hpcur<=discount && ply_ptr->classclasshpcur-=discount; @@ -588,7 +588,7 @@ cmd *cmnd; cmnd->fullstr[255] = 0; if(len==0) { - print(fd, " Ͻ÷?"); + print(fd, "무슨 말을 하시려구요?"); return(0); } @@ -597,18 +597,18 @@ cmd *cmnd; if(t>10 && F_ISSET(ply_ptr, PBRSND) && ply_ptr->classdaily[DL_BROAD])) { - print(fd," Ѱ踦 Ѱϴ."); + print(fd,"당신은 오늘 잡담의 한계를 넘겼습니다."); return(0); } } if(F_ISSET(ply_ptr, PSILNC) && ply_ptr->classlevel < 20 && ply_ptr->class < CARETAKER) { - print(fd, " δ ȯȣ ϴ."); + print(fd, "당신의 레벨로는 환호를 할 수 없습니다."); return(0); } @@ -621,13 +621,13 @@ cmd *cmnd; discount += discount*(ply_ptr->level)/60; if(ply_ptr->hpcur<=discount && ply_ptr->classclasshpcur-=discount; broad_time[fd]=tt; - broadcast2("\n%C%s \"%s\" ȯȣ մϴ.%D", "32",ply_ptr->name, &cmnd->fullstr[0],"37"); + broadcast2("\n%C%s님이 \"%s\"라고 환호를 합니다.%D", "32",ply_ptr->name, &cmnd->fullstr[0],"37"); return(0); } @@ -652,37 +652,37 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; - /* */ -/* print(fd,"װ ִ° մϴ."); + /* 잠시 사용중지 */ +/* print(fd,"버그가 있는관계로 사용을 금지합니다."); return; */ if(cmnd->num < 2) { - print(fd, " ð ?"); + print(fd, "누구를 따라 가시고 싶으세요?"); return(0); } F_CLR(ply_ptr, PHIDDN); - if(!strcmp(cmnd->str[1],"")) new_ptr=ply_ptr; + if(!strcmp(cmnd->str[1],"나")) new_ptr=ply_ptr; else new_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[1], cmnd->val[1]); if(!new_ptr) { - print(fd, "׷ ϴ."); + print(fd, "그런 사람은 여기 없습니다."); return(0); } if(new_ptr == ply_ptr && !ply_ptr->following) { - print(fd, "ڱڽ ϴ."); + print(fd, "자기자신을 따라 갈순 없습니다."); return(0); } if(new_ptr->following == ply_ptr) { - print(fd, "̹ %s ٴϰ ֽϴ.", - F_ISSET(new_ptr, PMALES) ? "":"׳"); + print(fd, "이미 %s는 당신을 따라다니고 있습니다.", + F_ISSET(new_ptr, PMALES) ? "그":"그녀"); return(0); } - if(ply_ptr->following) { /* 󰡰 ִ ִٸ... */ + if(ply_ptr->following) { /* 따라가고 있는 사람이 있다면... */ old_ptr = ply_ptr->following; cp = old_ptr->first_fol; if(cp->crt == ply_ptr) { @@ -699,9 +699,9 @@ cmd *cmnd; cp = cp->next_tag; } ply_ptr->following = 0; - print(fd, " %s ׸ ٴϱ Ͽϴ.\n", old_ptr->name); + print(fd, "당신은 %s님을 그만 따라 다니기로 하였습니다.\n", old_ptr->name); if(!F_ISSET(ply_ptr, PDMINV)) - print(old_ptr->fd, "\n%M ٴ ʽϴ.", + print(old_ptr->fd, "\n%M은 이제 당신을 따라다니지 않습니다.", ply_ptr); } @@ -723,11 +723,11 @@ cmd *cmnd; new_ptr->first_fol = pp; } - print(fd, " %s ٴմϴ.", new_ptr->name); + print(fd, "당신은 이제부터 %s님을 따라다닙니다.", new_ptr->name); if(!F_ISSET(ply_ptr, PDMINV)) { - print(new_ptr->fd, "\n%M ٴմϴ.", ply_ptr); + print(new_ptr->fd, "\n%M이 이제부터 당신을 따라다닙니다.", ply_ptr); broadcast_rom2(fd, new_ptr->fd, ply_ptr->rom_num, - "\n%M %M ٴմϴ.", ply_ptr, new_ptr); + "\n%M이 이제부터 %M을 따라다닙니다.", ply_ptr, new_ptr); } return(0); @@ -755,7 +755,7 @@ cmd *cmnd; if(cmnd->num == 1) { if (ply_ptr->following == 0){ - print(fd, " ٴϰ ʽϴ."); + print(fd, "당신은 누구를 따라다니고 있지 않습니다."); return(0); } @@ -775,9 +775,9 @@ if(cmnd->num == 1) { cp = cp->next_tag; } ply_ptr->following = 0; - print(fd," %M ׸ ٴϱ Ͽϴ.\n",crt_ptr); + print(fd,"당신은 %M을 그만 따라다니기로 하였습니다.\n",crt_ptr); if (!F_ISSET(ply_ptr,PDMINV)) - print(crt_ptr->fd,"\n%M ٴ ʽϴ.",ply_ptr); + print(crt_ptr->fd,"\n%M은 이제 당신을 따라 다니지 않습니다.",ply_ptr); return(0); } @@ -788,12 +788,12 @@ if(cmnd->num == 1) { cmnd->str[1], cmnd->val[1]); if(!crt_ptr) { - print(fd, " ٴϰ ʽϴ."); + print(fd, "그 사람은 당신을 따라다니고 있지 않습니다."); return(0); } if(crt_ptr->following != ply_ptr) { - print(fd, " ٴϰ ʽϴ."); + print(fd, "그 사람은 당신을 따라다니고 있지 않습니다."); return(0); } @@ -813,10 +813,10 @@ if(cmnd->num == 1) { } crt_ptr->following = 0; - print(fd, " %M Ͽϴ.", crt_ptr); + print(fd, "당신은 %M이 당신을 못따라 오도록 하였습니다.", crt_ptr); if(!F_ISSET(ply_ptr, PDMINV)) { - print(crt_ptr->fd, "\n%M Ͽϴ.", ply_ptr); - broadcast_rom2(fd, crt_ptr->fd, "\n%M %M Ͽϴ.", + print(crt_ptr->fd, "\n%M이 당신이 못따라 오도록 하였습니다.", ply_ptr); + broadcast_rom2(fd, crt_ptr->fd, "\n%M이 %M을 못따라 오도록 하였습니다.", ply_ptr, crt_ptr); } @@ -843,8 +843,8 @@ cmd *cmnd; fd = ply_ptr->fd; - /* */ -/* print(fd,"װ ִ մϴ."); + /* 잠시 사용중지 */ +/* print(fd,"버그가 있는 관계로 사용을 금지합니다."); return; */ if(ply_ptr->following) { @@ -855,19 +855,19 @@ cmd *cmnd; cp = ply_ptr->first_fol; leader=ply_ptr; if(!cp) { - print(fd," ׷쿡 ʽϴ."); + print(fd,"당신은 그룹에 속해 있지 않습니다."); return(0); } } - strcpy(str, "׷:\n"); - sprintf(str2, " %14s ü:%4d :%4d ()\n", + strcpy(str, "그룹원:\n"); + sprintf(str2, " %14s 체력:%4d 도력:%4d (대장)\n", crt_str(leader,0,2),leader->hpcur,leader->mpcur); strcat(str,str2); while(cp) { if(!F_ISSET(cp->crt, PDMINV)) { - sprintf(str2, " %14s ü:%4d :%4d\n", + sprintf(str2, " %14s 체력:%4d 도력:%4d\n", crt_str(cp->crt,0,2),cp->crt->hpcur,cp->crt->mpcur); strcat(str, str2); found = 1; @@ -876,7 +876,7 @@ cmd *cmnd; } if(!found) { - print(fd, " ׷쿡 ʽϴ."); + print(fd, "당신은 그룹에 속해 있지 않습니다."); return(0); } @@ -905,7 +905,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != RANGER && ply_ptr->class < INVINCIBLE) { - print(fd, " ִ Դϴ."); + print(fd, "포졸만 쓸수 있는 명령입니다."); return(0); } @@ -923,24 +923,24 @@ cmd *cmnd; ply_ptr->lasttime[LT_TRACK].interval = 5 - bonus[ply_ptr->dexterity]; if(F_ISSET(ply_ptr, PBLIND)) { - print(fd, " ־ ֽϴ. ϴ."); + print(fd, "당신은 눈이 멀어 있습니다. 도저히 추적을 할 수 없습니다."); return(0); } chance = 25 + (bonus[ply_ptr->dexterity] + ((ply_ptr->level+3)/4))*5; if(mrand(1,100) > chance) { - print(fd, " !"); + print(fd, "추적 실패!"); return(0); } if(!ply_ptr->parent_rom->track[0]) { - print(fd, "ƹ ʽϴ."); + print(fd, "아무런 흔적이 남아있지 않습니다."); return(0); } - print(fd, "%s ֽϴ.", + print(fd, "%s쪽으로 흔적이 나 있습니다.", ply_ptr->parent_rom->track); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ãҽϴ.", ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 적이 지나간 흔적을 찾았습니다.", ply_ptr); return(0); @@ -969,18 +969,18 @@ cmd *cmnd; str[0] = 0; if(cmnd->num < 2) { - print(fd, " ǰ ?"); + print(fd, "누구의 소지품을 보려구요?"); return(0); } if(ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, " δ ٸ ǰ ϴ."); + print(fd, "당신 직업으로는 다른사람의 소지품을 볼 수 없습니다."); return(0); } if(F_ISSET(ply_ptr, PBLIND)){ ANSI(fd, RED); - print(fd, " ־ ֽϴ!"); + print(fd, "당신은 눈이 멀어 있습니다!"); ANSI(fd, WHITE); return(0); } @@ -994,7 +994,7 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr) { - print(fd, "׷ !"); + print(fd, "그런 사람 없어요!"); return(0); } } @@ -1011,7 +1011,7 @@ cmd *cmnd; ply_ptr->lasttime[LT_PEEKS].interval = 5; if((F_ISSET(crt_ptr, MUNSTL) || F_ISSET(crt_ptr, MTRADE) || F_ISSET(crt_ptr, MPURIT)) && ply_ptr->class < DM) { - print(fd, " ٸ ǰ ϴ.\nٸ ź ̶ Դϴ."); + print(fd, "당신은 다른사람의 소지품을 볼 수 없습니다.\n다른사람이 당신보고 도둑이라고 생각할 것입니다."); return(0); } @@ -1019,26 +1019,26 @@ cmd *cmnd; if (chance<0) chance=0; if (ply_ptr->class >= CARETAKER) chance=100; if(mrand(1,100) > chance) { - print(fd, "Ͽϴ!"); + print(fd, "실패하였습니다!"); return(0); } chance = MIN(90, 15 + ((ply_ptr->level+3)/4)*5); if(mrand(1,100) > chance && ply_ptr->class < CARETAKER) { - print(crt_ptr->fd, "%s ǰ ½ ϴ.", ply_ptr); + print(crt_ptr->fd, "%s님이 당신의 소지품을 슬쩍 엿봅니다.", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ǰ ½ ϴ.", + "\n%M이 %M의 소지품을 슬쩍 엿봅니다.", ply_ptr, crt_ptr); } - sprintf(str, "%s ǰ: ", F_ISSET(crt_ptr, PMALES) ? "":"׳"); + sprintf(str, "%s의 소지품: ", F_ISSET(crt_ptr, PMALES) ? "그":"그녀"); n = strlen(str); if(list_obj(&str[n], ply_ptr, crt_ptr->first_obj) > 0) print(fd, "%s", str); else - print(fd, "%s ƹ͵ ʽϴ.", - F_ISSET(crt_ptr, PMALES) ? "":"׳"); + print(fd, "%s는 아무것도 들고 있지 않습니다.", + F_ISSET(crt_ptr, PMALES) ? "그":"그녀"); return(0); diff --git a/src/command5.c b/src/command5.c index c4aea9c..0c11a74 100644 --- a/src/command5.c +++ b/src/command5.c @@ -48,7 +48,7 @@ cmd *cmnd; i = LT(ply_ptr, LT_ATTCK); if(ply_ptr->class==0) { - print(fd," ֽϴ."); + print(fd,"당신은 전투가 금지된 직업을 갖고 있습니다."); return 0; } if(t < i) { @@ -57,14 +57,14 @@ cmd *cmnd; } if(cmnd->num < 2 || F_ISSET(ply_ptr, PBLIND)) { - print(fd, " Ͻ÷?"); + print(fd, "누구를 공격하시려구요?"); return(0); } rom_ptr = ply_ptr->parent_rom; if(ply_is_attacking(ply_ptr,cmnd)) { - print(fd, " ο ݾƿ!"); + print(fd, "당신은 지금 싸우고 있잖아요!"); return(0); } @@ -77,7 +77,7 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[1]) < 2) { - print(fd, "׷ ϴ."); + print(fd, "그런건 여기 없습니다."); return(0); } @@ -120,7 +120,7 @@ creature *crt_ptr; return(0); if (crt_ptr->type != MONSTER) { if(is_charm_crt(ply_ptr->name, crt_ptr) && F_ISSET(ply_ptr, PCHARM)) { - print(fd, " %S%j ʹ ؼ ׷ ϴ.", crt_ptr->name,"3"); + print(fd, "당신은 %S%j 너무 좋아해서 그럴수 없습니다.", crt_ptr->name,"3"); return(0); } else @@ -130,8 +130,8 @@ creature *crt_ptr; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, "\n 巯ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "\n당신의 모습이 서서히 드러났습니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러났습니다.", ply_ptr); } @@ -145,27 +145,27 @@ creature *crt_ptr; } if(crt_ptr->type == MONSTER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(add_enm_crt(ply_ptr->name, crt_ptr) < 0) { - print(fd, " %M%j մϴ.", crt_ptr,"3"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j մϴ.", + print(fd, "당신은 %M%j 공격합니다.", crt_ptr,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j 공격합니다.", ply_ptr, "1",crt_ptr,"3"); } if(F_ISSET(crt_ptr, MMGONL)) { - print(fd, "\n %M ƹ ҿ µ մϴ.", + print(fd, "\n당신의 무기는 %M에게 아무 소용이 없는듯 합니다.", crt_ptr); return(0); } if(F_ISSET(crt_ptr, MENONL) && ply_ptr->class < CARETAKER) { if(!ply_ptr->ready[WIELD-1] || ply_ptr->ready[WIELD-1]->adjustment < 1) { - print(fd, "\n %M ƹ ҿ µ մϴ.", + print(fd, "\n당신의 무기는 %M에게 아무 소용이 없는듯 합니다.", crt_ptr); return(0); } @@ -173,35 +173,35 @@ creature *crt_ptr; } else { if(F_ISSET(ply_ptr->parent_rom, RNOKIL)) { - print(fd, " ο ϴ."); + print(fd, "이 곳에서는 싸울 수 없습니다."); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && ply_ptr->level < 128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ϴٴ° Ƽ."); + print(fd, "당신은 선하다는걸 아세요."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && ply_ptr->level <128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ڴ ؼ ϴ."); + print(fd, "그 사용자는 선해서 공격할 수 없습니다."); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && ply_ptr->level < 128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ϴٴ° Ƽ."); + print(fd, "당신은 선하다는걸 아세요."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && ply_ptr->level <128 && !F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, " ڴ ؼ ϴ."); + print(fd, "그 사용자는 선해서 공격할 수 없습니다."); return (0); } } ply_ptr->lasttime[LT_ATTCK].interval += 3; - print(crt_ptr->fd, "\n%M%j մϴ!", ply_ptr,"1"); + print(crt_ptr->fd, "\n%M%j 당신을 공격합니다!", ply_ptr,"1"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j մϴ!", ply_ptr, "1",crt_ptr,"3"); + "\n%M%j %M%j 공격합니다!", ply_ptr, "1",crt_ptr,"3"); } count = 1; @@ -218,9 +218,9 @@ creature *crt_ptr; if(ply_ptr->ready[WIELD-1]) { if(ply_ptr->ready[WIELD-1]->shotscur < 1) { - print(fd, "\n%S%j μ Ƚϴ.", + print(fd, "\n%S%j 부서져 버렸습니다.", ply_ptr->ready[WIELD-1]->name,"1"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %S%j μ Ƚϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 %S%j 부서져 버렸습니다.", ply_ptr, ply_ptr->ready[WIELD-1]->name,"1"); add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; @@ -233,7 +233,7 @@ creature *crt_ptr; if (F_ISSET(ply_ptr, PFEARS)) n += 2; if (F_ISSET(ply_ptr, PBLIND)) n += 5; - if(mrand(1,30) >= n) { /* 20 */ + if(mrand(1,30) >= n) { /* 원래값 20 */ if(ply_ptr->ready[WIELD-1]) { n = mdice(ply_ptr->ready[WIELD-1]) + bonus[(int)ply_ptr->strength] + @@ -268,11 +268,11 @@ creature *crt_ptr; if(ply_ptr->class == PALADIN) { if(ply_ptr->alignment < 0) { n /= 2; - print(fd, "\n ϴ."); + print(fd, "\n당신의 악행이 양심을 괴롭힙니다."); } else if(ply_ptr->alignment > 250) { n += mrand(1,3); - print(fd, "\n ɷ 谡ŵϴ."); + print(fd, "\n당신의 선행이 능력을 배가시킵니다."); } } @@ -281,18 +281,18 @@ creature *crt_ptr; (ply_ptr->ready[WIELD-1] && F_ISSET(ply_ptr->ready[WIELD-1],OALCRT))) { ANSI(fd, GREEN); - print(fd, "\n %M ġŸ Ƚϴ.",crt_ptr); + print(fd, "\n당신은 %M에게 치명타를 날렸습니다.",crt_ptr); ANSI(fd, WHITE); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ġŸ Ƚϴ.", ply_ptr); + "\n%M이 치명타를 날렸습니다.", ply_ptr); n *= mrand(3,6); if(ply_ptr->ready[WIELD-1] && (!F_ISSET(ply_ptr->ready[WIELD-1], ONSHAT)) && ((mrand(1,100) < 3) || (F_ISSET(ply_ptr->ready[WIELD-1],OALCRT)))) { if(!F_ISSET(ply_ptr->ready[WIELD-1], ONEWEV)) { - print(fd, "\n%S%j μϴ.", + print(fd, "\n%S%j 산산히 부서집니다.", ply_ptr->ready[WIELD-1]->name,"1"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%s %S%j μϴ.", - F_ISSET(ply_ptr, PMALES) ? "":"׳", + "\n%s의 %S%j 산산히 부서집니다.", + F_ISSET(ply_ptr, PMALES) ? "그":"그녀", ply_ptr->ready[WIELD-1]->name,"1"); free_obj(ply_ptr->ready[WIELD-1]); ply_ptr->ready[WIELD-1] = 0; @@ -302,19 +302,19 @@ creature *crt_ptr; else if(mrand(1,100) <= (5-p) && ply_ptr->ready[WIELD-1] && !F_ISSET(ply_ptr->ready[WIELD-1], OCURSE)) { ANSI(fd, GREEN); - print(fd, "\n ⸦ ߷Ƚϴ."); + print(fd, "\n당신은 무기를 떨어뜨렸습니다."); ANSI(fd, WHITE); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ⸦ ߷Ƚϴ.", ply_ptr); + "\n%M이 무기를 떨어뜨렸습니다.", ply_ptr); n = 0; add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; compute_thaco(ply_ptr); } - print(fd, "\n %M %d ŭ ظ ־ϴ.", crt_ptr, n); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j %dŭ ظ ϴ.",ply_ptr, "1",crt_ptr,"3",n); - print(crt_ptr->fd, "\n %MԼ %d ŭ ظ Ծϴ.", + print(fd, "\n당신은 %M에게 %d 만큼의 피해를 주었습니다.", crt_ptr, n); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %M%j %d만큼의 피해를 입힙니다.",ply_ptr, "1",crt_ptr,"3",n); + print(crt_ptr->fd, "\n당신은 %M에게서 %d 만큼의 피해를 입었습니다.", ply_ptr, n); if(ply_ptr->ready[WIELD-1] && !mrand(0,3)) @@ -339,9 +339,9 @@ creature *crt_ptr; } if(crt_ptr->hpcur < 1) { - print(fd, "\n %M%j ׿ϴ.", crt_ptr,"3"); + print(fd, "\n당신은 %M%j 죽였습니다.", crt_ptr,"3"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", crt_ptr,"3"); + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); return(1); } @@ -349,8 +349,8 @@ creature *crt_ptr; check_for_flee(ply_ptr, crt_ptr); } else { - print(fd, "\n ƽϴ."); - print(crt_ptr->fd, "\n%M%j ƽϴ.", ply_ptr,"1"); + print(fd, "\n허공을 쳤습니다."); + print(crt_ptr->fd, "\n%M%j 허공을 쳤습니다.", ply_ptr,"1"); } } return(0); @@ -377,7 +377,7 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PBLIND)){ ANSI(fd, RED); - print(fd, " ־ ֽϴ!\n"); + print(fd, "당신은 눈이 멀어 있습니다!\n"); ANSI(fd, WHITE); return(0); } @@ -388,8 +388,8 @@ cmd *cmnd; } if((sum > 30) && !((cmnd->num == 2) && !strcmp(cmnd->str[1], "l"))) { - print(fd, "%-14s [ ]", ""); - print(fd, " %-14s [ ]\n", ""); + print(fd, "%-14s [레벨 직업]", "사용자"); + print(fd, " %-14s [레벨 직업]\n", "사용자"); print(fd, "-------------------------------"); print(fd, "-----------------------------\n"); for(i=0; iclass < SUB_DM) - if(Ply[i].ply!=ply_ptr) continue; /* Ǿ ڽ ... */ + if(Ply[i].ply!=ply_ptr) continue; /* 투명되어도 자신은 나오도록... */ total++; ANSI(fd, WHITE); print(fd, "%-13s%s ", Ply[i].ply->name, @@ -443,7 +443,7 @@ cmd *cmnd; ANSI(fd, GREEN); print(fd, "[%s%02d ] ", (Ply[i].ply->level>=100)? "" : " ", Ply[i].ply->level); - /* һ̻ */ + /* 불사이상 빨강색 */ /* if(Ply[i].ply->class>=CARETAKER) { ANSI(fd,BOLD); ANSI(fd,RED); @@ -473,7 +473,7 @@ cmd *cmnd; } else { ANSI(fd, BLUE); - print(fd, "[߸] "); + print(fd, "[중립] "); } ANSI(fd, WHITE); title_cut_index[fd]=1; @@ -483,11 +483,11 @@ cmd *cmnd; #endif } } - if(total!=1) print(fd, "\n %d ڰ Ѵ ̿ϰ ֽϴ.",total); - else print(fd, "\n ȥڼ ܷ Ѵ ̿ϰ ֽϴ."); + if(total!=1) print(fd, "\n총 %d명의 사용자가 무한대전을 이용하고 있습니다.",total); + else print(fd, "\n당신 혼자서 외로이 무한대전을 이용하고 있습니다."); if(AT_WAR) - print(fd, "\n%s аŸ %s аŸ Դϴ.", + print(fd, "\n%s 패거리와 %s 패거리가 전쟁중입니다.", family_str[AT_WAR/16], family_str[AT_WAR%16]); return(0); @@ -510,7 +510,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ˻Ͻ÷?"); + print(fd, "누구를 검색하시려구요?"); return(0); } @@ -519,16 +519,16 @@ cmd *cmnd; if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || F_ISSET(ply_ptr, PBLIND) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, " ̿ ƴմϴ."); + print(fd, "현재 이용중이 아닙니다."); return(0); } ANSI(fd, YELLOW); - print(fd, "%-18s %-4s [] %-4s %-20s %-4s %-10s\n", "", "", "", "Īȣ", "", ""); + print(fd, "%-18s %-4s [레벨] %-4s %-20s %-4s %-10s\n", "사용자", "성별", "직업", "칭호", "나이", "종족"); print(fd, "----------------------------------------------------------------------------\n"); print(fd, "%-18s %-4s [ %02d ] %-4.4s %-20s %-4d ", crt_ptr->name, - F_ISSET(crt_ptr, PMALES) ? " ":" ", + F_ISSET(crt_ptr, PMALES) ? " 남":" 여", crt_ptr->level, class_str[(int)crt_ptr->class], title_ply(ply_ptr,crt_ptr), @@ -594,7 +594,7 @@ cmd *cmnd; if((!F_ISSET(xp->ext, XINVIS) || F_ISSET(ply_ptr,PDINVI)) && !F_ISSET(xp->ext, XNOSEE)){ found++; - print(fd, "\nⱸ ãҽϴ: %s.", xp->ext->name); + print(fd, "\n출구를 찾았습니다: %s.", xp->ext->name); } xp = xp->next_tag; } @@ -604,7 +604,7 @@ cmd *cmnd; if(F_ISSET(op->obj, OHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(op->obj, OINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n %1i%j ãҽϴ.", op->obj,"3"); + print(fd, "\n당신은 %1i%j 찾았습니다.", op->obj,"3"); } op = op->next_tag; } @@ -615,7 +615,7 @@ cmd *cmnd; mrand(1,100) <= chance) if(!F_ISSET(cp->crt, PINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %S%j ãƳϴ.", cp->crt->name,"3"); + print(fd, "\n당신은 숨어있는 %S%j 찾아내었습니다.", cp->crt->name,"3"); } cp = cp->next_tag; } @@ -625,18 +625,18 @@ cmd *cmnd; if(F_ISSET(cp->crt, MHIDDN) && mrand(1,100) <= chance) if(!F_ISSET(cp->crt, MINVIS) || F_ISSET(ply_ptr,PDINVI)) { found++; - print(fd, "\n ִ %1M%j ãƳϴ.", cp->crt,"3"); + print(fd, "\n당신은 숨어있는 %1M%j 찾아내었습니다.", cp->crt,"3"); } cp = cp->next_tag; } - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֺ ϴ.", ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주변을 샅샅이 뒤져봅니다.", ply_ptr); if(found) - broadcast_rom(fd, ply_ptr->rom_num, "\n%s ߰Ѱ !", - F_ISSET(ply_ptr, MMALES) ? "":"׳"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%s가 뭘 발견한것 같군요!", + F_ISSET(ply_ptr, MMALES) ? "그":"그녀"); else - print(fd, " ƹ͵ ã ߽ϴ.\n"); + print(fd, "당신은 아무것도 찾지 못했습니다.\n"); return(0); @@ -681,8 +681,8 @@ char *str; case 1: ANSI(fd, BOLD); ANSI(fd, RED); - print(fd, "ſ ͸ մϴ.\n"); - print(fd, " ȣ ־ֽʽÿ : "); + print(fd, "당신에 관한 데이터를 완전히 삭제합니다.\n"); + print(fd, "당신의 현재 암호를 넣어주십시요 : "); ANSI(fd, NORMAL); ANSI(fd, WHITE); F_SET(Ply[fd].ply,PREADI); @@ -690,23 +690,26 @@ char *str; case 2: F_CLR(Ply[fd].ply,PREADI); if(!strcmp(ply_ptr->password, str)) { - print(fd, "¥? (¥/)"); + print(fd, "찐짜로? (찐짜로/뻥으로)"); F_SET(Ply[fd].ply,PREADI); RETURN(fd, suicide, 3); } else { - print(fd, "ȣ Ʋϴ.\n ʾҽϴ."); + print(fd, "암호가 틀립니다.\n삭제되지 않았습니다."); RETURN(fd, command, 1); } case 3: F_CLR(Ply[fd].ply,PREADI); - if(!strcmp(str,"¥")) { + if(!strcmp(str,"찐짜로")) { if(F_ISSET(ply_ptr, PFAMIL)) { edit_member(ply_ptr->name, ply_ptr->class, ply_ptr->daily[DL_EXPND].max, 2); } - broadcast_all("\n### %s ڻû Ͽϴ.\n", Ply[fd].ply->name); + broadcast_all("\n### %s님이 자살신청을 하였습니다.\n", Ply[fd].ply->name); all_broad_time=time(0); - sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(Ply[fd].ply->name), Ply[fd].ply->name); + if(player_path_from_name(Ply[fd].ply->name, file, sizeof(file)) < 0) { + print(fd, "플레이어 경로를 만들 수 없습니다."); + RETURN(fd, command, 1); + } sprintf(file2,"%s/alias/%s",PLAYERPATH,Ply[fd].ply->name); sprintf(file3,"%s/bank/%s",PLAYERPATH,Ply[fd].ply->name); sprintf(temp, "mv %s %s/suic/%s", file, PLAYERPATH, Ply[fd].ply->name); @@ -716,7 +719,7 @@ char *str; t = time(0); strcpy(buf,ctime(&t)); buf[strlen(buf)-1] = 0; - logn("SUICIDE","%s : %s (%s) ڻû Ͽϴ.\n", buf,Ply[fd].ply->name, Ply[fd].io->address); + logn("SUICIDE","%s : %s (%s)님이 자살신청을 하였습니다.\n", buf,Ply[fd].ply->name, Ply[fd].io->address); #endif disconnect(fd); system(temp); @@ -725,7 +728,7 @@ char *str; return; } else { - print(fd, " ʾҽϴ."); + print(fd, "삭제되지 않았습니다."); RETURN(fd, command, 1); } } @@ -774,21 +777,21 @@ cmd *cmnd; chance = MIN(90, 5 + 2*((ply_ptr->level+3)/4) + 3*bonus[(int)ply_ptr->dexterity]); - print(fd, " ֽ  մϴ."); + print(fd, "당신은 애써 숨어보려고 합니다."); if(F_ISSET(ply_ptr, PBLIND)) chance = MIN(chance, 20); if(mrand(1,100) <= chance) { F_SET(ply_ptr, PHIDDN); - print(fd, "\n ϴ."); + print(fd, "\n당신은 성공적으로 숨었습니다."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j ׸ ̷ ϴ.", ply_ptr,"1"); + "\n%M%j 그림자 사이로 숨었습니다.", ply_ptr,"1"); } else { F_CLR(ply_ptr, PHIDDN); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j ֽ  մϴ.", ply_ptr,"1"); + "\n%M%j 애써 숨어보려고 합니다.", ply_ptr,"1"); } @@ -800,12 +803,12 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, "׷ ."); + print(fd, "그런것은 여기 없어요."); return(0); } if(F_ISSET(obj_ptr,ONOTAK)){ - print(fd," װ ϴ."); + print(fd,"당신은 그것을 숨길 수 없습니다."); return (0); } if(ply_ptr->class == THIEF || ply_ptr->class == ASSASSIN) @@ -818,14 +821,14 @@ cmd *cmnd; chance = MIN(90, 5 + 3*((ply_ptr->level+3)/4) + 3*bonus[(int)ply_ptr->dexterity]); - print(fd, " װ ܺ մϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j ܺ մϴ.", + print(fd, "당신은 그것을 숨겨보려고 합니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j 숨겨보려고 합니다.", ply_ptr, "1",obj_ptr,"3"); if(mrand(1,100) <= chance) { F_SET(obj_ptr, OHIDDN); - print(fd, "\n ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j ϴ.", + print(fd, "\n당신은 성공적으로 숨겼습니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M%j %1i%j 어딘가 숨깁니다.", ply_ptr, "1", obj_ptr,"3"); } else @@ -848,37 +851,37 @@ cmd *cmnd; fd = ply_ptr->fd; - print(fd," :\n"); - print(fd," ̾߱: %s\n", F_ISSET(ply_ptr, PIGNOR) ? "̼" : " "); - print(fd," : %s\n", F_ISSET(ply_ptr, PNOBRD) ? "̼" : " "); - print(fd," ȯȣ : %s\n", F_ISSET(ply_ptr, PNOBR2) ? "̼" : " "); - print(fd," 纸 : %s\n", F_ISSET(ply_ptr, PDSCRP) ? " " : "̼"); - print(fd," ȯ : %s\n", F_ISSET(ply_ptr, PNOSUM) ? " Ұ " : " "); - print(fd," ġ : "); + print(fd,"현재 설정 상태:\n"); + print(fd," 이야기듣기: %s\n", F_ISSET(ply_ptr, PIGNOR) ? "미설정" : " 설정 "); + print(fd," 잡담듣기 : %s\n", F_ISSET(ply_ptr, PNOBRD) ? "미설정" : " 설정 "); + print(fd," 환호듣기 : %s\n", F_ISSET(ply_ptr, PNOBR2) ? "미설정" : " 설정 "); + print(fd," 묘사보기 : %s\n", F_ISSET(ply_ptr, PDSCRP) ? " 설정 " : "미설정"); + print(fd," 소환 : %s\n", F_ISSET(ply_ptr, PNOSUM) ? " 불가 " : " 가능 "); + print(fd," 도망수치 : "); if(F_ISSET(ply_ptr, PWIMPY)) print(fd, "%-6d\n", ply_ptr->WIMPYVALUE); - else print(fd, "̼\n"); - print(fd," : %s\n", F_ISSET(ply_ptr, PNOCMP) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PPROMP) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PLECHO) ? " " : "̼"); - print(fd," : %s\n", F_ISSET(ply_ptr, PANSIC) ? " " : "̻"); - print(fd," : %s\n", F_ISSET(ply_ptr, PBRIGH) ? " " : "̻"); - print(fd," ̸ : %s\n", F_ISSET(ply_ptr, PNORNM) ? "̼" : " "); - print(fd," ª : %s\n", F_ISSET(ply_ptr, PNOSDS) ? "̼" : " "); - print(fd," 伳 : %s\n", F_ISSET(ply_ptr, PNOLDS) ? "̼" : " "); - print(fd," ⱸ : %s\n", F_ISSET(ply_ptr, PNOEXT) ? "׷" : "ؽƮ"); - print(fd," аŸȯ: %s\n", F_ISSET(ply_ptr, PFRTUN) ? " " : "̼"); + else print(fd, "미설정\n"); + print(fd," 행삽입 : %s\n", F_ISSET(ply_ptr, PNOCMP) ? " 설정 " : "미설정"); + print(fd," 상태 : %s\n", F_ISSET(ply_ptr, PPROMP) ? " 출력 " : "미설정"); + print(fd," 반향 : %s\n", F_ISSET(ply_ptr, PLECHO) ? " 설정 " : "미설정"); + print(fd," 색 : %s\n", F_ISSET(ply_ptr, PANSIC) ? " 사용 " : "미사용"); + print(fd," 밝은색 : %s\n", F_ISSET(ply_ptr, PBRIGH) ? " 사용 " : "미사용"); + print(fd," 방이름 : %s\n", F_ISSET(ply_ptr, PNORNM) ? "미설정" : " 출력 "); + print(fd," 짧은설명 : %s\n", F_ISSET(ply_ptr, PNOSDS) ? "미설정" : " 출력 "); + print(fd," 긴설명 : %s\n", F_ISSET(ply_ptr, PNOLDS) ? "미설정" : " 출력 "); + print(fd," 출구 : %s\n", F_ISSET(ply_ptr, PNOEXT) ? "그래프" : "텍스트"); + print(fd," 패거리귀환: %s\n", F_ISSET(ply_ptr, PFRTUN) ? " 설정 " : "미설정"); /* - if(F_ISSET(ply_ptr, PNOAAT)) strcat(str, " ȯմϴ.\n"); - if(F_ISSET(ply_ptr, PHASTE)) strcat(str, "Ȱ ⸦ ϰ ֽϴ\n"); - if(F_ISSET(ply_ptr, PPRAYD)) strcat(str, " ȣ ްֽϴ\n"); - if(F_ISSET(ply_ptr, PPOWER)) strcat(str, " ֽϴ\n"); - if(F_ISSET(ply_ptr, PSLAYE)) strcat(str, " ⿡ Ⱑ ϴ\n"); - if(F_ISSET(ply_ptr, PMEDIT)) strcat(str, " 繰 Ծϴ\n"); + if(F_ISSET(ply_ptr, PNOAAT)) strcat(str, "수동공격으로 전환합니다.\n"); + if(F_ISSET(ply_ptr, PHASTE)) strcat(str, "활보법으로 기를 운행하고 있습니다\n"); + if(F_ISSET(ply_ptr, PPRAYD)) strcat(str, "신의 보호를 받고있습니다\n"); + if(F_ISSET(ply_ptr, PPOWER)) strcat(str, "기공으로 힘을 모으고 있습니다\n"); + if(F_ISSET(ply_ptr, PSLAYE)) strcat(str, "당신의 무기에 살기가 감돕니다\n"); + if(F_ISSET(ply_ptr, PMEDIT)) strcat(str, "당신은 참선으로 사물을 꿰뚤어봅니다\n"); print(fd,"%s\n",str); */ - print(fd, "[ ]̶ ġø ڼ ֽϴ.\n"); + print(fd, "[설정 도움말]이라고 치시면 자세한 설정사항을 볼 수 있습니다.\n"); return(0); } /**********************************************************************/ @@ -898,20 +901,20 @@ cmd *cmnd; char *str; int flags; } setkeys[]={ - { "̾߱", PIGNOR }, - { "", PNOBRD }, - { "ȯȣ", PNOBR2 }, - { "纸", PDSCRP }, - { "ȯ", PNOSUM }, - { "", PNOCMP }, - { "", PPROMP }, - { "", PLECHO }, - { "", PANSIC }, - { "", PBRIGH }, - { "̸", PNORNM }, - { "ª", PNOSDS }, - { "伳", PNOLDS }, - { "ⱸ", PNOEXT }, + { "이야기듣기", PIGNOR }, + { "잡담듣기", PNOBRD }, + { "환호듣기", PNOBR2 }, + { "묘사보기", PDSCRP }, + { "소환", PNOSUM }, + { "행삽입", PNOCMP }, + { "상태", PPROMP }, + { "반향", PLECHO }, + { "색", PANSIC }, + { "밝은색", PBRIGH }, + { "방이름", PNORNM }, + { "짧은설명", PNOSDS }, + { "긴설명", PNOLDS }, + { "출구", PNOEXT }, { NULL, -1 }, }; @@ -934,18 +937,18 @@ cmd *cmnd; i++; } - if(!strcmp(cmnd->str[1], "ġ")) { + if(!strcmp(cmnd->str[1], "도망수치")) { F_SET(ply_ptr, PWIMPY); ply_ptr->WIMPYVALUE = cmnd->val[1] == 1L ? 10 : cmnd->val[1]; ply_ptr->WIMPYVALUE = MAX(ply_ptr->WIMPYVALUE, 2); if(ply_ptr->WIMPYVALUE==0) F_CLR(ply_ptr,PWIMPY); } - else if(!strcmp(cmnd->str[1], "аŸȯ")) { + else if(!strcmp(cmnd->str[1], "패거리귀환")) { if(F_ISSET(ply_ptr, PFAMIL)) { F_SET(ply_ptr, PFRTUN); - print(fd, "аŸ ȯ մϴ.\n"); + print(fd, "패거리 존으로 귀환을 합니다.\n"); } - else print(fd, " аŸ ԵǾ ʽϴ.\n"); + else print(fd, "당신은 패거리에 가입되어 있지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "hexline")) { F_SET(ply_ptr, PHEXLN); @@ -959,9 +962,9 @@ cmd *cmnd; F_SET(ply_ptr, PROBOT); print(fd, "Robot mode on.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "수동공격")) { F_SET(ply_ptr, PNOAAT); - print(fd, " մϴ.\n"); + print(fd, "수동으로 공격합니다.\n"); } flag_list(ply_ptr,cmnd); @@ -986,80 +989,80 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num == 1) { - print(fd, "[ ]̶ ġø ׵ ֽϴ.\n"); + print(fd, "[해제 도움말]이라고 치시면 모든 설정사항들을 볼 수 있습니다.\n"); return(0); } - if(!strcmp(cmnd->str[1], "ź")) { + if(!strcmp(cmnd->str[1], "잡담듣기거부")) { F_CLR(ply_ptr, PNOBRD); - print(fd, " ϴ.\n"); + print(fd, "이제부터 잡담을 듣습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { /* compact */ + else if(!strcmp(cmnd->str[1], "행삽입")) { /* compact */ F_CLR(ply_ptr, PNOCMP); - print(fd, " ޼ Ҷ ʽϴ.\n"); + print(fd, "이제부터 메세지를 출력할때 한행을 삽입하지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "반향")) { F_CLR(ply_ptr, PLECHO); - print(fd, " ޼ ʽϴ.\n"); + print(fd, "당신의 메세지가 반향되지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "̸")) { + else if(!strcmp(cmnd->str[1], "방이름")) { F_SET(ply_ptr, PNORNM); - print(fd, " ̸ ʽϴ.\n"); + print(fd, "이제부터 방이름을 출력하지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "간단")) { F_SET(ply_ptr, PNOSDS); - print(fd, " ʽϴ.\n"); + print(fd, "방의 간단한 설명을 보지 않습니다.\n"); } - else if(!strcmp(cmnd->str[1], "Ϲ")) { + else if(!strcmp(cmnd->str[1], "일반")) { F_SET(ply_ptr, PNOLDS); - print(fd, " ڼ ʽϴ.\n"); + print(fd, "방의 자세한 설명을 보지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "hexline")) { F_CLR(ply_ptr, PHEXLN); print(fd, "Hex line disabled.\n"); } - else if(!strcmp(cmnd->str[1], "ġ")) { + else if(!strcmp(cmnd->str[1], "도망수치")) { F_CLR(ply_ptr, PWIMPY); - print(fd, "ġ Ǿϴ.\n"); + print(fd, "도망수치 설정이 해제되었습니다.\n"); } else if(!strcmp(cmnd->str[1], "eavesdropper")) { F_CLR(ply_ptr, PEAVES); print(fd, "Eavesdropper mode disabled.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "상태")) { F_CLR(ply_ptr, PPROMP); - print(fd, " ¸ ʽϴ.\n"); + print(fd, "당신의 상태를 보여주지 않습니다.\n"); } else if(!strcmp(cmnd->str[1], "~robot~")) { F_CLR(ply_ptr, PROBOT); print(fd, "Robot mode off.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "색")) { F_CLR(ply_ptr, PANSIC); - print(fd, " ޼ µ˴ϴ.\n"); + print(fd, "이제부터 메세지가 모두 흑백으로 출력됩니다.\n"); } - else if(!strcmp(cmnd->str[1], "ȯź")) { + else if(!strcmp(cmnd->str[1], "소환거부")) { F_CLR(ply_ptr, PNOSUM); - print(fd, " ٸ ȯ ֽϴ.\n"); + print(fd, "이제부터 다른사람이 당신을 소환할 수 있습니다.\n"); } - else if(!strcmp(cmnd->str[1], "̾߱ź")) { + else if(!strcmp(cmnd->str[1], "이야기듣기거부")) { F_CLR(ply_ptr, PIGNOR); - print(fd, " ̾߱⸦ ϴ.\n"); + print(fd, "이제부터 개인적인 이야기를 듣습니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "수동공격")) { F_CLR(ply_ptr, PNOAAT); - print(fd, " ڵ մϴ.\n"); + print(fd, "이제부터 자동으로 공격합니다.\n"); } - else if(!strcmp(cmnd->str[1], "")) { + else if(!strcmp(cmnd->str[1], "밝은색")) { F_CLR(ply_ptr,PBRIGH); - print(fd,"ο մϴ.\n"); + print(fd,"어두운 색으로 출력합니다.\n"); } - else if(!strcmp(cmnd->str[1], "аŸȯ")) { + else if(!strcmp(cmnd->str[1], "패거리귀환")) { F_CLR(ply_ptr, PFRTUN); - print(fd," ȯմϴ.\n"); + print(fd,"광장으로 귀환합니다.\n"); } else - print(fd, "߸ Ǿϴ.\n"); + print(fd, "잘못 지정되었습니다.\n"); return(0); @@ -1093,4 +1096,3 @@ cmd *cmnd; update_ply(ply_ptr); return(DISCONNECT); } - diff --git a/src/command6.c b/src/command6.c index a10a9fb..9c8bf95 100644 --- a/src/command6.c +++ b/src/command6.c @@ -40,20 +40,20 @@ cmd *cmnd; str[256]=0; if(index == -1 || strlen(&cmnd->fullstr[index]) < 1) { - print(fd, " ġ?"); + print(fd, "무슨말을 외치려구요?"); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " Ҹ ʹ ؼ ĥ ϴ."); + print(fd, "당신의 목소리가 너무 약해서 외칠수 없습니다."); return(0); } F_CLR(ply_ptr, PHIDDN); - print(fd, ". ϴ."); + print(fd, "예. 좋습니다."); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M \"%s!\" Ĩϴ.", ply_ptr, + broadcast_rom(fd, rom_ptr->rom_num, "\n%M이 \"%s!\"라고 외칩니다.", ply_ptr, &cmnd->fullstr[0]); - sprintf(str, "\n \"%s!\" ƽϴ.", &cmnd->fullstr[0]); + sprintf(str, "\n누군가가 \"%s!\"라고 외쳤습니다.", &cmnd->fullstr[0]); xp = rom_ptr->first_ext; while(xp) { @@ -92,7 +92,7 @@ cmd *cmnd; if(cmnd->num < 2) { - print(fd, " ?"); + print(fd, "어디로 가고 싶으세요?"); return(0); } @@ -100,42 +100,42 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, "׷ ⱸ ϴ."); + print(fd, "그런 출구는 없습니다."); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { - print(fd, " ϴ."); + print(fd, "당신은 움직일 수가 없습니다."); return(0); } if(ply_is_attacking(ply_ptr, cmnd)) { - print(fd, "ο ߿ ̵ ϴ."); + print(fd, "싸우는 중에는 이동할 수 없습니다."); return(0); } if(F_ISSET(ext_ptr, XLOCKD)) { - print(fd, " ⱸ ֽϴ."); + print(fd, "그 출구는 잠겨 있습니다."); return(0); } else if(F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ⱸ ֽϴ."); + print(fd, "그 출구는 닫혀 있습니다."); return(0); } if(F_ISSET(ext_ptr, XFLYSP) && !F_ISSET(ply_ptr, PFLYSP)) { - print(fd, "װ Ƽ ֽϴ."); + print(fd, "그곳에는 날아서만 갈 수 있습니다."); return(0); } t = Time%24L; if(F_ISSET(ext_ptr, XNGHTO) && (t>6 && t < 20)) { - print(fd, " ⱸ 㿡 ֽϴ."); + print(fd, "그 출구는 밤에만 갈 수 있습니다."); return(0); } if(F_ISSET(ext_ptr, XDAYON) && (t<6 || t > 20)) { - print(fd, " ⱸδ ֽϴ."); + print(fd, "그 출구로는 낮에만 갈 수 있습니다."); return(0); } @@ -144,11 +144,11 @@ cmd *cmnd; while(cp) { if(F_ISSET(cp->crt, MPGUAR)) { if(!F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < SUB_DM) { - print(fd, "%M%j ϴ.", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 막습니다.", cp->crt,"1"); return(0); } if(F_ISSET(cp->crt, MDINVI) && ply_ptr->class < SUB_DM) { - print(fd, "%M%j ϴ.", cp->crt,"1"); + print(fd, "%M%j 당신의 길을 막습니다.", cp->crt,"1"); return(0); } } @@ -157,17 +157,17 @@ cmd *cmnd; } if(F_ISSET(ext_ptr, XNAKED) && weight_ply(ply_ptr)) { - print(fd, "  ϴ."); + print(fd, "뭘 가지고는 들어갈 수 없습니다."); return(0); } if(F_ISSET(ext_ptr, XFEMAL) && F_ISSET(ply_ptr, PMALES)){ - print(fd, "  ֽϴ. ΰ~~"); + print(fd, "여성만 들어갈 수 있습니다. 여탕인가~~"); return(0); } if(F_ISSET(ext_ptr, XMALES) && !F_ISSET(ply_ptr, PMALES)){ - print(fd, "  ֽϴ."); + print(fd, "남성만 들어갈 수 있습니다."); return(0); } @@ -179,21 +179,21 @@ cmd *cmnd; if(mrand(1,100) < fall) { dmg = mrand(5, 15+fall/10); if(ply_ptr->hpcur <= dmg){ - print(fd, " ٰ°Ͱ ϴ."); + print(fd, "당신은 죽음이 다가오는것같은 느낌이 듭니다."); ply_ptr->hpcur=0; - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ̿ ׾ϴ.", ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 구덩이에 떨어져서 죽었습니다.", ply_ptr); die(ply_ptr, ply_ptr); return(0); } ply_ptr->hpcur -= dmg; - print(fd, " ̿ %d ŭ ó Ծϴ.", + print(fd, "당신은 구덩이에 떨어져서 %d 만큼의 상처를 입었습니다.", dmg); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ̿ ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 구덩이에 떨어졌습니다.", ply_ptr); if(ply_ptr->hpcur < 1) { - print(fd, " ٰ° ϴ."); + print(fd, "당신은 죽음이 다가오는것 같은 느낌이 듭니다."); die(ply_ptr, ply_ptr); } if(F_ISSET(ext_ptr, XCLIMB)) @@ -219,7 +219,7 @@ cmd *cmnd; if(mrand(1,100) > chance) { - print(fd," ż ϴµ Ͽϴ.\n"); + print(fd,"당신은 은신술을 사용하는데 실패하였습니다.\n"); F_CLR(ply_ptr, PHIDDN); cp = rom_ptr->first_mon; @@ -227,7 +227,7 @@ cmd *cmnd; if(F_ISSET(cp->crt, MBLOCK) && is_enm_crt(ply_ptr->name, cp->crt) && F_ISSET(ply_ptr, PINVIS) && ply_ptr->class < SUB_DM) { - print(fd, "%M θϴ.\n", cp->crt); + print(fd, "%M가 당신의 길을 가로막습니다.\n", cp->crt); return(0); } cp = cp->next_tag; @@ -244,35 +244,35 @@ cmd *cmnd; load_rom(ext_ptr->room, &rom_ptr); if(rom_ptr == old_rom_ptr) { - print(fd, " ϴ."); + print(fd, "그 방향의 지도가 없습니다."); return(0); } n = count_vis_ply(rom_ptr); if(rom_ptr->lolevel > ply_ptr->level && ply_ptr->class < INVINCIBLE/*CARETAKER*/) { - print(fd, " %d ̻̾ ֽϴ.", + print(fd, "레벨 %d 이상이어야 그 곳으로 갈 수 있습니다.", rom_ptr->lolevel); return(0); } else if(ply_ptr->level > rom_ptr->hilevel && rom_ptr->hilevel && ply_ptr->class < CARETAKER) { - print(fd, "װ %dϿ߸ մϴ.", + print(fd, "그곳으로 갈려면 레벨 %d이하여야만 합니다.", rom_ptr->hilevel+1); return(0); } else if((F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || (F_ISSET(rom_ptr, RTHREE) && n > 2)) { - print(fd, " 濡 ִ ڰ ʹ ϴ."); + print(fd, "그 방에 있는 사용자가 너무 많습니다."); return(0); } else if(F_ISSET(rom_ptr, RFAMIL) && !F_ISSET(ply_ptr, PFAMIL)) { - print(fd, "װ аŸ ڸ ֽϴ."); + print(fd, "그곳에는 패거리 가입자만 갈 수 있습니다."); return(0); } else if(ply_ptr->class < DM && F_ISSET(rom_ptr, RONFML) && (ply_ptr->daily[DL_EXPND].max != rom_ptr->special)) { - print(fd, "װ Դϴ."); + print(fd, "그곳은 당신이 갈 수 없는 곳입니다."); return(0); } else if(ply_ptr->class < DM && F_ISSET(rom_ptr, RONMAR) && @@ -286,19 +286,19 @@ cmd *cmnd; } fclose(fp); } - print(fd, "װ Դϴ."); + print(fd, "그곳은 사유지입니다."); return(0); } mmm: - if(strcmp(ext_ptr->name, "") && strcmp(ext_ptr->name, "") - && strcmp(ext_ptr->name, "") && !F_ISSET(ply_ptr, PDMINV)) { - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M %s ϴ.", + if(strcmp(ext_ptr->name, "위") && strcmp(ext_ptr->name, "밑") + && strcmp(ext_ptr->name, "밖") && !F_ISSET(ply_ptr, PDMINV)) { + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M이 %s쪽으로 갔습니다.", ply_ptr, ext_ptr->name); } else if(!F_ISSET(ply_ptr, PDMINV)) { - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M %s ϴ.", + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M이 %s쪽으로 갔습니다.", ply_ptr, ext_ptr->name); } @@ -311,7 +311,7 @@ cmd *cmnd; go(cp->crt, cmnd); if(F_ISSET(cp->crt, MDMFOL) && cp->crt->type == MONSTER) { del_crt_rom(cp->crt, old_rom_ptr); - broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M%j Ȳϴ %s ϴ.", cp->crt,"1",ext_ptr->name); + broadcast_rom(fd, old_rom_ptr->rom_num, "\n%M%j 방황하다 %s쪽으로 갔습니다.", cp->crt,"1",ext_ptr->name); add_crt_rom(cp->crt, rom_ptr, 1); add_active(cp->crt); } @@ -338,8 +338,8 @@ cmd *cmnd; cp = cp->next_tag; continue; } - print(fd, "%M%j ɴϴ.", cp->crt,"1"); - broadcast_rom(fd, old_rom_num, "\n%M%j %M%j 󰩴ϴ.", + print(fd, "%M%j 당신을 따라옵니다.", cp->crt,"1"); + broadcast_rom(fd, old_rom_num, "\n%M%j %M%j 따라갑니다.", cp->crt,"1", ply_ptr,"3"); temp = cp->next_tag; crt_ptr = cp->crt; @@ -374,7 +374,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ?"); + print(fd, "무엇을 열고 싶으세요?"); return(0); } @@ -382,17 +382,17 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, "׷ ⱸ ϴ."); + print(fd, "그런 출구는 없습니다."); return(0); } if(F_ISSET(ext_ptr, XLOCKD)) { - print(fd, "װ ֽϴ."); + print(fd, "그것은 잠겨져 있습니다."); return(0); } if(!F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ֽϴ."); + print(fd, "벌써 열려져 있습니다."); return(0); } @@ -401,8 +401,8 @@ cmd *cmnd; F_CLR(ext_ptr, XCLOSD); ext_ptr->ltime.ltime = time(0); - print(fd, " %s ⱸ ϴ.", ext_ptr->name); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %s ⱸ ϴ.", + print(fd, "당신은 %s쪽 출구를 열었습니다.", ext_ptr->name); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %s쪽 출구를 열었습니다.", ply_ptr, ext_ptr->name); return(0); @@ -428,7 +428,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ݰ ?"); + print(fd, "무엇을 닫고 싶으세요?"); return(0); } @@ -436,17 +436,17 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, "׷ ⱸ ϴ."); + print(fd, "그런 출구는 없습니다."); return(0); } if(F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ֽϴ."); + print(fd, "벌써 닫혀져 있습니다."); return(0); } if(!F_ISSET(ext_ptr, XCLOSS)) { - print(fd, " ⱸ ϴ."); + print(fd, "당신은 그 출구를 닫을 수 없습니다."); return(0); } @@ -454,8 +454,8 @@ cmd *cmnd; F_SET(ext_ptr, XCLOSD); - print(fd, " %s ⱸ ݽϴ.", ext_ptr->name); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %s ⱸ ݽϴ.", + print(fd, "당신은 %s쪽 출구를 닫습니다.", ext_ptr->name); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %s쪽 출구를 닫습니다.", ply_ptr, ext_ptr->name); return(0); @@ -482,7 +482,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " Ǯ ?"); + print(fd, "무엇을 풀고 싶으세요?"); return(0); } @@ -490,17 +490,17 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, " Ǯ ?"); + print(fd, "무엇을 풀고 싶으세요?"); return(0); } if(!F_ISSET(ext_ptr, XLOCKD)) { - print(fd, "װ ʽϴ."); + print(fd, "그것은 잠궈져 있지 않습니다."); return(0); } if(cmnd->num < 3) { - print(fd, " ?"); + print(fd, "뭘 가지고 열려구요?"); return(0); } @@ -508,22 +508,22 @@ cmd *cmnd; cmnd->str[2], cmnd->val[2]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 갖고 있지 않습니다."); return(0); } if(obj_ptr->type != KEY) { - print(fd, "װ 谡 ƴմϴ."); + print(fd, "그것은 열쇠가 아닙니다."); return(0); } if(obj_ptr->shotscur < 1) { - print(fd, "%I%j ν Ƚϴ.", obj_ptr,"1"); + print(fd, "%I%j 부숴져 버렸습니다.", obj_ptr,"1"); return(0); } if(obj_ptr->ndice != ext_ptr->key) { - print(fd, "谡 ʽϴ."); + print(fd, "열쇠가 맞지 않습니다."); return(0); } @@ -536,8 +536,8 @@ cmd *cmnd; if(obj_ptr->use_output[0]) print(fd, "%s", obj_ptr->use_output); else - print(fd, "## Ĭ ##"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %s ⱸ Ǯϴ.", + print(fd, "## 찰칵 ##"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %s쪽 출구를 풀었습니다.", ply_ptr, ext_ptr->name); return(0); @@ -563,7 +563,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ᱼ?"); + print(fd, "무엇을 잠굴려구요?"); return(0); } @@ -571,17 +571,17 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, " ᱼ?"); + print(fd, "무엇을 잠굴려구요?"); return(0); } if(F_ISSET(ext_ptr, XLOCKD)) { - print(fd, "װ ̹ ֽϴ."); + print(fd, "그것은 이미 잠궈져 있습니다."); return(0); } if(cmnd->num < 3) { - print(fd, " ᱸ?"); + print(fd, "뭘 가지고 잠구려구요?"); return(0); } @@ -589,32 +589,32 @@ cmd *cmnd; cmnd->str[2], cmnd->val[2]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런것을 가지고 있지 않습니다."); return(0); } if(obj_ptr->type != KEY) { - print(fd, "%I%j 谡 ƴմϴ.", obj_ptr,"0"); + print(fd, "%I%j 열쇠가 아닙니다.", obj_ptr,"0"); return(0); } if(!F_ISSET(ext_ptr, XLOCKS)) { - print(fd, " װ ᱼ ϴ."); + print(fd, "당신은 그것을 잠굴수 없습니다."); return(0); } if(!F_ISSET(ext_ptr, XCLOSD)) { - print(fd, " ݾƾ ɰ ."); + print(fd, "먼저 문을 닫아야 될것 같군요."); return(0); } if(obj_ptr->shotscur < 1) { - print(fd, "%I%j μ Ƚϴ.", obj_ptr,"1"); + print(fd, "%I%j 부서져 버렸습니다.", obj_ptr,"1"); return(0); } if(obj_ptr->ndice != ext_ptr->key) { - print(fd, "谡 ʽϴ."); + print(fd, "열쇠가 맞지 않습니다."); return(0); } @@ -622,8 +622,8 @@ cmd *cmnd; F_SET(ext_ptr, XLOCKD); - print(fd, "## Ĭ ##"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %s ⱸ ɽϴ.", + print(fd, "## 찰칵 ##"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %s쪽 출구를 잠궜습니다.", ply_ptr, ext_ptr->name); return(0); @@ -651,12 +651,12 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, "ϸ ڹ踦 ֽϴ."); + print(fd, "도둑만 자물쇠를 딸 수 있습니다."); return(0); } if(cmnd->num < 2) { - print(fd, " ÷?"); + print(fd, "무엇을 따시려구요?"); return(0); } @@ -664,15 +664,15 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!ext_ptr) { - print(fd, "׷ ϴ."); + print(fd, "그런건 여기 없습니다."); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { - print(fd, " ־ ־ ϴ."); + print(fd, "당신은 눈이 멀어 있어 딸 수 없습니다."); return(0); } if(!F_ISSET(ext_ptr, XLOCKD)) { - print(fd, "װ ʽϴ."); + print(fd, "그것은 잠궈져 있지 않습니다."); return(0); } @@ -696,17 +696,17 @@ cmd *cmnd; if(F_ISSET(ext_ptr, XUNPCK)) chance = 0; - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %s ⱸ մϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %s쪽 출구를 따려고 합니다.", ply_ptr, ext_ptr->name); if(mrand(1,100) <= chance) { - print(fd, " µ ߽ϴ."); + print(fd, "당신은 문을 따는데 성공했습니다."); F_CLR(ext_ptr, XLOCKD); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 문을 땄습니다.", ply_ptr); } else - print(fd, "Ͽϴ!"); + print(fd, "실패하였습니다!"); return(0); @@ -735,17 +735,17 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ġ?"); + print(fd, "무엇을 훔치려구요?"); return(0); } if(cmnd->num < 3) { - print(fd, "׼ ġ?"); + print(fd, "누구한테서 훔치려구요?"); return(0); } if(ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, "ϸ ĥ ֽϴ."); + print(fd, "도둑만 훔칠수 있습니다."); return(0); } @@ -761,8 +761,8 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "당신의 모습이 서서히 드러납니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러납니다.", ply_ptr); } @@ -778,7 +778,7 @@ cmd *cmnd; cmnd->str[2], cmnd->val[2]); if(!crt_ptr || crt_ptr == ply_ptr || F_ISSET(ply_ptr, PBLIND)) { - print(fd, "׷ ϴ."); + print(fd, "그런건 여기 없습니다."); return(0); } @@ -786,42 +786,42 @@ cmd *cmnd; if(crt_ptr->type == MONSTER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠수 없습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(is_enm_crt(ply_ptr->name, crt_ptr)) { - print(fd, "%s ο ƴմϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 싸우는 중이 아닙니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } } else { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd, " 濡 ĥ ϴ."); + print(fd, "이 방에서는 훔칠 수 없습니다."); return(0); } if(!F_ISSET(ply_ptr, PCHAOS) && ply_ptr->classclassfirst_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, "%s ׷ ʽϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "%s는 그런 물건을 갖고 있지 않습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -852,7 +852,7 @@ cmd *cmnd; if(mrand(1,100) <= chance) { - print(fd, "ƽϴ."); + print(fd, "훔쳤습니다."); del_obj_crt(obj_ptr, crt_ptr); add_obj_crt(obj_ptr, ply_ptr); savegame_nomsg(ply_ptr); @@ -866,14 +866,14 @@ cmd *cmnd; } else { - print(fd, "Ͽϴ.%s", crt_ptr->type == MONSTER ? - "\nװ մϴ." : ""); + print(fd, "실패하였습니다.%s", crt_ptr->type == MONSTER ? + "\n그가 당신을 공격합니다." : ""); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %MԼ ġ մϴ.", + "\n%M이 %M에게서 물건을 훔치려고 합니다.", ply_ptr, crt_ptr); if(crt_ptr->type == PLAYER) - print(crt_ptr->fd, "\n%M ſԼ %1i%j ġ մϴ.", + print(crt_ptr->fd, "\n%M이 당신에게서 %1i%j 훔치려고 합니다.", ply_ptr, obj_ptr,"3"); else add_enm_crt(ply_ptr->name, crt_ptr); diff --git a/src/command7.c b/src/command7.c index a0f926c..4000f05 100644 --- a/src/command7.c +++ b/src/command7.c @@ -65,9 +65,9 @@ cmd *cmnd; if(found) continue; } - /* ó */ + /* 비전투시 도망처리 */ if (!ply_is_attacking(ply_ptr,cmnd)){ - print(fd,"Լ ÷?"); + print(fd,"누구에게서 도망가시려구요?"); return 0; } /* if(mrand(1,100) < 70) break; */ @@ -78,7 +78,7 @@ cmd *cmnd; if(xp && F_ISSET(xp->ext,52) && mrand(1,5) < 2 && !F_ISSET(ply_ptr, PFEARS)) xp = 0; if(!xp) { - print(fd, "\n ̿ ٸ ʽϴ!"); + print(fd, "\n당신은 겁에 질려 다리가 떨어지지 않습니다!"); return(0); } /* @@ -88,42 +88,42 @@ cmd *cmnd; ply_ptr->ready[WIELD-1] = 0; compute_thaco(ply_ptr); compute_ac(ply_ptr); - print(fd, "\n ⸦ Ĩϴ."); + print(fd, "\n당신은 무기를 버리고 줄행랑을 칩니다."); } else - */ print(fd, "\n Ĩϴ."); + */ print(fd, "\n당신은 줄행랑을 칩니다."); F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PFEARS)) { ANSI(fd, RED); - print(fd, "\n ̿ âϰ ϴ!"); + print(fd, "\n당신은 겁에 질린듯 얼굴이 창백하게 변해 도망을 갑니다!"); ANSI(fd, WHITE); } if(!F_ISSET(rom_ptr, RPTRAK)) strcpy(rom_ptr->track, xp->ext->name); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %s ϴ.", + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %s쪽으로 도망을 갑니다.", ply_ptr, "1",xp->ext->name); if (ply_ptr->class == PALADIN) if (ply_ptr->level > 20) { n = ((ply_ptr->level+3)/4)*10; n = MIN(ply_ptr->experience, n); - print(fd," 񰡷 %d ŭ ġ Ҿϴ.",n); + print(fd,"당신은 도망을 간 댓가로 %d 만큼의 경험치를 잃었습니다.",n); ply_ptr->experience -= n; lower_prof(ply_ptr,n); } load_rom(xp->ext->room, &rom_ptr); if(rom_ptr->lolevel > ply_ptr->level || (ply_ptr->level > rom_ptr->hilevel && rom_ptr->hilevel)) { - print(fd, " ٽ ǵ Խϴ."); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j Ͽϴ.",ply_ptr,"1"); + print(fd, "어떤 힘에 의해 다시 되돌아 왔습니다."); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j 도착하였습니다.",ply_ptr,"1"); return(0); } n = count_vis_ply(rom_ptr); if((F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || (F_ISSET(rom_ptr, RTHREE) && n > 2)) { - print(fd, " áϴ!"); - broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j Ͽϴ.",ply_ptr,"1"); + print(fd, "도망갈려는 방의 정원이 가득 찼습니다!"); + broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j 도착하였습니다.",ply_ptr,"1"); return(0); } del_ply_rom(ply_ptr, ply_ptr->parent_rom); @@ -147,19 +147,19 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(F_ISSET(rom_ptr, RSHOPP)) { if(load_rom(rom_ptr->rom_num+1, &dep_ptr) < 0) { - print(fd, " ϴ."); + print(fd, "살 물건이 없습니다."); return(0); } - print(fd, "ǰ:"); + print(fd, "상품들:"); op = dep_ptr->first_obj; while(op) { - print(fd, "\n %-30s : %ld", + print(fd, "\n %-30s 가격: %ld", obj_str(op->obj, 1, CAP), op->obj->value); op = op->next_tag; } } else - print(fd, " ƴմϴ."); + print(fd, "여기는 상점이 아닙니다."); return(0); } /**********************************************************************/ @@ -179,30 +179,30 @@ cmd *cmnd; if(ply_ptr->ready[i]) cnt++; cnt += count_inv(ply_ptr, 0); if(!F_ISSET(rom_ptr, RSHOPP)) { - print(fd, " ƴմϴ."); + print(fd, "여기는 상점이 아닙니다."); return(0); } if(cmnd->num < 2) { - print(fd, " ÷?"); + print(fd, "무엇을 사시려구요?"); return(0); } if(load_rom(rom_ptr->rom_num+1, &dep_ptr) < 0) { - print(fd, " ϴ."); + print(fd, "살 물건이 없습니다."); return(0); } obj_ptr = find_obj(ply_ptr, dep_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 물건은 팔지 않습니다."); return(0); } if(ply_ptr->gold < obj_ptr->value) { - print(fd, " 鼭... ܻ!"); + print(fd, "돈도 없으면서... 외상사절!"); return(0); } if(weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) || cnt>200) { - print(fd, " ̻ ϴ."); + print(fd, "당신은 더이상 가질 수 없습니다."); return(0); } obj_ptr2 = (object *)malloc(sizeof(object)); @@ -215,8 +215,8 @@ cmd *cmnd; F_CLR(obj_ptr2, OTEMPP); add_obj_crt(obj_ptr2, ply_ptr); ply_ptr->gold -= obj_ptr2->value; - print(fd, " %1i%j ϴ",obj_ptr2,"3"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %1i%j ϴ.", + print(fd, "당신은 %1i%j 샀습니다",obj_ptr2,"3"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i%j 샀습니다.", ply_ptr, obj_ptr2,"3"); return(0); } @@ -234,18 +234,18 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RPAWNS)) { - print(fd, " ƴմϴ."); + print(fd, "여기는 전당포가 아닙니다."); return(0); } if(cmnd->num < 2) { - print(fd, " Ľ÷?"); + print(fd, "무엇을 파시려구요?"); return(0); } F_CLR(ply_ptr, PHIDDN); obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런 물건을 갖고 있지 않습니다."); return(0); } gold = MIN(obj_ptr->value / 2, 100000); @@ -255,30 +255,30 @@ cmd *cmnd; if((obj_ptr->type == WAND || obj_ptr->type == KEY) && obj_ptr->shotscur < 1) poorquality = 1; if(gold < 20 || poorquality) { - print(fd, " \"׷ Ȼ!\" մϴ."); + print(fd, "전당포주인이 \"그런 쓰레기는 안사요!\"라고 말합니다."); return(0); } if(F_ISSET(obj_ptr, ONEWEV)) { - print(fd, " \"׷ Ȼ!\" մϴ."); + print(fd, "전당포주인이 \"그런건 안사요!\"라고 말합니다."); return(0); } if(obj_ptr->first_obj) { - print(fd, " \" ȿ ֱ.\" մϴ."); + print(fd, "전당포주인이 \"그 안에 뭔가가 들어있군요.\"라고 말합니다."); return(0); } if(obj_ptr->type == SCROLL || obj_ptr->type == POTION) { - print(fd, " \"η縶⳪ ర Ȼ!\" մϴ."); + print(fd, "전당포주인이 \"두루마기나 독약같은것은 안사요!\"라고 말합니다."); return(0); } if(((time(0)+mrand(1, 100))%250) == 9) { - print(fd, " %i%j .\n ι 帮.\n ſ %d ݴϴ.", obj_ptr, "3",gold*2); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ο %1i%j ˴ϴ.", + print(fd, "제가 %i%j 사죠.\n 오늘은 기분이 좋으니 두배로 드리죠.\n전당포주인이 당신에게 %d냥을 줍니다.", obj_ptr, "3",gold*2); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 전당포주인에게 %1i%j 팝니다.", ply_ptr, obj_ptr, "3"); ply_ptr->gold += gold; } else { - print(fd, " %i%j .\n ſ %d ݴϴ.", obj_ptr, "3",gold); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ο %1i%j ˴ϴ.", + print(fd, "제가 %i%j 사죠.\n전당포주인이 당신에게 %d냥을 줍니다.", obj_ptr, "3",gold); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 전당포주인에게 %1i%j 팝니다.", ply_ptr, obj_ptr,"3"); } ply_ptr->gold += gold; @@ -302,32 +302,32 @@ cmd *cmnd; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RPAWNS) && !F_ISSET(rom_ptr, RREPAI)) { - print(fd, " ż ġ ˾ƺ."); + print(fd, "전당포에 가셔서 물건의 가치를 알아보세요."); return(0); } if(cmnd->num < 2) { - print(fd, " ġ ˰ ?"); + print(fd, "어떤 물건의 가치를 알고 싶으세요?"); return(0); } F_CLR(ply_ptr, PHIDDN); obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ."); + print(fd, "당신은 그런 물건을 갖고 있지 않습니다."); return(0); } if(F_ISSET(rom_ptr, RPAWNS)) { value = MIN(obj_ptr->value / 2, 100000L); - print(fd, " \"%I̶ %ld 帱 ־.\" մϴ.", + print(fd, "상점주인이 \"%I이라면 %ld냥 정도는 드릴 수 있어요.\"라고 말합니다.", obj_ptr, value); } else { value = obj_ptr->value / 4; print(fd, - " \"%I%j ϴµ %ld ϴ.\" մϴ.", + "상점주인이 \"%I%j 수리하는데 %ld냥이 듭니다.\"라고 말합니다.", obj_ptr, "3",value); } - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %i ġ ˾ƺϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %i의 가치를 알아봅니다.", ply_ptr, obj_ptr); return(0); } @@ -351,16 +351,16 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->class != THIEF && ply_ptr->class != ASSASSIN && ply_ptr->class < INVINCIBLE) { - print(fd, "ϰ ڰ ִ Դϴ."); + print(fd, "도둑과 자객만 사용할 수 있는 기술입니다."); return(0); } if(cmnd->num < 2 || F_ISSET(ply_ptr, PBLIND)) { - print(fd, " Ͻ÷?"); + print(fd, "누구를 기습하시려구요?"); return(0); } if(!ply_ptr->ready[WIELD-1] || (ply_ptr->ready[WIELD-1]->type != SHARP && ply_ptr->ready[WIELD-1]->type != THRUST)) { - print(fd, " Ͻ÷ Ⱑ ʿմϴ."); + print(fd, "기습을 하시려면 도나 검종류의 무기가 필요합니다."); return(0); } t = time(0); @@ -376,59 +376,59 @@ cmd *cmnd; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[1]) < 2) { - print(fd, "׷ ."); + print(fd, "그런건 여기 없어요."); return(0); } } if(crt_ptr->type != PLAYER && is_enm_crt(ply_ptr->name, crt_ptr)) { - print(fd, " %s ο ϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s와 싸울 수 없습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(crt_ptr->type == PLAYER) { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd, " 濡 ο ϴ."); + print(fd, "이 방에서는 싸울 수 없습니다."); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ϴ."); + print(fd, "당신은 선해서 다른 사람을 공격할 수 없습니다."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ."); + print(fd, "그 사용자는 선해서 보호받고 있습니다."); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ϴ."); + print(fd, "당신은 선해서 다른 사람을 공격할 수 없습니다."); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ."); + print(fd, "그 사용자는 선해서 보호받고 있습니다."); return (0); } } if(is_charm_crt(ply_ptr->name, crt_ptr) && F_ISSET(ply_ptr, PCHARM)){ - print (fd, " %S%j Ƴ ׸ ĥ ϴ.", crt_ptr->name,"3"); + print (fd, "당신은 %S%j 아끼기 때문에 그를 해칠 수 없습니다.", crt_ptr->name,"3"); return(0); } - print(crt_ptr->fd, "\n%M%j ڷ  ~ ϴ.", ply_ptr,"1"); + print(crt_ptr->fd, "\n%M%j 당신의 뒤로 몰래 기어가 옆구리를 쿡~ 찌릅니다.", ply_ptr,"1"); } else if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠수 없습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(is_charm_crt(crt_ptr->name, ply_ptr) && F_ISSET(ply_ptr, PCHARM)) { - print(fd, " %s ʹ ؼ ׷ Ⱑ ʴ±.",crt_ptr->name); + print(fd, "당신은 %s를 너무 좋아해서 그렇게 할 용기가 나지 않는군요.",crt_ptr->name); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "당신의 모습이 서서히 드러납니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러납니다.", ply_ptr); } ply_ptr->lasttime[LT_ATTCK].ltime = t; @@ -438,37 +438,37 @@ cmd *cmnd; ply_ptr->lasttime[LT_ATTCK].interval = 2; if(crt_ptr->type != PLAYER) { if(add_enm_crt(ply_ptr->name, crt_ptr) < 0) { - print(fd, " %M ڷ  ~ ϴ.", crt_ptr); + print(fd, "당신은 %M의 뒤로 몰래 기어가 옆구리를 쿡~ 찌릅니다.", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ~ ϴ.", ply_ptr, crt_ptr); + "\n%M이 %M의 옆구리를 쿡~ 찌릅니다.", ply_ptr, crt_ptr); if(F_ISSET(crt_ptr, MMGONL)) { - print(fd, " %MԴ ƹ ҿ ϴ.", crt_ptr); + print(fd, "당신의 무기는 %M에게는 아무 소용이 없습니다.", crt_ptr); return(0); } if(F_ISSET(crt_ptr, MENONL)) { if(!ply_ptr->ready[WIELD-1] || ply_ptr->ready[WIELD-1]->adjustment < 1) { - print(fd, " %M ƹ ҿ ϴ.", crt_ptr); + print(fd, "당신의 무기는 %M에게 아무 소용이 없습니다.", crt_ptr); return(0); } } } } else { - print(fd, " %M ڷ  ~ ϴ.", crt_ptr); - print(crt_ptr->fd, "%M ~ ϴ.", ply_ptr); + print(fd, "당신은 %M의 뒤로 몰래 기어가 옆구리를 쿡~ 찌릅니다.", crt_ptr); + print(crt_ptr->fd, "%M이 당신의 옆구리를 쿡~ 찌릅니다.", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ~ ϴ!", ply_ptr, crt_ptr); + "\n%M이 %M의 옆구리를 쿡~ 찌릅니다!", ply_ptr, crt_ptr); } if(ply_ptr->ready[WIELD-1]) { if(ply_ptr->ready[WIELD-1]->shotscur < 1) { - print(fd, "\n%S%j μϴ.", + print(fd, "\n%S%j 부서졌습니다.", ply_ptr->ready[WIELD-1]->name,"1"); add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; broadcast_rom(fd, ply_ptr->rom_num, - "\n%s õ ߽ϴ.", - F_ISSET(ply_ptr, PMALES) ? "":"׳"); + "\n%s가 기습을 시도했지만 상대방이 피했습니다.", + F_ISSET(ply_ptr, PMALES) ? "그":"그녀"); ply_ptr->lasttime[LT_ATTCK].interval *= 2; return(0); } @@ -499,12 +499,12 @@ cmd *cmnd; } if(crt_ptr->class > CARETAKER) n = 1; crt_ptr->hpcur -= n; - print(fd, "\n %d ŭ ظ ־ϴ.", n); - print(crt_ptr->fd, "\n %MԼ %d ŭ ظ Ծϴ.", ply_ptr, n); + print(fd, "\n당신은 %d 만큼의 피해를 주었습니다.", n); + print(crt_ptr->fd, "\n당신은 %M에게서 %d 만큼의 피해를 입었습니다.", ply_ptr, n); if(crt_ptr->hpcur < 1) { - print(fd, "\n %M%j ׿ϴ.", crt_ptr,"3"); + print(fd, "\n당신은 %M%j 죽였습니다.", crt_ptr,"3"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", crt_ptr,"3"); + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); if(ply_ptr->ready[WIELD-1]) ply_ptr->ready[WIELD-1]->shotscur--; die(crt_ptr, ply_ptr); @@ -513,9 +513,9 @@ cmd *cmnd; check_for_flee(ply_ptr, crt_ptr); } else { - print(fd, "\n ƽϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%s õ ߽ϴ.", - F_ISSET(ply_ptr, PMALES) ? "":"׳"); + print(fd, "\n허공을 쳤습니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%s가 기습을 시도했지만 상대방이 피했습니다.", + F_ISSET(ply_ptr, PMALES) ? "그":"그녀"); ply_ptr->lasttime[LT_ATTCK].interval *= 3; } return(0); @@ -535,25 +535,25 @@ cmd *cmnd; int fd, i, fail = 0, bit[4]; int up_num=0; fd = ply_ptr->fd; - /* */ + /* 초인 수련 금지 */ if(ply_ptr->class == CARETAKER) { - print(fd, " Ҽ Դϴ."); + print(fd, "당신은 수련할수 없는 직업입니다."); /* ANSI(fd, RED); ply_ptr->mpmax = ply_ptr->mpmax + 10; ply_ptr->hpmax = ply_ptr->hpmax + 10; - print(fd, " մϴ."); + print(fd, "당신은 눈을 감고 수련을 합니다."); ANSI(fd, WHITE); */ return(0); } if(F_ISSET(ply_ptr, PBLIND)){ ANSI(fd, RED); - print(fd, " ־ ϴ!"); + print(fd, "당신은 눈이 멀어 수련할 수 없습니다!"); ANSI(fd, WHITE); return(0); } - /* °ݹ ߿ ý °ݹ */ + /* 잠력격발 사용중에 수련시 잠력격발 해제 */ if(F_ISSET(ply_ptr, PUPDMG)) { F_CLR(ply_ptr, PUPDMG); ply_ptr->pdice -= 5; @@ -564,7 +564,7 @@ cmd *cmnd; } rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RTRAIN)) { - print(fd, " ִ° ƴմϴ!"); + print(fd, "이 곳은 수련할 수 있는곳이 아닙니다!"); return(0); } @@ -583,7 +583,7 @@ cmd *cmnd; } if(ply_ptr->class>8) fail=0; if(fail) { - print(fd, " ϴ° Ⱑ ƴմϴ."); + print(fd, "당신이 수련하는곳은 여기가 아닙니다."); return(0); } if(ply_ptr->level <= MAXALVL) @@ -594,16 +594,16 @@ cmd *cmnd; if(ply_ptr->level ply_ptr->experience) { - print(fd, " %ld ŭ ġ ʿմϴ.", + print(fd, "당신은 %ld 만큼의 경험치가 더 필요합니다.", expneeded - ply_ptr->experience); return(0); } if(goldneeded > ply_ptr->gold) { - print(fd, " 鼭... .\n"); - print(fd, " ϴµ %ld ϴ.", goldneeded); + print(fd, "돈도 없으면서... 돈 벌어오세요.\n"); + print(fd, "당신은 수련하는데 %ld냥이 듭니다.", goldneeded); return(0); } - /* ȯ */ + /* 무적 전환 */ if((ply_ptr->level==100) && (ply_ptr->class < INVINCIBLE)) { ply_ptr->class = INVINCIBLE; if(F_ISSET(ply_ptr, PFAMIL)) { @@ -614,7 +614,7 @@ ply_ptr->daily[DL_EXPND].max, 3); ply_ptr->experience = 0; } - /* ȯ */ + /* 초인전환 */ if((ply_ptr->level>=127) && (ply_ptr->class == INVINCIBLE)) { ply_ptr->class = CARETAKER; ply_ptr->level = 127; @@ -628,8 +628,8 @@ ply_ptr->daily[DL_EXPND].max, 3); ply_ptr->ndice = 4; ply_ptr->sdice = 4; ply_ptr->pdice = 4; - broadcast_all("\n### %sԲ Ǽ̽ϴ!!",ply_ptr->name); - print(fd,"\nմϴ! Ǿϴ!!"); + broadcast_all("\n### %s님께서 초인이 되셨습니다!!",ply_ptr->name); + print(fd,"\n축하합니다! 당신은 초인이 되었습니다!!"); all_broad_time=time(0); return(0); } @@ -650,21 +650,21 @@ ply_ptr->daily[DL_EXPND].max, 3); } while(expneeded <= ply_ptr->experience && goldneeded <= ply_ptr->gold); if(up_num<=1) - broadcast_all("\n### %s %d öϴ!", + broadcast_all("\n### %s님이 %d레벨로 올랐습니다!", ply_ptr->name,ply_ptr->level); else - broadcast_all("\n### %s %d %dܰ öϴ!", + broadcast_all("\n### %s님이 %d레벨로 %d단계 올랐습니다!", ply_ptr->name,ply_ptr->level,up_num); - print(fd, "\nմϴ! öϴ!"); + print(fd, "\n축하합니다! 당신의 레벨이 올랐습니다!"); all_broad_time=time(0); return(0); } } /**********************************************************************/ -/* forge */ +/* forge제련 */ /**********************************************************************/ -/* ο ڽŸ ⸦ ϴ ƾ̴ */ -/* ȣ 900 â */ +/* 새로운 자신만의 무기를 제작하는 루틴이다 */ +/* 아이템 번호 900번부터 도 검 봉 창 궁 순으로 나간다 */ void select_arm(); int forge(ply_ptr, cmnd) creature *ply_ptr; @@ -677,11 +677,11 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; /* - print(fd, "׷ մϴ\n"); + print(fd, "버그로 잠시 사용중지합니다\n"); return(0); */ if(!F_ISSET(rom_ptr, RFORGE)) { - print(fd, " 尣 ƴմϴ."); + print(fd, "여기는 대장간이 아닙니다."); return(0); } @@ -694,7 +694,7 @@ cmd *cmnd; /**********************************************************************/ /* select_arm */ /**********************************************************************/ -/* Ư ϴ κ̴. */ +/* 무기의 특성을 설계하는 부분이다. */ char forge1[PMAX][16]; char forge2[PMAX][16]; void select_arm(fd, param, str) @@ -711,7 +711,7 @@ char *str; switch(param) { case 1: print(fd,"\n\n"); - print(fd, " ⸦ Ͻʴϱ?\n1. 2. 3. 4. â 5. ?\n:"); + print(fd, "어떤 종류의 무기를 원하십니까?\n1. 도 2. 검 3. 봉 4. 창 5. 궁 ?\n:"); F_SET(Ply[fd].ply,PREADI); output_buf(); Ply[fd].io->intrpt &= ~1; @@ -725,14 +725,14 @@ char *str; } } else { - print(fd, "ϳ Ͻÿ: "); + print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 2); } - /* obj_ptr long ٲ . */ + /* 포인터 obj_ptr을 long형으로 바꿔 저장. */ sprintf(forge1[fd],"%lu",(long)obj_ptr); - print(fd, "\nŸġ ִ Ḧ Ͻʽÿ.\n"); - print(fd, "1. ö 2.ͱݼ ̽ʸ 3.ݰ ʸ\n:"); + print(fd, "\n타격치에 영향을 주는 재료를 선택하십시요.\n"); + print(fd, "1.강 철 오만냥 2.귀금속 이십만냥 3.금강석 삼십만냥\n:"); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 3); case 3: @@ -749,8 +749,8 @@ char *str; break; case '3': if((ply_ptr->class == CLERIC)||(ply_ptr->class == PALADIN)||(ply_ptr->class == MAGE)) { - print(fd, " ̷ ⸦ ɷ ϴ.\n"); - print(fd, "ٸḦ Ͻʽÿ\n"); + print(fd, "당신은 이런 무기를 사용할 능력이 없습니다.\n"); + print(fd, "다른재료를 선택하십시요\n"); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 3); } @@ -763,13 +763,13 @@ char *str; obj_ptr->sdice = 5; sum = 300000; break; - default: print(fd, "ϳ Ͻÿ: "); + default: print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 3); } sprintf(forge2[fd],"%lu",sum); - print(fd, "\nǸ ˴ϴ.\n մϱ?\n"); - print(fd, "1. 100 2. 200 ̽ʸ 3. 300 ʸ\n4. 400 鸸 5. 500 ̹鸸\n"); + print(fd, "\n훌륭한 무기는 담금질로 내구력이 향상됩니다.\n몇번의 담금질을 원합니까?\n"); + print(fd, "1. 100번 오만냥 2. 200번 이십만냥 3. 300번 오십만냥\n4. 400번 백만냥 5. 500번 이백만냥\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 4); @@ -803,13 +803,13 @@ char *str; obj_ptr->shotscur = 500; sum += 2000000; break; - default: print(fd, "ϳ Ͻÿ: "); + default: print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 4); } sprintf(forge2[fd],"%lu",sum); - print(fd, "\n ̸ ʽÿ.\n"); - print(fd, "߿ ̸ ĥ ؼ ž մϴ\n"); + print(fd, "\n당신의 무기의 이름을 지으십시요.\n"); + print(fd, "나중에 이름을 고칠수 없으니 조심해서 지으셔야 합니다\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 5); @@ -817,20 +817,20 @@ char *str; F_CLR(Ply[fd].ply,PREADI); obj_ptr=(object *)atol(forge1[fd]); if(strchr(str,'(') || strchr(str,')')) { - print(fd,"̸ ȣ  ϴ.\n̸ ٽ ʽÿ:"); + print(fd,"이름에는 괄호가 들어갈수 없습니다.\n이름을 다시 넣으십시요:"); RETURN(fd,select_arm,5); } if(strlen(str) > 20) { - print(fd, "Էµ ̸ ʹ ϴ.\n̸ ٽ ʽÿ(3̻ 20): "); + print(fd, "입력된 이름이 너무 깁니다.\n이름을 다시 넣으십시요(3자이상 20자이하): "); RETURN(fd, select_arm, 5); } if(strlen(str) < 3) { - print(fd, "Էµ ̸ ʹ ªϴ.\n̸ ٽ ʽÿ(3̻ 20): "); + print(fd, "입력된 이름이 너무 짧습니다.\n이름을 다시 넣으십시요(3자이상 20자이하): "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 5); } strncpy(obj_ptr->name, str, 20); - print(fd, "\nͿ Ͻʴϱ? (/ƴϿ)\n"); + print(fd, "\n모든것에 만족하십니까? (예/아니오)\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_arm, 6); @@ -838,19 +838,19 @@ char *str; F_CLR(Ply[fd].ply,PREADI); obj_ptr=(object *)atol(forge1[fd]); sum=atol(forge2[fd]); - if(!strncmp(str,"",2)) { + if(!strncmp(str,"예",2)) { if (ply_ptr->gold < sum) { - print(fd, "\n ⸦ ϴ.\n ſ \"ܻ ȵǿ~\" մϴ."); + print(fd, "\n당신은 그 조건의 무기를 만들 만한 돈이 없습니다.\n주인이 당신에게 \"외상은 안되요~\"라고 말합니다."); free(obj_ptr); break; } add_obj_crt(obj_ptr,ply_ptr); - print(fd, "\n ſ ۵ ⸦ dzݴϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ⸦ Ͽϴ.",ply_ptr); + print(fd, "\n주인이 당신에게 새로 제작된 무기를 건네줍니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 무기를 제련하였습니다.",ply_ptr); ply_ptr->gold -= sum; } else { - print(fd," Ͽϴ."); + print(fd,"무기 제련을 취소하였습니다."); free(obj_ptr); } break; @@ -862,10 +862,10 @@ char *str; *****/ /**********************************************************************/ -/* newforge */ +/* newforge제련 */ /**********************************************************************/ -/* ο ڽŸ ⸦ ϴ ƾ̴ */ -/* ȣ 900 â */ +/* 새로운 자신만의 무기를 제작하는 루틴이다 */ +/* 아이템 번호 900번부터 도 검 봉 창 궁 순으로 나간다 */ void select_newarm(); int newforge(ply_ptr, cmnd) @@ -881,16 +881,16 @@ cmd *cmnd; /* - print(fd, "׷ մϴ\n"); + print(fd, "버그로 잠시 사용중지합니다\n"); return(0); */ if(!F_ISSET(rom_ptr, RFORGE)) { - print(fd, " 尣 ƴմϴ."); + print(fd, "여기는 대장간이 아닙니다."); return(0); } if(!(rom_ptr->rom_num == 611 )) { - print(fd, "⼭ ⸦ ϴ."); + print(fd, "여기서는 무기를 만들 수가 없습니다."); return(0); } @@ -907,7 +907,7 @@ cmd *cmnd; /* select_arm */ /**********************************************************************/ -/* Ư ϴ κ̴. */ +/* 무기의 특성을 설계하는 부분이다. */ char forge1[PMAX][16]; char forge2[PMAX][16]; @@ -926,7 +926,7 @@ char *str; switch(param) { case 1: print(fd,"\n\n"); - print(fd, " ⸦ Ͻʴϱ?\n1. 2. 3. 4. â 5. ?\n:"); + print(fd, "어떤 종류의 무기를 원하십니까?\n1. 도 2. 검 3. 봉 4. 창 5. 궁 ?\n:"); F_SET(Ply[fd].ply,PREADI); output_buf(); Ply[fd].io->intrpt &= ~1; @@ -942,16 +942,16 @@ char *str; } } else { - print(fd, "ϳ Ͻÿ: "); + print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_newarm, 2); } - /* obj_ptr long ٲ . */ + /* 포인터 obj_ptr을 long형으로 바꿔 저장. */ sprintf(forge1[fd],"%lu",(long)obj_ptr); - print(fd, "\nŸġ ִ Ḧ Ͻʽÿ.\n"); - print(fd, "1.޶ 100 2.ƼŸ 200 3.Ϸ 300\n:"); + print(fd, "\n타격치에 영향을 주는 재료를 선택하십시요.\n"); + print(fd, "1.에메랄드 100만냥 2.티타늄 200만냥 3.일루션 300만냥\n:"); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_newarm, 3); @@ -982,15 +982,15 @@ char *str; obj_ptr->pdice = 5; sum = 3000000; break; - default: print(fd, "ϳ Ͻÿ: "); + default: print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_newarm, 3); } sprintf(forge2[fd],"%lu",sum); - print(fd, "\nǸ ˴ϴ.\n մϱ?\n"); - print(fd, "1. 100 鸸 2. 300 2鸸 3. 500 3鸸\n4. 700 4鸸 5. 900 5鸸\n"); + print(fd, "\n훌륭한 무기는 담금질로 내구력이 향상됩니다.\n몇번의 담금질을 원합니까?\n"); + print(fd, "1. 100번 백만냥 2. 300번 2백만냥 3. 500번 3백만냥\n4. 700번 4백만냥 5. 900번 5백만냥\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); @@ -1031,7 +1031,7 @@ char *str; sum += 5000000; break; - default: print(fd, "ϳ Ͻÿ: "); + default: print(fd, "하나를 선택하시오: "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_newarm, 4); @@ -1039,8 +1039,8 @@ char *str; sprintf(forge2[fd],"%lu",sum); - print(fd, "\n ̸ ʽÿ.\n"); - print(fd, "߿ ̸ ĥ ؼ ž մϴ\n"); + print(fd, "\n당신의 무기의 이름을 지으십시요.\n"); + print(fd, "나중에 이름을 고칠수 없으니 조심해서 지으셔야 합니다\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); @@ -1051,15 +1051,15 @@ char *str; obj_ptr=(object *)atol(forge1[fd]); if(strchr(str,'(') || strchr(str,')')) { - print(fd,"̸ ȣ  ϴ.\n̸ ٽ ʽÿ:"); + print(fd,"이름에는 괄호가 들어갈수 없습니다.\n이름을 다시 넣으십시요:"); RETURN(fd,select_newarm,5); } if(strlen(str) > 20) { - print(fd, "Էµ ̸ ʹ ϴ.\n̸ ٽ ʽÿ(3̻ 20): "); + print(fd, "입력된 이름이 너무 깁니다.\n이름을 다시 넣으십시요(3자이상 20자이하): "); RETURN(fd, select_newarm, 5); } if(strlen(str) < 3) { - print(fd, "Էµ ̸ ʹ ªϴ.\n̸ ٽ ʽÿ(3̻ 20): "); + print(fd, "입력된 이름이 너무 짧습니다.\n이름을 다시 넣으십시요(3자이상 20자이하): "); F_SET(Ply[fd].ply,PREADI); RETURN(fd, select_newarm, 5); @@ -1067,7 +1067,7 @@ char *str; strncpy(obj_ptr->name, str, 20); - print(fd, "\nͿ Ͻʴϱ? (/ƴϿ)\n"); + print(fd, "\n모든것에 만족하십니까? (예/아니오)\n"); print(fd, ": "); F_SET(Ply[fd].ply,PREADI); @@ -1079,21 +1079,21 @@ char *str; obj_ptr=(object *)atol(forge1[fd]); sum=atol(forge2[fd]); - if(!strncmp(str,"",2)) { + if(!strncmp(str,"예",2)) { if (ply_ptr->gold < sum) { - print(fd, "\n ⸦ ϴ.\n ſ \"ܻ ȵǿ~\" մϴ."); + print(fd, "\n당신은 그 조건의 무기를 만들 만한 돈이 없습니다.\n주인이 당신에게 \"외상은 안되요~\"라고 말합니다."); free(obj_ptr); break; } add_obj_crt(obj_ptr,ply_ptr); - print(fd, "\n ſ ۵ ⸦ dzݴϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ⸦ Ͽϴ.",ply_ptr); + print(fd, "\n주인이 당신에게 새로 제작된 무기를 건네줍니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 무기를 제련하였습니다.",ply_ptr); ply_ptr->gold -= sum; } else { - print(fd," Ͽϴ."); + print(fd,"무기 제련을 취소하였습니다."); free(obj_ptr); } break; @@ -1118,12 +1118,12 @@ cmd *cmnd; rom_ptr=ply_ptr->parent_rom; if(F_ISSET(ply_ptr, PBLIND)){ ANSI(fd, RED); - print(fd, " ־ ȯ ϴ!"); + print(fd, "당신은 눈이 멀어 직업전환을 할 수 없습니다!"); ANSI(fd, WHITE); return(0); } if(!F_ISSET(rom_ptr, RTRAIN)) { - print(fd, " ƴմϴ!"); + print(fd, "이 곳은 수련장이 아닙니다!"); return(0); } for(i=0; i<3; i++) { @@ -1132,15 +1132,15 @@ cmd *cmnd; } new_class++; if(ply_ptr->class>8) { - print(fd," ȯ ֽϴ."); + print(fd,"당신은 직업전환을 할 수 없는 직업을 갖고 있습니다."); return(0); } if(new_class==ply_ptr->class) { - print(fd, "ȯ Ϸ ڽ ϴ° ϴ."); + print(fd, "직업전환을 하려면 자신이 수련하는곳에서는 할 수 없습니다."); return(0); } if(ply_ptr->experience<100000) { - print(fd, "ȯ Ϸ ġ 10 ʿմϴ."); + print(fd, "직업전환을 하려면 경험치 10만이 필요합니다."); return(0); } change_class_ok(ply_ptr->fd,1,""); @@ -1165,7 +1165,7 @@ creature *ply_ptr; n = exp_to_lev(ply_ptr->experience); while(ply_ptr->level > n) down_level(ply_ptr); - print(fd, "\n ȯǾϴ."); + print(fd, "\n당신의 직업이 전환되었습니다."); if(F_ISSET(ply_ptr, PFAMIL)) { edit_member(ply_ptr->name, ply_ptr->class, ply_ptr->daily[DL_EXPND].max, 3); @@ -1179,26 +1179,26 @@ char *str; { switch(param) { case 1: - print(fd,"ȯ Ϸ ġ 10 ʿմϴ.\n"); - print(fd," ȯ Ͻðڽϱ?(/ƴϿ): "); + print(fd,"직업전환을 하려면 경험치 10만이 필요합니다.\n"); + print(fd,"정말로 직업전환을 하시겠습니까?(예/아니오): "); F_SET(Ply[fd].ply,PREADI); output_buf(); Ply[fd].io->intrpt &= ~1; RETURN(fd,change_class_ok,2); case 2: F_CLR(Ply[fd].ply,PREADI); - if(!strncmp(str,"",2)) { + if(!strncmp(str,"예",2)) { chg_class_main(Ply[fd].ply); } else - print(fd,"ȯ ʾҽϴ"); + print(fd,"직업전환이 되지 않았습니다"); RETURN(fd,command,1); } } /**********************************************************************/ -/* magic_stop ( ) */ +/* magic_stop ( 혈도봉쇄 ) */ /**********************************************************************/ -/* ̱ ƾ̴. */ +/* 이기능은 적의 도력을 막는 루틴이다. */ /* */ int magic_stop(ply_ptr, cmnd) creature *ply_ptr; @@ -1212,27 +1212,27 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { print(fd, - "\n ϽǷ?\n"); + "\n누구의 혈도를 봉쇄하실려구요?\n"); return(0); } if(ply_ptr->class != RANGER && ply_ptr->class < INVINCIBLE) { print(fd, - "\n ⸦ Ҽ ֽϴ.\n"); + "\n포졸만이 혈도봉쇄를 사용할수 있습니다.\n"); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[1], cmnd->val[1]); if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 괴물은 존재하지 않습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, - "\n Ÿ մϴ.\n"); + "\n당신의 모습이 나타나기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "%M ̱ մϴ.", + "%M의 모습이 보이기 시작합니다.", ply_ptr); } i = LT(ply_ptr, LT_TURNS); @@ -1243,8 +1243,8 @@ cmd *cmnd; } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, - "\n %s Ҽ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + "\n당신은 %s의 혈도를 봉쇄할수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } add_enm_crt(ply_ptr->name, crt_ptr); @@ -1257,31 +1257,31 @@ cmd *cmnd; if(ply_ptr->class == RANGER) chance += 10; if(mrand(1,100) > chance) { print(fd, - "\n 绡 ߽ϴ.\n׷ ¦ ϴ.\n", + "\n당신은 적의 혈도를 재빨리 봉쇄했습니다.\n그러나 적이 살짝 피해 빗나갔습니다.\n", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M 绡 ߽ϴ.\n׷ %M ¦ ߽ϴ.\n", + "\n%M이 적의 혈도를 재빨리 봉쇄했습니다.\n그러나 %M가 살짝 피했습니다.\n", ply_ptr, crt_ptr); return(0); } print(fd, - "\n 绡 ߽ϴ.\n ¤ ֹ ߽ϴ.\n ", + "\n당신은 적의 혈도를 재빨리 봉쇄했습니다.\n적의 혈도를 짚어 주문을 봉쇄했습니다.\n ", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M 绡 ߽ϴ.\n%M ¤ ֹ Ǿϴ.\n", + "\n%M이 적의 혈도를 재빨리 봉쇄했습니다.\n%M의 혈도가 짚혀 주문이 봉쇄되었습니다.\n", ply_ptr, crt_ptr); if (mrand(25,100) <= chance) { dmg = crt_ptr->hpcur /2; - print(fd,"%M ޼Ҹ ¤ %d ظ ϴ.\n", crt_ptr, dmg ); + print(fd,"%M의 급소를 짚어서 %d의 피해를 입혔습니다.\n", crt_ptr, dmg ); broadcast_rom(fd, ply_ptr->rom_num, - "%M %m ޼Ҹ ¤ %d ظ ϴ.\n", ply_ptr, crt_ptr, dmg); + "%M이 %m의 급소를 짚어서 %d의 피해를 입혔습니다.\n", ply_ptr, crt_ptr, dmg); crt_ptr->hpcur -= dmg; m = MIN(crt_ptr->hpcur, dmg); add_enm_dmg(ply_ptr->name, crt_ptr, m); if(crt_ptr->hpcur < 1) { - print(fd, "\n %M%j ׿ϴ.", crt_ptr,"3"); + print(fd, "\n당신은 %M%j 죽였습니다.", crt_ptr,"3"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", crt_ptr,"3"); + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); } else @@ -1303,7 +1303,7 @@ cmd *cmnd; return(0); } /**********************************************************************/ -/* ߵ */ +/* 중독 */ /**********************************************************************/ int poison_mon(ply_ptr, cmnd) creature *ply_ptr; @@ -1317,12 +1317,12 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { print(fd, - "\n ߵŰ÷?\n"); + "\n누구를 중독시키시려고요?\n"); return(0); } if(ply_ptr->class != ASSASSIN && ply_ptr->class < INVINCIBLE) { print(fd, - "\nڰ մϴ.\n"); + "\n자객만이 가능합니다.\n"); return(0); } crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, @@ -1330,16 +1330,16 @@ cmd *cmnd; if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 괴물은 존재하지 않습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, - "\n Ÿ մϴ.\n"); + "\n당신의 모습이 나타나기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "%M ̱ մϴ.", + "%M의 모습이 보이기 시작합니다.", ply_ptr); } i = LT(ply_ptr, LT_TURNS); @@ -1350,8 +1350,8 @@ cmd *cmnd; } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, - "\n %s ߵų ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + "\n당신은 %s를 중독시킬수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } add_enm_crt(ply_ptr->name, crt_ptr); @@ -1363,32 +1363,32 @@ cmd *cmnd; chance = MIN(chance, 80); if(mrand(1,100) > chance) { print(fd, - "\n ѷȽϴ.\n׷ ¦ ߽ϴ.\n", + "\n당신은 적에게 독을 뿌렸습니다.\n그러나 적이 살짝 피해 실패했습니다.\n", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ѷȽϴ.\n׷ %M ¦ ߽ϴ.\n", + "\n%M이 적에게 독을 뿌렸습니다.\n그러나 %M가 살짝 피했습니다.\n", ply_ptr, crt_ptr); return(0); } print(fd, - "\n ѷȽϴ.\n%M ߵǾϴ.\n ", + "\n당신은 적에게 독을 뿌렸습니다.\n%M의 몸이 중독되었습니다.\n ", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ѷȽϴ.\n%M ߵǾϴ.\n", + "\n%M이 적에게 독을 뿌렸습니다.\n%M의 몸이 중독되었습니다.\n", ply_ptr, crt_ptr); F_SET(crt_ptr, MPOISN); if (mrand(10,100) <= chance) { dmg = crt_ptr->hpmax /3 ; - print(fd,"%M ߵ Ѽ %d ظ ϴ.\n", crt_ptr, dmg ); + print(fd,"%M을 중독을 시켜서 %d의 피해를 입혔습니다.\n", crt_ptr, dmg ); broadcast_rom(fd, ply_ptr->rom_num, - "%M %m ߵ Ѽ %d ظ ϴ.\n", ply_ptr, crt_ptr, dmg); + "%M이 %m을 중독을 시켜서 %d의 피해를 입혔습니다.\n", ply_ptr, crt_ptr, dmg); crt_ptr->hpcur -= dmg; m = MIN(crt_ptr->hpcur, dmg); add_enm_dmg(ply_ptr->name, crt_ptr, m); if(crt_ptr->hpcur < 1) { - print(fd, "\n %M%j ׿ϴ.", crt_ptr,"3"); + print(fd, "\n당신은 %M%j 죽였습니다.", crt_ptr,"3"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", crt_ptr,"3"); + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); } else diff --git a/src/command8.c b/src/command8.c index bdf9aae..fb8b837 100644 --- a/src/command8.c +++ b/src/command8.c @@ -36,18 +36,17 @@ cmd *cmnd; creature *crt_ptr; room *rom_ptr; int fd; - int len,cnt; + int cnt; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 3) { - print(fd, " ֽ÷?\n"); + print(fd, "누구에게 주시려구요?\n"); return(0); } - len=strlen(cmnd->str[1]); - if(len>2 && !strcmp(&cmnd->str[1][len-2],"")) { + if(utf8_ends_with((unsigned char *)cmnd->str[1], (unsigned char *)"냥")) { give_money(ply_ptr, cmnd); return(0); } @@ -56,7 +55,7 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ.\n"); + print(fd, "당신은 그런것을 갖고 있지 않습니다.\n"); return(0); } @@ -71,27 +70,27 @@ cmd *cmnd; crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "׷ !\n"); + print(fd, "그런 사람은 여기 없어요!\n"); return(0); } } if(crt_ptr == ply_ptr) { - print(fd, "ڽſԴ ϴ.\n"); + print(fd, "자신에게는 물건을 줄 수 없습니다.\n"); return(0); } if(crt_ptr->type != PLAYER) { - print(fd, "׷ !\n"); + print(fd, "그런 사람은 여기 없어요!\n"); return(0); } if(obj_ptr->questnum && ply_ptr->class < DM) { - print(fd, "ӹ õǴ Ÿο ϴ.\n"); + print(fd, "임무에 관련되는 물건은 타인에게 줄 수 없습니다.\n"); return(0); } if(F_ISSET(obj_ptr, ONEWEV) && ply_ptr->class < DM) { - if(strcmp(obj_ptr->key[2], "̺Ʈ")) { - print(fd, "̺Ʈ Ÿο ϴ.\n"); + if(strcmp(obj_ptr->key[2], "이벤트")) { + print(fd, "이벤트 아이템은 타인에게 줄 수 없습니다.\n"); return(0); } } @@ -99,11 +98,11 @@ cmd *cmnd; if(obj_ptr->first_obj) { for(otag_ptr=obj_ptr->first_obj; otag_ptr; otag_ptr=otag_ptr->next_tag) { if(otag_ptr->obj->questnum && ply_ptr->class < DM) { - print(fd, "ӹ õǴ Ÿο ϴ.\n"); + print(fd, "임무에 관련되는 물건이 들어있으면 타인에게 줄 수 없습니다.\n"); return(0); } if(F_ISSET(otag_ptr->obj, ONEWEV) && ply_ptr->class < DM) { - print(fd, "̺Ʈ Ÿο ϴ.\n"); + print(fd, "이벤트 아이템이 들어있으면 타인에게 줄 수 없습니다.\n"); return(0); } } @@ -114,7 +113,7 @@ cmd *cmnd; if(crt_ptr->type == PLAYER && (weight_ply(crt_ptr) + weight_obj(obj_ptr) > max_weight(crt_ptr)) || cnt>150) { - print(fd, "%S%j ̻ ϴ.\n", crt_ptr->name,"0"); + print(fd, "%S%j 더이상 가질 수 없습니다.\n", crt_ptr->name,"0"); return(0); } @@ -126,9 +125,9 @@ cmd *cmnd; if(crt_ptr->type==PLAYER) savegame_nomsg(crt_ptr); #endif - print(fd, " %M %1i%j ݴϴ.\n", crt_ptr, obj_ptr,"3"); - print(crt_ptr->fd, "\n%M%j ſ %1i%j ݴϴ.\n", ply_ptr, "1",obj_ptr,"3"); - broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "\n%M %M %1i%j ݴϴ.", + print(fd, "당신은 %M에게 %1i%j 줍니다.\n", crt_ptr, obj_ptr,"3"); + print(crt_ptr->fd, "\n%M%j 당신에게 %1i%j 줍니다.\n", ply_ptr, "1",obj_ptr,"3"); + broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, "\n%M이 %M에게 %1i%j 줍니다.", ply_ptr, crt_ptr, obj_ptr,"3"); return(0); @@ -156,11 +155,11 @@ cmd *cmnd; amt = atol(cmnd->str[1]); if(amt < 1) { - print(fd, " ɼ ϴ.\n"); + print(fd, "돈의 단위는 음수가 될수 없습니다.\n"); return; } if(amt > ply_ptr->gold) { - print(fd, " ׸ŭ ʽϴ.\n"); + print(fd, "당신은 그만큼의 돈을 가지고 있지 않습니다.\n"); return; } @@ -173,7 +172,7 @@ cmd *cmnd; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "׷ !\n"); + print(fd, "그런 사람은 여기 없어요!\n"); return; } } @@ -185,12 +184,12 @@ cmd *cmnd; savegame_nomsg(ply_ptr); if(crt_ptr->type==PLAYER) savegame_nomsg(crt_ptr); #endif - print(fd, " %M %ld ־ϴ.\n",crt_ptr,amt); + print(fd, "당신은 %M에게 %ld냥을 주었습니다.\n",crt_ptr,amt); - print(crt_ptr->fd, "\n%M%j ſ %ld ־ϴ.\n", + print(crt_ptr->fd, "\n%M%j 당신에게 %ld냥을 주었습니다.\n", ply_ptr, "1", amt); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M %ld ־ϴ.", ply_ptr,"1", crt_ptr, amt); + "\n%M%j %M에게 %ld냥을 주었습니다.", ply_ptr,"1", crt_ptr, amt); } @@ -214,12 +213,12 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " Ͻ÷?\n"); + print(fd, "무엇을 수리하시려구요?\n"); return(0); } if(!F_ISSET(rom_ptr, RREPAI)) { - print(fd, "⼭ ϴ.\n"); + print(fd, "여기서는 수리할 수 없습니다.\n"); return(0); } @@ -227,49 +226,49 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { - print(fd, " ׷ ʽϴ.\n"); + print(fd, "당신은 그런 물건을 갖고 있지 않습니다.\n"); return(0); } F_CLR(ply_ptr, PHIDDN); if(F_ISSET(obj_ptr, ONOFIX)) { - print(fd, "װ Ҽ Դϴ.\n"); + print(fd, "그것은 수리할수 없는 물건입니다.\n"); return(0); } if(obj_ptr->type > MISSILE && obj_ptr->type != ARMOR) { - print(fd, " \"⳪ ȣ ֳ.\" մϴ.\n"); + print(fd, "수리점 주인이 \"무기나 방호구만 수리할 수 있네.\"라고 말합니다.\n"); return(0); } if(obj_ptr->shotscur > MAX(3, obj_ptr->shotsmax/10)) { - print(fd, " \"װ ѵ...\" մϴ.\n"); + print(fd, "수리점 주인이 \"그건 아직 멀쩡한데...\"라고 말합니다.\n"); return(0); } cost = obj_ptr->value / 4; if(ply_ptr->gold < cost) { - print(fd, " \"¥δ . Գ..\" մϴ.\n"); + print(fd, "수리점 주인이 \"공짜로는 수리해줄 수 없네. 돈을 더 벌어오게나..\"라고 말합니다.\n"); return(0); } - print(fd, " ο %ld dz־ϴ.\n", cost); + print(fd, "당신은 수리점 주인에게 수리비 %ld냥을 건네주었습니다.\n", cost); ply_ptr->gold -= cost; - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ο %1i dz־ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 수리를 위해 수리점 주인에게 %1i를 건네주었습니다.", ply_ptr, obj_ptr); broke = mrand(1,100) + bonus[ply_ptr->piety]; if((broke <= 15 && obj_ptr->shotscur < 1) || (broke <= 5 && obj_ptr->shotscur > 0)) { - print(fd, " \"̷~~! ϴ η߷ȳ. ̾ϳ\" մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "̷ Ǽ ߽ϴ."); + print(fd, "수리점 주인이 \"이런~~! 수리를 하다 부러뜨렸네. 미안하네\"라고 말합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "이런 주인이 실수를 했습니다."); /* if(obj_ptr->shotscur > 0) { */ - print(fd, " ſ ־ϴ.\n"); + print(fd, "수리점주인이 당신에게 돈을 돌려주었습니다.\n"); ply_ptr->gold += cost; - /* } */ + /* } 돈 돌려줌 */ del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); return(0); @@ -277,7 +276,7 @@ cmd *cmnd; if((F_ISSET(obj_ptr, OENCHA) || obj_ptr->adjustment) && mrand(1,50) > ply_ptr->piety) { - print(fd, " \" ٵǾ.\" մϴ.\n"); + print(fd, "수리점 주인이 \"수리가 다되었네.\"라고 말합니다.\n"); if(obj_ptr->type == ARMOR && obj_ptr->wearflag == BODY) obj_ptr->armor = MAX(obj_ptr->armor - obj_ptr->adjustment*2, 0); @@ -295,7 +294,7 @@ cmd *cmnd; obj_ptr->shotscur = (obj_ptr->shotsmax * mrand(5,9)) / 10; - print(fd, " ſ %i%j ǵ ݴϴ.\nװ ó Դϴ.\n", + print(fd, "수리점 주인이 당신에게 %i%j 되돌려 줍니다.\n그것은 거의 새것처럼 보입니다.\n", obj_ptr,"3"); return(0); @@ -318,15 +317,15 @@ creature *ply_ptr; fd = ply_ptr->fd; daytime = (int)(Time % 24L); - print(fd, " ð: %s %d.\n", - daytime > 11 ? "":"", + print(fd, "현재 시간: %s %d시.\n", + daytime > 11 ? "오후":"오전", daytime%12 == 0 ? 12 : daytime%12); t = time(0); str = ctime(&t); str[strlen(str)-1] = 0; - print(fd, " ð: %s (PST).\n", str); + print(fd, "실제 시간: %s (PST).\n", str); return(0); @@ -352,17 +351,17 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " Ű?\n"); + print(fd, "누구를 교란시키려구요?\n"); return(0); } /* if(F_ISSET(ply_ptr, SLEEP)) { - print(fd, "\n޽ ߴմϴ.\n"); + print(fd, "\n휴식을 중단합니다.\n"); F_CLR(ply_ptr, SLEEP); } */ if(ply_ptr->class != FIGHTER && ply_ptr->class != BARBARIAN && ply_ptr->class < INVINCIBLE) { - print(fd, "ǹ ˻縸 ִ Դϴ.\n"); + print(fd, "권법가와 검사만 쓸수 있는 기술입니다.\n"); return(0); } @@ -375,39 +374,39 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[1]) < 2) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런것은 여기 없습니다.\n"); return(0); } } if(crt_ptr->type == PLAYER) { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd, " 濡 ο ϴ.\n"); + print(fd, "이 방에서는 싸울 수 없습니다.\n"); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } if(is_charm_crt(ply_ptr->name, crt_ptr) && F_ISSET(crt_ptr, PCHARM)) { - print(fd, " %s ʹ ؼ ׷ ϴ.\n", crt_ptr->name); + print(fd, "당신은 %s를 너무 좋아해서 그렇게 할 수 없습니다.\n", crt_ptr->name); return(0); } @@ -424,8 +423,8 @@ cmd *cmnd; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "당신의 모습이 서서히 드러납니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러납니다.", ply_ptr); } @@ -439,8 +438,8 @@ cmd *cmnd; if(crt_ptr->type != PLAYER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } add_enm_crt(ply_ptr->name, crt_ptr); @@ -456,19 +455,19 @@ cmd *cmnd; if(crt_ptr->type == MONSTER) F_SET(crt_ptr, MBEFUD); - print(fd, " ̸ Դٰ ϸ鼭 %M%j ŵϴ.\n", crt_ptr,"3"); + print(fd, "당신은 이리저리 왔다갔다 하면서 %M%j 교란시킵니다.\n", crt_ptr,"3"); - print(crt_ptr->fd, "%M ƴٴմϴ.\n", ply_ptr); + print(crt_ptr->fd, "%M이 당신주위를 어지럽게 돌아다닙니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ۹ ϴ.", ply_ptr, crt_ptr); + "\n%M이 %M 주위를 뱅글뱅글 돕니다.", ply_ptr, crt_ptr); ply_ptr->lasttime[LT_ATTCK].interval = 2; } else { - print(fd, " ۵ Ͽϴ.\n"); - print(crt_ptr->fd, "\n%M Ű մϴ.\n", ply_ptr); + print(fd, "당신은 적을 교란시키는데 실패하였습니다.\n"); + print(crt_ptr->fd, "\n%M이 당신을 교란시키려고 합니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M%j Ű մϴ.", ply_ptr, crt_ptr,"3"); + "\n%M이 %M%j 교란시키려고 합니다.", ply_ptr, crt_ptr,"3"); ply_ptr->lasttime[LT_ATTCK].interval = 3; } @@ -499,17 +498,17 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2 || F_ISSET(ply_ptr, PBLIND)) { - print(fd, " ϱ?\n"); + print(fd, "누굴 때립니까?\n"); return(0); } /* if(F_ISSET(ply_ptr, SLEEP)){ - print(fd, "\n޽ ߴմϴ.\n"); + print(fd, "\n휴식을 중단합니다.\n"); F_CLR(ply_ptr, SLEEP); } */ if(ply_ptr->class != FIGHTER && ply_ptr->class != BARBARIAN && ply_ptr->class < INVINCIBLE) { - print(fd, "ǹ ˻縸 ִ Դϴ.\n"); + print(fd, "권법가와 검사만 쓸수 있는 기술입니다.\n"); return(0); } @@ -522,45 +521,45 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[1])<2) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 것은 여기 없습니다.\n"); return(0); } } if(crt_ptr->type != PLAYER && is_enm_crt(ply_ptr->name, crt_ptr)) { - print(fd, " %s ο Դϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s와 싸우는 중입니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } else if(crt_ptr->type == PLAYER) { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd, " 濡 ο ϴ.\n"); + print(fd, "이 방에서는 싸울 수 없습니다.\n"); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV) ) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } if(is_charm_crt(ply_ptr->name, crt_ptr)&& F_ISSET(crt_ptr, PCHARM)) { - print(fd, " %S%j ʹ ׷ ϴ.\n", crt_ptr->name,"3"); + print(fd, "당신은 %S%j 너무 좋아해 그렇게 할 수 없습니다.\n", crt_ptr->name,"3"); return(0); } @@ -580,26 +579,26 @@ cmd *cmnd; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "당신의 모습이 서서히 드러납니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러납니다.", ply_ptr); } if(crt_ptr->type != PLAYER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(F_ISSET(crt_ptr, MMGONL)) { - print(fd, " Ⱑ %M ƹҿ µ մϴ.\n", + print(fd, "당신의 무기가 %M에게 아무소용이 없는듯 합니다.\n", crt_ptr); return(0); } if(F_ISSET(crt_ptr, MENONL)) { if(!ply_ptr->ready[WIELD-1] || ply_ptr->ready[WIELD-1]->adjustment < 1) { - print(fd, " Ⱑ %M ƹ ҿ µ մϴ.\n", + print(fd, "당신의 무기가 %M에게 아무 소용이 없는듯 합니다.\n", crt_ptr); return(0); } @@ -619,7 +618,7 @@ cmd *cmnd; if(ply_ptr->ready[WIELD-1]) { if(ply_ptr->ready[WIELD-1]->shotscur < 1) { - print(fd, "\n%S%j μ Ƚϴ.\n", + print(fd, "\n%S%j 부서져 버렸습니다.\n", ply_ptr->ready[WIELD-1]->name,"1"); add_obj_crt(ply_ptr->ready[WIELD-1], ply_ptr); ply_ptr->ready[WIELD-1] = 0; @@ -664,19 +663,19 @@ cmd *cmnd; crt_ptr->hpcur -= n; - print(fd, " %d Ͱ ߽ϴ.\n", n); + print(fd, "당신은 %d점의 맹공을 가했습니다.\n", n); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %m Ͱ մϴ.", ply_ptr, crt_ptr); - print(crt_ptr->fd, "%M %d Ͱ ߽ϴ.\n", + "\n%M이 %m에게 맹공을 가합니다.", ply_ptr, crt_ptr); + print(crt_ptr->fd, "%M이 %d점의 맹공을 가했습니다.\n", ply_ptr, n); ply_ptr->lasttime[LT_ATTCK].interval = 1; if(crt_ptr->hpcur < 1) { - print(fd, " %M%j ׿ϴ.\n", crt_ptr,"3"); + print(fd, "당신은 %M%j 죽였습니다.\n", crt_ptr,"3"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); @@ -685,19 +684,19 @@ cmd *cmnd; check_for_flee(ply_ptr, crt_ptr); } else { - print(fd, " Ͱ ߽ϴ.\n"); - print(crt_ptr->fd, "\n%M ſ Ͱ Ϸ մϴ.\n", ply_ptr); + print(fd, "당신의 맹공이 실패했습니다.\n"); + print(crt_ptr->fd, "\n%M이 당신에게 맹공을 가하려 합니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %M Ͱ Ϸ մϴ.", ply_ptr, + "\n%M이 %M에게 맹공을 가하려 합니다.", ply_ptr, crt_ptr); } } else { - print(fd, " Ͱ ߽ϴ.\n"); - print(crt_ptr->fd, "%M ſ Ͱ Ϸ մϴ.\n", ply_ptr); + print(fd, "당신의 맹공이 실패했습니다.\n"); + print(crt_ptr->fd, "%M이 당신에게 맹공을 가하려 합니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %M Ͱ Ϸ մϴ.", ply_ptr, crt_ptr); + "\n%M이 %M에게 맹공을 가하려 합니다.", ply_ptr, crt_ptr); } return(0); @@ -746,7 +745,7 @@ cmd *cmnd; free(dum_ptr); - print(ply_ptr->fd, "Ͽϴ.\n"); + print(ply_ptr->fd, "저장하였습니다.\n"); return(0); @@ -810,7 +809,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ̾߱Ͻ÷?\n"); + print(fd, "누구에게 이야기하시려구요?\n"); return(0); } @@ -818,26 +817,26 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 것은 여기 없습니다.\n"); return(0); } F_CLR(ply_ptr, PHIDDN); if(cmnd->num == 2 || !F_ISSET(crt_ptr, MTALKS)) { - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %M%j ̾߱⸦ մϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %M%j 이야기를 합니다.", ply_ptr, crt_ptr,"2"); if(crt_ptr->talk[0]) { broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j %M \"%s\" ̾߱մϴ.", crt_ptr, "1", ply_ptr, + "\n%M%j %M에게 \"%s\"라고 이야기합니다.", crt_ptr, "1", ply_ptr, crt_ptr->talk); - print(fd, "\n%M%j ſ \"%s\" ̾߱մϴ.", crt_ptr,"1", + print(fd, "\n%M%j 당신에게 \"%s\"라고 이야기합니다.", crt_ptr,"1", crt_ptr->talk); } else broadcast_rom(-1, ply_ptr->rom_num, - "\n%M%j ϴ ٶ󺾴ϴ.", crt_ptr,"0"); + "\n%M%j 단지 당신을 멍하니 바라봅니다.", crt_ptr,"0"); if(F_ISSET(crt_ptr, MTLKAG)) add_enm_crt(ply_ptr->name, crt_ptr); } @@ -847,23 +846,23 @@ cmd *cmnd; if(!load_crt_tlk(crt_ptr)) return(PROMPT); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %M \"%s\" ϴ.", + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %M에게 \"%s\"에 관해 물어봅니다.", ply_ptr, crt_ptr, cmnd->str[2]); tp = crt_ptr->first_tlk; while(tp) { if(!strcmp(cmnd->str[2], tp->key)) { broadcast_rom(fd, ply_ptr->rom_num, - "\n%M%j %M \"%s\" ̾߱մϴ.", crt_ptr,"1", + "\n%M%j %M에게 \"%s\"라고 이야기합니다.", crt_ptr,"1", ply_ptr, tp->response); - print(fd, "\n%M%j ſ \"%s\" ̾߱մϴ.\n", + print(fd, "\n%M%j 당신에게 \"%s\"라고 이야기합니다.\n", crt_ptr, "1",tp->response); talk_action(ply_ptr, crt_ptr, tp); return(0); } tp = tp->next_tag; } - broadcast_rom(-1, ply_ptr->rom_num, "\n%M%j Ÿϴ.", crt_ptr,"1"); + broadcast_rom(-1, ply_ptr->rom_num, "\n%M%j 어깨를 으쓱 거립니다.", crt_ptr,"1"); if(F_ISSET(crt_ptr, MTLKAG)) add_enm_crt(ply_ptr->name, crt_ptr); } @@ -904,8 +903,8 @@ switch(tt->type){ case 1: /*attack */ add_enm_crt(ply_ptr->name, crt_ptr); broadcast_rom(ply_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j մϴ.\n",crt_ptr,"1",ply_ptr,"3"); - print(ply_ptr->fd,"\n%M%j մϴ.\n",crt_ptr,"1"); + "\n%M%j %M%j 공격합니다.\n",crt_ptr,"1",ply_ptr,"3"); + print(ply_ptr->fd,"\n%M%j 당신을 공격합니다.\n",crt_ptr,"1"); break; case 2: /*action command */ @@ -929,12 +928,12 @@ switch(tt->type){ case 3: /*cast */ if(tt->action){ n = crt_ptr->mpcur; - strcpy(cm.str[0],"ֹ"); + strcpy(cm.str[0],"주문"); strncpy(cm.str[1],tt->action,25); strcpy(cm.str[2],ply_ptr->name); cm.val[0] = cm.val[1] = cm.val[2] = 1; cm.num = 3; - sprintf(cm.fullstr,"%s %s ֹ",tt->action,ply_ptr->name); + sprintf(cm.fullstr,"%s %s 주문",tt->action,ply_ptr->name); i = 0; do { @@ -955,7 +954,7 @@ switch(tt->type){ &ospell[i]); } else if(is_enm_crt(ply_ptr->name,crt_ptr)){ - print(ply_ptr->fd,"\n%M%j ſ  ֹ Ŵ° ź߽ϴ.\n", + print(ply_ptr->fd,"\n%M%j 당신에게 어떤 주문을 거는것을 거부했습니다.\n", crt_ptr,"1"); return; } @@ -964,7 +963,7 @@ switch(tt->type){ if (spllist[i].splno != SRESTO && crt_ptr->mpcur == n) print(ply_ptr->fd, - "\n%M%j ſ ֹ ɾ ٰ մϴ.\n", + "\n%M%j 지금은 당신에게 주문을 걸어줄 수 없다고 사과합니다.\n", crt_ptr,"1"); } break; @@ -982,31 +981,31 @@ switch(tt->type){ if(weight_ply(ply_ptr) + weight_obj(obj_ptr) > max_weight(ply_ptr) || cnt>150) { - print(ply_ptr->fd, " ̻ ϴ.\n"); + print(ply_ptr->fd, "당신은 더이상 가질 수 없습니다.\n"); break; } if(obj_ptr->questnum && Q_ISSET(ply_ptr, obj_ptr->questnum-1)) { - print(ply_ptr->fd, " װ ϴ. %s\n", - " ̹ ӹ ޼߽ϴ."); + print(ply_ptr->fd, "당신은 그것을 가질 수 없습니다. %s\n", + "당신은 이미 이 임무를 달성했습니다."); break; } if(obj_ptr->questnum) { - print(ply_ptr->fd, "ӹ ޼! װ ʽÿ.\n"); + print(ply_ptr->fd, "임무 달성! 그것을 버리지 마십시요.\n"); Q_SET(ply_ptr, obj_ptr->questnum-1); ply_ptr->experience += quest_exp[obj_ptr->questnum-1]; - print(ply_ptr->fd, " ġ %ld ϴ.\n", + print(ply_ptr->fd, "당신은 경험치 %ld를 얻었습니다.\n", quest_exp[obj_ptr->questnum-1]); add_prof(ply_ptr,quest_exp[obj_ptr->questnum-1]); } add_obj_crt(obj_ptr, ply_ptr); - print(ply_ptr->fd,"\n%M%j ſ %i%j ݴϴ\n",crt_ptr,"1", obj_ptr,"3"); + print(ply_ptr->fd,"\n%M%j 당신에게 %i%j 줍니다\n",crt_ptr,"1", obj_ptr,"3"); broadcast_rom(ply_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M %i%j ݴϴ.\n", crt_ptr,"1",ply_ptr,obj_ptr,"3"); + "\n%M%j %M에게 %i%j 줍니다.\n", crt_ptr,"1",ply_ptr,obj_ptr,"3"); } else - print(ply_ptr->fd,"%M ſ ƹ͵ ʽϴ.\n",crt_ptr); + print(ply_ptr->fd,"%M는 당신에게 줄 물건을 아무것도 가지고 있지 않습니다.\n",crt_ptr); } break; default: @@ -1017,7 +1016,7 @@ return; /*************************************************************************/ /* chg_name */ /*************************************************************************/ -/* ̸ ٲٴ ƾ̴ */ +/* 물건의 이름을 바꾸는 루틴이다 */ int chg_name(ply_ptr, cmnd) creature *ply_ptr; @@ -1035,8 +1034,8 @@ cmd *cmnd; i =0; if (cmnd->num < 3){ - print(fd,"\n ̸ ٲٰ ?"); - print(fd," <> [#] ≮> \n"); + print(fd,"\n어떤 물건을 무슨 이름으로 바꾸고 싶으세요?"); + print(fd," <물건> [#] <이름> 명명\n"); return(PROMPT); } @@ -1058,21 +1057,21 @@ cmd *cmnd; if (!obj_ptr){ - print(fd,"׷ ."); + print(fd,"그런 물건은 없어요."); paste_command(cmnd->fullstr,len); return(PROMPT); } /* - if(F_ISSET(obj_ptr, ONEWEV) && !strcmp(obj_ptr->key[2], "̺Ʈ")) { + if(F_ISSET(obj_ptr, ONEWEV) && !strcmp(obj_ptr->key[2], "이벤트")) { strcpy(obj_ptr->key[2], ply_ptr->name); - print(fd, "̸ Ͽϴ."); + print(fd, "이름을 기록하였습니다."); paste_command(cmnd->fullstr, len); return(PROMPT); } */ if (!(F_ISSET(obj_ptr, OCNAME))){ - print(fd," Ҽ ִ ƴմϴ."); + print(fd,"명명 할수 있는 물건이 아닙니다."); paste_command(cmnd->fullstr,len); return(PROMPT); } @@ -1094,11 +1093,11 @@ cmd *cmnd; strncpy(obj_ptr->name,&cmnd->fullstr[i],80); obj_ptr->name[79]=0; F_CLR(obj_ptr, OCNAME); - print(fd, "\n̸ "); + print(fd, "\n이름 "); - print(fd," Ǿϴ.\n"); + print(fd,"명명 되었습니다.\n"); F_SET(obj_ptr, ONAMED); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ڽ ǿ ̸ մϴ.",ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 자신의 물건에 이름을 명명합니다.",ply_ptr); paste_command(cmnd->fullstr,len); return PROMPT; } @@ -1113,34 +1112,34 @@ cmd *cmnd; fd=ply_ptr->fd; if (cmnd->num < 2){ - print(fd,"\n ̰ ġ ŰDz?"); - print(fd," <> [#] ≮> \n"); + print(fd,"\n무엇에 이곳의 위치를 기억시키실껀가요?"); + print(fd," <물건> [#] <이름> 기억\n"); return(PROMPT); } obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if (!obj_ptr){ - print(fd,"׷ ."); + print(fd,"그런 물건은 없어요."); return(PROMPT); } if (ply_ptr->rom_num == 1001){ - print(fd,"忡 ų ϴ."); + print(fd,"광장에선 기억을 시킬 수 없습니다."); return(PROMPT); } if (obj_ptr->value != 1001){ - print(fd,"װ ̹  Ҹ ϰ ֽϴ."); + print(fd,"그것은 이미 어떤 장소를 기억하고 있습니다."); return(PROMPT); } - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ̰ Ҹ ŵϴ.",ply_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ڱ ٽ ϴ.",ply_ptr); - print(fd, "\n ̰ Ҹ ŵϴ."); - print(fd, "\n ڱ ٽ ϴ."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 초인의 돌에 이곳의 장소를 기억시킵니다.",ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M초인의 돌이 갑자기 밝은 빛을 내다 다시 투명해 집니다.",ply_ptr); + print(fd, "\n당신은 초인의 돌에 이곳의 장소를 기억시킵니다."); + print(fd, "\n초인의 돌이 갑자기 밝은 빛을 내다 다시 투명해 집니다."); - sprintf(obj_ptr->description, "%s Ÿϴ.\0", ply_ptr->parent_rom->name); + sprintf(obj_ptr->description, "%s의 광경이 어른거립니다.\0", ply_ptr->parent_rom->name); sprintf(obj_ptr->key[1], "%s\0", ply_ptr->parent_rom->name); obj_ptr->value=ply_ptr->parent_rom->rom_num; @@ -1150,10 +1149,10 @@ cmd *cmnd; /**********************************************************************/ -/* kick */ +/* kick 발차기 */ /**********************************************************************/ -/* ǹ ̴ */ +/* 권법가의 발차기 기술이다 */ int kick(ply_ptr, cmnd) creature *ply_ptr; @@ -1168,17 +1167,17 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2 || F_ISSET(ply_ptr, PBLIND)) { - print(fd, " մϱ?\n"); + print(fd, "누굴 공격합니까?\n"); return(0); } if(ply_ptr->class != BARBARIAN && ply_ptr->class < INVINCIBLE) { - print(fd, "ǹ ִ Դϴ.\n"); + print(fd, "권법가만 쓸수 있는 기술입니다.\n"); return(0); } /* if(F_ISSET(ply_ptr, SLEEP)) { - print(fd, "޽ ߴմϴ.\n"); + print(fd, "휴식을 중단합니다.\n"); F_CLR(ply_ptr, SLEEP); } */ @@ -1191,7 +1190,7 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!crt_ptr || crt_ptr == ply_ptr) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 것은 여기 없습니다.\n"); return(0); } @@ -1199,32 +1198,32 @@ cmd *cmnd; if(crt_ptr->type == PLAYER) { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd, " 濡 ο ϴ.\n"); + print(fd, "이 방에서는 싸울 수 없습니다.\n"); return(0); } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ؼ ٸ ڸ ϴ.\n"); + print(fd, "당신은 선해서 다른 사용자를 공격할 수 없습니다.\n"); return (0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, " ڴ ؼ ȣް ֽϴ.\n"); + print(fd, "그 사용자는 선해서 보호받고 있습니다.\n"); return (0); } } if(is_charm_crt(ply_ptr->name, crt_ptr)&& F_ISSET(crt_ptr, PCHARM)) { - print(fd, " %S%j ʹ ׷ ϴ.\n", crt_ptr->name,"3"); + print(fd, "당신은 %S%j 너무 좋아해 그렇게 할 수 없습니다.\n", crt_ptr->name,"3"); return(0); } @@ -1244,26 +1243,26 @@ cmd *cmnd; F_CLR(ply_ptr, PHIDDN); if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 巯ϴ.", + print(fd, "당신의 모습이 서서히 드러납니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 서서히 드러납니다.", ply_ptr); } if(crt_ptr->type != PLAYER) { if(F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s를 해칠 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(F_ISSET(crt_ptr, MMGONL)) { - print(fd, " %M ƹҿ µ մϴ.\n", + print(fd, "당신의 공격이 %M에게 아무소용이 없는듯 합니다.\n", crt_ptr); return(0); } if(F_ISSET(crt_ptr, MENONL) && ply_ptr->class < CARETAKER) { if(!ply_ptr->ready[WIELD-1] || ply_ptr->ready[WIELD-1]->adjustment < 1) { - print(fd, " %M ƹ ҿ µ մϴ.\n", + print(fd, "당신의 공격이 %M에게 아무 소용이 없는듯 합니다.\n", crt_ptr); return(0); } @@ -1293,10 +1292,10 @@ cmd *cmnd; crt_ptr->hpcur -= n; - print(fd, " %d ߽ϴ.\n", n); + print(fd, "당신은 발차기로 %d점의 공격을 가했습니다.\n", n); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %M մϴ.", ply_ptr, crt_ptr); - print(crt_ptr->fd, "%M %d ߽ϴ.\n", + "\n%M이 %M에게 발차기로 공격을 가합니다.", ply_ptr, crt_ptr); + print(crt_ptr->fd, "%M이 발차기로 %d점의 공격을 가했습니다.\n", ply_ptr, n); display_status(fd, crt_ptr); @@ -1305,10 +1304,10 @@ cmd *cmnd; ply_ptr->lasttime[LT_KICK].interval = 3; if(crt_ptr->hpcur < 1) { - print(fd, " %M%j ׿ϴ.\n", crt_ptr,"3"); + print(fd, "당신은 %M%j 죽였습니다.\n", crt_ptr,"3"); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M%j %M%j ׿ϴ.", ply_ptr,"1", + "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", crt_ptr,"3"); die(crt_ptr, ply_ptr); @@ -1317,19 +1316,19 @@ cmd *cmnd; check_for_flee(ply_ptr, crt_ptr); } else { - print(fd, " Ⱑ ߽ϴ.\n"); - print(crt_ptr->fd, "\n%M ſ ⸦ Ϸ մϴ.\n", ply_ptr); + print(fd, "당신의 발차기가 실패했습니다.\n"); + print(crt_ptr->fd, "\n%M이 당신에게 발차기를 하려고 합니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %M ⸦ Ϸ մϴ.", ply_ptr, + "\n%M이 %M에게 발차기를 하려고 합니다.", ply_ptr, crt_ptr); } } else { - print(fd, " Ⱑ ߽ϴ.\n"); - print(crt_ptr->fd, "%M ſ ⸦ Ϸ մϴ.\n", ply_ptr); + print(fd, "당신의 발차기가 실패했습니다.\n"); + print(crt_ptr->fd, "%M이 당신에게 발차기를 하려고 합니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, crt_ptr->rom_num, - "\n%M %M ⸦ Ϸ մϴ.", ply_ptr, crt_ptr); + "\n%M이 %M에게 발차기를 하려고 합니다.", ply_ptr, crt_ptr); } return(0); @@ -1351,13 +1350,13 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(F_ISSET(ply_ptr, PBLIND)) { - print(fd, "ƹ͵ ʽϴ!\n"); + print(fd, "아무것도 보이지 않습니다!\n"); return(0); } if(crt_ptr==NULL) { if(cmnd->num < 2) { - print(fd, " ¸ ðڽϱ?\n"); + print(fd, "누구의 상태를 보시겠습니까?\n"); return(0); } @@ -1366,7 +1365,7 @@ cmd *cmnd; } if(crt_ptr==NULL) { - print(fd, "׷ ⿡ ϴ.\n"); + print(fd, "그런것은 여기에 없습니다.\n"); return(0); } diff --git a/src/command9.c b/src/command9.c index cdb53bb..901e917 100644 --- a/src/command9.c +++ b/src/command9.c @@ -26,19 +26,17 @@ cmd *cmnd; room *rom_ptr; long amount; int fd; - int len; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " ַ?\n"); + print(fd, "누구에게 뇌물을 주려구요?\n"); return(0); } - len=strlen(cmnd->str[2]); - if(cmnd->num < 3 || len<3 || strcmp(&cmnd->str[2][len-2], "")) { - print(fd, ": ≮> <׼> \n"); + if(cmnd->num < 3 || !utf8_ends_with((unsigned char *)cmnd->str[2], (unsigned char *)"냥")) { + print(fd, "사용법: <몹이름> <액수>냥 뇌물\n"); return(0); } @@ -46,27 +44,27 @@ cmd *cmnd; cmnd->val[1]); if(!crt_ptr) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 것은 여기 없습니다.\n"); return(0); } amount = atol(cmnd->str[2]); if(amount < 1 || amount > ply_ptr->gold) { - print(fd, " ϴ.\n"); + print(fd, "돈의 단위는 음수가 될 수 없습니다.\n"); return(0); } if(amount < ((crt_ptr->level+3)/4)*895L || F_ISSET(crt_ptr, MPERMT)) { - print(fd, "%M ½ ޾ҽϴٸ ½ ʽϴ.\n", crt_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "%M %m ݴϴ.", + print(fd, "%M가 뇌물을 슬쩍 받았습니다만 꿈쩍도 하지 않습니다.\n", crt_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 %m에게 뇌물을 줍니다.", ply_ptr, crt_ptr); ply_ptr->gold -= amount; crt_ptr->gold += amount; savegame_nomsg(ply_ptr); } else { - print(fd, "%M ̼Ҹ 򰡷 ϴ.\n", crt_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "%M %m ݴϴ.", + print(fd, "%M이 뇌물을 받자 미소를 지으며 어딘가로 갑니다.\n", crt_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 %m에게 뇌물을 줍니다.", ply_ptr, crt_ptr); ply_ptr->gold -= amount; del_crt_rom(crt_ptr, rom_ptr); @@ -96,12 +94,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != RANGER && ply_ptr->class < INVINCIBLE) { - print(fd, " ִ Դϴ.\n"); + print(fd, "포졸만 사용할 수 있는 기술입니다.\n"); return(0); } if(F_ISSET(ply_ptr, PHASTE)) { - print(fd, " Ȱ Դϴ.\n"); + print(fd, "당신은 지금 활보법을 사용중입니다.\n"); return(0); } @@ -109,7 +107,7 @@ cmd *cmnd; t = time(0); if(t-i < 600L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (600L-t+i)/60L, (600L-t+i)%60L); return(0); } @@ -117,8 +115,8 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->dexterity]); if(mrand(1,100) <= chance) { - print(fd, " ø ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M Ȱ Ͽϴ.", ply_ptr); + print(fd, "당신의 동작이 좀더 민첩해진것 같습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 활보법을 사용하였습니다.", ply_ptr); F_SET(ply_ptr, PHASTE); ply_ptr->dexterity += 15; ply_ptr->lasttime[LT_HASTE].ltime = t; @@ -126,8 +124,8 @@ cmd *cmnd; 60L * (((ply_ptr->level+3)/4)/5); } else { - print(fd, "Ȱ Ͽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M Ȱ Ếϴ.", + print(fd, "활보법이 실패하였습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 활보법을 써봅니다.", ply_ptr); ply_ptr->lasttime[LT_HASTE].ltime = t - 590L; } @@ -155,12 +153,12 @@ cmd *cmnd; if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE) { - print(fd, "ڿ 縸 Ų ֽϴ.\n"); + print(fd, "불제자와 무사만이 신께 기원할 수 있습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PPRAYD)) { - print(fd, " ̹ ſ ϴ.\n"); + print(fd, "당신은 이미 신에게 빌었습니다.\n"); return(0); } @@ -168,7 +166,7 @@ cmd *cmnd; t = time(0); if(t-i < 600L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (600L-t+i)/60L, (600L-t+i)%60L); return(0); } @@ -176,16 +174,16 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->piety]); if(mrand(1,100) <= chance) { - print(fd, " ſ žӽ ֽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ſ մϴ.", ply_ptr); + print(fd, "당신은 매우 신앙심이 깊어지는 것을 느낄 수 있습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 신에게 기원합니다.", ply_ptr); F_SET(ply_ptr, PPRAYD); ply_ptr->piety += 5; ply_ptr->lasttime[LT_PRAYD].ltime = t; ply_ptr->lasttime[LT_PRAYD].interval = 300L; } else { - print(fd, " ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ſ մϴ.", + print(fd, "당신의 기원에 대한 신의 응답이 없습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 신에게 기원합니다.", ply_ptr); ply_ptr->lasttime[LT_PRAYD].ltime = t - 590L; } @@ -197,7 +195,7 @@ cmd *cmnd; /* updmg */ /**********************************************************************/ -/* ̰ ü° +5 Ÿġ ִ ̴. */ +/* 이것은 무적에게 체력과 도력 및 +5의 타격치를 주는 것이다. */ int up_dmg(ply_ptr, cmnd) creature *ply_ptr; @@ -209,12 +207,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class < INVINCIBLE) { - print(fd, " ִ Դϴ.\n"); + print(fd, "무적만 사용할 수 있는 기술입니다.\n"); return(0); } if(F_ISSET(ply_ptr, PUPDMG)) { - print(fd, " °ݹ Դϴ.\n"); + print(fd, "당신은 지금 잠력격발을 사용중입니다.\n"); return(0); } @@ -222,7 +220,7 @@ cmd *cmnd; t = time(0); if(t-i < 1200L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (1200L-t+i)/60L, (1200L-t+i)%60L); return(0); } @@ -230,8 +228,8 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->dexterity]); if(mrand(1,100) <= chance) { - print(fd, " ڽ ¤ ݹ߽ŵϴ.\n¸ Ⱑ ° ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ڽ ¤ Դϴ.", ply_ptr); + print(fd, "당신은 자신의 혈도를 짚으며 몸의 잠력을 격발시킵니다.\n온몸으로 기가 퍼져나가는것을 느낍니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 자신의 혈도를 짚으며 힘을 끌어들입니다.", ply_ptr); F_SET(ply_ptr, PUPDMG); ply_ptr->pdice += 5; ply_ptr->hpmax += 100; @@ -242,8 +240,8 @@ cmd *cmnd; ply_ptr->mpcur = ply_ptr->mpmax; } else { - print(fd, " ݹ߽۵ ߽ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M °ݹ õմϴ.", + print(fd, "힘을 격발시키는데 실패했습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 잠력격발을 시도합니다.", ply_ptr); ply_ptr->lasttime[LT_UPDMG].ltime = t - 960L; } @@ -253,10 +251,10 @@ cmd *cmnd; } /**********************************************************************/ -/* power */ +/* power 기공집결 */ /**********************************************************************/ -/* ̰ ˻翡 5 ִ ̴. */ +/* 이것은 검사에게 5점의 힘을 주는 것이다. */ int power(ply_ptr, cmnd) creature *ply_ptr; @@ -268,12 +266,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(ply_ptr->class != FIGHTER && ply_ptr->class < INVINCIBLE) { - print(fd, "˻縸 ִ Դϴ.\n"); + print(fd, "검사만 사용할 수 있는 기술입니다.\n"); return(0); } if(F_ISSET(ply_ptr, PPOWER)) { - print(fd, " Դϴ.\n"); + print(fd, "당신은 지금 기공집결을 사용중입니다.\n"); return(0); } @@ -281,7 +279,7 @@ cmd *cmnd; t = time(0); if(t-i < 600L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (600L-t+i)/60L, (600L-t+i)%60L); return(0); } @@ -289,8 +287,8 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->dexterity]); if(mrand(1,100) <= chance) { - print(fd, " ¸ Ʋ ⸦ մϴ.\n¸ Ⱑ ° ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ¸ Ʋ ɾ ⸦ ϴ.", ply_ptr); + print(fd, "당신은 가부좌를 틀고 기를 모으기 시작합니다.\n온몸으로 기가 퍼져나가는것을 느낍니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 가부좌를 틀고 앉아 기를 모읍니다.", ply_ptr); F_SET(ply_ptr, PPOWER); ply_ptr->strength += 3; ply_ptr->lasttime[LT_POWER].ltime = t; @@ -298,8 +296,8 @@ cmd *cmnd; 60L * (((ply_ptr->level+3)/4)/5); } else { - print(fd, " Ͽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M õմϴ.", + print(fd, "기공집결이 실패하였습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 기공집결을 시도합니다.", ply_ptr); ply_ptr->lasttime[LT_POWER].ltime = t - 590L; } @@ -311,10 +309,10 @@ cmd *cmnd; /**********************************************************************/ -/* accurate */ +/* accurate 살기충전 */ /**********************************************************************/ -/* ̰ ڰ Ͽ 3 ߷ ִ ̴. */ +/* 이것은 자객 도둑에게 3점의 명중률을 주는 것이다. */ int accurate(ply_ptr, cmnd) creature *ply_ptr; @@ -327,23 +325,23 @@ cmd *cmnd; if(ply_ptr->class != ASSASSIN && ply_ptr->class != THIEF && ply_ptr->class < INVINCIBLE) { - print(fd, "ڰ ϸ ִ Դϴ.\n"); + print(fd, "자객 도둑만 사용할 수 있는 기술입니다.\n"); return(0); } if(F_ISSET(ply_ptr, PSLAYE)) { - print(fd, " Դϴ.\n"); + print(fd, "당신은 지금 살기충전을 사용중입니다.\n"); return(0); } if(!ply_ptr->ready[WIELD-1]) { - print(fd, "ϰ ִ Ⱑ ϴ!\n"); + print(fd, "장비하고 있는 무기가 없습니다!\n"); return(0); } i = ply_ptr->lasttime[LT_SLAYE].ltime; t = time(0); if(t-i < 700L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (700L-t+i)/60L, (700L-t+i)%60L); return(0); } @@ -351,8 +349,8 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->dexterity]); if(mrand(1,100) <= chance) { - print(fd, " ⿡ Ǹ Դϴ.\n⿡ Ⱑ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ⿡ Ǹ Դϴ.", ply_ptr); + print(fd, "당신은 당신의 무기에 피를 먹입니다.\n무기에 살기가 감도는 것을 느낍니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 그의 무기에 피를 먹입니다.", ply_ptr); F_SET(ply_ptr, PSLAYE); ply_ptr->thaco -= 3; ply_ptr->lasttime[LT_SLAYE].ltime = t; @@ -360,8 +358,8 @@ cmd *cmnd; 60L * (((ply_ptr->level+3)/4)/5); } else { - print(fd, " Ͽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ⿡ õմϴ.", + print(fd, "살기충전이 실패하였습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 그의 무기에 살기충전을 시도합니다.", ply_ptr); ply_ptr->lasttime[LT_SLAYE].ltime = t - 590L; } @@ -372,10 +370,10 @@ cmd *cmnd; } /**********************************************************************/ -/* meditate */ +/* meditate 참선 */ /**********************************************************************/ -/* ̰ ڿ 3 ִ ̴. */ +/* 이것은 무사 불제자에게 3점의 지식을 주는 것이다. */ int meditate(ply_ptr, cmnd) creature *ply_ptr; @@ -388,19 +386,19 @@ cmd *cmnd; if(ply_ptr->class != PALADIN && ply_ptr->class != CLERIC && ply_ptr->class < INVINCIBLE) { - print(fd, " ڸ ִ Դϴ.\n"); + print(fd, "무사 불제자만 사용할 수 있는 기술입니다.\n"); return(0); } if(F_ISSET(ply_ptr, PMEDIT)) { - print(fd, " ߽ϴ.\n"); + print(fd, "당신은 벌써 참선을 했습니다.\n"); return(0); } i = ply_ptr->lasttime[LT_MEDIT].ltime; t = time(0); if(t-i < 700L) { - print(fd, "%d %02d ٸ.\n", + print(fd, "%d분 %02d초 기다리세요.\n", (700L-t+i)/60L, (700L-t+i)%60L); return(0); } @@ -408,8 +406,8 @@ cmd *cmnd; chance = MIN(85, ((ply_ptr->level+3)/4)*20+bonus[ply_ptr->piety]); if(mrand(1,100) <= chance) { - print(fd, " ڸ ɾ ϴ.\nӰ 繰 ٶ󺸴 ߿ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ڸ ɾ մϴ.", ply_ptr); + print(fd, "당신은 자리에 앉아 참선에 들어갑니다.\n새롭게 사물을 바라보는 눈이 뜨였습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 자리에 앉아 참선을 행합니다.", ply_ptr); F_SET(ply_ptr, PMEDIT); ply_ptr->intelligence += 3; ply_ptr->lasttime[LT_MEDIT].ltime = t; @@ -417,8 +415,8 @@ cmd *cmnd; 60L * (((ply_ptr->level+3)/4)/5); } else { - print(fd, " ȭԸ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M ϴٰ ȭԸ ϴ.", + print(fd, "참선도중 주화입마에 빠졌습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 참선을 하다가 주화입마에 빠졌습니다.", ply_ptr); ply_ptr->lasttime[LT_MEDIT].ltime = t - 590L; } @@ -446,7 +444,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(F_ISSET(ply_ptr, PPREPA)) { - print(fd, " ̹ ϰ ֽϴ."); + print(fd, "당신은 이미 함정들을 주의하고 있습니다."); return(0); } @@ -461,8 +459,8 @@ cmd *cmnd; ply_ptr->lasttime[LT_PREPA].ltime = t; ply_ptr->lasttime[LT_PREPA].interval = ply_ptr->class == DM ? 0:15; - print(fd, " ֳ 캸 ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ϸ ϴ.", + print(fd, "당신은 이제부터 함정이 있나 살펴보며 갑니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 함정을 조심하며 갑니다.", ply_ptr); F_SET(ply_ptr, PPREPA); if(F_ISSET(ply_ptr, PBLIND)) @@ -491,11 +489,11 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 2) { - print(fd, " Ͻ÷?"); + print(fd, "무엇을 사용하시려구요?"); return(0); } - if(!strcmp(cmnd->str[1], "")) + if(!strcmp(cmnd->str[1], "모두")) return(wear(ply_ptr, cmnd)); obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], @@ -504,7 +502,7 @@ cmd *cmnd; obj_ptr = find_obj(ply_ptr, rom_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr || !F_ISSET(obj_ptr, OUSEFL)) { - print(fd, " Ͻ÷?"); + print(fd, "무엇을 사용하시려구요?"); return(0); } else if(F_ISSET(obj_ptr, OUSEFL)) { @@ -546,7 +544,7 @@ cmd *cmnd; case LIGHTSOURCE: rtn = hold(ply_ptr, cmnd); break; default: - print(fd, "װ  Ͻ÷?\n"); + print(fd, "그것을 어떻게 사용하시려구요?\n"); rtn = 0; } return(rtn); @@ -575,7 +573,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num == 1) { - strcpy(outstr, " źε : "); + strcpy(outstr, "듣기 거부된 사용자: "); ign = Ply[fd].extr->first_ignore; n = 0; while(ign) { @@ -585,7 +583,7 @@ cmd *cmnd; ign = ign->next_tag; } if(!n) - strcat(outstr, "."); + strcat(outstr, "없음."); else { outstr[strlen(outstr)-2] = '.'; outstr[strlen(outstr)-1] = 0; @@ -620,7 +618,7 @@ cmd *cmnd; } if(n) { - print(fd, "%s ̾߱ ź 󿡼 մϴ.", name); + print(fd, "%s님을 이야기 듣기 거부 대상에서 삭제합니다.", name); return(0); } @@ -631,12 +629,11 @@ cmd *cmnd; strcpy(ign->enemy, name); ign->next_tag = Ply[fd].extr->first_ignore; Ply[fd].extr->first_ignore = ign; - print(fd, "%s ̾߱ ź ߰մϴ.\n", name); + print(fd, "%s님을 이야기 듣기 거부 대상에 추가합니다.\n", name); } else - print(fd, " ڴ ƴմϴ.\n"); + print(fd, "그 사용자는 접속중이 아닙니다.\n"); return(0); } - diff --git a/src/creature.c b/src/creature.c index 615a8cc..3c0985c 100644 --- a/src/creature.c +++ b/src/creature.c @@ -301,7 +301,7 @@ creature *att_ptr; expgroup = MIN(expgroup, crt_ptr->experience); ply_ptr->experience += expgroup; print(ply_ptr->fd, - "\n %M%j ׿ ġ %d ޾ҽϴ.", + "\n당신은 %M%j 죽여 경험치 %d를 받았습니다.", crt_ptr,"3",expgroup); ply_ptr->alignment -= crt_ptr->alignment/5; if(ply_ptr->alignment > 1000) @@ -312,7 +312,7 @@ creature *att_ptr; ep = ep->next_tag; } if(!F_ISSET(crt_ptr, MTRADE)){ - sprintf(str, "\n%s%s ִ: ", crt_str(crt_ptr, 0,INV),under_han(crt_str(crt_ptr, 0,INV))?"":""); + sprintf(str, "\n%s%s 가지고 있던것: ", crt_str(crt_ptr, 0,INV),under_han(crt_str(crt_ptr, 0,INV))?"이":"가"); n = strlen(str); i = list_obj(&str[n], att_ptr, crt_ptr->first_obj); } @@ -332,7 +332,7 @@ creature *att_ptr; if(crt_ptr->gold) { load_obj(0, &obj_ptr); - sprintf(obj_ptr->name, "%d", crt_ptr->gold); + sprintf(obj_ptr->name, "%d냥", crt_ptr->gold); if(i) strcat(str, ", "); strcat(str, obj_ptr->name); @@ -380,7 +380,7 @@ creature *att_ptr; if(crt_ptr->level < 20) crt_ptr->experience -= crt_ptr->experience/20; else { - /* ġ ° */ + /* 고레벨 경험치 깍는거 조정 */ if(crt_ptr->experience/15 > 100000) { crt_ptr->experience -= 100000; } @@ -470,7 +470,7 @@ if(!F_ISSET(rom_ptr, RSUVIV) && F_CLR(crt_ptr, PDISEA); if(!F_ISSET(rom_ptr,RSUVIV) && - check_war(att_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { /* ̹忡 ״. */ + check_war(att_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { /* 서바이벌장에서 장비 그대로. */ if(crt_ptr->ready[WIELD-1] && !crt_ptr->ready[WIELD-1]->questnum && !F_ISSET(crt_ptr->ready[WIELD-1], ONEWEV) && !F_ISSET(crt_ptr->ready[WIELD-1], OCURSE) && !F_ISSET(crt_ptr->ready[WIELD-1], CONTAINER)) { add_obj_rom(crt_ptr->ready[WIELD-1], @@ -499,31 +499,31 @@ if(!F_ISSET(rom_ptr, RSUVIV) && if(!F_ISSET(rom_ptr, RSUVIV)) { if(crt_ptr == att_ptr) - broadcast_all("\n### ּϰԵ %s ׾ϴ.", crt_ptr->name); + broadcast_all("\n### 애석하게도 %s님이 죽었습니다.", crt_ptr->name); else - broadcast_all("\n### ּϰԵ %s %1m ׾ϴ.", + broadcast_all("\n### 애석하게도 %s님이 %1m에게 죽었습니다.", crt_ptr->name, att_ptr); all_broad_time=time(0); - } /* 忡 ׾ ȳ. */ + } /* 대련장에서는 죽어도 말이 안나오게. */ if(crt_ptr->type == PLAYER && F_ISSET(crt_ptr, PFMBOS)) { if(check_war_one(crt_ptr->daily[DL_EXPND].max) == 0) { - broadcast_all("\n### [%s] аŸ ְ ׾ϴ.", + broadcast_all("\n### [%s] 패거리의 문주가 죽었습니다.", family_str[crt_ptr->daily[DL_EXPND].max]); - broadcast_all("\n### [%s] аŸ £ ߽ϴ.", + broadcast_all("\n### [%s] 패거리는 전쟁에서 패했습니다.", family_str[crt_ptr->daily[DL_EXPND].max]); AT_WAR = CALLWAR1 = CALLWAR2 = 0; } } del_ply_rom(crt_ptr, rom_ptr); - load_rom(1008, &rom_ptr); /* °... */ + load_rom(1008, &rom_ptr); /* 죽으면 가는곳... */ add_ply_rom(crt_ptr, rom_ptr); savegame(crt_ptr, 0); print(crt_ptr->fd, - " 鼭  ߷Ƚϴ.\n"); + "당신은 죽으면서 몇가지 물건을 떨어뜨렸습니다.\n"); } } @@ -598,14 +598,14 @@ creature *crt_ptr; if(crt_ptr->questnum) { if(!Q_ISSET(ply_ptr,crt_ptr->questnum-1)) { - print(ply_ptr->fd, "\nմϴ. ӹ ޼Ͽϴ.\n"); + print(ply_ptr->fd, "\n축하합니다. 당신은 임무를 달성하였습니다.\n"); Q_SET(ply_ptr, crt_ptr->questnum-1); ply_ptr->experience += quest_exp[crt_ptr->questnum-1]; - print(ply_ptr->fd, " ġ %ld ϴ.\n", + print(ply_ptr->fd, "당신은 경험치 %ld를 얻었습니다.\n", quest_exp[crt_ptr->questnum-1]); add_prof(ply_ptr,quest_exp[crt_ptr->questnum-1]); } - else print(ply_ptr->fd, "\n ̹ ӹ ޼Ͽ ġ ڰ ϴ.\n"); + else print(ply_ptr->fd, "\n당신은 이미 임무를 달성하여 경험치를 받을 자격이 없습니다.\n"); } if(F_ISSET(crt_ptr, MSUMMO)) { @@ -644,7 +644,7 @@ creature *crt_ptr; if(!F_ISSET(xp->ext, XSECRT) && !F_ISSET(xp->ext, XCLOSD) && is_rom_loaded(xp->ext->room) && mrand(1,100) < 75) { broadcast_rom(-1, rom_ptr->rom_num, - "\n%M%j %s ϴ.", crt_ptr, "1", + "\n%M%j %s쪽으로 도망갔습니다.", crt_ptr, "1", xp->ext->name); die_perm_crt(ply_ptr, crt_ptr); del_crt_rom(crt_ptr, rom_ptr); @@ -678,36 +678,36 @@ creature *crt_ptr; diff = MAX(-4, diff); diff = MIN(4, diff); - sprintf(he, "%s", F_ISSET(crt_ptr, MMALES) ? "":"׳"); - sprintf(him, "%s", F_ISSET(crt_ptr, MMALES) ? "":"׳"); + sprintf(he, "%s", F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); + sprintf(him, "%s", F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); switch(diff) { case 0: - print(fd, "%s Ű ´ Դϴ!\n", he); + print(fd, "%s는 당신과 꼭 맞는 상대입니다!\n", he); break; case 1: - print(fd, "%s ̱ ֽϴ.\n", he); + print(fd, "%s는 별 무리없이 이길 수 있습니다.\n", he); break; case -1: - print(fd, "%s ̱ ֽϴ..\n", he); + print(fd, "%s는 운이 좋으면 이길 수 있습니다..\n", he); break; case 2: - print(fd, "%s ȵ̰ ̱ ֽϴ.\n", he); + print(fd, "%s는 별로 힘 안들이고 이길수 있습니다.\n", he); break; case -2: - print(fd, "%s ϱ ڴµ?\n", he); + print(fd, "%s는 상대하기 힘들겠는데요?\n", he); break; case 3: - print(fd, "%s ս Ҽ ֽϴ.\n", he); + print(fd, "%s는 손쉽게 상대할수 있습니다.\n", he); break; case -3: - print(fd, " %s µ ȵ˴ϴ.\n", he); + print(fd, "당신은 %s에게 쨉도 안됩니다.\n", he); break; case 4: - print(fd, "%s ѹ濡 ֽϴ.\n", him); + print(fd, "%s는 한방에 보낼수 있습니다.\n", him); break; case -4: - print(fd, "%s ڸ ° ̴ϴ.\n", he); + print(fd, "%s는 보자마자 도망가는것이 좋을겁니다.\n", he); break; } } @@ -817,7 +817,7 @@ creature *ply_ptr; /* dm_create_crt */ /**********************************************************************/ -/* ȯϴ ƾ̴. */ +/* 몹이 죽으면 몹을 소환하는 루틴이다. */ int summon_crt(ply_ptr, sum_ptr, num) creature *ply_ptr; diff --git a/src/dm1.c b/src/dm1.c index d9c4026..a22a4e2 100644 --- a/src/dm1.c +++ b/src/dm1.c @@ -46,7 +46,7 @@ cmd *cmnd; cp2 = ply_ptr->first_fol; } if(cp2){ - print(ply_ptr->fd," ׷쿡 ."); + print(ply_ptr->fd,"먼저 그룹에서 나오세요."); return 0; } @@ -55,20 +55,20 @@ cmd *cmnd; if((ply_ptr->class==SUB_DM || ply_ptr->class==ZONEMAKER) && load_rom(cmnd->val[0]-1, &rom_ptr) >= 0) { if(F_ISSET(rom_ptr, RSHOPP)) { - print(ply_ptr->fd, "̵ Դϴ."); + print(ply_ptr->fd, "순간이동이 금지된 구역입니다."); return(0); } } if(load_rom(cmnd->val[0], &rom_ptr) < 0) { - print(ply_ptr->fd, " (%d)", cmnd->val[0]); + print(ply_ptr->fd, "에러 (%d)", cmnd->val[0]); return(0); } cp = ply_ptr->first_fol; while(cp) { if(F_ISSET(cp->crt, MDMFOL) && cp->crt->parent_rom == ply_ptr->parent_rom) { del_crt_rom(cp->crt, ply_ptr->parent_rom); - broadcast_rom(ply_ptr->fd, ply_ptr->rom_num,"%M%j θ Ÿϴ.\n", cp->crt,"1"); + broadcast_rom(ply_ptr->fd, ply_ptr->rom_num,"%M%j 주위를 두리번 거립니다.\n", cp->crt,"1"); add_crt_rom(cp->crt, rom_ptr, 1); add_active(cp->crt); } @@ -83,14 +83,14 @@ cmd *cmnd; crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || crt_ptr == ply_ptr || (crt_ptr->class >= SUB_DM && ply_ptr->class fd, "%S%j ƴմϴ.", cmnd->str[1],"0"); + print(ply_ptr->fd, "%S%j 접속중이 아닙니다.", cmnd->str[1],"0"); return(0); } cp = ply_ptr->first_fol; while(cp) { if(F_ISSET(cp->crt, MDMFOL) && cp->crt->parent_rom == ply_ptr->parent_rom) { del_crt_rom(cp->crt, ply_ptr->parent_rom); - broadcast_rom(ply_ptr->fd, ply_ptr->rom_num,"%M%j θ Ÿ ֽϴ.", cp->crt,"1"); + broadcast_rom(ply_ptr->fd, ply_ptr->rom_num,"%M%j 주위를 두리번 거리며 있습니다.", cp->crt,"1"); add_crt_rom(cp->crt, crt_ptr->parent_rom, 1); add_active(cp->crt); } @@ -105,7 +105,7 @@ cmd *cmnd; crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || crt_ptr == ply_ptr || (ply_ptr->class < DM && crt_ptr->class == DM && F_ISSET(crt_ptr, PDMINV))) { - print(ply_ptr->fd, "%S%j ƴմϴ.", cmnd->str[1],"0"); + print(ply_ptr->fd, "%S%j 접속중이 아닙니다.", cmnd->str[1],"0"); return(0); } lowercize(cmnd->str[2], 1); @@ -114,7 +114,7 @@ cmd *cmnd; else crt_ptr2 = find_who(cmnd->str[2]); if(!crt_ptr2) { - print(ply_ptr->fd, "%S%j ƴմϴ.", cmnd->str[1],"0"); + print(ply_ptr->fd, "%S%j 접속중이 아닙니다.", cmnd->str[1],"0"); return(0); } del_ply_rom(crt_ptr, crt_ptr->parent_rom); @@ -156,12 +156,12 @@ cmd *cmnd; index=cut_command(cmnd->fullstr); if(strlen(&cmnd->fullstr[i]) < 1) { - print(fd, " Ϸ?"); + print(fd, "무엇을 공지하려구요?"); return(0); } print(fd, "Ok.\n"); - broadcast_wiz("\n>>> (%s): %s", ply_ptr->name, + broadcast_wiz("\n>>> 공지(%s): %s", ply_ptr->name, &cmnd->fullstr[i]); paste_command(cmnd->fullstr,index); @@ -196,7 +196,7 @@ cmd *cmnd; while(cp) { ctemp = cp->next_tag; if(F_ISSET (cp->crt, MDMFOL)) { - print (cp->crt->following->fd, "%M ׸ ϴ.\n", cp->crt); + print (cp->crt->following->fd, "%M이 당신을 그만 따릅니다.\n", cp->crt); cp2 = cp->crt->following->first_fol; if(cp2->crt == cp->crt) cp->crt->following->first_fol = cp->next_tag; @@ -219,7 +219,7 @@ cmd *cmnd; op = otemp; } - print(fd, "ûҵǾϴ.\n"); + print(fd, "청소되었습니다.\n"); return(0); } @@ -332,7 +332,7 @@ cmd *cmnd; */ if(strlen(&cmnd->fullstr[0]) < 1) { - print(fd, " 鿡 ˸?"); + print(fd, "무슨말을 방의 사람들에게 알리죠?"); return(0); } @@ -409,7 +409,7 @@ cmd *cmnd; if(ply_ptr->class!=ZONEMAKER && ply_ptr->class < SUB_DM) return(PROMPT); - print(ply_ptr->fd, "ȣ #%d\n", ply_ptr->parent_rom->rom_num); + print(ply_ptr->fd, "방번호 #%d\n", ply_ptr->parent_rom->rom_num); return(0); } @@ -431,7 +431,7 @@ cmd *cmnd; flush_crt(); print(ply_ptr->fd, - "޸ ũ о帳ϴ.\n"); + "메모리의 괴물과 물건을 디스크에서 새로 읽어드립니다.\n"); return(0); } @@ -450,7 +450,7 @@ cmd *cmnd; return(PROMPT); if(reload_rom(ply_ptr->rom_num) < 0) - print(ply_ptr->fd, "߽ϴ.\n"); + print(ply_ptr->fd, "실패했습니다.\n"); else print(ply_ptr->fd, "Ok.\n"); @@ -471,7 +471,7 @@ cmd *cmnd; return(PROMPT); if(resave_rom(ply_ptr->rom_num) < 0) - print(ply_ptr->fd, " .\n"); + print(ply_ptr->fd, "저장 실패.\n"); else print(ply_ptr->fd, "Ok.\n"); @@ -495,12 +495,12 @@ cmd *cmnd; return(PROMPT); if(load_obj(cmnd->val[0], &obj_ptr) < 0) { - print(ply_ptr->fd, " (%d)\n", cmnd->val[0]); + print(ply_ptr->fd, "에러 (%d)\n", cmnd->val[0]); return(0); } if(F_ISSET(obj_ptr, ORENCH)) rand_enchant(obj_ptr); - print(ply_ptr->fd, "%s ǰ ߽߰ϴ.\n", obj_ptr->name); + print(ply_ptr->fd, "%s를 소지품에 추가했습니다.\n", obj_ptr->name); add_obj_crt(obj_ptr, ply_ptr); return(0); } @@ -549,7 +549,7 @@ cmd *cmnd; if(load_crt(num, &crt_ptr) < 0) { - print(ply_ptr->fd, " (%d)\n", cmnd->val[0]); + print(ply_ptr->fd, "에러 (%d)\n", cmnd->val[0]); return(0); } t = time(0); @@ -621,11 +621,11 @@ cmd *cmnd; cmnd->str[1], cmnd->val[1]); if(!obj_ptr) - print(ply_ptr->fd, ".\n"); + print(ply_ptr->fd, "실패.\n"); else { F_SET(obj_ptr, OPERM2); F_SET(obj_ptr, OTEMPP); - print(ply_ptr->fd, ".\n"); + print(ply_ptr->fd, "성공.\n"); } return(0); } @@ -646,12 +646,12 @@ cmd *cmnd; if(F_ISSET(ply_ptr, PDMINV)) { F_CLR(ply_ptr, PDMINV); ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, " .\n"); + print(ply_ptr->fd, "투명 해제.\n"); } else { F_SET(ply_ptr, PDMINV); ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, " .\n"); + print(ply_ptr->fd, "투명 설정.\n"); } ANSI(ply_ptr->fd, WHITE); return(0); @@ -678,7 +678,7 @@ cmd *cmnd; lowercize(cmnd->str[1], 1); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr) { - print(ply_ptr->fd, "%s ϴ.\n", cmnd->str[1]); + print(ply_ptr->fd, "%s가 없습니다.\n", cmnd->str[1]); return(0); } } @@ -716,7 +716,7 @@ cmd *cmnd; lowercize(cmnd->str[1], 1); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr) { - print(ply_ptr->fd, "%s ϴ.\n", cmnd->str[1]); + print(ply_ptr->fd, "%s가 없습니다.\n", cmnd->str[1]); return(0); } @@ -726,7 +726,7 @@ cmd *cmnd; cfd = crt_ptr->fd; if(!(Ply[cfd].io->fn == command && Ply[cfd].io->fnparam == 1)) { - print(ply_ptr->fd, "%s Ҽ ϴ.\n", + print(ply_ptr->fd, "%s를 현재 강요할수 없습니다.\n", cmnd->str[1]); return(0); } diff --git a/src/dm2.c b/src/dm2.c index 83c580b..1c89716 100644 --- a/src/dm2.c +++ b/src/dm2.c @@ -44,7 +44,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; else { if(load_rom(cmnd->val[0], &rom_ptr) < 0) { - print(ply_ptr->fd, " (%d)\n", cmnd->val[0]); + print(ply_ptr->fd, "에러 (%d)\n", cmnd->val[0]); return(0); } } @@ -111,7 +111,7 @@ cmd *cmnd; } else - print(fd, "׷ ϴ.\n"); + print(fd, "그런건 없습니다.\n"); return(0); @@ -134,8 +134,8 @@ room *rom_ptr; fd = ply_ptr->fd; - print(fd, "ȣ #: %d\n", rom_ptr->rom_num); - print(fd, "̸: %s\n", rom_ptr->name); + print(fd, "방번호 #: %d\n", rom_ptr->rom_num); + print(fd, "이름: %s\n", rom_ptr->name); print(fd, "Special: %d\n", rom_ptr->special); print(fd, "Traffic: %d%%\n", rom_ptr->traffic); @@ -157,30 +157,30 @@ room *rom_ptr; print(fd, "Trap type: "); switch(rom_ptr->trap){ case TRAP_PIT: - print(fd," ( %d)\n", + print(fd,"구덩이 함정 (연결된 방%d)\n", rom_ptr->trapexit); break; case TRAP_DART: - print(fd,"ȭ \n"); + print(fd,"독화살 함정\n"); break; case TRAP_BLOCK: - print(fd," \n"); + print(fd,"바위 함정\n"); break; case TRAP_MPDAM: - print(fd," \n"); + print(fd,"도력 함정\n"); break; case TRAP_RMSPL: - print(fd,"ּ \n"); + print(fd,"주술 함정\n"); break; case TRAP_NAKED: - print(fd," \n"); + print(fd,"장비 함정\n"); break; case TRAP_ALARM: - print(fd," 溸 ( %d)\n", + print(fd," 경보 함정( 보초 방 %d)\n", rom_ptr->trapexit); break; default: - print(fd,"߸ #\n"); + print(fd,"잘못된 함정 #\n"); break; } } @@ -289,48 +289,48 @@ creature *crt_ptr; if(crt_ptr->type == PLAYER && Ply[crt_ptr->fd].io) { print(fd, "\n%s %s:\n", crt_ptr->name, title_ply(ply_ptr,crt_ptr)); - print(fd, "ּ: %s@%s\n\n", Ply[crt_ptr->fd].io->userid, + print(fd, "주소: %s@%s\n\n", Ply[crt_ptr->fd].io->userid, Ply[crt_ptr->fd].io->address); } else { - print(fd, "̸: %s\n", crt_ptr->name); - print(fd, ": %s\n", crt_ptr->description); - print(fd, "̾߱: %s\n", crt_ptr->talk); - print(fd, "ܾ: %s %+20s%+20s\n\n",crt_ptr->key[0],crt_ptr->key[1], crt_ptr->key[2]); + print(fd, "이름: %s\n", crt_ptr->name); + print(fd, "설명: %s\n", crt_ptr->description); + print(fd, "이야기: %s\n", crt_ptr->talk); + print(fd, "단어: %s %+20s%+20s\n\n",crt_ptr->key[0],crt_ptr->key[1], crt_ptr->key[2]); } - print(fd, ": %-20d : %s\n", + print(fd, "레벨: %-20d 종족: %s\n", crt_ptr->level, race_str[crt_ptr->race]); - print(fd, ": %-20s : %s %d\n\n", + print(fd, "직업: %-20s 성향: %s %d\n\n", class_str[crt_ptr->class], - F_ISSET(crt_ptr, PCHAOS) ? "":"", crt_ptr->alignment); + F_ISSET(crt_ptr, PCHAOS) ? "악":"선", crt_ptr->alignment); - print(fd, ": %d", crt_ptr->experience); - print(fd, " : %d\n", crt_ptr->gold); + print(fd, "경험: %d", crt_ptr->experience); + print(fd, " 돈: %d\n", crt_ptr->gold); - print(fd, "ü: %d/%d", crt_ptr->hpcur, crt_ptr->hpmax); - print(fd, " : %d/%d\n", crt_ptr->mpcur, crt_ptr->mpmax); + print(fd, "체력: %d/%d", crt_ptr->hpcur, crt_ptr->hpmax); + print(fd, " 도력: %d/%d\n", crt_ptr->mpcur, crt_ptr->mpmax); - print(fd, ": %d", (100-crt_ptr->armor)); + print(fd, "방어력: %d", (100-crt_ptr->armor)); print(fd, " THAC0: %d\n", crt_ptr->thaco); - print(fd, "Ÿ: %dd%d+%d\n", crt_ptr->ndice, crt_ptr->sdice, + print(fd, "타격: %dd%d+%d\n", crt_ptr->ndice, crt_ptr->sdice, crt_ptr->pdice); - print(fd, "[%2d] ø[%2d] [%2d] [%2d] žӽ[%2d]\n", + print(fd, "힘[%2d] 민첩[%2d] 맷집[%2d] 지능[%2d] 신앙심[%2d]\n", crt_ptr->strength, crt_ptr->dexterity, crt_ptr->constitution, crt_ptr->intelligence, crt_ptr->piety); strcpy(str, "Flags set: "); if(crt_ptr->type == PLAYER) { print(fd, - ": %ld : %ld : %ld â: %ld : %ld\n", + "도: %ld 검: %ld 봉: %ld 창: %ld 궁: %ld\n", crt_ptr->proficiency[0], crt_ptr->proficiency[1], crt_ptr->proficiency[2], crt_ptr->proficiency[3], crt_ptr->proficiency[4]); print(fd, - ": %ld ٶ: %ld : %ld : %ld\n", + "땅: %ld 바람: %ld 불: %ld 물: %ld\n", crt_ptr->realm[0], crt_ptr->realm[1], crt_ptr->realm[2], crt_ptr->realm[3]); if(F_ISSET(crt_ptr, PBLESS)) strcat(str, "Bless, "); @@ -475,38 +475,38 @@ object *obj_ptr; fd = ply_ptr->fd; - print(fd, "̸: %s\n", obj_ptr->name); - print(fd, ": %s\n", obj_ptr->description); - print(fd, ": %s\n", obj_ptr->use_output); - print(fd, "ܾ: %s %+20s %+20s\n\n",obj_ptr->key[0],obj_ptr->key[1], obj_ptr->key[2]); - print(fd, "Ÿ: %dd%d + %d", obj_ptr->ndice, obj_ptr->sdice, + print(fd, "이름: %s\n", obj_ptr->name); + print(fd, "설명: %s\n", obj_ptr->description); + print(fd, "사용: %s\n", obj_ptr->use_output); + print(fd, "단어: %s %+20s %+20s\n\n",obj_ptr->key[0],obj_ptr->key[1], obj_ptr->key[2]); + print(fd, "타격: %dd%d + %d", obj_ptr->ndice, obj_ptr->sdice, obj_ptr->pdice); if(obj_ptr->adjustment) print(fd, " (+%d)\n", obj_ptr->adjustment); else print(fd, "\n"); - print(fd, "ȸ %d/%d\n", obj_ptr->shotscur, obj_ptr->shotsmax); + print(fd, "사용회수 %d/%d\n", obj_ptr->shotscur, obj_ptr->shotsmax); - print(fd, ": "); + print(fd, "종류: "); if(obj_ptr->type <= MISSILE) { switch(obj_ptr->type) { - case SHARP: print(fd, ""); break; - case THRUST: print(fd, ""); break; - case BLUNT: print(fd, ""); break; - case POLE: print(fd, "â"); break; - case MISSILE: print(fd, ""); break; + case SHARP: print(fd, "도"); break; + case THRUST: print(fd, "검"); break; + case BLUNT: print(fd, "봉"); break; + case POLE: print(fd, "창"); break; + case MISSILE: print(fd, "궁"); break; } - print(fd, " .\n"); + print(fd, " 무기.\n"); } else print(fd, "%d\n", obj_ptr->type); - print(fd, ": %2.2d", obj_ptr->armor); - print(fd, " : %5.5d", obj_ptr->value); - print(fd, " : %2.2d", obj_ptr->weight); + print(fd, "방어력: %2.2d", obj_ptr->armor); + print(fd, " 가격: %5.5d", obj_ptr->value); + print(fd, " 무게: %2.2d", obj_ptr->weight); if(obj_ptr->questnum) - print(fd, " ӹ: %d\n", obj_ptr->questnum); + print(fd, " 임무: %d\n", obj_ptr->questnum); else print(fd, "\n"); @@ -549,14 +549,14 @@ object *obj_ptr; else strcat(str, "Organization 0, "); if(F_ISSET(obj_ptr, OCLSEL)){ strcat(str, "Cls-Sel: "); - if (F_ISSET(obj_ptr, OASSNO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OBARBO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OCLERO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OFIGHO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OMAGEO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OPALAO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, ORNGRO)) strcat(str, ", "); - if (F_ISSET(obj_ptr, OTHIEO)) strcat(str, ", "); + if (F_ISSET(obj_ptr, OASSNO)) strcat(str, "자, "); + if (F_ISSET(obj_ptr, OBARBO)) strcat(str, "권, "); + if (F_ISSET(obj_ptr, OCLERO)) strcat(str, "불, "); + if (F_ISSET(obj_ptr, OFIGHO)) strcat(str, "검, "); + if (F_ISSET(obj_ptr, OMAGEO)) strcat(str, "도, "); + if (F_ISSET(obj_ptr, OPALAO)) strcat(str, "무, "); + if (F_ISSET(obj_ptr, ORNGRO)) strcat(str, "포, "); + if (F_ISSET(obj_ptr, OTHIEO)) strcat(str, "도, "); } @@ -591,7 +591,7 @@ cmd *cmnd; return(PROMPT); if(cmnd->val[1] < 2) { - print(fd, " ?\n"); + print(fd, "무엇을 만들죠?\n"); return(0); } @@ -599,7 +599,7 @@ cmd *cmnd; ff = open(file, O_RDONLY, 0); if(ff >= 0) { close(ff); - print(fd, " մϴ.\n"); + print(fd, "기존의 방이 존재합니다.\n"); return(0); } @@ -613,7 +613,7 @@ cmd *cmnd; ff = open(file, O_RDWR | O_CREAT, ACC); if(ff < 0) { - print(fd, ": Unable open files.\n"); + print(fd, "에러: Unable open files.\n"); return(0); } @@ -624,7 +624,7 @@ cmd *cmnd; close(ff); free(new_rom); - print(fd, "ȣ #%d ϴ.\n", cmnd->val[1]); + print(fd, "방번호 #%d 만들었습니다.\n", cmnd->val[1]); return(0); } @@ -642,7 +642,7 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2 && !F_ISSET(ply_ptr, PSPYON)) { - print(fd, " Žմϱ??\n"); + print(fd, "누굴 염탐합니까??\n"); return(0); } @@ -650,19 +650,19 @@ cmd *cmnd; for(i=0; istr[1][0] = up(cmnd->str[1][0]); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr) { - print(fd, " Ϸ.\n"); + print(fd, "누굴 감시하려구요.\n"); return(0); } if(Spy[crt_ptr->fd] > -1) { - print(fd, "׻ ϰ ֽϴ.\n"); + print(fd, "그사람을 벌써 감시하고 있습니다.\n"); return(0); } @@ -670,7 +670,7 @@ cmd *cmnd; if(crt_ptr->class >= CARETAKER) { if(!(!strcmp(ply_ptr->name, DMNAME) || !strcmp(ply_ptr->name, DMNAME2))){ ANSI(crt_ptr->fd,RED); - print(crt_ptr->fd,"%s մϴ.\n",ply_ptr->name); + print(crt_ptr->fd,"%s 당신을 감시합니다.\n",ply_ptr->name); ANSI(crt_ptr->fd,WHITE); output_buf(); } @@ -679,7 +679,7 @@ cmd *cmnd; Spy[crt_ptr->fd] = ply_ptr->fd; F_SET(ply_ptr, PSPYON); F_SET(ply_ptr, PDMINV); - print(fd, " .\n"); + print(fd, "감시 시작.\n"); return(0); } diff --git a/src/dm3.c b/src/dm3.c index c5c1d98..12b915c 100644 --- a/src/dm3.c +++ b/src/dm3.c @@ -484,7 +484,7 @@ cmd *cmnd; case 's': if(flags[1] == 'm'){ if (num > 1000){ - print(fd, " 񸮸 ?!! ǻ .\n"); + print(fd, "당신은 비리를 저지를려구요?!! 뽀뽀 백.\n"); } else { obj_ptr->shotsmax = num; @@ -493,7 +493,7 @@ cmd *cmnd; } else { if (num > 1000){ - print(fd, " 񸮸 ?!! ǻ .\n"); + print(fd, "당신은 비리를 저지를려구요?!! 뽀뽀 백.\n"); } else { obj_ptr->shotscur = num; @@ -705,7 +705,7 @@ cmd *cmnd; if(cmnd->num == 2 && !strcmp(cmnd->str[1], "r")) { unlink(fn); - print(ply_ptr->fd, "Log ߽ϴ.\n"); + print(ply_ptr->fd, "Log파일을 삭제했습니다.\n"); return(0); } if(cmnd->num == 2 && !strcmp(cmnd->str[1], "f")) { @@ -763,7 +763,7 @@ cmd *cmnd; return(PROMPT); if(cmnd->num < 2) { - print(ply_ptr->fd, " Finger˻ մϱ?\n"); + print(ply_ptr->fd, "누구를 Finger검색 합니까?\n"); return(0); } @@ -773,7 +773,7 @@ cmd *cmnd; cmnd->str[1][0] = up(cmnd->str[1][0]); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr) { - print(ply_ptr->fd, " ̸ ϼ\n"); + print(ply_ptr->fd, "완전한 이름을 사용하세요\n"); return(0); } strcpy(addr, Ply[crt_ptr->fd].io->address); @@ -825,7 +825,7 @@ cmd *cmnd; return(PROMPT); if(cmnd->num < 2) { - print(ply_ptr->fd, " Ʈ ϱ?\n"); + print(ply_ptr->fd, "무엇의 리스트를 봅니까?\n"); return(0); } if(!vfork()) { diff --git a/src/dm4.c b/src/dm4.c index ac38b20..809f30f 100644 --- a/src/dm4.c +++ b/src/dm4.c @@ -82,7 +82,7 @@ cmd *cmnd; return(PROMPT); if(cmnd->num < 2) { - print(fd, ": <> [c/m] *\n"); + print(fd, "문법: <사용자> [c/m] *벙어리\n"); return(0); } @@ -91,7 +91,7 @@ cmd *cmnd; crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) ){ - print(fd, "׷ ڴ ϴ.\n"); + print(fd, "그런 사용자는 없습니다.\n"); return(0); } @@ -99,7 +99,7 @@ cmd *cmnd; if(cmnd->num < 3) { crt_ptr->daily[DL_BROAD].cur = 0; crt_ptr->daily[DL_BROAD].ltime = time(0); - print(fd,"%M ϴ.\n",crt_ptr->name); + print(fd,"%M은 조용해 졌습니다.\n",crt_ptr->name); } else if (low(cmnd->str[2][0]) == 'c') { @@ -150,7 +150,7 @@ cmd *cmnd; len = strlen(&cmnd->fullstr[i+1]); */ if(len < 1) { - print(fd, " մϱ?\n"); + print(fd, "무얼 방송합니까?\n"); return(0); } if (cmnd->fullstr[i] == '-') @@ -189,7 +189,7 @@ cmd *cmnd; return(PROMPT); if(cmnd->num < 2) { - print(fd, " ܿϱ?\n"); + print(fd, "무엇을 외웁니까?\n"); return(PROMPT); } @@ -220,11 +220,11 @@ cmd *cmnd; } while(spllist[c].splno != -1); if(match == 0) { - print(fd, "׷ ֹ ϴ.\n"); + print(fd, "그런 주문은 없습니다.\n"); return(0); } else if(match > 1) { - print(fd, "̸ֹ ̻մϴ.\n"); + print(fd, "주문이름이 이상합니다.\n"); return(0); } @@ -242,14 +242,14 @@ cmd *cmnd; print(fd, "Spell failure.\n"); return(0); } - print(fd," %s ֹ 濡 ִ ܿϴ.\n", + print(fd,"당신은 %s 주문을 방에 있는 사람에게 외웠습니다.\n", spllist[splno].splstr); broadcast_rom(fd, ply_ptr->rom_num, - "%M %s ֹ 濡 ִ 鿡 ܿϴ.\n", + "%M이 %s 주문을 방에 있는 사람들에게 외웠습니다.\n", ply_ptr,spllist[splno].splstr); while(cp){ - print(cp->crt->fd,"%M %s ſ ܿϴ.\n", + print(cp->crt->fd,"%M이 %s를 당신에게 외웠습니다.\n", ply_ptr,spllist[splno].splstr); cp_tmp=cp->next_tag; pp = cp->crt; @@ -267,20 +267,20 @@ cmd *cmnd; continue; } if ((c = dm_gspells(cp->crt,splno))){ - print(fd,"׷ ֹ ʵ˴ϴ.\n"); + print(fd,"그런 주문은 않됩니다.\n"); break; } - print(cp->crt->fd,"%M %s ſ ܿϴ.\n", + print(cp->crt->fd,"%M이 %s를 당신에게 외웠습니다.\n", ply_ptr,spllist[splno].splstr); cp = cp->next_tag; } if (!c){ - print(fd," %s ֹ 濡 ִ 鿡 ܿϴ.\n", + print(fd,"당신은 %s 주문을 방에 있는 사람들에게 외웠습니다.\n", spllist[splno].splstr); broadcast_rom(fd, ply_ptr->rom_num, - "%M %s ֹ 濡 ִ 鿡 ܿϴ.\n", + "%M이 %s 주문을 방에 있는 사람들에게 외웠습니다.\n", ply_ptr,spllist[splno].splstr); } @@ -292,15 +292,15 @@ cmd *cmnd; if(Ply[i].ply->fd == fd) continue; if(F_ISSET(Ply[i].ply, PDMINV)) continue; if ((c=dm_gspells(Ply[i].ply,splno))){ - print(fd,"ֹ ο ܿ ϴ.\n"); + print(fd,"그주문을 모두에게 외울수 없습니다.\n"); break; } - print(Ply[i].ply->fd,"%M %s ֹ ſ ܿϴ.\n", + print(Ply[i].ply->fd,"%M이 %s 주문을 당신에게 외웠습니다.\n", ply_ptr,spllist[splno].splstr); } if (!c){ - print(fd," %s ֹ ο ܿϴ.\n", spllist[splno].splstr); - broadcast("%M %s ֹ ο ܿϴ.\n",ply_ptr, + print(fd,"당신은 %s 주문을 모두에게 외웠습니다.\n", spllist[splno].splstr); + broadcast("%M이 %s 주문을 모두에게 외웠습니다.\n",ply_ptr, spllist[splno].splstr); } @@ -433,7 +433,7 @@ cmd *cmnd; return(PROMPT); if (cmnd->num < 2){ - print(fd," ׷ ϱ?\n"); + print(fd,"누구의 그룹을 봅니까?\n"); return(PROMPT); } @@ -447,17 +447,17 @@ cmd *cmnd; } if(!grp_ptr) { - print(fd, "׷ ϴ.\n"); + print(fd, "그런 사람이 없습니다.\n"); return(PROMPT); } - print(fd,"%M ִ : %s\n",grp_ptr,(grp_ptr->following) ? - grp_ptr->following->name : ""); + print(fd,"%M이 따르고 있는 사람: %s\n",grp_ptr,(grp_ptr->following) ? + grp_ptr->following->name : "없음"); cp = grp_ptr->first_fol; - print(fd,"%M ׷: ",grp_ptr); + print(fd,"%M의 그룹: ",grp_ptr); if(!cp) { - print(fd, ".\n"); + print(fd, "없음.\n"); return(0); } @@ -503,7 +503,7 @@ int i=0, j=0; return(PROMPT); if (cmnd->num < 2){ - print(ply_ptr->fd," ϱ?\n"); + print(ply_ptr->fd,"무슨 파일을 봅니까?\n"); return(PROMPT); } @@ -562,7 +562,7 @@ cmd *cmnd; return(PROMPT); if (cmnd->num < 2){ - print(fd," ̸ ٲٰ ?"); + print(fd,"어떤 물건을 무슨 이름으로 바꾸고 싶으세요?"); print(fd,"*oname [#] [-dok] \n"); return(PROMPT); } @@ -599,7 +599,7 @@ cmd *cmnd; obj_ptr = find_obj(ply_ptr, ply_ptr->parent_rom->first_obj, cmnd->str[1], cmnd->val[1]); } if (!obj_ptr){ - print(fd,"׷ ."); + print(fd,"그런 아이템은 없어요."); paste_command(cmnd->fullstr,len); return(PROMPT); } @@ -644,17 +644,17 @@ cmd *cmnd; case 0: strncpy(obj_ptr->name,&cmnd->fullstr[i],80); obj_ptr->name[79]=0; - print(fd, "\n̸ "); + print(fd, "\n이름이 "); break; case 1: strncpy(obj_ptr->description,&cmnd->fullstr[i],80); obj_ptr->description[79]=0; - print(fd, "\n "); + print(fd, "\n설명이 "); break; case 2: strncpy(obj_ptr->use_output,&cmnd->fullstr[i],80); obj_ptr->use_output[79]=0; - print(fd, "\n¹ "); + print(fd, "\n출력문이 "); break; case 3: if (num){ @@ -662,11 +662,11 @@ cmd *cmnd; strncpy(ply_ptr->key[2],&cmnd->fullstr[i],20); obj_ptr->key[num-1][19] =0; ply_ptr->key[2][19] =0; - print(fd, "\nŰ "); + print(fd, "\n키가 "); } break; } - print(fd,"ٲϴ."); + print(fd,"바뀌었습니다."); paste_command(cmnd->fullstr,len); } @@ -700,8 +700,8 @@ cmd *cmnd; return(PROMPT); if (cmnd->num < 2){ - print(fd," ̸ ٲٽ÷?"); - print(fd,"≮> [#] [-dtmk] ≮> *cname"); + print(fd,"어떤 몹을 무슨 이름으로 바꾸시려구요?"); + print(fd,"<몹이름> [#] [-dtmk] <이름> *cname"); return(PROMPT); } @@ -734,7 +734,7 @@ cmd *cmnd; cmnd->val[1]); if (!crt_ptr){ - print(fd," 濡 ׷ ϴ."); + print(fd,"이 방에 그런 것은 없습니다."); paste_command(cmnd->fullstr,len); return(PROMPT); } @@ -788,34 +788,34 @@ cmd *cmnd; case 0: strncpy(crt_ptr->name,&cmnd->fullstr[i],80); crt_ptr->name[79]=0; - print(fd, "\n̸ "); + print(fd, "\n이름이 "); break; case 1: strncpy(crt_ptr->description,&cmnd->fullstr[i],80); crt_ptr->description[79]=0; - print(fd, "\n¹ "); + print(fd, "\n출력문이 "); break; case 2: strncpy(crt_ptr->talk,&cmnd->fullstr[i],80); crt_ptr->talk[79]=0; - print(fd, "\nȭ "); + print(fd, "\n대화문이 "); break; case 3: if (num){ strncpy(crt_ptr->key[num-1],&cmnd->fullstr[i],20); crt_ptr->key[num-1][19] =0; - print(fd, "\nŰ "); + print(fd, "\n키가 "); } break; case 4: if (num){ - print(fd, "\n ġ "); + print(fd, "\n몹의 위치가 "); - print(fd, " ⿡ ϴ."); + print(fd, "그 방향에는 방이 없습니다."); return(0); } break; } - print(fd,"ٲϴ."); + print(fd,"바뀌었습니다."); } diff --git a/src/dm5.c b/src/dm5.c index c069421..490a8f2 100644 --- a/src/dm5.c +++ b/src/dm5.c @@ -371,12 +371,12 @@ cmd *cmnd; len = strlen(cmnd->fullstr); if (!len) { - print(ply_ptr->fd, " ̸ ٲߴϱ?\n"); + print(ply_ptr->fd, "무엇으로 이름을 바꿉니까?\n"); return(0); } if (len>79) { - print(ply_ptr->fd, "̸ ʹ ϴ.\n"); + print(ply_ptr->fd, "이름이 너무 깁니다.\n"); return(0); } @@ -384,7 +384,7 @@ cmd *cmnd; memcpy(rom_ptr->name,&cmnd->fullstr[i],len); rom_ptr->name[len] = 0; paste_command(cmnd->fullstr, index); - print(ply_ptr->fd, "̸ Ͽϴ.\n"); + print(ply_ptr->fd, "이름을 변경하였습니다.\n"); return(0); } @@ -625,7 +625,7 @@ cmd *cmnd; obj_ptr->shotsmax+=mrand(1,20); obj_ptr->shotscur=obj_ptr->shotsmax; add_obj_rom(obj_ptr, new_rom); - broadcast("\n%s ϴ.", new_rom->name); + broadcast("\n%s에 초인의 돌이 떨어졌습니다.", new_rom->name); return(0); } @@ -645,8 +645,8 @@ cmd *cmnd; load_rom(rom_num, &new_rom); add_crt_rom(crt_ptr, new_rom); } - broadcast("\n ŻϷ 巹Ͼ ħ߽ϴ."); - broadcast("\n ϵ鿡 Ĩϴ. \"Ϲ ǵ帮 ƾƶ\""); + broadcast("\n무적존을 강탈하려고 드레니아 몹이 침공했습니다."); + broadcast("\n라작이 부하들에게 외칩니다. \"일반은 건드리지 말아아라\""); return(0); } @@ -768,8 +768,8 @@ cmd *cmnd; return(DOPROMPT); } - else if(!strcmp(cmnd->str[1], "")) { - strcat(file, "/"); + else if(!strcmp(cmnd->str[1], "관리")) { + strcat(file, "/관리"); view_file(fd, 1, file); return(DOPROMPT); } diff --git a/src/dm6.c b/src/dm6.c index 24cc609..a8c64b6 100644 --- a/src/dm6.c +++ b/src/dm6.c @@ -26,42 +26,50 @@ cmd *cmnd; creature *crt_ptr; int cfd, fd; char str[IBUFSIZE+1]; - char file[80]; + char file[512]; + + fd = ply_ptr->fd; if(ply_ptr->class < SUB_DM) return(PROMPT); if(cmnd->num < 2) { - print(ply_ptr->fd, "\n ?\n"); + print(ply_ptr->fd, "\n누구에게 번개를 내릴까요?\n"); return(PROMPT); } lowercize(cmnd->str[1], 1); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr || crt_ptr== ply_ptr) { - print(ply_ptr->fd, "%s ϴ.\n", cmnd->str[1]); + print(ply_ptr->fd, "%s이 없습니다.\n", cmnd->str[1]); return(0); } if(crt_ptr->class >= SUB_DM) { ANSI(crt_ptr->fd, RED); - print(crt_ptr->fd, "%s ſ մϴ!\n", ply_ptr->name); + print(crt_ptr->fd, "%s이 당신에게 번개를 내리려 합니다!\n", ply_ptr->name); ANSI(crt_ptr->fd, WHITE); return(0); } cfd = crt_ptr->fd; if(!(Ply[cfd].io->fn == command && Ply[cfd].io->fnparam == 1)) { - print(ply_ptr->fd, "%s ϴ .\n", cmnd->str[1]); + print(ply_ptr->fd, "%s를 지금 번개 내릴수 없습니다 .\n", cmnd->str[1]); return(0); } ANSI(cfd, MAGENTA); - print(cfd, " ϴÿ ϴ ŵ г밡 մϴ!\n"); + print(cfd, "번개가 하늘에서 떨어집니다 신들의 분노가 진동합니다!\n"); ANSI(cfd, WHITE); - broadcast_rom(cfd, crt_ptr->rom_num," ϴÿ %s ϴ.\n",crt_ptr->name); - broadcast_all("\n### %S%j ̰ ǹȽϴ! %s Ǹ ǥϽʽÿ.\n", Ply[cfd].ply->name,"1", F_ISSET(Ply[cfd].ply, PMALES) ? "":"׳"); - sprintf(file, "mv -f %s/%s/%s %s/%s/%s~~", - PLAYERPATH, first_han(Ply[cfd].ply->name), Ply[cfd].ply->name, - PLAYERPATH, first_han(Ply[cfd].ply->name), Ply[cfd].ply->name); + broadcast_rom(cfd, crt_ptr->rom_num,"번개가 하늘에서 %s에게 떨어집니다.\n",crt_ptr->name); + broadcast_all("\n### %S%j 잿더미가 되버렸습니다! %s에게 조의를 표하십시요.\n", Ply[cfd].ply->name,"1", F_ISSET(Ply[cfd].ply, PMALES) ? "그":"그녀"); + if(player_path_from_name(Ply[cfd].ply->name, file, sizeof(file)) < 0) { + print(fd, "플레이어 경로를 만들 수 없습니다.\n"); + return(0); + } + { + char cmd_file[256]; + snprintf(cmd_file, sizeof(cmd_file), "mv -f %s %s~~", file, file); + snprintf(file, sizeof(file), "%s", cmd_file); + } disconnect(cfd); - broadcast("### ָ ŵ г뿡 õռҸ ɴϴ.\n"); + broadcast("### 멀리서 신들의 분노에 천둥소리가 들려옵니다.\n"); system(file); all_broad_time=time(0); return(0); @@ -91,7 +99,7 @@ cmd *cmnd; return(PROMPT); if (cmnd->num < 2) { - print (fd, ": <> *\n"); + print (fd, "사용법: <괴물> *따르기\n"); return(0); } @@ -99,17 +107,17 @@ cmd *cmnd; cmnd->val[1]); if(!crt_ptr) { - print (fd, "׷ ϴ.\n"); + print (fd, "그런 괴물이 없습니다.\n"); return (0); } if(F_ISSET(crt_ptr, MPERMT)) { - print (fd, " Դϴ.\n"); + print (fd, "고정된 괴물입니다.\n"); return(0); } if(F_ISSET (crt_ptr, MDMFOL)) { F_CLR(crt_ptr, MDMFOL); - print (fd, "%s ׸ ϴ.\n", crt_ptr->name); + print (fd, "%s이 당신을 그만 따릅니다.\n", crt_ptr->name); cp = ply_ptr->first_fol; if(cp->crt == crt_ptr) { ply_ptr->first_fol = cp->next_tag; @@ -142,7 +150,7 @@ cmd *cmnd; pp->next_tag = ply_ptr->first_fol; ply_ptr->first_fol = pp; } - print (fd, "%s ϴ.\n", crt_ptr->name); + print (fd, "%s이 당신을 따릅니다.\n", crt_ptr->name); return (0); } @@ -168,7 +176,7 @@ cmd *cmnd; return(PROMPT); if (cmnd->num < 3) { - print (fd, ": <> <> *\n"); + print (fd, "사용법: <괴물> <사용자> *공격\n"); return(0); } @@ -176,12 +184,12 @@ cmd *cmnd; cmnd->val[1]); if(!atr_ptr) { - print (fd, "׷ ϴ.\n"); + print (fd, "그런 괴물이 없습니다.\n"); return (0); } if(F_ISSET(atr_ptr, MPERMT)) { - print (fd, " Դϴ.\n"); + print (fd, "고정된 괴물입니다.\n"); return(0); } @@ -194,19 +202,19 @@ cmd *cmnd; } if(!atd_ptr) { - print (fd, "׷ ϴ.\n"); + print (fd, "그런 사람이 없습니다.\n"); return (0); } if(F_ISSET(atd_ptr, MPERMT)) { - print (fd, " Դϴ.\n"); + print (fd, "고정된 괴물입니다.\n"); return(0); } - print(fd, "%s %s մϴ.\n", atd_ptr->name, atr_ptr->name); + print(fd, "%s가 %s를 공격합니다.\n", atd_ptr->name, atr_ptr->name); add_enm_crt(atd_ptr->name, atr_ptr); - broadcast_rom(atd_ptr->fd, atd_ptr->rom_num, "%M %m մϴ.", atr_ptr, atd_ptr); + broadcast_rom(atd_ptr->fd, atd_ptr->rom_num, "%M이 %m을 공격합니다.", atr_ptr, atd_ptr); if(atd_ptr->type = PLAYER) - print (atd_ptr->fd, "%M մϴ!\n", atr_ptr); + print (atd_ptr->fd, "%M이 당신을 공격합니다!\n", atr_ptr); return(0); } @@ -235,10 +243,10 @@ int fd, n=0; crt_ptr = find_crt(ply_ptr, rom_ptr->first_mon, cmnd->str[1], cmnd->val[1]); if(!crt_ptr){ - print(fd, "׷ ϴ.\n"); + print(fd, "그런 괴물이 없습니다.\n"); return(0); } - print(ply_ptr->fd,"%s :\n", crt_ptr->name); + print(ply_ptr->fd,"%s의 적들:\n", crt_ptr->name); ep = crt_ptr->first_enm; @@ -248,7 +256,7 @@ int fd, n=0; ep = ep->next_tag; } if (!n) - print(fd, ".\n"); + print(fd, "없음.\n"); return(0); } @@ -270,7 +278,7 @@ ctag *cp; return(PROMPT); if(cmnd->num < 2) { - print(ply_ptr->fd, " ָڸ ϱ?\n"); + print(ply_ptr->fd, "누구의 최면자를 봅니까?\n"); return(PROMPT); } @@ -278,21 +286,20 @@ ctag *cp; lowercize(cmnd->str[1], 1); crt_ptr = find_who(cmnd->str[1]); if(!crt_ptr) { - print(ply_ptr->fd, "%s ϴ.\n", cmnd->str[1]); + print(ply_ptr->fd, "%s은 없습니다.\n", cmnd->str[1]); return(0); } cfd = crt_ptr->fd; cp = Ply[cfd].extr->first_charm; - print (fd, "%s ָ:\n", crt_ptr->name); + print (fd, "%s의 피최면자:\n", crt_ptr->name); while(cp) { n += 1; print(fd,"%s.\n", cp->crt->name); cp = cp->next_tag; } if(!n) - print(fd, ".\n"); + print(fd, "없음.\n"); return(0); } - diff --git a/src/files1.c b/src/files1.c index a20c7d2..e0b484c 100644 --- a/src/files1.c +++ b/src/files1.c @@ -10,6 +10,12 @@ #include "mstruct.h" #include "mextern.h" +#define MAX_NESTED_OBJECTS 4096 +#define MAX_ROM_EXITS 200 +#define MAX_ROM_MOBS 4096 +#define MAX_ROM_ITEMS 8192 +#define MAX_ROM_DESC_BYTES (1024 * 1024) + /**********************************************************************/ /* count_obj */ /**********************************************************************/ @@ -103,7 +109,7 @@ char perm_only; while(op) { if(!perm_only || (perm_only && (F_ISSET(op->obj, OPERMT)))) total++; - /* üũ */ + /* 보따리 물건 체크 */ if(!perm_only && cnt_cont ==1 && F_ISSET(op->obj, OCONTN)) total+=op->obj->shotscur; op = op->next_tag; @@ -393,6 +399,10 @@ object *obj_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_NESTED_OBJECTS) { + error = 1; + cnt = 0; + } prev = &obj_ptr->first_obj; while(cnt > 0) { @@ -462,6 +472,10 @@ creature *crt_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_NESTED_OBJECTS) { + error = 1; + cnt = 0; + } prev = &crt_ptr->first_obj; while(cnt > 0) { @@ -533,6 +547,10 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_EXITS) { + /* Legacy room blobs may carry non-canonical count bytes. */ + cnt = 0; + } /* Load the exits */ @@ -565,6 +583,10 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_MOBS) { + /* Treat invalid counts as empty to keep room load non-fatal. */ + cnt = 0; + } cprev = &rom_ptr->first_mon; while(cnt > 0) { @@ -595,6 +617,9 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_ITEMS) { + cnt = 0; + } oprev = &rom_ptr->first_obj; while(cnt > 0) { @@ -625,8 +650,11 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_DESC_BYTES) { + cnt = 0; + } - if(cnt) { + if(cnt > 0) { sh = (char *)malloc(cnt); if(sh) { n = read(fd, sh, cnt); @@ -643,8 +671,11 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_DESC_BYTES) { + cnt = 0; + } - if(cnt) { + if(cnt > 0) { lo = (char *)malloc(cnt); if(lo) { n = read(fd, lo, cnt); @@ -661,10 +692,13 @@ room *rom_ptr; error = 1; cnt = 0; } + else if(cnt < 0 || cnt > MAX_ROM_DESC_BYTES) { + cnt = 0; + } - if(cnt) { + if(cnt > 0) { ob = (char *)malloc(cnt); - if(lo) { + if(ob) { n = read(fd, ob, cnt); if(n < cnt) error = 1; diff --git a/src/files2.c b/src/files2.c index 4a13e0f..da26bce 100644 --- a/src/files2.c +++ b/src/files2.c @@ -547,7 +547,10 @@ creature *ply_ptr; int size; #endif - sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(str), str); + if(player_path_from_name(str, file, sizeof(file)) < 0) + return(-1); + if(player_path_ensure_dir(str) < 0) + return(-1); sprintf(filebak, "%s~", file); rename(file, filebak); fd = rp_open(file, O_RDWR | O_CREAT | O_BINARY, ACC); @@ -594,14 +597,15 @@ int load_ply(str, ply_ptr) char *str; creature **ply_ptr; { - char file[80]; + char file[256]; int fd, n; #ifdef COMPRESS char *a_buf, *b_buf; int size; #endif - sprintf(file, "%s/%s/%s", PLAYERPATH, first_han(str), str); + if(player_path_from_name(str, file, sizeof(file)) < 0) + return(-1); fd = rp_open(file, O_RDONLY | O_BINARY, 0); if(fd < 0) return(-1); diff --git a/src/frp.new b/src/frp.new new file mode 100755 index 0000000..e64f106 Binary files /dev/null and b/src/frp.new differ diff --git a/src/global.c b/src/global.c index 91bfcd7..e7f7a87 100644 --- a/src/global.c +++ b/src/global.c @@ -60,15 +60,15 @@ int bonus[64] = { -4, -4, -4, -3, -3, -2, -2, -1, -1, -1, 0, 0, 0, 0, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, }; -char class_str[][15] = { "", "ڰ", "ǹ", "", - "˻", "", "", "", "", "", "", - "", "" }; +char class_str[][15] = { "제작", "자객", "권법가", "불제자", + "검사", "도술사", "무사", "포졸", "도둑", "무적", "초인", + "운영자", "관리자" }; -char race_str[][15] = { "Unknown", "", "", "䱫", "", - "ΰ", "", "", "ͽ", "" }; +char race_str[][15] = { "Unknown", "난장이족", "용신족", "요괴족", "토신족", + "인간족", "도깨비족", "거인족", "땅귀신족", "개구리족" }; -char race_adj[][15] = { "Unknown", "", "", "䱫", - "", "ΰ", "", "", "ͽ", "" }; +char race_adj[][15] = { "Unknown", "난장이족", "용신족", "요괴족", + "토신족", "인간족", "도깨비족", "거인족", "땅귀신족", "개구리족" }; int family_num[16]; char family_str[16][15]; @@ -171,389 +171,389 @@ long needed_exp[] = { char lev_title[][8][20] = { { "", "", "", "", "", "", "", "" }, - { "", "", "", "", - "ڰ", "¡", "켺", "" }, - { "ʺ", "û", "", "ö", - "Ǽ", "Ȳ", "", "" }, - { "", "̽", "ҽ", "", - "", "", "", "ó" }, - { "", "Į", "", "뺴", - "˰", "˼", "Ȳ", "õ" }, - { "ɺθ", "", "", "", - "", "", "ż", "" }, - { "", "", "", "", - "", "", "ȣ", "" }, - { "̵", "", "", "", - "", "", "", "屺" }, - { "ٴõ", "", "", "ҵ", - "յ", "", "", "ż" }, - { "", "", "", "", "", - "", "", ""}, - { "", "", "", "", "", - "", "", ""}, - { "", "", "", "", - "", "", "", "" }, - { "ٺ", "û", "Ƕ", "", - "", "չٺ", "ġȲ", "ٺǽ" }, + { "깡패", "강도", "살인자", "도살자", + "왕자객", "응징자", "살성", "살신" }, + { "초보", "수련생", "무협", "철권", + "권성", "권황", "지존", "무신" }, + { "땡중", "사미승", "소승", "감찰승", + "주지", "대사", "국사", "부처" }, + { "백정", "칼잡이", "무인", "용병", + "검객", "검성", "검황", "무림파천" }, + { "심부름꾼", "도제자", "마술사", "도객", + "마인", "도인", "신선", "마존" }, + { "골목대장", "무객", "협객", "의협", + "정전자", "용전사", "수호자", "성전사" }, + { "쫄따구", "순찰병", "감찰원", "도성지기", + "포교", "포도대장", "감찰어사", "감찰장군" }, + { "바늘도둑", "개도둑", "좀도둑", "소도둑", + "왕도둑", "도성", "도신", "신수" }, + { "무적", "무적", "무적", "무적", "무적", + "무적", "무적", "무적"}, + { "초인", "초인", "초인", "초인", "초인", + "초인", "초인", "초인"}, + { "도우미", "도우미", "도우미", "도우미", + "도우미", "도우미", "도우미", "도우미" }, + { "바보", "멍청이", "또라이", "머저리", + "띨띨이", "왕바보", "백치황제", "바보들의신" }, }; struct { char *cmdstr; int cmdno; int (*cmdfn)(); } cmdlist[] = { - { "±", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ȸ㰡", 1, move }, - { "ϵ", 1, move}, - { "", 1, move }, - { "ݾ߹ٶ", 1, move }, + { "나가는길", 1, move }, + { "광장", 1, move }, + { "향로", 1, move }, + { "수련장", 1, move }, + { "현감에게", 1, move }, + { "면회허가", 1, move }, + { "반하도인", 1, move}, + { "월광반", 1, move }, + { "반야바라밀", 1, move }, { "8", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɪ", 1, move }, + { "북", 1, move }, + { "ㅂ", 1, move }, + { "�ぃ�", 1, move }, { "2", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɥ", 1, move }, + { "남", 1, move }, + { "ㄴ", 1, move }, + { "�ⅲ�", 1, move }, { "6", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɦ", 1, move }, + { "동", 1, move }, + { "ㄷ", 1, move }, + { "�┌�", 1, move }, { "4", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɬ", 1, move }, - { "ϵ", 1, move }, - { "", 1, move }, - { "ϼ", 1, move }, - { "ϵ", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "", 1, move }, + { "서", 1, move }, + { "ㅅ", 1, move }, + { "�В�", 1, move }, + { "북동", 1, move }, + { "ㅂㄷ", 1, move }, + { "북서", 1, move }, + { "북동", 1, move }, + { "남서", 1, move }, + { "ㅂㅅ", 1, move }, + { "남동", 1, move }, + { "ㄴㄷ", 1, move }, + { "남서", 1, move }, + { "ㄴㅅ", 1, move }, { "9", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɮ", 1, move }, + { "위", 1, move }, + { "ㅇ", 1, move }, + { "��"", 1, move }, { "3", 1, move }, - { "", 1, move }, - { "", 1, move }, - { "ɩ", 1, move }, - { "", 1, move }, - { "", 1, move }, /* leave */ - { "", 2, look }, /* look */ - { "", 2, look }, - { "", 100, action }, - { "", 2, look }, /* examine */ - { "", 3, quit }, /* quit */ - { "", 4, say }, + { "밑", 1, move }, + { "ㅁ", 1, move }, + { "�ð�", 1, move }, + { "밖", 1, move }, + { "나가", 1, move }, /* leave */ + { "봐", 2, look }, /* look */ + { "보다", 2, look }, + { "보아", 100, action }, + { "조사", 2, look }, /* examine */ + { "끝", 3, quit }, /* quit */ + { "말", 4, say }, { "\"", 4, say }, { "'", 4, say }, - { "ֿ", 5, get }, /* get */ - { "", 5, get }, - { "", 5, get }, /* take */ - { "", 5, get }, /* ߰ */ - { "ǰ", 6, inventory }, /* inventory */ - { "", 7, drop }, /* drop */ - { "־", 7, drop }, /* put */ - { "", 8, who }, /* who */ - { "Ծ", 9, wear }, /* wear */ - { "", 10, remove_obj }, /* remove */ - { "", 11, equipment }, /* equipment */ - { "", 11, equipment }, - { "", 12, hold }, /* hold */ - { "", 12, hold }, - { "", 13, ready }, /* wield */ - { "", 14, help }, /* */ + { "주워", 5, get }, /* get */ + { "주", 5, get }, + { "가져", 5, get }, /* take */ + { "꺼내", 5, get }, /* 추가 */ + { "소지품", 6, inventory }, /* inventory */ + { "버려", 7, drop }, /* drop */ + { "넣어", 7, drop }, /* put */ + { "누구", 8, who }, /* who */ + { "입어", 9, wear }, /* wear */ + { "벗어", 10, remove_obj }, /* remove */ + { "장비", 11, equipment }, /* equipment */ + { "장", 11, equipment }, + { "쥐어", 12, hold }, /* hold */ + { "잡아", 12, hold }, + { "무장", 13, ready }, /* wield */ + { "도움말", 14, help }, /* 도움말 */ { "?", 14, help }, - { "ǰ", 15, health }, /* health */ - { "", 15, health }, /* score */ - { "", 16, info }, /* information */ - { "", 17, sendman }, /* send */ - { "̾߱", 17, sendman }, /* tell */ - { "", 18, follow }, /* follow */ - { "", 19, lose }, - { "׷", 20, group }, /* group */ - { "", 20, group }, /* party */ - { "", 21, track }, - { "", 22, peek }, /* peek */ - { "", 23, attack }, /* attack */ - { "", 23, attack }, - { "", 23, attack }, /* kill */ - { "", 23, attack }, /* k */ - { "˻", 24, search }, /* search */ - { "ã", 24, search }, - { "ǥ",25, emote}, - { "", 26, hide }, - { "", 26, hide }, - { "", 27, set }, /* set */ - { "", 28, clear }, /* clear */ - { "", 29, yell }, /* yell */ - { "", 30, go }, /* go */ - { "", 30, go }, - { "", 31, openexit }, /* open */ - { "ݾ", 32, closeexit }, /* close */ - { "Ǯ", 33, unlock }, /* Ǯ */ - { "", 34, lock }, /* lock */ - { "", 35, picklock }, /* pick */ - { "", 36, steal }, /* steal */ - { "", 37, flee }, /* flee */ - { "", 37, flee }, - { "ֹ", 38, cast }, /* cast */ - { "", 39, study }, - { "", 39, study }, - { "о", 40, readscroll }, - { "ǰ", 41, list }, - { "", 42, buy }, - { "Ⱦ", 43, sell }, - { "ġ", 44, value }, - { "", 44, value }, - { "", 45, backstab }, - { "", 46, train }, - { "", 47, give }, - { "", 48, repair }, - { "ð", 49, prt_time }, - { "", 50, circle }, - { "Ͱ", 51, bash }, - { "", 52, savegame }, /* save */ - { "", 53, postsend }, - { "", 55, postdelete }, - { "ޱ", 54, postread }, - { "ȭ", 56, talk }, - { "׷츻",57, gtalk }, /* gtalk */ - { "",57, gtalk }, + { "건강", 15, health }, /* health */ + { "점수", 15, health }, /* score */ + { "정보", 16, info }, /* information */ + { "얘기", 17, sendman }, /* send */ + { "이야기", 17, sendman }, /* tell */ + { "따라", 18, follow }, /* follow */ + { "내보내", 19, lose }, + { "그룹", 20, group }, /* group */ + { "무리", 20, group }, /* party */ + { "추적", 21, track }, + { "엿봐", 22, peek }, /* peek */ + { "공격", 23, attack }, /* attack */ + { "공", 23, attack }, + { "쳐", 23, attack }, /* kill */ + { "때려", 23, attack }, /* k */ + { "검색", 24, search }, /* search */ + { "찾아", 24, search }, + { "표현",25, emote}, + { "숨겨", 26, hide }, + { "숨어", 26, hide }, + { "설정", 27, set }, /* set */ + { "해제", 28, clear }, /* clear */ + { "외쳐", 29, yell }, /* yell */ + { "가", 30, go }, /* go */ + { "들어가", 30, go }, + { "열어", 31, openexit }, /* open */ + { "닫아", 32, closeexit }, /* close */ + { "풀어", 33, unlock }, /* 풀어 */ + { "잠궈", 34, lock }, /* lock */ + { "따", 35, picklock }, /* pick */ + { "훔쳐", 36, steal }, /* steal */ + { "도망", 37, flee }, /* flee */ + { "도", 37, flee }, + { "주문", 38, cast }, /* cast */ + { "배워", 39, study }, + { "연마", 39, study }, + { "읽어", 40, readscroll }, + { "품목", 41, list }, + { "사", 42, buy }, + { "팔아", 43, sell }, + { "가치", 44, value }, + { "가격", 44, value }, + { "기습", 45, backstab }, + { "수련", 46, train }, + { "줘", 47, give }, + { "수리", 48, repair }, + { "시간", 49, prt_time }, + { "교란", 50, circle }, + { "맹공", 51, bash }, + { "저장", 52, savegame }, /* save */ + { "편지보내기", 53, postsend }, + { "편지삭제", 55, postdelete }, + { "편지받기", 54, postread }, + { "대화", 56, talk }, + { "그룹말",57, gtalk }, /* gtalk */ + { "무리말",57, gtalk }, { "=", 57, gtalk }, - { "", 58, drink }, /* drink */ - { "Ծ", 58, drink }, - { "", 59, broadsend }, - { "", 59, broadsend }, - { "ȯȣ", 70, broadsend2 }, + { "마셔", 58, drink }, /* drink */ + { "먹어", 58, drink }, + { "잡담", 59, broadsend }, + { "잡", 59, broadsend }, + { "환호", 70, broadsend2 }, { "zap", 60, zap }, - { "ȯ", 61, welcome }, - { "ȥ", 62, turn }, - { "", 63, bank_inv }, - { "ܾ", 63, bank }, - { "Ա", 63, deposit }, - { "", 63, withdraw }, - { "޾", 63, output_bank }, - { "Ȱ", 64, haste }, - { "ſ", 65, pray }, /* pray */ - { "", 66, prepare }, - { "", 67, use }, /* use */ - { "ź", 68, ignore }, /* ignore */ - { "ڰ˻", 69, whois }, - { "", 73, description }, -/* { "ż", 70, sneak }, */ - { "", 71, teach }, - { "", 72, call_war }, + { "환영", 61, welcome }, + { "방혼술", 62, turn }, + { "보관물", 63, bank_inv }, + { "잔액", 63, bank }, + { "입금", 63, deposit }, + { "출금", 63, withdraw }, + { "받아", 63, output_bank }, + { "활보법", 64, haste }, + { "신원법", 65, pray }, /* pray */ + { "경계", 66, prepare }, + { "사용", 67, use }, /* use */ + { "듣기거부", 68, ignore }, /* ignore */ + { "사용자검색", 69, whois }, + { "묘사", 73, description }, +/* { "은신술", 70, sneak }, */ + { "가르쳐", 71, teach }, + { "선전포고", 72, call_war }, /* - { "",72, pledge }, - { "Ż",73, rescind }, + { "가입",72, pledge }, + { "탈퇴",73, rescind }, */ - { "",74, purchase }, - { "",75, selection }, - { "ȯ",76, trade}, - { "Ŵޱ", 77, ply_suicide }, /* suicide */ - { "ȣ", 78, passwd}, /* passwd */ - { "ǥ",79,vote}, - { "", 80, pfinger}, - { "ȯ", 81, return_square }, - { "", 81, return_square }, - { "Ӹ", 82, ply_aliases }, - { "", 82, ply_aliases }, - { "¿", 83, burn }, - { "Ұ", 83, burn }, - { "Īȣ", 84, set_title }, - { "Īȣ", 84, clear_title }, - { "", 85, forge }, - { "⸸", 85, newforge }, - { "ȯ", 86, change_class }, - { "", 87, power }, - { "", 88, accurate }, - { "", 89, absorb }, - { "", 90, meditate }, - { "", 91, magic_stop }, - { "", 92, writeboard }, - { "ۻ", 93, del_board }, - { "Խ", 94, look_board }, - { "", 95, chg_name }, - { "", 96, info_obj }, - { "", 96, obj_compare }, - { "", 97, kick }, - { "", 98, poison_mon }, - { "°ݹ", 99, up_dmg }, - { "ǥ", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "ƴ", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "̼", 100, action }, - { "ûȥ", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "ǰ", 100, action }, - { "", 100, action }, - { "̾", 100, action }, - { "Ǽ", 100, action }, - { "̺", 100, action }, - { "ڼ", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "뷡", 100, action }, - { "", 100, action }, - { "޷", 100, action }, - { "Ȳ", 100, action }, - { "", 100, action }, - { "β", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "߰", 100, action }, - { "", 100, action }, - { "ȳ", 100, action }, - { "ǻ", 100, action }, - { "ũ", 100, action }, - { "", 100, action }, - { "", 100, action }, - { "Ⱦ", 100, action }, - { "Ⱦ", 100, action }, + { "구입",74, purchase }, + { "선택",75, selection }, + { "교환",76, trade}, + { "목매달기", 77, ply_suicide }, /* suicide */ + { "암호", 78, passwd}, /* passwd */ + { "투표",79,vote}, + { "사용자정보", 80, pfinger}, + { "귀환", 81, return_square }, + { "귀", 81, return_square }, + { "줄임말", 82, ply_aliases }, + { "줄", 82, ply_aliases }, + { "태워", 83, burn }, + { "소각", 83, burn }, + { "칭호", 84, set_title }, + { "칭호삭제", 84, clear_title }, + { "제련", 85, forge }, + { "무기만들기", 85, newforge }, + { "직업전환", 86, change_class }, + { "기공집결", 87, power }, + { "살기충전", 88, accurate }, + { "흡성대법", 89, absorb }, + { "참선", 90, meditate }, + { "혈도봉쇄", 91, magic_stop }, + { "써", 92, writeboard }, + { "글삭제", 93, del_board }, + { "게시판", 94, look_board }, + { "명명", 95, chg_name }, + { "감정", 96, info_obj }, + { "비교", 96, obj_compare }, + { "차기", 97, kick }, + { "독살포", 98, poison_mon }, + { "잠력격발", 99, up_dmg }, + { "감정표현", 100, action }, + { "노려봐", 100, action }, + { "끄덕", 100, action }, + { "응", 100, action }, + { "아니", 100, action }, + { "감", 100, action }, + { "감사", 100, action }, + { "미소", 100, action }, + { "청혼", 100, action }, + { "떨어", 100, action }, + { "해", 100, action }, + { "하품", 100, action }, + { "웃어", 100, action }, + { "미안", 100, action }, + { "악수", 100, action }, + { "하이파이브", 100, action }, + { "박수", 100, action }, + { "흡연", 100, action }, + { "담배", 100, action }, + { "절", 100, action }, + { "찔러", 100, action }, + { "춤", 100, action }, + { "노래", 100, action }, + { "울어", 100, action }, + { "달래", 100, action }, + { "당황", 100, action }, + { "생각", 100, action }, + { "부끄러", 100, action }, + { "놀려", 100, action }, + { "설레", 100, action }, + { "잘가", 100, action }, + { "바이", 100, action }, + { "안녕", 100, action }, + { "뽀뽀", 100, action }, + { "윙크", 100, action }, + { "구걸", 100, action }, + { "구박", 100, action }, + { "안아", 100, action }, + { "껴안아", 100, action }, /****************************************************************/ -/* { "", 149, trans_exp }, */ +/* { "전수", 149, trans_exp }, */ /****************************************************************/ - { "", 149, buy_states }, - { "ȥ", 150, marriage }, - { "", 150, m_send }, - { "ȥ", 150, divorce }, - { "", 153, moon_set }, - { "޸", 151, memo }, - { "ʴ", 152, invite }, - { "", 154, enemy_status }, - { "аŸ", 148, family_who }, - { "аŸ", 148, family_news }, - { "аŸ", 148, family }, - { "㰡", 148, boss_family }, - { "аŸŻ", 148, out_family }, - { "аŸ߹", 148, fm_out }, - { "аŸ", 148, family_member }, - { "аŸ", 148, family_talk }, + { "향상", 149, buy_states }, + { "결혼", 150, marriage }, + { "사랑말", 150, m_send }, + { "이혼", 150, divorce }, + { "기억", 153, moon_set }, + { "메모", 151, memo }, + { "초대", 152, invite }, + { "상태", 154, enemy_status }, + { "패거리누구", 148, family_who }, + { "패거리공지", 148, family_news }, + { "패거리가입", 148, family }, + { "가입허가", 148, boss_family }, + { "패거리탈퇴", 148, out_family }, + { "패거리추방", 148, fm_out }, + { "패거리원", 148, family_member }, + { "패거리말", 148, family_talk }, { "]", 148, family_talk }, - { "аŸ", 148, list_family }, - { "", 153, resend }, + { "모든패거리", 148, list_family }, + { "대답", 153, resend }, { "/", 153, resend }, { "*teleport", 101, dm_teleport }, - { "*̵", 101, dm_teleport }, - { "*ȣ", 102, dm_rmstat }, + { "*순간이동", 101, dm_teleport }, + { "*방번호", 102, dm_rmstat }, { "*rm", 102, dm_rmstat }, - { "*", 102, dm_rmstat }, + { "*방", 102, dm_rmstat }, { "*reload", 103, dm_reload_rom }, - { "*ε", 103, dm_reload_rom }, + { "*로드", 103, dm_reload_rom }, { "*save", 104, dm_resave }, - { "*̺", 104, dm_resave }, + { "*세이브", 104, dm_resave }, { "*create", 105, dm_create_obj }, - { "*ٸ", 105, dm_create_obj}, + { "*뭐든지다만들어", 105, dm_create_obj}, { "*c", 105, dm_create_obj }, { "*perm", 106, dm_perm }, - { "*", 106, dm_perm }, + { "*영원", 106, dm_perm }, { "*invis", 107, dm_invis }, - { "*ٶó", 107, dm_invis }, + { "*바람처럼사라져", 107, dm_invis }, { "*i", 107, dm_invis }, { "*s", 108, dm_send }, { "*send", 108, dm_send }, - { "*", 108, dm_send }, + { "*공지", 108, dm_send }, { "*purge", 109, dm_purge }, - { "*û", 109, dm_purge }, - { "*û", 109, dm_purge }, + { "*청소", 109, dm_purge }, + { "*청", 109, dm_purge }, { "*ac", 110, dm_ac }, - { "*", 110, dm_ac }, + { "*방어력", 110, dm_ac }, { "*users", 111, dm_users }, - { "*", 111, dm_users }, - { "*", 111, dm_users }, + { "*누", 111, dm_users }, + { "*누구", 111, dm_users }, { "*echo", 112, dm_echo }, - { "*", 112, dm_echo }, + { "*말", 112, dm_echo }, { "*flushrooms", 113, dm_flushsave }, - { "*", 113, dm_flushsave }, + { "*모든저장", 113, dm_flushsave }, { "*shutdown", 114, dm_shutdown }, - { "*", 114, dm_shutdown }, + { "*종료", 114, dm_shutdown }, { "*f", 115, dm_force }, { "*force", 115, dm_force }, - { "*ٽ", 115, dm_force }, + { "*뭐든지다시켜", 115, dm_force }, { "*flushcrtobj", 116, dm_flush_crtobj }, - { "*缳", 116, dm_flush_crtobj }, - { "*", 116, dm_flush_crtobj }, + { "*재설정", 116, dm_flush_crtobj }, + { "*재", 116, dm_flush_crtobj }, { "*monster", 117, dm_create_crt }, - { "*", 117, dm_create_crt }, - { "*", 117, dm_create_crt }, + { "*괴물", 117, dm_create_crt }, + { "*괴", 117, dm_create_crt }, { "*status", 118, dm_stat }, - { "*", 118, dm_stat }, + { "*상태", 118, dm_stat }, { "*add", 119, dm_add_rom }, - { "*", 119, dm_add_rom }, - { "*", 120, dm_set }, + { "*방제작", 119, dm_add_rom }, + { "*뭐든지다해", 120, dm_set }, { "*log", 121, dm_log }, - { "*", 121, dm_log }, + { "*접속", 121, dm_log }, { "*spy", 122, dm_spy }, - { "*ٿ", 122, dm_spy }, + { "*뭐든지다엿봐", 122, dm_spy }, { "*lock", 123, dm_loadlockout }, - { "*", 123, dm_loadlockout }, + { "*제한", 123, dm_loadlockout }, { "*finger", 124, dm_finger }, - { "*ΰ", 124, dm_finger }, + { "*핑거", 124, dm_finger }, { "*list", 125, dm_list }, - { "*ٺ", 125, dm_list }, + { "*누구든지다봐", 125, dm_list }, { "*info", 126, dm_info }, - { "*", 126, dm_info }, + { "*정보", 126, dm_info }, { "*parameter", 127, dm_param }, - { "*ġ", 127, dm_param }, + { "*수치", 127, dm_param }, { "*silence", 128, dm_silence}, - { "*", 128, dm_silence}, + { "*벙어리", 128, dm_silence}, { "*broad", 129, dm_broadecho}, - { "*", 129, dm_broadecho }, + { "*방송", 129, dm_broadecho }, { "*replace",130, dm_replace}, - { "*ü", 130, dm_replace}, + { "*교체", 130, dm_replace}, { "*name",131, dm_nameroom}, - { "*̸", 131, dm_nameroom}, + { "*방이름", 131, dm_nameroom}, { "*append",132, dm_append}, - { "*߰", 132, dm_append}, + { "*추가", 132, dm_append}, { "*prepend",133, dm_prepend}, - { "*", 133, dm_prepend}, + { "*서언", 133, dm_prepend}, { "*gcast",134, dm_cast}, - { "*ֹ", 134, dm_cast}, + { "*전주문", 134, dm_cast}, { "*group",135, dm_group}, - { "*׷", 135, dm_group}, + { "*그룹", 135, dm_group}, { "*notepad",136, notepad}, - { "*޸", 136, notepad}, + { "*메모", 136, notepad}, { "*delete",137, dm_delete}, - { "*", 137, dm_delete}, + { "*지우기", 137, dm_delete}, { "*oname", 138, dm_obj_name }, - { "*ٹٲ", 138, dm_obj_name }, + { "*뭐든지다바꿔", 138, dm_obj_name }, { "*cname", 139, dm_crt_name }, - { "*̸", 139, dm_crt_name }, + { "*괴물이름", 139, dm_crt_name }, { "*active", 140, list_act }, - { "*Ȱ", 140, list_act }, + { "*활성", 140, list_act }, { "*dust", 141, dm_dust }, - { "*ȭ", 141, dm_dust }, + { "*나도가끔화낸다", 141, dm_dust }, { "*cfollow", 142, dm_follow }, - { "*", 142, dm_follow }, - { "*", 148, dm_moonstone }, - { "*ħ", 148, dm_monster }, + { "*따르기", 142, dm_follow }, + { "*떨어져라", 148, dm_moonstone }, + { "*침공", 148, dm_monster }, { "*dmhelp", 143, dm_help }, - { "*", 143, dm_help }, + { "*도움말", 143, dm_help }, { "*attack", 144, dm_attack }, - { "*", 144, dm_attack }, + { "*공격", 144, dm_attack }, { "*enemy", 145, list_enm }, - { "*", 145, list_enm }, + { "*적", 145, list_enm }, { "*charm", 146, list_charm }, - { "*ָ", 146, list_charm }, - { "*", 147, dm_save_all_ply }, - { "", -2, 0 }, - { "о", -2, 0 }, + { "*최면", 146, list_charm }, + { "*사용자저장", 147, dm_save_all_ply }, + { "눌러", -2, 0 }, + { "밀어", -2, 0 }, { "@", 0, 0 } }; @@ -574,63 +574,63 @@ struct { int (*splfn)(); int spllv; } spllist[] = { - { "ȸ", SVIGOR, vigor, 1 }, - { "dz", SHURTS, offensive_spell, 2 }, - { "߱", SLIGHT, light, 2 }, - { "ص", SCUREP, curepoison, 1 }, - { "", SBLESS, bless, 2 }, - { "ȣ", SPROTE, protection, 2 }, - { "ȭ", SFIREB, offensive_spell, 3 }, - { "й", SINVIS, invisibility, 5 }, - { "¹", SRESTO, restore, 4 }, - { "а", SDINVI, detectinvis, 3 }, - { "ֹ", SDMAGI, detectmagic, 3 }, - { "", STELEP, teleport, 4 }, - { "ȥ", SBEFUD, befuddle, 3 }, - { "", SLGHTN, offensive_spell, 4 }, - { "", SICEBL, offensive_spell, 5 }, - { "", SENCHA, enchant, 4 }, - { "ȯ", SRECAL, recall, 3 }, - { "ȯ", SSUMMO, summon, 3 }, - { "ȸ", SMENDW, mend, 3 }, - { "ġ", SFHEAL, heal, 5 }, - { "", STRACK, magictrack, 4 }, - { "ξ", SLEVIT, levitate, 3 }, - { "濭", SRFIRE, resist_fire, 3 }, - { "", SFLYSP, fly, 4 }, - { "", SRMAGI, resist_magic, 3 }, - { "dz", SSHOCK, offensive_spell, 5 }, - { "", SRUMBL, offensive_spell, 2 }, - { "ȭ", SBURNS, offensive_spell, 2 }, - { "ź", SBLIST, offensive_spell, 2 }, - { "dz", SDUSTG, offensive_spell, 3 }, - { "ʽ", SWBOLT, offensive_spell, 3 }, - { "", SCRUSH, offensive_spell, 3 }, - { "", SENGUL, offensive_spell, 5 }, - { "ȭdz", SBURST, offensive_spell, 3 }, - { "ȭõ", SSTEAM, offensive_spell, 3 }, - { "ռ", SSHATT, offensive_spell, 4 }, - { "", SIMMOL, offensive_spell, 4 }, - { "õ", SBLOOD, offensive_spell, 4 }, - { "õdz", STHUND, offensive_spell, 5 }, - { "", SEQUAK, offensive_spell, 5 }, - { "¾", SFLFIL, offensive_spell, 5 }, - { "ǰ", SKNOWA, know_alignment, 3 }, - { "ؼ", SREMOV, remove_curse, 4 }, - { "", SRCOLD, resist_cold, 3 }, - { "", SBRWAT, breathe_water, 3 }, - { "ȣ", SSSHLD, earth_shield, 3 }, - { "õ", SLOCAT, locate_player, 4 }, - { "ġ", SDREXP, drain_exp, 5 }, - { "ġ", SRMDIS, rm_disease, 3 }, - { "ȼ", SRMBLD, rm_blind, 3 }, - { "", SFEARS, fear, 4 }, - { "ȸ", SRVIGO, room_vigor, 4 }, - { "", STRANO, object_send, 4 }, - { "Ǹ", SBLIND, blind, 5 }, - { "ձ", SSILNC, silence, 5 }, - { "ȥ", SCHARM, charm, 5 }, -/* { "ѱ", SNAHAN, offensive_spell }, */ + { "회복", SVIGOR, vigor, 1 }, + { "삭풍", SHURTS, offensive_spell, 2 }, + { "발광", SLIGHT, light, 2 }, + { "해독", SCUREP, curepoison, 1 }, + { "성현진", SBLESS, bless, 2 }, + { "수호진", SPROTE, protection, 2 }, + { "화궁", SFIREB, offensive_spell, 3 }, + { "은둔법", SINVIS, invisibility, 5 }, + { "도력반", SRESTO, restore, 4 }, + { "은둔감지술", SDINVI, detectinvis, 3 }, + { "주문감지술", SDMAGI, detectmagic, 3 }, + { "축지법", STELEP, teleport, 4 }, + { "혼동", SBEFUD, befuddle, 3 }, + { "뇌전", SLGHTN, offensive_spell, 4 }, + { "동설주", SICEBL, offensive_spell, 5 }, + { "빙의", SENCHA, enchant, 4 }, + { "귀환", SRECAL, recall, 3 }, + { "소환", SSUMMO, summon, 3 }, + { "원기회복", SMENDW, mend, 3 }, + { "완치", SFHEAL, heal, 5 }, + { "추적", STRACK, magictrack, 4 }, + { "부양술", SLEVIT, levitate, 3 }, + { "방열진", SRFIRE, resist_fire, 3 }, + { "비상술", SFLYSP, fly, 4 }, + { "보마진", SRMAGI, resist_magic, 3 }, + { "권풍술", SSHOCK, offensive_spell, 5 }, + { "지동술", SRUMBL, offensive_spell, 2 }, + { "화선도", SBURNS, offensive_spell, 2 }, + { "탄수공", SBLIST, offensive_spell, 2 }, + { "풍마현", SDUSTG, offensive_spell, 3 }, + { "파초식", SWBOLT, offensive_spell, 3 }, + { "폭진", SCRUSH, offensive_spell, 3 }, + { "낙석", SENGUL, offensive_spell, 5 }, + { "화풍술", SBURST, offensive_spell, 3 }, + { "화룡대천", SSTEAM, offensive_spell, 3 }, + { "토합술", SSHATT, offensive_spell, 4 }, + { "주작현", SIMMOL, offensive_spell, 4 }, + { "열사천", SBLOOD, offensive_spell, 4 }, + { "파천풍", STHUND, offensive_spell, 5 }, + { "지옥패", SEQUAK, offensive_spell, 5 }, + { "태양안", SFLFIL, offensive_spell, 5 }, + { "선악감지", SKNOWA, know_alignment, 3 }, + { "저주해소", SREMOV, remove_curse, 4 }, + { "방한진", SRCOLD, resist_cold, 3 }, + { "수생술", SBRWAT, breathe_water, 3 }, + { "지방호", SSSHLD, earth_shield, 3 }, + { "천리안", SLOCAT, locate_player, 4 }, + { "백치술", SDREXP, drain_exp, 5 }, + { "치료", SRMDIS, rm_disease, 3 }, + { "개안술", SRMBLD, rm_blind, 3 }, + { "공포", SFEARS, fear, 4 }, + { "전회복", SRVIGO, room_vigor, 4 }, + { "전송", STRANO, object_send, 4 }, + { "실명", SBLIND, blind, 5 }, + { "봉합구", SSILNC, silence, 5 }, + { "이혼대법", SCHARM, charm, 5 }, +/* { "변수나한권", SNAHAN, offensive_spell }, */ { "@", -1,0,0 } }; @@ -659,7 +659,7 @@ struct osp_t ospell[] = { { SEQUAK, EARTH, 25, 4, 5, 30, 3 }, /* earthquake */ { SFLFIL, FIRE, 25, 4, 5, 30, 3 }, /* flamefill */ { SICEBL, WATER, 25, 4, 5, 30, 3 }, /* iceblade */ -/* { SNAHAN, WIND, 10, 2, 5, 13, 2 }, */ /* ѱ */ +/* { SNAHAN, WIND, 10, 2, 5, 13, 2 }, */ /* 변수나한권 */ { -1, 0, 0, 0, 0, 0, 0 } }; diff --git a/src/io.c b/src/io.c index 6935fa0..fd12243 100644 --- a/src/io.c +++ b/src/io.c @@ -53,6 +53,8 @@ static fd_set Sockets; extern int Port; extern char title_cut_index[PMAX]; +static unsigned char Utf8_pending[PMAX][4]; +static unsigned char Utf8_pending_len[PMAX]; /* @@ -286,6 +288,7 @@ void accept_connect() zero(extr, sizeof(extra)); zero(io, sizeof(iobuf)); + Utf8_pending_len[fd] = 0; io->ltime = time(0); io->intrpt = 1; @@ -345,9 +348,9 @@ int fd; /* The following lines must be left intact as part of the */ /* copyright agreement. */ /*************************************************************/ - print(fd, "\nѴ 1.3 (C) 1992, 1996"); - print(fd, "\n MORDOR 2.5 (Brett J. Vickers)"); - print(fd, "\n ׽佺 ǻ"); + print(fd, "\n무한대전 1.3 (C) 1992, 1996"); + print(fd, "\n원작 MORDOR 2.5 (Brett J. Vickers)"); + print(fd, "\n관리자 테스토스 꽃 뽀뽀"); /*************************************************************/ /*************************************************************/ @@ -366,7 +369,7 @@ int fd; } Ply[fd].io->ltime = time(0); - print(fd, "\n\n[] . "); + print(fd, "\n\n[엔터]를 누르세요. "); output_buf(); RETURN(fd, login, -1); @@ -430,6 +433,122 @@ char *str2; else return(0); } +static int utf8_lead_len(ch) +unsigned char ch; +{ + if(ch < 0x80) return 1; + if(ch >= 0xC2 && ch <= 0xDF) return 2; + if(ch >= 0xE0 && ch <= 0xEF) return 3; + if(ch >= 0xF0 && ch <= 0xF4) return 4; + return 0; +} + +static int input_used(ihead, itail) +int ihead; +int itail; +{ + return buflen(ihead, itail, IBUFSIZE); +} + +static void input_drop_tail_one(fd, pitail, ihead) +int fd; +int *pitail; +int ihead; +{ + int tail, next; + unsigned char c; + + if(*pitail == ihead) + return; + + tail = *pitail; + c = (unsigned char)Ply[fd].io->input[tail]; + next = (tail + 1) % IBUFSIZE; + + if((c == '\n' || c == '\r') && Ply[fd].io->commands > 0) + Ply[fd].io->commands--; + + if(c == '\n' || c == '\r') { + *pitail = next; + return; + } + + while(next != ihead && + (((unsigned char)Ply[fd].io->input[next] & 0xC0) == 0x80)) + next = (next + 1) % IBUFSIZE; + + *pitail = next; +} + +static void input_ensure_space(fd, pitail, ihead, need) +int fd; +int *pitail; +int ihead; +int need; +{ + while((IBUFSIZE - 1 - input_used(ihead, *pitail)) < need) + input_drop_tail_one(fd, pitail, ihead); +} + +static void input_push_byte(fd, pihead, pitail, ch) +int fd; +int *pihead; +int *pitail; +unsigned char ch; +{ + int ihead; + + ihead = *pihead; + input_ensure_space(fd, pitail, ihead, 1); + + Ply[fd].io->input[ihead] = (char)ch; + ihead = (ihead + 1) % IBUFSIZE; + *pihead = ihead; +} + +static void input_push_seq(fd, pihead, pitail, seq, n) +int fd; +int *pihead; +int *pitail; +unsigned char *seq; +int n; +{ + int i; + for(i=0; iinput[prev] == '\n' || Ply[fd].io->input[prev] == '\r') + return; + + while(prev != itail && + (((unsigned char)Ply[fd].io->input[prev] & 0xC0) == 0x80)) { + prev--; + if(prev < 0) + prev = IBUFSIZE - 1; + } + + if(Ply[fd].io->input[prev] == '\n' || Ply[fd].io->input[prev] == '\r') + return; + + *pihead = prev; +} + /**********************************************************************/ /* accept_input */ /**********************************************************************/ @@ -442,8 +561,8 @@ char *str2; int accept_input(fd) int fd; { - char buf[128], lastchar; - int i, n, prev, itail, ihead; + unsigned char buf[128], raw, ch; + int i, n, itail, ihead, need, saw_nl; #ifdef WIN32 n = scread(fd, buf, 127); @@ -451,51 +570,85 @@ int fd; n = read(fd, buf, 127); #endif - if(n<=0) + if(n<=0) { + Utf8_pending_len[fd] = 0; Ply[fd].io->commands = -1; /* Connection dropped */ + } else { ihead = Ply[fd].io->ihead; - lastchar = 0; itail = Ply[fd].io->itail; + saw_nl = 0; + for(i=0; i 31 || ((buf[i]&0x80) && (unsigned char)buf[i]!=155) || (buf[i] == '\n' && lastchar != '\r') - || buf[i] == '\b' ||buf[i]==127) { - if(buf[i]==127) buf[i]='\b'; - lastchar = buf[i]; - if(buf[i] == '\r') buf[i] = '\n'; - if(buf[i] == '\n') Ply[fd].io->commands++; - else if(buf[i] == '\b' && ihead != itail) { - prev = ihead-1 < 0 ? IBUFSIZE-1:ihead-1; - /* - if(Ply[fd].io->input[prev] == '%') - ihead -= 2; - else - */ - ihead--; - if(ihead < 0) - ihead = IBUFSIZE + ihead; + raw = buf[i]; + if(raw == '\n' && i > 0 && buf[i-1] == '\r') + continue; + + if(raw == 127) ch = '\b'; + else if(raw == '\r') ch = '\n'; + else ch = raw; + + if(ch == '\n') { + Utf8_pending_len[fd] = 0; + input_push_byte(fd, &ihead, &itail, ch); + Ply[fd].io->commands++; + saw_nl = 1; + continue; + } + + if(ch == '\b') { + if(Utf8_pending_len[fd] > 0) { + Utf8_pending_len[fd] = 0; continue; } - else if(buf[i] == '\b') continue; - Ply[fd].io->input[ihead] = buf[i]; - ihead = (ihead + 1) % IBUFSIZE; - if(ihead == itail) - itail = (itail + 1) % IBUFSIZE; - /* - if(buf[i] == '%') { - Ply[fd].io->input[ihead] = buf[i]; - ihead = (ihead + 1) % IBUFSIZE; - if(ihead == itail) - itail = (itail + 1) % IBUFSIZE; - } - */ + input_backspace_codepoint(fd, &ihead, itail); + continue; + } + + if(ch <= 31 || ch == 155) + continue; + + if(ch < 0x80) { + Utf8_pending_len[fd] = 0; + input_push_byte(fd, &ihead, &itail, ch); + continue; + } + + if(Utf8_pending_len[fd] == 0) { + need = utf8_lead_len(ch); + if(need <= 1) + continue; + Utf8_pending[fd][0] = ch; + Utf8_pending_len[fd] = 1; + continue; + } + + if((ch & 0xC0) != 0x80) { + Utf8_pending_len[fd] = 0; + i--; + continue; + } + + need = utf8_lead_len(Utf8_pending[fd][0]); + if(need < 2 || need > 4) { + Utf8_pending_len[fd] = 0; + i--; + continue; + } + + Utf8_pending[fd][Utf8_pending_len[fd]] = ch; + Utf8_pending_len[fd]++; + if(Utf8_pending_len[fd] == need) { + if(utf8_validate(Utf8_pending[fd], (unsigned long)need)) + input_push_seq(fd, &ihead, &itail, Utf8_pending[fd], need); + Utf8_pending_len[fd] = 0; } } Ply[fd].io->ihead = ihead; Ply[fd].io->itail = itail; Ply[fd].io->ltime = time(0); - if(buf[n-1] == '\n' || buf[n-1] == '\r') + if(saw_nl) Ply[fd].io->intrpt |= 1; else Ply[fd].io->intrpt &= ~1; @@ -601,7 +754,7 @@ long i1, i2, i3, i4, i5, i6; long arg[8]; char type; char *prestr; - char *Josa[6][2]={ {"","",},{"","",},{"","",},{"","",},{"","",},}; + char *Josa[6][2]={ {"은","는",},{"이","가",},{"과","와",},{"을","를",},{"으로","로",},}; static char color_buf1[16]; static char color_buf2[16]; @@ -767,7 +920,7 @@ void handle_commands() disconnect(i); continue; } - /* Ӹ */ + /* 줄임말 실행 */ if(alias_buf_num[i]!=alias_buf_pos[i] && Ply[i].io->fn==command) { ply_ptr = Ply[i].ply; strcpy(commands,alias_buf[i][alias_buf_pos[i]++]); @@ -836,6 +989,7 @@ int fd; close(fd); #endif FD_CLR(fd, &Sockets); + Utf8_pending_len[fd] = 0; Spy[fd] = -1; @@ -1250,7 +1404,7 @@ void reap_children() fclose(fp); unlink(filename); strcpy(Ply[found].io->userid, userid); - log_f("%s: %s@%s (%s@%s) \n", timestr, + log_f("%s: %s@%s (%s@%s) 접속\n", timestr, userid, address, userid, Ply[found].io->address); if(strcmp(address, "UNKNOWN")) strcpy(Ply[found].io->address, address); diff --git a/src/kstbl.h b/src/kstbl.h index 91ddd96..50cb9a6 100644 --- a/src/kstbl.h +++ b/src/kstbl.h @@ -1,4 +1,4 @@ -unsigned KStbl[2350]={ /* KS ϼ 2350 ڵ */ +unsigned KStbl[2350]={ /* KS 완성형 2350자의 조합형 코드 */ 0x8861,0x8862,0x8865,0x8868,0x8869,0x886a,0x886b,0x8871, 0x8873,0x8874,0x8875,0x8876,0x8877,0x8878,0x8879,0x887b, diff --git a/src/magic1.c b/src/magic1.c index e355a0b..2a8f1f0 100644 --- a/src/magic1.c +++ b/src/magic1.c @@ -31,18 +31,18 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, " ּ ġǰ̴ϱ?"); + print(fd, "어떤 주술을 펼치실겁니까?"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, "ƹ͵ ʽϴ!"); + print(fd, "아무것도 보이지 않습니다!"); ANSI(fd, WHITE); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { ANSI(fd, YELLOW); - print(fd, "Ѹ Ҽ ϴ!"); + print(fd, "한마디도 할수 없습니다!"); ANSI(fd, WHITE); return(0); } @@ -61,17 +61,17 @@ cmd *cmnd; } while(spllist[c].splno != -1); if(match == 0) { - print(fd, "׷ ֹ ʽϴ."); + print(fd, "그런 주문은 존재하지 않습니다."); return(0); } else if(match > 1) { - print(fd, "ġ ֹ ̸ ̻ϱ."); + print(fd, "펼치실 주문의 이름이 이상하군요."); return(0); } if(F_ISSET(ply_ptr->parent_rom, RNOMAG)) { - print(fd, "ּ ϴµ ϼ̽ϴ."); + print(fd, "주술을 출수 하는데 실패 하셨습니다."); return(0); } @@ -89,7 +89,7 @@ cmd *cmnd; if(fn == offensive_spell) { if(ply_ptr->class==0) { - print(fd," ֹ ֽϴ."); + print(fd,"당신은 공격주문을 쓸 수 없는 직업을 갖고 있습니다."); return 0; } for(c=0; ospell[c].splno != spllist[splno].splno; c++) @@ -134,24 +134,24 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(cmnd->num < 3) { - print(fd, " Űǰ̴ϱ?"); + print(fd, "누구에게 비법을 전수시키실겁니까?"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, "ƹ͵ ʽϴ!\n"); + print(fd, "아무것도 보이지 않습니다!\n"); ANSI(fd, WHITE); return(0); } if(F_ISSET(ply_ptr, PSILNC)) { ANSI(fd, YELLOW); - print(fd, " Ѹ Ҽ ϴ!\n"); + print(fd, "당신은 한마디도 할수 없습니다!\n"); ANSI(fd, WHITE); return(0); } if(ply_ptr->class != CARETAKER && ply_ptr->class != MAGE && ply_ptr->class != CLERIC) { - print(fd, "\n ڸ ų ִ ɷ ֽϴ.\n"); + print(fd, "\n도술사와 불제자만이 전수시킬 수 있는 능력이 있습니다.\n"); return(0); } @@ -160,7 +160,7 @@ cmd *cmnd; cmnd->val[1]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람은 존재하지 않습니다.\n"); return(0); } @@ -179,70 +179,70 @@ cmd *cmnd; } while(spllist[c].splno != -1); if(match == 0) { - print(fd, "\n׷ ֹ ʽϴ.\n"); + print(fd, "\n그런 주문이 존재하지 않습니다.\n"); return(0); } else if(match > 1) { - print(fd, "\n̸ֹ ̻մϴ.\n"); + print(fd, "\n주문이름이 이상합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, spllist[splno].splno)) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } /* if((spllist[splno].splno > 3) && (ply_ptr->class != CLERIC && ply_ptr->class < CARETAKER)) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].splno > 5) && (ply_ptr->class < CARETAKER)) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].splno < 3) && (ply_ptr->class != MAGE && ply_ptr->class < CARETAKER)) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } */ if((spllist[splno].spllv == 1) && (ply_ptr->class != CLERIC && ply_ptr->class < INVINCIBLE)) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].spllv == 2) && (ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE)) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].spllv == 3) && (ply_ptr->class < INVINCIBLE )) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].spllv == 4) && (ply_ptr->class < CARETAKER )) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } if((spllist[splno].spllv == 5) && (ply_ptr->class < SUB_DM )) { - print(fd, "\n ֹ ٸ ų ϴ.\n"); + print(fd, "\n그 주문을 다른 사람에게 전수시킬 수 없습니다.\n"); return(0); } F_CLR(ply_ptr, PHIDDN); S_SET(crt_ptr, spllist[splno].splno); - print(crt_ptr->fd, "\n%M %s ּ ù ̸ ֹ ŵϴ.\n~~~ ֹ ܿ ̻ ̴ \n ϴ.\n", ply_ptr, + print(crt_ptr->fd, "\n%M이 %s 주술의 시범을 보이며 주문 전수를 시킵니다.\n오옷~~~ 이 주문을 외우자 주위에 이상한 기운이 모이는 것이 그 \n그 사람에게 상당한 도움이 될 것 같습니다.\n", ply_ptr, spllist[splno].splstr); - print(fd, "\n%s ּ %M ù ̸ ֹ ŵϴ.\n~~~ ֹ ܿ ̻ ̴ \n ϴ.\n", spllist[splno].splstr, + print(fd, "\n%s 주술을 %M에게 시범을 보이며 주문 전수를 시킵니다.\n오옷~~~ 이 주문을 외우자 주위에 이상한 기운이 모이는 것이\n그 사람에게 상당한 도움이 될 것 같습니다.\n", spllist[splno].splstr, crt_ptr); broadcast_rom2(fd, crt_ptr->fd, rom_ptr->rom_num, - "\n%M %M %s ּ ù ̸ ֹ \nŵϴ.\n~~~ ֹ ܿ ̻ ̴ \n ϴ.\n", ply_ptr, crt_ptr, + "\n%M이 %M에게 %s 주술의 시범을 보이며 주문 전수를 \n시킵니다.\n오옷~~~ 이 주문을 외우자 주위에 이상한 기운이 모이는 것이\n그 사람에게 상당한 도움이 될 것 같습니다.\n", ply_ptr, crt_ptr, spllist[splno].splstr); return(0); @@ -266,12 +266,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, "\n ϽǷ?\n"); + print(fd, "\n무엇을 연마하실려고요?\n"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, "\n ɷδ ϴ.\n"); + print(fd, "\n당신의 능력으로는 이 비법서를 연마할 수 없습니다.\n"); ANSI(fd, WHITE); return(0); } @@ -293,25 +293,25 @@ cmd *cmnd; } if(!obj_ptr) { - print(fd, "\n׷ ϰ ʽϴ.\n"); + print(fd, "\n그런 것을 소지하고 있지 않습니다.\n"); return(0); } if(obj_ptr->type != SCROLL) { - print(fd, "\n̰ ƴմϴ.\n"); + print(fd, "\n이것은 비법서가 아닙니다.\n"); return(0); } - /* ֹ */ + /* 주문 배울 레벨 제한 */ if (obj_ptr->ndice > ply_ptr->level) { - print(fd, "\n ɷδ %i ľ ϴ.",obj_ptr); + print(fd, "\n당신의 능력으로는 %i의 내용을 파악하지 못해 연마할 수 없습니다.",obj_ptr); return(0); } if((F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -100) || (F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 100)) { - print(fd, "\n ġ %I ü ȭ ۽̸ а \n Ƚϴ.\n", obj_ptr); + print(fd, "\n연마를 끝마치자 %I의 형체가 화염에 휩싸이며 어디론가 사라져\n 버렸습니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -321,16 +321,16 @@ cmd *cmnd; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < CARETAKER)){ - print(fd, "\n %i ϴ.\n",obj_ptr); + print(fd, "\n당신의 직업상 %i의 비법을 연마할 수 없습니다.\n",obj_ptr); return(0); } F_CLR(ply_ptr, PHIDDN); - print(fd, " %s ˾Ƴ ϱ մϴ.\n ȿ ̻ \n ϴ.\n̾߾~~~~~ Ǹ鼭 \nǾϴ.\n", + print(fd, "당신은 %s의 내용을 알아내고 연마하기 시작합니다.\n연마를 해 나감에 따라 몸안에서 이상한 기운이 퍼져 나가는\n것이 느껴집니다.\n이야야~~~~~얍 그 기운이 안정되면서 완전히 당신의 것이 \n되었습니다.\n", spllist[obj_ptr->magicpower-1].splstr); - print(fd, "\n ġ %I ü ȭ ۽̸ а Ƚϴ.\n", obj_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %1i а մϴ.", + print(fd, "\n연마를 마치자 %I의 형체에 화염이 휩싸이며 어디론가 사라져 버렸습니다.\n", obj_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i의 내용을 읽고 연마합니다.", ply_ptr, obj_ptr); S_SET(ply_ptr, obj_ptr->magicpower-1); @@ -364,20 +364,20 @@ cmd *cmnd; if(cmnd->num < 2) { if(cmnd->val[0]>1) { obj_ptr = find_obj(ply_ptr,ply_ptr->parent_rom->first_obj, - "Խ",1); + "게시판",1); if(!obj_ptr) { - print(fd," нϱ?"); + print(fd,"무엇을 읽습니까?"); return 0; } board_obj[fd]=obj_ptr; return(read_board(ply_ptr,cmnd)); } - print(fd, " нϱ?\n"); + print(fd, "무엇을 읽습니까?\n"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, "\n װ ִ ɷ ϴ.\n"); + print(fd, "\n당신은 그것을 읽을 수 있는 능력이 없습니다.\n"); ANSI(fd, WHITE); return(0); } @@ -398,7 +398,7 @@ cmd *cmnd; } if(!obj_ptr) { - print(fd, "\n ׷ ʽϴ.\n"); + print(fd, "\n 그런것이 존재하지 않습니다.\n"); return(0); } @@ -408,19 +408,19 @@ cmd *cmnd; } if(obj_ptr->type != SCROLL) { - print(fd, "\n̰ ƴմϴ.\n"); + print(fd, "\n이것은 문서구가 아닙니다.\n"); return(0); } - /* ֹ */ + /* 주문 배울 레벨 제한 */ if (obj_ptr->ndice > ply_ptr->level) { - print(fd, "\n ɷδ %i ľ ϴ.",obj_ptr); + print(fd, "\n당신의 능력으로는 %i의 내용을 파악하지 못해 연마할 수 없습니다.",obj_ptr); return(0); } if((F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -100) || (F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 100)) { - print(fd, "\n а %I ü ϸ鼭 ٶ Բ Ƚϴ.\n", obj_ptr); + print(fd, "\n모든 것을 읽고 나자 %I의 형체가 먼지로 변하면서 바람과 함께 사라져 버렸습니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -431,12 +431,12 @@ cmd *cmnd; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < CARETAKER)){ - print(fd, "\n̰ ϴ ݼ̱ ϴ.\n",obj_ptr); + print(fd, "\n이것은 당신의 직업에서 금하는 금서이기 때문에 내용을 읽을 수 없습니다.\n",obj_ptr); return(0); } if(F_ISSET(ply_ptr->parent_rom, RNOMAG) || (obj_ptr->magicpower-1 < 0)) { - print(fd, "\nƹ ϵ Ͼ ʾҽϴ.\n"); + print(fd, "\n아무런 일도 일어나지 않았습니다.\n"); return(0); } @@ -454,7 +454,7 @@ CARETAKER)){ ply_ptr->lasttime[LT_READS].interval = 3; if(spell_fail(ply_ptr)){ - print(fd, "\n а %I ü ϸ鼭 ٶ Բ Ƚϴ.\n", obj_ptr); + print(fd, "\n모든 것을 읽고 나자 %I의 형체가 먼지로 변하면서 바람과 함께 사라져 버렸습니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); return(0); @@ -477,7 +477,7 @@ CARETAKER)){ if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); - print(fd, "\n а %I ü ϸ鼭 ٶ Բ Ƚϴ.\n", obj_ptr); + print(fd, "\n모든 것을 읽고 나자 %I의 형체가 먼지로 변하면서 바람과 함께 사라져 버렸습니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); } @@ -508,7 +508,7 @@ cmd *cmnd; fn = 0; if(cmnd->num < 2) { - print(fd, "\n Խϱ?\n"); + print(fd, "\n무엇을 먹습니까?\n"); return(0); } @@ -529,12 +529,12 @@ cmd *cmnd; } if(!obj_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런것은 존재하지 않습니다.\n"); return(0); } if(obj_ptr->type != POTION) { - print(fd, "\n̰ Դ ƴմϴ.\n"); + print(fd, "\n이것은 먹는 물건이 아닙니다.\n"); return(0); } if(F_ISSET(obj_ptr, OSPECI)) { @@ -586,8 +586,8 @@ cmd *cmnd; } if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); - print(fd, " %1i Ծϴ.\n", obj_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %1i Ծϴ.", + print(fd, "당신은 %1i을 먹었습니다.\n", obj_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i을 먹었습니다.", ply_ptr, obj_ptr); if(obj_ptr->pdice == 5) { obj_ptr->shotscur--; @@ -600,22 +600,22 @@ cmd *cmnd; } if(obj_ptr->shotscur < 1 || (obj_ptr->magicpower-1 < 0)) { - print(fd, "\nƹ͵ ʽϴ.\n\n"); + print(fd, "\n아무것도 들어있지 않습니다.\n\n"); return(0); } if(F_ISSET(ply_ptr->parent_rom, RNOPOT)){ - print(fd, "\nװ Ա Ÿ İ Ƚϴ.\n ߸԰ڴ... ... \n",obj_ptr); + print(fd, "\n그것을 먹기전에 인조가 나타나 훔쳐가 버렸습니다.\n 잘먹겠다... 낄낄낄... \n",obj_ptr); return(0); } if(F_ISSET(ply_ptr->parent_rom, RSUVIV)) { - print(fd, "\n忡 ƹ ͵ ϴ.\n"); + print(fd, "\n대련장에서는 아무 것도 먹을 수 없습니다.\n"); return(0); } if((F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -100) || (F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 100)) { - print(fd, "%I վȿ Ÿϴ.\n", obj_ptr); + print(fd, "%I가 당신의 손안에서 타버립니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -625,7 +625,7 @@ cmd *cmnd; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < CARETAKER)){ - print(fd, "\n ϰ ֱ ϴ.\n"); + print(fd, "\n당신직업상 그 물건을 금하고 있기 때문에 먹을 수 없습니다.\n"); return(0); } @@ -648,12 +648,12 @@ CARETAKER)){ if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); - print(fd, "\n %1i Ծϴ.\n", obj_ptr); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M %1i Ծϴ.", + print(fd, "\n당신은 %1i을 먹었습니다.\n", obj_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i을 먹었습니다.", ply_ptr, obj_ptr); if(--obj_ptr->shotscur < 1) { - /* print(fd, "\n ԰ %I ⸦ Ƚϴ.\n", obj_ptr); */ + /* print(fd, "\n다 먹고 남은 %I의 찌꺼기를 버렸습니다.\n", obj_ptr); */ del_obj_crt(obj_ptr, ply_ptr); free_obj(obj_ptr); } @@ -681,12 +681,12 @@ cmd *cmnd; fd = ply_ptr->fd; if(cmnd->num < 2) { - print(fd, "\n մϱ?\n"); + print(fd, "\n무엇을 사용합니까?\n"); return(0); } if(F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - print(fd, "ƹ ͵ ʽϴ!\n"); + print(fd, "아무 것도 보이지 않습니다!\n"); ANSI(fd, WHITE); return(0); } @@ -708,23 +708,23 @@ cmd *cmnd; } if(!obj_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런것이 존재하지 않습니다.\n"); return(0); } if(obj_ptr->type != WAND) { - print(fd, "\n볪 ̰ ƴմϴ.\n"); + print(fd, "\n막대나 지팡이가 아닙니다.\n"); return(0); } if(obj_ptr->shotscur < 1) { - print(fd, "\n Ƚϴ.\n"); + print(fd, "\n모두 써버렸습니다.\n"); return(0); } if((F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -100) || (F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 100)) { - print(fd, "\n%I ó Ƚϴ.\n", obj_ptr); + print(fd, "\n%I의 수명이 다한 듯 수증기처럼 증발해 버렸습니다.\n", obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); @@ -735,13 +735,13 @@ cmd *cmnd; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + ply_ptr->class) && ( ply_ptr->class < CARETAKER)){ - print(fd, "\n迡 ϴ ̱⿡ ϴ.\n"); + print(fd, "\n당신직업세계에서 금하는 물건이기에 사용할 수 없습니다.\n"); return(0); } if(F_ISSET(ply_ptr->parent_rom, RNOMAG) || (obj_ptr->magicpower < 1)) { - print(fd, "\nƹ ϵ Ͼ ʽϴ.\n"); + print(fd, "\n아무런 일도 일어나지 않습니다.\n"); return(0); } @@ -833,20 +833,20 @@ osp_t *osp; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < osp->mp && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, osp->splno) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, "\n ƿԽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M Ÿϴ.\n", + print(fd, "\n당신의 모습이 원래대로 돌아왔습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 모습이 나타납니다.\n", ply_ptr); } @@ -898,22 +898,22 @@ osp_t *osp; if(!strncmp(cmnd->str[1], spllist[14].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[38].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[39].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[40].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } @@ -923,92 +923,92 @@ osp_t *osp; ply_ptr->mpcur -= osp->mp; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %s ֹ ڽſ ̴ϴ.\n", + print(fd, "\n당신은 %s 주문을 자신에게 겁니다.\n", spellname); - /* ֹ */ - /* dz */ + /* 내가 만든주문 */ + /* 삭풍 */ if(!strncmp(cmnd->str[1], spllist[1].splstr,strlen(cmnd->str[1]))) - print(fd, "\ndzҸ... dz̿! ҸѶ.\nֹ ܿ Ϲκ Į ż ٶ Ҿ ɿ մϴ.\n"); - /* ȭ */ + print(fd, "\n삭풍소멸주... 삭풍이여! 너의 힘으로 모든 것을 소멸시켜라.\n주문을 외우자 북방으로부터 칼날과 같은 거센 바람이 불어 명령에 따라 공격합니다.\n"); + /* 불화살 */ if(!strncmp(cmnd->str[1], spllist[6].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȭ... ȭ ȭ ¿.\n ⸦ Ҳ 󰩴ϴ.\n"); - /* */ + print(fd, "\n멸겁화궁주... 멸겁화의 화살이 모든 것을 태워버린다.\n손을 끌어 기를 모으자 손 끝에서 적색의 불꽃이 공간을 가르며 적에게 날라갑니다.\n"); + /* 번개 */ if(!strncmp(cmnd->str[1], spllist[13].splstr,strlen(cmnd->str[1]))) - print(fd, "\nõ... ϴ г밡 ϴ װ ̷δ.\n ϴ÷ ʴ Ǫ ۷ϸ鼭 ϴ.\n"); - /* */ + print(fd, "\n뇌락천주... 하늘의 분노가 눈길로 변하니 그것이 뇌락이로다.\n양손의 검지를 하늘로 향해 모으자 양쪽눈에서 푸른번개가 작렬하면서 날라 갑니다.\n"); + /* 빙설검 */ if(!strncmp(cmnd->str[1], spllist[14].splstr,strlen(cmnd->str[1]))) - print(fd, "\n... Ϲ浿屺 ҵ ... ĥ .\nֹ ܿ ϴ÷ ָ Ĩϴ.\n"); - /* İݼ */ + print(fd, "\n동설주... 북방동장군의 힘은 불도 얼려버리니... 거칠것이 없도다.\n주문을 외우며 부적에 도력을 모아 하늘로 날리자 모든 것을 얼릴 듯 한 눈보라가 휘몰아 칩니다.\n"); + /* 파격술 */ if(!strncmp(cmnd->str[1], spllist[25].splstr,strlen(cmnd->str[1]))) - print(fd, "\nİ... ̿, .\nֹ ܿ dz ҿ̸ Ű Ǹ ϴ.\n"); - /* */ + print(fd, "\n파격주... 북한의 기운이요, 동왕의 출수니 나의 손으로 오라.\n주문을 외우며 손을 내밀자 한풍이 소용둘이를 일으키며 주의를 쓸어 버립니다.\n"); + /* 지동술 */ if(!strncmp(cmnd->str[1], spllist[26].splstr,strlen(cmnd->str[1]))) - print(fd, "\n... ɵ̿ ϶.\n ִ Ѿ մϴ.\n"); - /* ȭ */ + print(fd, "\n지동주... 대지의 정령들이여 나의 명령을 들어 적을 공격하라.\n땅위의 있는 수만마리의 벌레들이 적의 기운을 쫓아 공격을 합니다.\n"); + /* 화선도 */ if(!strncmp(cmnd->str[1], spllist[27].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȭ⼱... ϵ ȭμ ߿ Ǹ ̰ ¿츮.\n ִ ߵ ϴ÷ ƿö Ÿ ϴ.\n"); - /* */ + print(fd, "\n화기선주... 북두의 화두성이 깃발에 실리니 이것으로 모든 것을 태우리라.\n등에 숨겨져 있던 붉은 깃발들이 하늘로 날아올라 진을 형성하자 적의 몸이 불타 오릅니다.\n"); + /* 수구진 */ if(!strncmp(cmnd->str[1], spllist[28].splstr,strlen(cmnd->str[1]))) - print(fd, "\nź... .\n ̽ 鼭 װ ƨ Ѿ˰ վ ϴ.\n"); - /* ȸ*/ + print(fd, "\n탄지수통주... 관음의 눈물이 손 끝에 맺히니 마도 무릎을 꿇으리라.\n손 끝에 빛나는 이슬이 맺히면서 그것을 튕기자 총알같이 날라가 적의 몸을 꿰뚫어 버립니다.\n"); + /* 회오리*/ if(!strncmp(cmnd->str[1], spllist[29].splstr,strlen(cmnd->str[1]))) - print(fd, "\n... ٶ Ű ϸ.\nֹ ܹ ڱ dz ϴ.\n"); - /* */ + print(fd, "\n현무마압주... 현무의 검은 바람이 마를 삼키니 오행의 흑이 진동하리라.\n주문을 외무며 몸을 돌리자 갑자기 검은 태풍이 날라와 적의 몸을 삼켜 버립니다.\n"); + /* 해일 */ if(!strncmp(cmnd->str[1], spllist[30].splstr,strlen(cmnd->str[1]))) - print(fd, "\nʽ... ˵ ĵ θ Ŵ ٴ .\nҸſ ִ ̾ ʸ Ѹ ȿ ִ 濡 ˴ϴ.\n"); - /* */ + print(fd, "\n파초식주... 수검도가 파도를 부르니 거대한 바다의 힘으로 적을 날려버리리라.\n소매에 숨겨져있던 얇은 검을 뽑아 검초를 뿌리자 그 안에 숨겨져 있던 수의 기운들이 상대방에게 분출됩니다.\n"); + /* 폭진 */ if(!strncmp(cmnd->str[1], spllist[31].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȣ... θ ̿ ö .\n 鼭 ö īο մϴ.\n"); - /* */ + print(fd, "\n폭진호출주... 지진을 부르는 지룡이여 땅위로 올라와 너의 힘을 보여라.\n목검을 땅에 꽂자 땅이 갈라지면서 지룡이 올라와 날카로운 손톱으로 적을 공격합니다.\n"); + /* 낙석 */ if(!strncmp(cmnd->str[1], spllist[32].splstr,strlen(cmnd->str[1]))) - print(fd, "... ȣ 굵 ʶ߸ ̿ Ͽ츦 ߷.\nڱ ִ 길 ϸ鼭 Ŀٶ ϴ.\n"); - /* ȭdz */ + print(fd, "낙석주... 백호의 힘은 산도 무너뜨리니 대암의 정령이여 암우를 떨어뜨려라.\n갑자기 옆에 있던 산만한 바위가 폭파하면서 커다란 바위들이 적에게 떨어집니다.\n"); + /* 화풍술 */ if(!strncmp(cmnd->str[1], spllist[33].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȭdz... ȭ Ա ٶ Ÿ ¿.\n ¿ ϴ÷ ȭ Ÿ Ŀٶ ȸ ٶ ѷԴϴ.\n"); - /* ȭ */ + print(fd, "\n화풍주... 화마도현의 입김이 바람으로 나타나 적을 태운다.\n수많은 부적을 태우며 하늘로 날리자 화염이 불타오르는 커다란 회오리 바람이 적을 둘러쌉니다.\n"); + /* 화열진 */ if(!strncmp(cmnd->str[1], spllist[34].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȭȣ... ȭ ̿ Ա ҸѶ.\n ȭ ϸ鼭 Ҳ Ÿ մϴ.\n"); - /* */ + print(fd, "\n화룡호출주... 화산의 용이여 너의 입김으로 적을 소멸시켜라.\n당신의 몸이 화룡으로 변하면서 불꽃이 타오르는 몸으로 적을 공격합니다.\n"); + /* 토사술 */ if(!strncmp(cmnd->str[1], spllist[35].splstr,strlen(cmnd->str[1]))) - print(fd, "... ѹ ˰ ϸ...\nڱ ٷ Ͼ 鼭 ѹϴ.\n"); - /* ȭ */ + print(fd, "토분합주... 지옥의 문을 열어 삼켜버리니 모든 죄과를 심판하리...\n갑자기 적의 바로 밑으로 지진이 일어나 땅이 갈라지면서 적을 삼켜버립니다.\n"); + /* 화염술 */ if(!strncmp(cmnd->str[1], spllist[36].splstr,strlen(cmnd->str[1]))) - print(fd, "ȣ... ȭ ̴ õ󿡼 ȭŰ...\nֹ ܿ ڱ Ҳ մ ¿ ϴ.\n"); - /* õ */ + print(fd, "주작호출주... 오행중 화는 주작의 현신이니 천상에서 내려와 마를 정화시키니...\n주문을 외우자 갑자기 불꽃을 내뿜는 주작이 내려와 대지를 불태워 버립니다.\n"); + /* 혈사천 */ if(!strncmp(cmnd->str[1], spllist[37].splstr,strlen(cmnd->str[1]))) - print(fd, "\nõ... Ҳ ̰ ġ ̰ .\nϴ 鸮 ڱ װ ϴ.\n"); - /* õ */ + print(fd, "\n열사천주... 염라의 불꽃이 이곳까지 미치니 모든 마는 이곳에 빠지리라.\n잠잠하던 땅이 흔들리더니 갑자기 용암이 분출하자 적은 놀라 그곳에 빠집니다.\n"); + /* 파천운 */ if(!strncmp(cmnd->str[1], spllist[38].splstr,strlen(cmnd->str[1]))) - print(fd, "\nõ... õ Ÿ Ѵ.\nڱ Ÿ õ ϸ鼭 Ÿմϴ.\n"); - /* */ + print(fd, "\n파천운주... 지국천왕의 현신이 검은 구름으로 나타나 마를 심판한다.\n갖자기 검은 구름이 나타나 천지를 붉은 벼락이 진동하면서 적을 강타합니다.\n"); + /* 지진 */ if(!strncmp(cmnd->str[1], spllist[39].splstr,strlen(cmnd->str[1]))) - print(fd, "\n... ̿ Ÿ.\n Ȱ ̸ 33 Ÿ ϴ.\n"); - /* Һ */ + print(fd, "\n지옥도주... 지옥의 야차들이여 생사부의 힘을 빌어 몸을 나타내라.\n주위가 검은 안개로 싸이며 검을 든 33명의 야차가 나타나 적을 무참히 도륙해 버립니다.\n"); + /* 불벼락 */ if(!strncmp(cmnd->str[1], spllist[40].splstr,strlen(cmnd->str[1]))) - print(fd, "\nȭ... /õ Ÿ Ҹ Ű.\n ֹ ܿ մ 鼭 ¿ ϴ.\n"); - /* ѱ */ + print(fd, "\n화안진노주... /천상태자의 눈빛이 나에게 나타나 모든 것을 소멸 시키리라.\n눈을 감고 주문을 외우자 강렬한 빛을 내뿜는 삼지안이 열리면서 모든 것을 불태워 버립니다.\n"); + /* 변수나한권 */ /* if(!strncmp(cmnd->str[1], spllist[56].splstr,strlen(cmnd->str[1]))) */ - /* print(fd, "\nֹ ܿ ָ ε ޼Ҹ մϴ. ٴٴ~~~ "); */ + /* print(fd, "\n주문을 외우자 주먹이 우두두 쏟아지며 적의 급소를 공격합니다. 우다다닷~~~ "); */ - print(fd, "\nּ %dŭ ظ ־ϴ.\n", dmg); + print(fd, "\n주술이 %d만큼의 피해를 주었습니다.\n", dmg); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M %s ּ %s ڽſ ɰ ֽϴ.\n", + "\n%M이 %s 주술을 %s 자신에게 걸고 있습니다.\n", ply_ptr, spellname, - F_ISSET(ply_ptr, PMALES) ? "":"׳"); + F_ISSET(ply_ptr, PMALES) ? "그":"그녀"); display_status(fd, ply_ptr); print(fd, "\n"); } else if(how == POTION) { - print(fd, "\n.. Ծϴ. ϴ.\n~~~ ̷ ȵǴµ....\n"); - print(fd, "\n%dŭ ü ϴ.\n", dmg); + print(fd, "\n윽.. 당신은 독을 먹었습니다. 몸에 힘이 빠져나가는 것이 느껴집니다.\n으~~~ 이러면 안되는데....\n"); + print(fd, "\n%d만큼의 체력이 떨어졌습니다.\n", dmg); display_status(fd, crt_ptr); print(fd, "\n"); } if(ply_ptr->hpcur < 1) { - print(fd, "\n!! ƿ.. ϰھ. !!\n"); + print(fd, "\n!! 좋아요.. 죽을려면 무슨짓을 못하겠어요. !!\n"); ply_ptr->hpcur = 1; return(2); } @@ -1019,7 +1019,7 @@ osp_t *osp; else { if(how == POTION) { - print(fd, "\nſԸ Ҽ ֽϴ.\n"); + print(fd, "\n당신에게만 사용할수 있습니다.\n"); return(0); } @@ -1033,46 +1033,46 @@ osp_t *osp; if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 2) { - print(fd, "\n׷ ⿡ ʽϴ.\n"); + print(fd, "\n그런 것은 여기에 존재하지 않습니다.\n"); return(0); } } if(crt_ptr->type == MONSTER && F_ISSET(crt_ptr, MUNKIL)) { - print(fd, "\n %s ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "\n당신은 %s를 공격할 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(ply_ptr->type == PLAYER && crt_ptr->type == PLAYER && crt_ptr != ply_ptr) { if(F_ISSET(rom_ptr, RNOKIL)) { - print(fd,"\n 濡 ֽϴ.\n"); + print(fd,"\n이 방에선 전투가 금지되있습니다.\n"); return; } if(((ply_ptr->level+3)/4)<4 && ((crt_ptr->level+3)/4)>5){ - print(fd, "\n!! ƿ.. ϰھ. !!\n"); + print(fd, "\n!! 좋아요.. 죽을려면 무슨짓을 못하겠어요. !!\n"); return; } if(!F_ISSET(ply_ptr, PFAMIL) || !F_ISSET(crt_ptr, PFAMIL)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, "\n̾ մϴ.\n"); + print(fd, "\n미안하지만 당신은 선합니다.\n"); return(0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, "\n̾ ׻ մϴ.\n"); + print(fd, "\n미안하지만 그사람은 선합니다.\n"); return(0); } } else if(check_war(ply_ptr->daily[DL_EXPND].max, crt_ptr->daily[DL_EXPND].max)) { if(!F_ISSET(ply_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, "\n̾ մϴ.\n"); + print(fd, "\n미안하지만 당신은 선합니다.\n"); return(0); } if(!F_ISSET(crt_ptr, PCHAOS) && !F_ISSET(rom_ptr, RSUVIV)) { - print(fd, "\n̾ ׻ մϴ.\n"); + print(fd, "\n미안하지만 그사람은 선합니다.\n"); return(0); } } @@ -1095,22 +1095,22 @@ osp_t *osp; if(!strncmp(cmnd->str[1], spllist[14].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[38].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[39].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } if(!strncmp(cmnd->str[1], spllist[40].splstr,strlen(cmnd->str[1]))) if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n縸 ִ Դϴ.\n"); + print(fd, "\n도술사만이 쓸 수 있는 마법입니다.\n"); return(0); } @@ -1133,121 +1133,121 @@ osp_t *osp; crt_ptr->hpcur -= dmg; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %s ֹ %s ɾϴ.\n", spellname, + print(fd, "\n당신은 %s 주문을 %s에게 걸었습니다.\n", spellname, crt_ptr->name); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %s ֹ %M ܿϴ.", + "\n%M이 %s 주문을 %M에게 외웁니다.", ply_ptr, spellname, crt_ptr); - /* ֹ */ - /* dz */ + /* 내가 만든주문 */ + /* 삭풍 */ if(!strncmp(cmnd->str[1], spllist[1].splstr,strlen(cmnd->str[1]))) { - print(fd, "dzҸ... dz̿! ҸѶ.\nֹ ܿ Ϲκ Į ż ٶ Ҿ ɿ մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ Ϲκ Į ż ٶ\nҾ ɿ մϴ.",ply_ptr); + print(fd, "삭풍소멸주... 삭풍이여! 너의 힘으로 모든 것을 소멸시켜라.\n주문을 외우자 북방으로부터 칼날과 같은 거센 바람이 불어 명령에 따라 공격합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우자 북방으로부터 칼날과 같은 거센 바람이\n불어 명령에 따라 공격합니다.",ply_ptr); } - /* ȭ */ + /* 불화살 */ if(!strncmp(cmnd->str[1], spllist[6].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȭ... ȭ ȭ ¿.\n ⸦ Ҳ 󰩴ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ⸦ Ҳ \n 󰩴ϴ.",ply_ptr); + print(fd, "멸겁화궁주... 멸겁화의 화살이 모든 것을 태워버린다.\n손을 끌어 기를 모으자 손 끝에서 적색의 불꽃이 공간을 가르며 적에게 날라갑니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 손을 끌어 기를 모으자 손 끝에서 적색의 불꽃이 공간을\n가르며 적에게 날라갑니다.",ply_ptr); } - /* */ + /* 번개 */ if(!strncmp(cmnd->str[1], spllist[13].splstr,strlen(cmnd->str[1]))) { - print(fd, "õ... ϴ г밡 ϴ װ ̷δ.\n ϴ÷ ʴ Ǫ ۷ϸ鼭 ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ϴ÷ ʴ Ǫ\n۷ϸ鼭 ϴ.",ply_ptr); + print(fd, "뇌락천주... 하늘의 분노가 눈길로 변하니 그것이 뇌락이로다.\n양손의 검지를 하늘로 향해 모으자 양쪽눈에서 푸른번개가 작렬하면서 날라 갑니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 양손의 검지를 하늘로 향해 모으자 양쪽눈에서 푸른번개가\n작렬하면서 날라 갑니다.",ply_ptr); } - /* */ + /* 빙설검 */ if(!strncmp(cmnd->str[1], spllist[14].splstr,strlen(cmnd->str[1]))) { - print(fd, "... Ϲ浿屺 ҵ ... ĥ ..\nֹ ܿ ϴ÷ ָ Ĩϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ ϴ÷ \n ָ Ĩϴ.",ply_ptr); + print(fd, "동설주... 북방동장군의 힘은 불도 얼려버리니... 거칠것이 없도다..\n주문을 외우며 부적에 도력을 모아 하늘로 날리자 모든 것을 얼릴 듯 한 눈보라가 휘몰아 칩니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우며 부적에 도력을 모아 하늘로 날리자 모든 것을\n얼릴 듯 한 눈보라가 휘몰아 칩니다.",ply_ptr); } - /* İݼ */ + /* 파격술 */ if(!strncmp(cmnd->str[1], spllist[25].splstr,strlen(cmnd->str[1]))) { - print(fd, "İ... ̿, .\nֹ ܿ dz ҿ̸ Ű Ǹ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ dz ҿ̸ Ű\nǸ ϴ.",ply_ptr); + print(fd, "파격주... 북한의 기운이요, 동왕의 출수니 나의 손으로 오라.\n주문을 외우며 손을 내밀자 한풍이 소용둘이를 일으키며 주의를 쓸어 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우며 손을 내밀자 한풍이 소용둘이를 일으키며\n주의를 쓸어 버립니다.",ply_ptr); } - /* */ + /* 지동술 */ if(!strncmp(cmnd->str[1], spllist[26].splstr,strlen(cmnd->str[1]))) { - print(fd, "... ɵ̿ ϶.\n ִ Ѿ մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ ִ \n Ѿ մϴ.",ply_ptr); + print(fd, "지동주... 대지의 정령들이여 나의 명령을 들어 적을 공격하라.\n땅위의 있는 수만마리의 벌레들이 적의 기운을 쫓아 공격을 합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우자 땅위의 있는 수만마리의 벌레들이 적의 \n기운을 쫓아 공격을 합니다.",ply_ptr); } - /* ȭ */ + /* 화선도 */ if(!strncmp(cmnd->str[1], spllist[27].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȭ⼱... ϵ ȭμ ߿ Ǹ ̰ ¿츮.\n ִ ߵ ϴ÷ ƿö Ÿ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M  ִ ߵ ϴ÷ ƿö \n Ÿ ϴ.",ply_ptr); + print(fd, "화기선주... 북두의 화두성이 깃발에 실리니 이것으로 모든 것을 태우리라.\n등에 숨겨져 있던 붉은 깃발들이 하늘로 날아올라 진을 형성하자 적의 몸이 불타 오릅니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 등에 숨겨져 있던 붉은 깃발들이 하늘로 날아올라 진을\n형성하자 적의 몸이 불타 오릅니다.",ply_ptr); } - /* */ + /* 수구진 */ if(!strncmp(cmnd->str[1], spllist[28].splstr,strlen(cmnd->str[1]))) { - print(fd, "ź... .\n ̽ 鼭 װ ƨ Ѿ˰ վ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ̽ 鼭 װ ƨ Ѿ˰\n վ ϴ.",ply_ptr); + print(fd, "탄지수통주... 관음의 눈물이 손 끝에 맺히니 마도 무릎을 꿇으리라.\n손 끝에 빛나는 이슬이 맺히면서 그것을 튕기자 총알같이 날라가 적의 몸을 꿰뚫어 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 손 끝에 빛나는 이슬이 맺히면서 그것을 튕기자 총알같이\n날라가 적의 몸을 꿰뚫어 버립니다.",ply_ptr); } - /* ȸ*/ + /* 회오리*/ if(!strncmp(cmnd->str[1], spllist[29].splstr,strlen(cmnd->str[1]))) { - print(fd, "... ٶ Ű ϸ.\nֹ ܹ ڱ dz ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܹ ڱ dz \n ϴ.",ply_ptr); + print(fd, "현무마압주... 현무의 검은 바람이 마를 삼키니 오행의 흑이 진동하리라.\n주문을 외무며 몸을 돌리자 갑자기 검은 태풍이 날라와 적의 몸을 삼켜 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외무며 몸을 돌리자 갑자기 검은 태풍이 날라와\n적의 몸을 삼켜 버립니다.",ply_ptr); } - /* */ + /* 해일 */ if(!strncmp(cmnd->str[1], spllist[30].splstr,strlen(cmnd->str[1]))) { - print(fd, "ʽ... ˵ ĵ θ Ŵ ٴ .\nҸſ ִ ̾ ʸ Ѹ ȿ ִ 濡 ˴ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M Ҹſ ִ ʸ Ѹ \n ȿ ִ 濡 ˴ϴ.",ply_ptr); + print(fd, "파초식주... 수검도가 파도를 부르니 거대한 바다의 힘으로 적을 날려버리리라.\n소매에 숨겨져있던 얇은 검을 뽑아 검초를 뿌리자 그 안에 숨겨져 있던 수의 기운들이 상대방에게 분출됩니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 소매에 숨겨져있던 얇은 검을 뽑으며 검초를 뿌리자 \n그 안에 숨겨져 있던 수의 기운들이 상대방에게 분출됩니다.",ply_ptr); } - /* */ + /* 폭진 */ if(!strncmp(cmnd->str[1], spllist[31].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȣ... θ ̿ ö .\n 鼭 ö īο մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M 鼭 ö īο\n մϴ.",ply_ptr); + print(fd, "폭진호출주... 지진을 부르는 지룡이여 땅위로 올라와 너의 힘을 보여라.\n목검을 땅에 꽂자 땅이 갈라지면서 지룡이 올라와 날카로운 손톱으로 적을 공격합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 목검을 땅에 꽂자 땅이 갈라지면서 지룡이 올라와 날카로운\n손톱으로 적을 공격합니다.",ply_ptr); } - /* */ + /* 낙석 */ if(!strncmp(cmnd->str[1], spllist[32].splstr,strlen(cmnd->str[1]))) { - print(fd, "... ȣ 굵 ʶ߸ ̿ Ͽ츦 ߷.\nڱ ִ 길 ϸ鼭 Ŀٶ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ִ 길 ڱ ϸ鼭 Ŀٶ\n ϴ.",ply_ptr); + print(fd, "낙석주... 백호의 힘은 산도 무너뜨리니 대암의 정령이여 암우를 떨어뜨려라.\n갑자기 옆에 있던 산만한 바위가 폭파하면서 커다란 바위들이 적에게 떨어집니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 옆에 있던 산만한 바위가 갑자기 폭파하면서 커다란\n바위들이 적에게 떨어집니다.",ply_ptr); } - /* ȭdz */ + /* 화풍술 */ if(!strncmp(cmnd->str[1], spllist[33].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȭdz... ȭ Ա ٶ Ÿ ¿.\n ¿ ϴ÷ ȭ Ÿ Ŀٶ ȸ ٶ ѷԴϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ¿ ϴ÷ ȭ Ÿ\nĿٶ ȸ ٶ ѷԴϴ.",ply_ptr); + print(fd, "화풍주... 화마도현의 입김이 바람으로 나타나 적을 태운다.\n수많은 부적을 태우며 하늘로 날리자 화염이 불타오르는 커다란 회오리 바람이 적을 둘러쌉니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 수많은 부적을 태우며 하늘로 날리자 화염이 불타오르는\n커다란 회오리 바람이 적을 둘러쌉니다.",ply_ptr); } - /* ȭ */ + /* 화열진 */ if(!strncmp(cmnd->str[1], spllist[34].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȭȣ... ȭ ̿ Ա ҸѶ.\n ȭ ϸ鼭 Ҳ Ÿ մϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ȭ ϸ鼭 Ҳ Ÿ \n մϴ.",ply_ptr); + print(fd, "화룡호출주... 화산의 용이여 너의 입김으로 적을 소멸시켜라.\n당신의 몸이 화룡으로 변하면서 불꽃이 타오르는 몸으로 적을 공격합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 몸이 화룡으로 변하면서 불꽃이 타오르는 몸으로\n적을 공격합니다.",ply_ptr); } - /* */ + /* 토사술 */ if(!strncmp(cmnd->str[1], spllist[35].splstr,strlen(cmnd->str[1]))) { - print(fd, "... ѹ ˰ ϸ...\nڱ ٷ Ͼ 鼭 ѹϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ڱ ٷ Ͼ 鼭\n ѹϴ.",ply_ptr); + print(fd, "토분합주... 지옥의 문을 열어 삼켜버리니 모든 죄과를 심판하리...\n갑자기 적의 바로 밑으로 지진이 일어나 땅이 갈라지면서 적을 삼켜버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 갑자기 적의 바로 밑으로 지진이 일어나 땅이 갈라지면서\n적을 삼켜버립니다.",ply_ptr); } - /* ȭ */ + /* 화염술 */ if(!strncmp(cmnd->str[1], spllist[36].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȣ... ȭ ̴ õ󿡼 ȭŰ...\nֹ ܿ ڱ Ҳ մ ¿ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ ڱ Ҳ մ \n ¿ ϴ.",ply_ptr); + print(fd, "주작호출주... 오행중 화는 주작의 현신이니 천상에서 내려와 마를 정화시키니...\n주문을 외우자 갑자기 불꽃을 내뿜는 주작이 내려와 대지를 불태워 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우자 갑자기 불꽃을 내뿜는 주작이 내려와\n대지를 불태워 버립니다.",ply_ptr); } - /* õ */ + /* 혈사천 */ if(!strncmp(cmnd->str[1], spllist[37].splstr,strlen(cmnd->str[1]))) { - print(fd, "õ... Ҳ ̰ ġ ̰ .\nϴ 鸮 ڱ װ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ ϴ 鸮 ڱ \n װ ϴ.",ply_ptr); + print(fd, "열사천주... 염라의 불꽃이 이곳까지 미치니 모든 마는 이곳에 빠지리라.\n잠잠하던 땅이 흔들리더니 갑자기 용암이 분출하자 적은 놀라 그곳에 빠집니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우자 잠잠하던 땅이 흔들리더니 갑자기 용암이\n분출하자 적은 놀라 그곳에 빠집니다.",ply_ptr); } - /* õ */ + /* 파천운 */ if(!strncmp(cmnd->str[1], spllist[38].splstr,strlen(cmnd->str[1]))) { - print(fd, "õ... õ Ÿ Ѵ.\nڱ Ÿ õ ϸ鼭 Ÿմϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ ڱ Ÿ õ \n ϸ鼭 Ÿմϴ.",ply_ptr); + print(fd, "파천운주... 지국천왕의 현신이 검은 구름으로 나타나 마를 심판한다.\n갑자기 검은 구름이 나타나 천지를 붉은 벼락이 진동하면서 적을 강타합니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 주문을 외우자 갑자기 검은 구름이 나타나 천지를 \n붉은 벼락이 진동하면서 적을 강타합니다.",ply_ptr); } - /* */ + /* 지진 */ if(!strncmp(cmnd->str[1], spllist[39].splstr,strlen(cmnd->str[1]))) { - print(fd, "... ̿ Ÿ.\n Ȱ ̸ 33 Ÿ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M Ȱ ̸ 33 Ÿ ϴ.",ply_ptr); + print(fd, "지옥도주... 지옥의 야차들이여 생사부의 힘을 빌어 몸을 나타내라.\n주위가 검은 안개로 싸이며 검을 든 33명의 야차가 나타나 적을 무참히 도륙해 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 주위가 검은 안개로 싸이며 검을 든 33명의 야차가 나타나 적을 무참히 도륙해 버립니다.",ply_ptr); } - /* Һ */ + /* 불벼락 */ if(!strncmp(cmnd->str[1], spllist[40].splstr,strlen(cmnd->str[1]))) { - print(fd, "ȭ... õ Ÿ Ҹ Ű.\n ֹ ܿ մ 鼭 ¿ ϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ֹ ܿ մ 鼭 ¿ ϴ.",ply_ptr); + print(fd, "화안진노주... 천상태자의 눈빛이 나에게 나타나 모든 것을 소멸 시키리라.\n눈을 감고 주문을 외우자 강렬한 빛을 내뿜는 삼지안이 열리면서 모든 것을 불태워 버립니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 눈을 감고 주문을 외우자 강렬한 빛을 내뿜는 삼지안이 열리면서 모든 것을 불태워 버립니다.",ply_ptr); } - print(fd, "\nֹ %dŭ ظ ־ϴ.\n", dmg); + print(fd, "\n주문이 %d만큼의 피해를 주었습니다.\n", dmg); print(crt_ptr->fd, - "\n%M %s ּ ſ %dŭ ظ ־ϴ.\n", + "\n%M이 %s 주술로 당신에게 %d만큼의 피해를 주었습니다.\n", ply_ptr, spellname, dmg); display_status(fd, crt_ptr); print(fd, "\n"); @@ -1255,9 +1255,9 @@ osp_t *osp; if(crt_ptr->hpcur < 1) { - print(fd, "\n %M ׿ϴ.\n", crt_ptr); + print(fd, "\n당신은 %M을 죽였습니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ׿Ƚϴ.\n", ply_ptr, crt_ptr); + "\n%M이 %M을 죽여버렸습니다.\n", ply_ptr, crt_ptr); die(crt_ptr, ply_ptr); return(2); } diff --git a/src/magic2.c b/src/magic2.c index 671527d..0756e4e 100644 --- a/src/magic2.c +++ b/src/magic2.c @@ -11,7 +11,7 @@ #include "mextern.h" /**********************************************************************/ -/* vigor ( ȸ ) */ +/* vigor ( 회복 ) */ /**********************************************************************/ /* This function will cause the vigor spell to be cast on a player or */ @@ -33,17 +33,17 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 2 && how == CAST) { - print(fd, " մϴ.\n"); + print(fd, "당신의 도력이 부족합니다.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "ڿ 縸 ִ Դϴ.\n"); + print(fd, "불제자와 무사만 쓸 수 있는 마법입니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SVIGOR) && how == CAST) { - print(fd, " ּ ͵ ߽ϴ.\n"); + print(fd, "당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } @@ -71,7 +71,7 @@ int how; ply_ptr->mpcur -= 2; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,3); - print(fd, " ּ ȭŵϴ.\n"); + print(fd, "이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); } } else @@ -86,14 +86,14 @@ int how; if(how == CAST || how == SCROLL) { - print(fd, " ϰ ȸ ֹ ܿϴ.\n Ⱑ ¸ 鼭 ü Ǿϴ.\n"); + print(fd, "당신은 합장을 하고서 회복 주문을 외웁니다.\n빛의 정기가 온몸에 스며들면서 체력이 향상되었습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ϰ ֹ ܿϴ.\n Ⱑ ̴ Դϴ.\n", + "\n%M이 합장을 하고서 주문을 외웁니다.\n빛의 정기가 그의 몸으로 모이는 것이 보입니다.\n", ply_ptr); return(1); } else { - print(fd, " ü Ǿϴ.\n"); + print(fd, "당신의 체력이 향상되었습니다.\n"); return(1); } } @@ -101,7 +101,7 @@ int how; /* Cast vigor on another player or monster */ else { if(how == POTION) { - print(fd, " ڽſԸ ֽϴ.\n"); + print(fd, "그 물건은 자신에게만 사용할 수 있습니다.\n"); return(0); } @@ -115,7 +115,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd,"׷ ʽϴ.\n"); + print(fd,"그런 사람은 존재하지 않습니다.\n"); return(0); } } @@ -131,7 +131,7 @@ int how; ply_ptr->mpcur -= 2; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,3); - print(fd," ּ ȭŵϴ.\n"); + print(fd,"이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); } } else @@ -146,16 +146,16 @@ int how; crt_ptr->hpcur = crt_ptr->hpmax; expadd = 0; } -/* ȸ ġ ִ κ. +/* 회복 사용시 경험치를 주는 부분. ply_ptr->experience += expadd; - ϴ ƾ ʾ. */ + 일단은 루틴에 넣지 않았음. */ if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " ϰ %M ȸ ϴ ֹ ܿϴ.\n Ⱑ ֽϴ.\n", + print(fd, "당신은 합장을 하고서 %M의 회복을 기원하는 주문을 외웁니다.\n빛의 정기가 그의 몸으로 스며들고 있습니다.\n", crt_ptr); - print(crt_ptr->fd,"%M ϰ ȸ ϴ ֹ ܿϴ.\n Ⱑ 鼭 ü Ǿϴ.\n", + print(crt_ptr->fd,"%M이 합장을 하고서 당신의 회복을 기원하는 주문을 외웁니다.\n빛의 정기가 당신의 몸에 스며들면서 체력이 향상되었습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ϰ ȸ ϴ ֹ ܿϴ.\n Ⱑ ġ ̴\n ϴ.\n", + "\n%M이 %M에게 합장을 하고서 회복을 기원하는 주문을 외웁니다.\n빛의 정기가 당신의 몸을 스치며 그의 몸으로 모이는\n것이 느껴집니다.\n", ply_ptr, crt_ptr); return(1); } @@ -166,7 +166,7 @@ int how; } /**********************************************************************/ -/* curepoison ( ص ) */ +/* curepoison ( 해독 ) */ /**********************************************************************/ /* This function allows a player to cast a curepoison spell on himself, */ @@ -186,17 +186,17 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 6 && how == CAST) { - print(fd," մϴ.\n"); + print(fd,"당신의 도력이 부족합니다.\n"); return(0); } /* if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "ڿ 縸 ִ Դϴ.\n"); + print(fd, "불제자와 무사만 쓸 수 있는 마법입니다.\n"); return(0); } */ if(!S_ISSET(ply_ptr, SCUREP) && how == CAST) { - print(fd, " ּ ͵ ߽ϴ.\n"); + print(fd, "당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } if(how != POTION) { @@ -214,16 +214,16 @@ int how; ply_ptr->mpcur -= 6; if(how == CAST || how == SCROLL || how == WAND) { - print(fd," ¤鼭 ص ֹ ܿϴ.\nհ ° Դϴ.\n"); - print(fd," ִ ϴ.\n"); + print(fd,"당신은 오른손으로 혈도를 짚으면서 해독 주문을 외웁니다.\n손가락 끝으로 검은 독기운이 빠져나오는것이 보입니다.\n"); + print(fd,"당신 몸에 남아 있는 독이 모두 빠져나갔습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ¤鼭 ص ֹ ܿϴ.\n հ Դϴ.\n", + "\n%M이 혈도를 짚으면서 해독 주문을 외웁니다.\n그의 손가락 끝으로 검은 독기운이 빠져나오는 것이 보입니다.\n", ply_ptr); } else if(how == POTION && F_ISSET(ply_ptr, PPOISN)) - print(fd, "\n ȭǴ ֽϴ.\n"); + print(fd, "\n독기운이 중화되는 것을 느낄 수 있습니다.\n"); else if(how == POTION) - print(fd, "\nص ϼ̽ϴ.\n"); + print(fd, "\n해독에 실패하셨습니다.\n"); F_CLR(ply_ptr, PPOISN); @@ -233,7 +233,7 @@ int how; else { if(how == POTION) { - print(fd," ڽſԸ ֽϴ.\n"); + print(fd,"그 물건은 자신에게만 사용할 수 있습니다.\n"); return(0); } @@ -247,7 +247,7 @@ int how; cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { - print(fd,"׷ ʽϴ.\n"); + print(fd,"그런 것은 존재하지 않습니다.\n"); return(0); } } @@ -258,13 +258,13 @@ int how; F_CLR(crt_ptr, PPOISN); if(how == CAST || how == SCROLL || how == WAND) { - print(fd,"%M ¤鼭 ص ֹ ܿϴ.\n հ Դϴ.\n", + print(fd,"%M이 혈도를 짚으면서 해독 주문을 외웁니다.\n그의 손가락 끝으로 검은 독기운이 빠져나오는 것이 보입니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ¤鼭 ص ֹ ܿϴ.\n հ Դϴ.\n", + "\n%M이 %M의 혈도를 짚으면서 해독 주문을 외웁니다.\n그의 손가락 끝으로 검은 독기운이 빠져나오는 것이 보입니다.\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "%M ¤鼭 ص ֹ ܿϴ.\n հ ϴ.\n", + "%M이 당신의 혈도를 짚으면서 해독 주문을 외웁니다.\n당신의 손가락 끝으로 독기운이 빠져나가는 것이 느껴집니다.\n", ply_ptr); } @@ -275,7 +275,7 @@ int how; } /**********************************************************************/ -/* light ( ߱ ) */ +/* light ( 발광 ) */ /**********************************************************************/ /* This spell allows a player to cast a light spell which will illuminate */ @@ -291,12 +291,12 @@ int how; fd = ply_ptr->fd; if(ply_ptr->mpcur < 5 && how == CAST) { - print(fd, " մϴ.\n"); + print(fd, "당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SLIGHT) && how == CAST) { - print(fd," ּ ͵ ߽ϴ.\n"); + print(fd,"당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -307,7 +307,7 @@ int how; if(how == CAST){ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)) - print(fd," ּ ȭŵϴ.\n"); + print(fd,"이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->mpcur -= 5; } @@ -316,9 +316,9 @@ int how; ply_ptr->lasttime[LT_LIGHT].interval = 300L+((ply_ptr->level+3)/4)*300L + (F_ISSET(ply_ptr->parent_rom,RPMEXT)) ? 600L : 0; - print(fd," ޼տ ߱ ֹ ɾϴ.\n޼տ Ȳݺ վ ݴϴ.\n"); + print(fd,"당신의 왼손에 발광 주문을 걸었습니다.\n왼손에서 황금빛이 뿜어져 나와 주위를 밝혀 줍니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M տ ߱ ֹ ɾϴ.\n տ Ȳݻ վ ɴϴ.\n", + "\n%M이 한쪽 손에 발광 주문을 걸었습니다.\n그의 손에서 황금색의 찬란한 빛이 뿜어져 나옵니다.\n", ply_ptr); return(1); @@ -326,7 +326,7 @@ int how; } /**********************************************************************/ -/* protection (ȣ) */ +/* protection (수호진) */ /**********************************************************************/ /* This function allows a spellcaster to cast a protection spell either */ @@ -348,12 +348,12 @@ int how; t = time(0); if(ply_ptr->mpcur < 10 && how == CAST) { - print(fd," մϴ.\n"); + print(fd,"당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SPROTE) && how == CAST) { - print(fd," ּ ͵ ߽ϴ.\n"); + print(fd,"당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } @@ -379,7 +379,7 @@ int how; 60*((ply_ptr->level+3)/4); ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd," ּ ȭŵϴ.\n"); + print(fd,"이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_PROTE].interval += 800L; } } @@ -387,13 +387,13 @@ int how; ply_ptr->lasttime[LT_PROTE].interval = 1200; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "μ ȣ ֹ ܿϴ.\n ȣɵ ѷθ ߽ϴ.\n"); + print(fd, "두손으로 인을 맺은 뒤 수호진의 주문을 외웁니다.\n빛의 수호령들이 당신 주위를 둘러싸며 방어의 진을 형성했습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M μ ȣ ֹ ܿϴ.\n ȣɵ ѷθ ߽ϴ.\n", + "\n%M이 두손을 모으며 수호진의 주문을 외웁니다.\n빛의 수호령들이 그의 주위를 둘러싸며 방어의 진을 형성했습니다.\n", ply_ptr); } else if(how == POTION) - print(fd, "\n ȣɵ ѷθ ߽ϴ.\n"); + print(fd, "\n빛의 수호령들이 당신 주위를 둘러싸며 방어의 진을 형성했습니다.\n"); return(1); } @@ -401,7 +401,7 @@ int how; else { if(how == POTION) { - print(fd, " ڽſԸ ֽϴ.\n"); + print(fd, "그 물건은 자신에게만 사용할 수 있습니다.\n"); return(0); } @@ -410,7 +410,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "׷ ʽϴ.\n"); + print(fd, "그런 사람은 존재하지 않습니다.\n"); return(0); } @@ -427,7 +427,7 @@ int how; 60*((ply_ptr->level+3)/4); ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd, " ּ ȭŵϴ.\n"); + print(fd, "이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_PROTE].interval += 800L; } } @@ -435,13 +435,13 @@ int how; crt_ptr->lasttime[LT_PROTE].interval = 1200; if(how == CAST || how == SCROLL || how == WAND) { - print(fd,"%M ȣ ׸ ȣ ֹ ɾϴ.\n ȣɵ ѷθ ߽ϴ.\n", + print(fd,"%M의 몸에 수호인을 그리며 수호진의 주문을 걸었습니다.\n빛의 수호령들이 그의 주위를 둘러싸며 방어의 진을 형성했습니다.\n", crt_ptr); print(crt_ptr->fd, - "%M ȣ ׸ ֹ ɾϴ.\n ȣɵ ѷθ ߽ϴ.\n", + "%M이 당신의 몸에 수호인을 그리며 주문을 걸었습니다.\n빛의 수호령들이 당신의 주위를 둘러싸며 방어의 진을 형성했습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "%M %M ȣ ׸ ֹ ɾϴ.\n ȣɵ ѷθ ߽ϴ.\n", + "%M이 %M의 몸에 수호인을 그리며 주문을 걸었습니다.\n빛의 수호령들이 그의 주위를 둘러싸며 방어의 진을 형성했습니다.\n", ply_ptr, crt_ptr); return(1); } @@ -452,7 +452,7 @@ int how; } /**********************************************************************/ -/* mend (ȸ) */ +/* mend (원기회복) */ /**********************************************************************/ /* This function will cause the mend spell to be cast on a player or */ @@ -474,18 +474,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 4 && how == CAST) { - print(fd," մϴ.\n"); + print(fd,"당신의 도력이 부족합니다.\n"); return(0); } /* if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "ڿ 縸 ִ Դϴ.\n"); + print(fd, "불제자와 무사만 쓸 수 있는 마법입니다.\n"); return(0); } */ if(!S_ISSET(ply_ptr, SMENDW) && how == CAST) { - print(fd," ּ ͵ ߽ϴ.\n"); + print(fd,"당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } if(ply_ptr->class == BARBARIAN || ply_ptr->class == FIGHTER @@ -513,7 +513,7 @@ int how; ply_ptr->mpcur -= 4; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,6)+1; - print(fd," ּ ȭŵϴ.\n"); + print(fd,"이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); } } else @@ -528,14 +528,14 @@ int how; if(how == CAST || how == SCROLL) { - print(fd," Ƚ ڼ ϸ ȸ ֹ ܿϴ.\n ߰ſ ü ŵϴ.\n"); + print(fd,"당신은 기공팔식의 자세를 취하며 원기회복의 주문을 외웁니다.\n지기의 뜨거운 기운이 당신의 몸에 가득차 체력을 향상시킵니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ƚ ڼ ϸ ȸ ֹ ܿϴ.\n ߰ſ ׿ 귯 ϴ.\n", + "\n%M이 기공팔식의 자세를 취하며 원기회복의 주문을 외웁니다.\n지기의 뜨거운 기운이 그에게 흘러가는 것이 느껴집니다.\n", ply_ptr); return(1); } else { - print(fd," ü ȸǾϴ.\n"); + print(fd,"몸의 체력이 많이 회복되었습니다.\n"); return(1); } } @@ -544,7 +544,7 @@ int how; else { if(how == POTION) { - print(fd," ڽſԸ ֽϴ.\n"); + print(fd,"그 물건은 자신에게만 사용할 수 있습니다.\n"); return(0); } @@ -558,7 +558,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd,"׷ ʽϴ.\n"); + print(fd,"그러한 사람은 존재하지 않습니다.\n"); return(0); } } @@ -574,7 +574,7 @@ int how; ply_ptr->mpcur -= 4; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,6)+1; - print(fd," ּ ȭŵϴ.\n"); + print(fd,"이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); } } else @@ -589,14 +589,14 @@ int how; crt_ptr->hpcur = crt_ptr->hpmax; expadd = 0; } -/* ġ ִ κ. +/* 원기 사용시 경험치를 주는 부분. ply_ptr->experience += expadd; - ϴ ʾҾ. */ + 일단은 넣지 않았어요. */ if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " %M ϸ ȸ ֹ ̴ϴ.\n ȿ ߰ſ ϴ.", crt_ptr); - print(crt_ptr->fd,"%M ſ ϸ ȸ ֹ ̴ϴ.\n ȿ ߰ſ ü Ǵ\n ϴ.\n",ply_ptr); + print(fd, "당신은 %M에게 내공을 주입하며 원기회복의 주문을 겁니다.\n그의 몸안에서 지기의 뜨거운 기운이 느껴집니다.", crt_ptr); + print(crt_ptr->fd,"%M이 당신에게 내공을 주입하며 원기회복의 주문을 겁니다.\n당신의 몸안에서 지기의 뜨거운 기운과 체력이 많이 향상되는\n것이 느껴집니다.\n",ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ϸ ȸ ֹ ̴ϴ.\n׿ ߰ſ 귯 ϴ.\n", + "\n%M이 %M에게 내공을 주입하며 원기회복의 주문을 겁니다.\n그에게 뜨거운 지기의 기운이 흘러가는 것이 느껴집니다.\n", ply_ptr, crt_ptr); return(1); } diff --git a/src/magic3.c b/src/magic3.c index ce11a3d..bf592fc 100644 --- a/src/magic3.c +++ b/src/magic3.c @@ -11,7 +11,7 @@ #include "mextern.h" /**********************************************************************/ -/* bless () */ +/* bless (성현주) */ /**********************************************************************/ /* This function allows a player to cast a bless spell on himself or */ @@ -33,13 +33,13 @@ int how; if(ply_ptr->mpcur < 10 && how == CAST) { print(fd, - "\n մϴ.\n"); + "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SBLESS) && how == CAST) { print(fd, - "\n ׷ ּ ͵ ߽ϴ.\n"); + "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -65,7 +65,7 @@ int how; ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ print(fd, - "\n ּ ȭŵϴ.\n"); + "\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_BLESS].interval += 800L; } } @@ -74,14 +74,14 @@ int how; if(how == CAST || how == SCROLL || how == WAND) { print(fd, - "\n ָ ܿϴ.\nָ ܿ Ӹ ű վ \n ְϴ.\n"); + "\n당신은 조용히 눈을 감으며 성현주를 외웁니다.\n성현주를 외우자 머리에서 삼매광이 뿜어져 나와 성스런 기운이\n몸을 휘감습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ָ ܿϴ.\n Ӹ ű վ \nְϴ.\n", + "\n%M이 조용히 눈을 감으며 성현주를 외웁니다.\n그의 머리에서 삼매광이 뿜어져 나와 성스런 기운이 몸을\n휘감습니다.\n", ply_ptr); } else if(how == POTION) print(fd, - "\nϴÿ õ ְϴ.\n"); + "\n하늘에서 천수광이 내려와 성스런 기운들로 몸을 휘감습니다.\n"); return(1); } @@ -91,7 +91,7 @@ int how; if(how == POTION) { print(fd, - " ڽſԸ ֽϴ.\n"); + "그 물건은 자신에게만 사용할 수 있습니다.\n"); return(0); } @@ -101,7 +101,7 @@ int how; if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -119,7 +119,7 @@ int how; ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ print(fd, - "\n ּ ȭŵϴ.\n"); + "\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_BLESS].interval += 800L; } } @@ -128,13 +128,13 @@ int how; if(how == CAST || how == SCROLL || how == WAND) { print(fd, - "\n ʼ %M Ӹ ָ ܿϴ.\n Ӹ ű վ ְϴ.\n", + "\n당신은 한쪽손을 %M의 머리에 얹으며 성현주를 외웁니다.\n그의 머리에서 삼매광이 뿜어져 나와 성스러운 기운이 몸을 휘감습니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M Ӹ ʼ ָ ܿϴ.\n Ӹ ű վ \nְϴ.\n", + "\n%M이 당신의 머리에 한쪽손을 얹으며 성현주를 외웁니다.\n당신의 머리에서 삼매광이 뿜어져 나와 성스러운 기운이 몸을\n휘감습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M Ӹ ʼ ָ \nܿϴ.\n Ӹ ű վ \nְϴ.\n", + "\n%M이 %M의 머리에 한쪽손을 얹으며 성현주를 \n외웁니다.\n그의 머리에서 삼매광이 뿜어져 나와 성스러운 기운이 몸을\n휘감습니다.\n", ply_ptr, crt_ptr); return(1); } @@ -145,7 +145,7 @@ int how; } /**********************************************************************/ -/* turn ( ȥ ) */ +/* turn ( 방혼술 ) */ /**********************************************************************/ /* This function allows clerics and paladins to turn undead creatures. */ @@ -166,14 +166,14 @@ cmd *cmnd; if(cmnd->num < 2) { print(fd, - "\n ֹ ŽǷ?\n"); + "\n누구에게 주문을 거실려고요?\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE) { print(fd, - "\nڿ 縸 ȥ Ҽ ֽϴ.\n"); + "\n불제자와 무사만이 방혼술을 사용할수 있습니다.\n"); return(0); } @@ -182,22 +182,22 @@ cmd *cmnd; if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 괴물은 존재하지 않습니다.\n"); return(0); } if(!F_ISSET(crt_ptr, MUNDED)) { print(fd, - "\n Ը 밡մϴ.\n"); + "\n죽은 괴물에게만 사용가능합니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, - "\n Ÿ մϴ.\n"); + "\n당신의 모습이 나타나기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "%M ̱ մϴ.", + "%M의 모습이 보이기 시작합니다.", ply_ptr); } @@ -211,8 +211,8 @@ ply_ptr); if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, - "\n %s ȥ Ҹų ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + "\n당신은 %s의 혼을 소멸시킬 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -228,20 +228,20 @@ ply_ptr); if(mrand(1,100) > chance) { print(fd, - "\n ϴ÷ ȥ ȯϴ ȥ ֹ \nƽϴ. ֹ ƨ 鼭 %M ּ \nߵ½ϴ.\n", + "\n부적을 하늘로 날리며 혼을 소환하는 방혼술의 주문을 \n외쳤습니다.하지만 주문이 튕겨져 나오면서 %M가 당신의 주술을 \n견뎌냈습니다.\n", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ϴ÷ ȥ ȯŰ ȥ \nֹ Ĩϴ.\n ֹ ƨ 鼭 %M ּ \nߵ½ϴ.\n", + "\n%M이 부적을 하늘로 날리며 혼을 소환시키는 방혼술의 \n주문을 외칩니다.\n하지만 주문이 튕겨져 나오면서 %M가 그의 주술을 \n견뎌냈습니다.\n", ply_ptr, crt_ptr); return(0); } if(mrand(1,100) > 90 - bonus[ply_ptr->piety]) { print(fd, - "\n ϴ÷ ȥ ȯŰ ȥ ֹ Ĩϴ.\n ۺ 鼭 ҿ뵹̸ Ű ڸ »ڰ\nö %M ȥ Ҹ Ƚϴ.\n ", + "\n부적을 하늘로 날리며 혼을 소환시키는 방혼술의 주문을 외칩니다.\n부적이 빙글비글 돌면서 소용돌이를 일으키자 그 자리에서 저승사자가\n올라와 %M의 혼을 소멸시켜 버렸습니다.\n ", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ϴ÷ ȥ ȯŰ ȥ \nֹ Ĩϴ.\n ۺ 鼭 ҿ뵹̸ Ű ڸ \n»ڰ ö %M ȥҸ Ƚϴ.\n", + "\n%M이 부적을 하늘로 날리며 혼을 소환시키는 방혼술의 \n주문을 외칩니다.\n부적이 빙글빙글 돌면서 소용돌이를 일으키자 그 자리에서 \n저승사자가 올라와 %M의 혼을소멸시켜 버렸습니다.\n", ply_ptr, crt_ptr); add_enm_dmg(ply_ptr->name, crt_ptr, crt_ptr->hpcur); die(crt_ptr, ply_ptr); @@ -253,17 +253,17 @@ ply_ptr); crt_ptr->hpcur -= dmg; add_enm_dmg(ply_ptr->name, crt_ptr, m); print(fd, - "\n ϴ÷ ȥ ȯŰ ȥ ֹ Ĩϴ.\n %M ϸ %dŭ Ÿ ϴ\n", + "\n부적을 하늘로 날리며 혼을 소환시키는 방혼술의 주문을 외칩니다.\n부적이 %M의 몸을 공격하며 %d만큼의 타격을 입혔습니다\n", crt_ptr, dmg); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ϴ÷ ȥ ȯŰ ȥ \nֹ Ĩϴ.\n %M ϸ Ÿ ϴ\n", + "\n%M이 부적을 하늘로 날리며 혼을 소환시키는 방혼술의 \n주문을 외칩니다.\n부적이 %M의 몸을 공격하며 타격을 입혔습니다\n", ply_ptr,crt_ptr); if(crt_ptr->hpcur < 1) { print(fd, - "\n %M ȥ Ҹ׽ϴ.\n%M ȥ ƹϴ.\n", + "\n당신은 %M의 혼을 소멸시켰습니다.\n%M의 몸에서 혼이 사라지자 녹아버립니다.\n", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M %M ȥ Ҹ׽ϴ.\n\n%M ȥ ƹϴ.\n", + "\n%M이 %M의 혼을 소멸시켰습니다.\n\n%M의 혼이 사라지자 몸이 녹아버립니다.\n", ply_ptr, crt_ptr, crt_ptr); die(crt_ptr, ply_ptr); } @@ -274,10 +274,10 @@ ply_ptr); } /**********************************************************************/ -/* absorb ( ) */ +/* absorb ( 흡성대법 ) */ /**********************************************************************/ -/* ̱ ü Ƶ鿩 ڽ ü¿ ϴ ƾ̴. */ +/* 이기능은 적의 체력을 빨아들여 자신의 체력에 더하는 루틴이다. */ /* */ int absorb(ply_ptr, cmnd) @@ -294,13 +294,13 @@ cmd *cmnd; if(cmnd->num < 2) { print(fd, - "\n ֹ ŽǷ?\n"); + "\n누구에게 주문을 거실려고요?\n"); return(0); } if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { print(fd, - "\n縸 Ҽ ֽϴ.\n"); + "\n도술사만이 흡성대법을 사용할수 있습니다.\n"); return(0); } @@ -309,16 +309,16 @@ cmd *cmnd; if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 괴물은 존재하지 않습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, - "\n Ÿ մϴ.\n"); + "\n당신의 모습이 나타나기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "%M ̱ մϴ.", + "%M의 모습이 보이기 시작합니다.", ply_ptr); } @@ -332,8 +332,8 @@ cmd *cmnd; if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, - "\n %s ⸦ Ҽ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + "\n당신은 %s의 기를 흡수할수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -349,24 +349,24 @@ cmd *cmnd; if(mrand(1,100) > chance) { print(fd, - "\n ⸦ ϴ ֹ \nƽϴ. ֹ ƨ 鼭 %M ּ \nߵ½ϴ.\n", + "\n손을 적에게 뻗으며 기를 흡수하는 흡성대법의 주문을 \n외쳤습니다.하지만 주문이 튕겨져 나오면서 %M가 당신의 주술을 \n견뎌냈습니다.\n", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ⸦ ϴ \nֹ Ĩϴ.\n ֹ ƨ 鼭 %M ּ \nߵ½ϴ.\n", + "\n%M이 손을 적에게 뻗으며 기를 흡수하는 흡성대법의 \n주문을 외칩니다.\n하지만 주문이 튕겨져 나오면서 %M가 그의 주술을 \n견뎌냈습니다.\n", ply_ptr, crt_ptr); return(0); } print(fd, - "\n ⸦ ϴ ֹ Ĩϴ.\n Ⱑ 귯 \n ϴ.\n ", + "\n손을 적에게 뻗으며 기를 흡수하는 흡성대법의 주문을 외칩니다.\n적의 몸에서 기가 흘러나와 손으로\n빨려 들어갑니다.\n ", crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ⸦ ϴ ֹ Ĩϴ.\n%M Ⱑ 귯 ϴ.\n", + "\n%M이 손을 적에게 뻗으며 기를 흡수하는 흡성대법의 주문을 외칩니다.\n%M의 몸에서 기가 흘러나와 손으로 빨려듭니다.\n", ply_ptr, crt_ptr); if(F_ISSET(crt_ptr, MUNDED)) { print(fd, - "\n! Ƿ ſ 귯ϴ.\n"); + "\n윽! 악령의 사악한 기운이 당신에게 흘러듭니다.\n"); ply_ptr->mpcur = 0; return(0); @@ -381,14 +381,14 @@ cmd *cmnd; ply_ptr->hpcur = ply_ptr->hpmax; */ add_enm_dmg(ply_ptr->name, crt_ptr, m); - /* print(fd, "׽Ʈ %d %d", dmg, m); */ + /* print(fd, "테스트 %d %d", dmg, m); */ if(crt_ptr->hpcur < 1) { print(fd, - "\n %M ⸦ ߽ϴ.\n%M Ⱑ ϴ.\n", + "\n당신은 %M의 모든기를 흡수했습니다.\n%M의 몸에서 기가 빠지자 쓰러져 버립니다.\n", crt_ptr, crt_ptr); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M %M ⸦ ߽ϴ.\n\n %M %M ѷ̸鼭 Ͼ սϴ.\n\n%M Ⱑ ϴ.\n", + "\n%M이 %M의 모든기를 흡수했습니다.\n\n %M의 기운이 %M 의 몸 주위로 둘러싸이면서 하얀 기운을 내뿜습니다.\n\n%M의 몸에서 기가 빠지자 쓰러져 버립니다.\n", ply_ptr, crt_ptr, crt_ptr, ply_ptr, crt_ptr); die(crt_ptr, ply_ptr); } @@ -398,7 +398,7 @@ cmd *cmnd; } /**********************************************************************/ -/* invisibility ( м ) */ +/* invisibility ( 은둔술 ) */ /**********************************************************************/ /* This function allows a player to cast an invisibility spell on himself */ @@ -421,13 +421,13 @@ int how; if(ply_ptr->mpcur < 15 && how == CAST) { print(fd, - "\n մϴ.\n"); + "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SINVIS) && how == CAST) { print(fd, - "\n ּ ͵ ߽ϴ.\n"); + "\n당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -440,7 +440,7 @@ int how; while(cp) { if(is_enm_crt(ply_ptr->name, cp->crt)) { print(fd, - "\n ο ݾƿ..!!.\n"); + "\n지금 싸우고 있잖아요..!!.\n"); return(0); } cp = cp->next_tag; @@ -459,7 +459,7 @@ int how; ply_ptr->mpcur -= 15; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ print(fd, - "\n ּ ȭŵϴ.\n"); + "\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_INVIS].interval += 600L; } } @@ -468,14 +468,14 @@ int how; if(how == CAST || how == SCROLL || how == WAND) { print(fd, - "\n Ҹθ Ű鼭 й ֹ ܿϴ.\n ν ٰ ڱ ϴ.\n"); + "\n당신은 소명부를 삼키면서 은둔법의 주문을 외웁니다.\n몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 사라졌습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ҹθ Ű鼭 й ֹ ܿϴ.\n ν ٰ ڱ \nϴ.\n ", + "\n%M이 소명부를 삼키면서 은둔법의 주문을 외웁니다.\n그의 몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 \n사라졌습니다.\n ", ply_ptr->name ); } else if(how == POTION) print(fd, - "\n ν ٰ ڱ ϴ.\n"); + "\n당신의 몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 사라졌습니다.\n"); F_SET(ply_ptr, PINVIS); @@ -487,7 +487,7 @@ int how; if(how == POTION) { print(fd, - "\n ڽſԸ Ҽ ֽϴ.\n"); + "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -497,7 +497,7 @@ int how; if(!crt_ptr) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 사람은 존재하지 않습니다.\n"); return(0); } @@ -511,7 +511,7 @@ int how; ply_ptr->mpcur -= 15; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ print(fd, - "\n ּ ȭŵϴ.\n"); + "\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_INVIS].interval += 600L; } } @@ -520,13 +520,13 @@ int how; if(how == CAST || how == SCROLL || how == WAND) { print(fd, - "\n%M Ҹθ ̰ й ֹ ̴ϴ.\n%M ν ٰ ڱ \nϴ.\n", + "\n%M에게 소명부를 먹이고 은둔법의 주문을 겁니다.\n%M의 몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 \n사라졌습니다.\n", crt_ptr,crt_ptr); print(crt_ptr->fd, - "\n%M ſ Ҹθ ̰ й ֹ ̴ϴ.\n ν ٰ ڱ ϴ.\n", + "\n%M이 당신에게 소명부를 먹이고 은둔법의 주문을 겁니다.\n몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 사라졌습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M Ҹθ ̰ й ֹ ̴ϴ.\n ν ٰ ڱ ϴ.\n", + "\n%M이 %M에게 소명부를 먹이고 은둔법의 주문을 겁니다.\n그의 몸이 눈부실 정도로 강렬한 빛을 내다가 갑자기 사라졌습니다.\n", ply_ptr, crt_ptr); F_SET(crt_ptr, PINVIS); return(1); @@ -538,7 +538,7 @@ int how; } /**********************************************************************/ -/* restore ( õ ) */ +/* restore ( 도주천 ) */ /**********************************************************************/ /* This function allows a player to cast the restore spell using either */ @@ -559,16 +559,16 @@ int how; if(how == CAST && ply_ptr->class < INVINCIBLE) { print(fd, - "\n ּ ɷ ϴ.\n"); + "\n당신은 그 주술을 사용할 능력이 없습니다.\n"); return(0); } /* Cast restore on self */ if(cmnd->num == 2) { - /* ڽſ ܿ */ + /* 무적 자신에게 못 외움 */ if((ply_ptr->class == INVINCIBLE) && (how == CAST)) { - print(fd,"\nڽſ ܿ ϴ.\n"); + print(fd,"\n자신에게 외울수 없습니다.\n"); return(0); } ply_ptr->hpcur += dice(2,10,0); @@ -579,26 +579,26 @@ int how; if(how == CAST || how == WAND) { print(fd, - "\n ö õ ֹ Ĩϴ.\nõ dz ϸ鼭 \n ȸŵϴ.\n"); + "\n당신은 공중으로 날아 올라 도주천의 주문을 외칩니다.\n천지의 기운이 번개와 폭풍을 동반하면서 몰려와 당신의\n몸에 스며들어와 도력을 회복시킵니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ƿö õ ֹ Ĩϴ.\nõ dz ϸ鼭 \nȸŵϴ.\n", ply_ptr); + "\n%M이 공중으로 날아올라 도주천의 주문을 외칩니다.\n천지의 기운이 번개와 폭풍을 동반하면서 몰려와 도력을 \n회복시킵니다.\n", ply_ptr); } else if(how == POTION) print(fd, - "\n¸ Ͼ鼭 游մϴ.\n"); + "\n온몸에 진동이 일어나면서 도력이 충만합니다.\n"); return(1); } else { if(how == CAST || how == WAND) { print(fd, - "\n ö õ ֹ Ĩϴ.\n ƹ Ͼ ʽϴ.\n"); + "\n당신은 공중으로 날아 올라 도주천의 주문을 외칩니다.\n하지만 아무런 반응도 일어나지 않습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ƿö õ ֹ Ĩϴ.\n ƹ Ͼ ʽϴ.\n", ply_ptr); + "\n%M이 공중으로 날아올라 도주천의 주문을 외칩니다.\n하지만 아무런 반응도 일어나지 않습니다.\n", ply_ptr); } else { if(how == POTION) print(fd, - "\n ȸ ߽ϴ!!\n"); + "\n도력 회복에 실패했습니다!!\n"); } } @@ -609,7 +609,7 @@ int how; if(how == POTION) { print(fd, - "\n ڽſԸ Ҽ ֽϴ.\n"); + "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -619,7 +619,7 @@ int how; if((!crt_ptr) ||(crt_ptr == ply_ptr)) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 사람은 존재하지 않습니다.\n"); return(0); } @@ -631,12 +631,12 @@ int how; if(how == CAST || how == WAND) { print(fd, - "\n%M ȭ ̸ õ ֹ ܿϴ.\n ȭⰡ ̸鼭 ȸ˴ϴ.\n", crt_ptr); + "\n%M에게 무화연 잎을 먹이며 도주천의 주문을 외웁니다.\n그의 단전에 화기가 모이면서 도력이 회복됩니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M ſ ȭ ̸ õ ֹ \nܿϴ.\n ȭⰡ ̸鼭 ȸ˴ϴ.\n", + "\n%M이 당신에게 무화연 잎을 먹이며 도주천의 주문을 \n외웁니다.\n당신의 단전에 화기가 모이면서 도력이 회복됩니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ȭ ̸ õ ֹ \nܿϴ.\n ȸǾϴ.\n", + "\n%M이 %M에게 무화연 잎을 먹이며 도주천의 주문을 \n외웁니다.\n그의 도력이 회복되었습니다.\n", ply_ptr, crt_ptr); return(1); } @@ -644,12 +644,12 @@ int how; else { if(how == CAST || how == WAND) { print(fd, - "\n%M ȭ ̸ õ ֹ ܿϴ.\n ƹ Ͼ ʽϴ.\n", crt_ptr); + "\n%M에게 무화연 잎을 먹이며 도주천의 주문을 외웁니다.\n하지만 아무런 반응도 일어나지 않습니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M ſ ȭ ̸ õ ֹ \nܿϴ.\n ƹ Ͼ ʽϴ.\n", + "\n%M이 당신에게 무화연 잎을 먹이며 도주천의 주문을 \n외웁니다.\n하지만 아무런 반응도 일어나지 않습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ȭ ̸ õ ֹ \nܿϴ.\n ƹ Ͼ ʽϴ.\n", + "\n%M이 %M에게 무화연 잎을 먹이며 도주천의 주문을 \n외웁니다.\n하지만 아무런 반응도 일어나지 않습니다.\n", ply_ptr, crt_ptr); return(1); } @@ -661,7 +661,7 @@ int how; } /**********************************************************************/ -/* befuddle ( ȥ ) */ +/* befuddle ( 혼동술 ) */ /**********************************************************************/ int befuddle(ply_ptr, cmnd, how) @@ -678,22 +678,22 @@ int how; if(ply_ptr->mpcur < 10 && how == CAST) { print(fd, - "\n մϴ.\n"); + "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SBEFUD) && how == CAST) { print(fd, - "\n ּ ͵ ߽ϴ.\n"); + "\n당신은 아직 그 주술을 터득하지 못했습니다.\n"); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); print(fd, - "\n ̱ մϴ.\n"); + "\n당신의 모습이 보이기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ̱ մϴ.\n", + "\n%M이 보이기 시작합니다.\n", ply_ptr); } if(spell_fail(ply_ptr)) { @@ -720,13 +720,13 @@ int how; if(how == CAST || how == SCROLL || how == WAND) { print(fd, - "\n ⸦ ȥ ȹ \nڽſ ɾϴ.\nּ ڱ ⿡ Ǿö \n ȥ¿ ߸ϴ."); + "\n당신은 흑기를 땅에 꼿으며 혼동술의 일종인 흑안법을 \n자신에게 걸었습니다.\n주술을 걸자 갑자기 흑기에서 검은기류가 피어올라 당신의 \n정신을 혼수상태에 빠뜨립니다."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ⸦ ȥ ȹ \nڽſ ɾϴ.\nֹ ڱ ⿡ Ǿö \n ȥ¿ ߸ϴ.",ply_ptr); + "\n%M이 흑기를 땅에 꼿으며 혼동술의 일종인 흑안법을 \n자신에게 걸었습니다.\n주문을 걸자 갑자기 흑기에서 검은기류가 피어올라 그의 \n정신을 혼수상태에 빠뜨립니다.",ply_ptr); } else if(how == POTION) print(fd, - "\n ¸ ǰ ϸ鼭 ȭԸ ϴ.\nȥ¿ ϴ.\n"); + "\n당신의 온몸의 피가 역류하면서 주화입마에 빠집니다.\n혼수상태에 빠졌습니다.\n"); } @@ -735,7 +735,7 @@ int how; if(how == POTION) { print(fd, - "\n ڽſԸ Ҽ ֽϴ.\n"); + "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -750,7 +750,7 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -758,8 +758,8 @@ int how; if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { print(fd, - "\n %s ĥ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + "\n당신은 %s를 해칠수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -791,12 +791,12 @@ F_ISSET(crt_ptr, MRBEFD)))) if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " ⸦ %s ȹ ɾϴ.\nּ ڱ ⿡ Ǿö \n ȥ¿ ߸ϴ.\n", crt_ptr->name); + print(fd, "당신은 흑기를 땅에 꼿으며 %s에게 일종인 흑안법을 걸었습니다.\n주술을 걸자 갑자기 흑기에서 검은기류가 피어올라 그의\n정신을 혼수상태에 빠뜨립니다.\n", crt_ptr->name); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M ⸦ ȥ ȹ \n%M ɾϴ.\nּ ڱ ⿡ Ǿö \n ȥ¿ ߸ϴ.\n", + "\n%M이 흑기를 땅에 꼿으며 혼동술의 일종인 흑안법을 \n%M에게 걸었습니다.\n주술을 걸자 갑자기 흑기에서 검은기류가 피어올라 그의\n정신을 혼수상태에 빠뜨립니다.\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "\n%M ⸦ ȥ ȹ ſ ɾϴ.\nּ ڱ ⿡ Ǿö \n ȥ¿ ߸ϴ.\n", + "\n%M이 흑기를 땅에 꼿으며 혼동술의 일종인 흑안법을 당신에게 걸었습니다.\n주술을 걸자 갑자기 흑기에서 검은기류가 피어올라 당신의\n정신을 혼수상태에 빠뜨립니다.\n", ply_ptr); } diff --git a/src/magic4.c b/src/magic4.c index 0a1e523..1287af0 100644 --- a/src/magic4.c +++ b/src/magic4.c @@ -11,7 +11,7 @@ #include "mextern.h" /**********************************************************************/ -/* detectinvis(а) */ +/* detectinvis(은둔감지술) */ /**********************************************************************/ /* This function allows players to cast the detect-invisible spell which */ @@ -33,12 +33,12 @@ int how; if(ply_ptr->mpcur < 10 && how == CAST) { print(fd, - "\n մϴ.\n"); + "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SDINVI) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -60,7 +60,7 @@ int how; ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ print(fd, - "\n ֹ ȭŵϴ.\n"); + "\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_DINVI].interval += 600L; } } @@ -68,13 +68,13 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ ply_ptr->lasttime[LT_DINVI].interval = 1200; if(how == CAST || how == SCROLL || how == WAND) { - print(fd,"\n δ а ֹ\nܿϴ.\nδ Ǫ ִ ڵ \nְԵǾϴ.\n"); + print(fd,"\n당신은 버들잎을 두눈에 비비며 은둔감지술의 주문을\n외웁니다.\n두눈에 푸른광안이 떠오르며 숨어있는 자들을 볼수\n있게되었습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M δ ڽſ а\nֹ ܿϴ.\n Ǫ ϴ.\n", + "\n%M이 버들잎을 두눈에 비비며 자신에게 은둔감지술의\n주문을 외웠습니다.\n 그의 눈에서 푸른광안이 떠오릅니다.\n", ply_ptr); } else if(how == POTION) - print(fd, "\n.ڱ δ Ǫ ִ ڵ ְ Ǿϴ.\n"); + print(fd, "\n.갑자기 두눈에 푸른광안이 떠오르며 숨어있는 자들을 볼수 있게 되었습니다.\n"); F_SET(ply_ptr, PDINVI); @@ -85,7 +85,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -94,7 +94,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -107,7 +107,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ 60*((ply_ptr->level+3)/4); ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_DINVI].interval += 600L; } } @@ -117,12 +117,12 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ F_SET(crt_ptr, PDINVI); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M δ а ܿϴ.\n Ǫ ϴ.\n", crt_ptr); + print(fd, "\n당신은 %M의 인당혈을 찍으며 은둔감지술을 외웁니다.\n그의 눈에서 푸른광안이 떠오릅니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M δ а ܿϴ.\nڱ δ Ǫ ִ ڵ \nְ Ǿϴ.\n", + "\n%M이 당신의 인당혈을 찍으며 은둔감지술을 외웠습니다.\n갑자기 두눈에 푸른광안이 떠오르며 숨어있는 자들을 볼수\n있게 되었습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M δ а ܿϴ.\n Ǫ ϴ.\n", + "\n%M이 %M의 인당혈을 찍으며 은둔감지술을 외웁니다.\n그의 눈에서 푸른광안이 떠오릅니다.\n", ply_ptr, crt_ptr); return(1); } @@ -133,7 +133,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ } /**********************************************************************/ -/* detectmagic(ֹ) */ +/* detectmagic(주문감지술) */ /**********************************************************************/ /* This function allows players to cast the detect-magic spell which */ @@ -154,12 +154,12 @@ int how; t = time(0); if(ply_ptr->mpcur < 10 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SDMAGI) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -180,7 +180,7 @@ int how; 60*((ply_ptr->level+3)/4); ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_DMAGI].interval += 600L; } } @@ -188,13 +188,13 @@ int how; ply_ptr->lasttime[LT_DMAGI].interval = 1200; if(how == CAST || how == SCROLL || how == WAND) { - print(fd,"\n ȭ ֹ ܿϴ.\n ּ ȸ\nоϴ.\n"); + print(fd,"\n당신은 됴화잎을 눈에 비비며 주문감지술을 외웁니다.\n당신의 눈에서 은빛광안이 떠오르며 주술에 관한 안목이\n넓어졌습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ȭ ֹ ܿϴ.\nڱ ϴ.\n", + "\n%M이 됴화잎을 눈에 비비며 주문감지술을 외웠습니다.\n갑자기 그의 눈에서 은빛광안이 떠오릅니다.\n", ply_ptr); } else if(how == POTION) - print(fd, "\nڱ δ ּ ȸ \nоϴ.\n"); + print(fd, "\n갑자기 두눈에 은빛광안이 떠오르며 주술에 관한 안목이 \n넓어졌습니다.\n"); F_SET(ply_ptr, PDMAGI); @@ -205,7 +205,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -214,7 +214,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -227,7 +227,7 @@ int how; 60*((ply_ptr->level+3)/4); ply_ptr->mpcur -= 10; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_DMAGI].interval += 600L; } } @@ -237,12 +237,12 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ F_SET(crt_ptr, PDMAGI); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M ȸ ֹ \nֹ ܿϴ.\nڱ δ ϴ.\n", crt_ptr); + print(fd, "\n당신은 %M의 백회혈을 찍으며 주문감지술의 \n주문을 외웁니다.\n갑자기 그의 두눈에 은빛광안이 떠오릅니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M ȸ ֹ \nֹ ܿϴ.\nڱ δ ּ ȸ оϴ.\n", + "\n%M이 당신의 백회혈을 찍으며 주문감지술의 \n주문을 외웁니다.\n갑자기 두눈에 은빛광안이 떠오르며 주술에 관한 안목이 넓어졌습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ȸ ֹ \nֹ ܿϴ.\nڱ δ ϴ.\n.", + "\n%M이 %M의 백회혈을 찍으며 주문감지술의 \n주문을 외웁니다.\n갑자기 그의 두눈에 은빛광안이 떠오릅니다.\n.", ply_ptr, crt_ptr); return(1); } @@ -253,7 +253,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ } /**********************************************************************/ -/* teleport(̵) */ +/* teleport(공간이동술) */ /**********************************************************************/ /* This function allows a player to teleport himself or another player */ @@ -276,12 +276,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 20 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, STELEP) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -297,11 +297,11 @@ int how; ply_ptr->mpcur -= 20; broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ̵ Ͽ а ϴ.\n", ply_ptr); + "\n%M이 공간이동술을 사용하여 어디론가로 사라졌습니다.\n", ply_ptr); if(how == CAST || how == SCROLL) - print(fd, "\n ̵ ϱ ߱ մϴ.\n̵ ֹ ܿ Ѿ˰ 鼭\nа 󰬽ϴ.\n"); + print(fd, "\n당신은 공간이동술을 사용하기위해 발구름질을 시작합니다.\n공간이동술의 주문을 외우자 몸이 총알같이 빨라지면서\n어디론가로 날라갔습니다.\n"); else - print(fd, "\n̵ ֹ ܿ Ѿ˰ 鼭\nа 󰬽ϴ.\n"); + print(fd, "\n공간이동술의 주문을 외우자 몸이 총알같이 빨라지면서\n어디론가로 날라갔습니다.\n"); do { rom_num = mrand(1, RMAX-1); @@ -325,7 +325,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ 밡մϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용가능합니다.\n"); return(0); } @@ -334,12 +334,12 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } if(F_ISSET(crt_ptr, PRMAGI) && ply_ptr->level < 128 && ((((ply_ptr->level+3)/4)-((crt_ptr->level+3)/4))*10) < 50) { - print(fd, "\n%M ̵ Ű⿣ ֹ ʹ մϴ.\n", crt_ptr); - print(crt_ptr->fd, "\n%M ̵ Ͽ ̵ Ű մϴ.\n", ply_ptr); + print(fd, "\n%M을 공간이동 시키기엔 당신의 주문이 너무 약합니다.\n", crt_ptr); + print(crt_ptr->fd, "\n%M이 공간이동술을 사용하여 당신을 이동 시키려 합니다.\n", ply_ptr); if(how == CAST) ply_ptr->mpcur -= 20; return(0); @@ -349,12 +349,12 @@ int how; ply_ptr->mpcur -=20; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n̵ ֹ %M ܿϴ.\n Ȱ ۽̸ ϴ.\n", crt_ptr); + print(fd, "\n공간이동술 주문을 %M에게 외웁니다.\n그의 몸이 안개에 휩싸이며 모습이 사라졌습니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M ſ ̵ ֹ ܿϴ.\n Ȱ ۽̸ а ̵˴ϴ.\n", + "\n%M이 당신에게 공간이동술 주문을 외웠습니다.\n당신의 몸이 안개에 휩싸이며 어디론가로 이동됩니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ̵ ֹ ܿϴ.\n Ȱ ۽̸ ϴ.\n", + "\n%M이 %M에게 공간이동술 주문을 외웠습니다.\n그의 몸이 안개에 휩싸이며 모습이 사라졌습니다.\n", ply_ptr, crt_ptr); do { @@ -383,7 +383,7 @@ int how; } /**********************************************************************/ -/* enchant(ּ) */ +/* enchant(주술) */ /**********************************************************************/ /* This function allows mages to enchant weapons at a cost of 25 magic */ @@ -403,22 +403,22 @@ int how; if(how == CAST && ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE) { - print(fd, "\n鸸 ּ ɼֽϴ.\n"); + print(fd, "\n도술사들만이 주술을 걸수있습니다.\n"); return(0); } if(ply_ptr->mpcur < 25 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SENCHA) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(cmnd->num < 3) { - print(fd, "\n ּ ̴ϴ?\n"); + print(fd, "\n무엇에다 주술을 겁니다?\n"); return(0); } @@ -426,19 +426,19 @@ int how; cmnd->str[2], cmnd->val[2]); if(!obj_ptr) { - print(fd, "\n ǰ ׷ ϴ.\n"); + print(fd, "\n당신 소지품에 그런 물건이 없습니다.\n"); return(0); } if(F_ISSET(obj_ptr, OENCHA)) { - print(fd, "\n ּ ɷֽϴ.\n"); + print(fd, "\n벌써 주술이 걸려있습니다.\n"); return(1); } if(how == CAST) { if(!dec_daily(&ply_ptr->daily[DL_ENCHA]) && ply_ptr->class < CARETAKER) { - print(fd, "\n Żؼ ̻ ּ ɼ ϴ.\n ߰ڴµ?\n"); + print(fd, "\n당신은 탈진해서 더 이상 주술을 걸수 없습니다.\n좀 쉬어야겠는데요?\n"); return(0); } ply_ptr->mpcur -= 25; @@ -467,8 +467,8 @@ int how; F_SET(obj_ptr, OENCHA); - print(fd, "\n%iٰ ּ ڱ ٰ ϴ.\n", obj_ptr); - broadcast_rom(fd, rom_ptr->rom_num, "%M %1iٰ ּ ɾϴ.", ply_ptr, + print(fd, "\n%i에다가 주술을 걸자 갑자기 밝은 빛을 내다가 사라졌습니다.\n", obj_ptr); + broadcast_rom(fd, rom_ptr->rom_num, "%M이 %1i에다가 주술을 걸었습니다.", ply_ptr, obj_ptr); return(1); diff --git a/src/magic5.c b/src/magic5.c index 3b8e42b..8373e69 100644 --- a/src/magic5.c +++ b/src/magic5.c @@ -30,18 +30,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 30 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신이 도력이 부족합니다.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "\nڸ ּ ֽϴ.\n"); + print(fd, "\n불제자만이 이 주술을 사용할 수 있습니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRECAL) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } @@ -52,20 +52,20 @@ int how; ply_ptr->mpcur -= 30; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "ȯ ֹ ܿϴ.\n"); + print(fd, "귀환 주문을 외웠습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M %s ڽſ ȯ ֹ ܿϴ.\n", + "\n%M이 %s 자신에게 귀환 주문을 외웠습니다.\n", ply_ptr, - F_ISSET(ply_ptr, PMALES) ? "":"׳"); + F_ISSET(ply_ptr, PMALES) ? "그":"그녀"); } else if(how == POTION) { - print(fd, " 鸳ϴ.\n"); + print(fd, "당신의 모습이 어지러이 흔들립니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "%M ϴ.", ply_ptr); + "%M이 사라졌습니다.", ply_ptr); } if(load_rom(1001, &new_rom) < 0) { - print(fd, "ֹ ߽ϴ.\n"); + print(fd, "주문이 실패했습니다.\n"); return(0); } @@ -79,7 +79,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -88,7 +88,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -96,16 +96,16 @@ int how; ply_ptr->mpcur -=30; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "ȯ ֹ %M ܿϴ.\n", crt_ptr); + print(fd, "귀환 주문을 %M에게 외웠습니다.\n", crt_ptr); print(crt_ptr->fd, - "%M ſ ȯ ֹ ܿϴ.\n", + "%M이 당신에게 귀환 주문을 외웠습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "%M %M ȯ ֹ ܿϴ.", + "%M이 %M에게 귀환 주문을 외웠습니다.", ply_ptr, crt_ptr); if(load_rom(1, &new_rom) < 0) { - print(fd, "ֹ ߽ϴ.\n"); + print(fd, "주문이 실패했습니다.\n"); return(0); } @@ -141,36 +141,36 @@ int how; if(ply_ptr->class == INVINCIBLE || ply_ptr->class == CARETAKER) { if(ply_ptr->mpcur < 100 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } } else { if(ply_ptr->mpcur < 50 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } } if(!S_ISSET(ply_ptr, SSUMMO) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(mrand(1,100) < 51) { - print(fd, "\nȯ и Ͽϴ.\n"); + print(fd, "\n소환에 실패를 하였습니다.\n"); ply_ptr->mpcur -= 50; return(0); } if(cmnd->num == 2) { - print(fd, "\nڽ ȯϴٴ?.\n"); + print(fd, "\n자신을 소환하다뇨?.\n"); return(0); } else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -179,7 +179,7 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || F_ISSET(crt_ptr, PDMINV)) { print(fd, - "\n׷ ãϴ.\n"); + "\n그런 사람을 못 찾습니다.\n"); return(0); } @@ -194,40 +194,40 @@ int how; (F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || (F_ISSET(rom_ptr, RTHREE) && n > 2)) { - print(fd, "ֹ ϴ.\n"); + print(fd, "주문이 공중으로 빨려듭니다.\n"); return(0); } if(F_ISSET(rom_ptr, RFAMIL) && !F_ISSET(crt_ptr, PFAMIL)) { - print(fd, "׻ аŸ ڰ ƴմϴ."); + print(fd, "그사람은 패거리 가입자가 아닙니다."); return(0); } if(F_ISSET(rom_ptr, RONFML) && (crt_ptr->daily[DL_EXPND].max != rom_ptr->special)) { - print(fd, "׻ ̰ ü ϴ."); + print(fd, "그사람은 이곳에 올수 없습니다."); return(0); } if(rom_ptr->lolevel > crt_ptr->level || (crt_ptr->level > rom_ptr->hilevel && rom_ptr->hilevel) || F_ISSET(crt_ptr, PNOSUM)) { - print(fd, "\nֹ ߽ϴ.\n"); + print(fd, "\n주문이 실패했습니다.\n"); if(F_ISSET(crt_ptr,PNOSUM)) - print(fd,"밡 ȯ ź Դϴ."); + print(fd,"상대가 소환 거부 중입니다."); return(0); } if(F_ISSET(crt_ptr->parent_rom,RNOLEA)) { - print(fd, "\nȯ ֹ %M ã մϴ.\n",crt_ptr); + print(fd, "\n소환 주문이 %M을 찾지 못합니다.\n",crt_ptr); return(0); } if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M ȯϱ ֹ ܿϴ.\nֹ ġ £ Ȱ ڱ 鼭 \nװ Ÿϴ.\n", crt_ptr); + print(fd, "\n당신은 %M을 소환하기 위해 주문을 외웁니다.\n주문을 마치자 짙은 안개가 끼더니 갑자기 사라지면서 \n그가 나타났습니다.\n", crt_ptr); print(crt_ptr->fd, - "\n £ Ȱ ̲ а 󰩴ϴ.\nȰ %M žտ ֽϴ.\n", + "\n당신주위에 짙은 안개가 끼더니 알 수 없는 힘에 이끌려 어디론가 날라갑니다.\n안개가 걷히자 %M이 당신앞에 서 있습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M ȯֹ ܿ £ Ȱ 򸮴 ڱ %M Ÿϴ.\n", + "\n%M이 소환주문을 외우자 짙은 안개가 깔리더니 갑자기 %M이 나타났습니다.\n", ply_ptr, crt_ptr); del_ply_rom(crt_ptr, crt_ptr->parent_rom); @@ -242,7 +242,7 @@ int how; } /**********************************************************************/ -/* heal(ġ) */ +/* heal(완치술) */ /**********************************************************************/ /* This function will cause the heal spell to be cast on a player or */ @@ -262,18 +262,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 20 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "\nڿ 縸 ּ ֽϴ.\n"); + print(fd, "\n불제자와 무사만이 이 주술을 사용할 수 있습니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SFHEAL) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } @@ -282,7 +282,7 @@ int how; if(!dec_daily(&ply_ptr->daily[DL_FHEAL]) && how == CAST && ply_ptr->class < CARETAKER) { - print(fd, "\n ʹ ǰ ּ ̻ ĥ ϴ.\n"); + print(fd, "\n당신의 몸이 너무 피곤해 이 주술을 더 이상 펼칠 수 없습니다.\n"); return(0); } @@ -292,14 +292,14 @@ int how; ply_ptr->mpcur -= 20; if(how == CAST || how == SCROLL) { - print(fd, "\n õΰ ø ġ ֹ ܿϴ.\nõ ̸鼭 ü ֻ \n÷ ݴϴ.\n"); + print(fd, "\n당신은 천부공을 끌어올리며 완치 주문을 외웁니다.\n천상의 기운들이 당신의 몸으로 모이면서 체력을 최상으로 \n올려 줍니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M õΰ ڼ ϸ鼭 ġֹ ܿϴ.\nõ ׿Է ̴ ϴ.\n", + "\n%M이 천부공 자세를 취하면서 완치주문을 외웠습니다.\n천상의 기운들이 그에게로 모이는 것이 느껴집니다.\n", ply_ptr); return(1); } else { - print(fd, "\nڱ 鼭 ü ְ · ö󰩴ϴ.\n\"̾~~.. ģ.\"\n"); + print(fd, "\n갑자기 몸이 펴지면서 몸의 체력이 최고의 상태로 올라갑니다.\n\"이야~~얍.. 힘이 넘친다.\"\n"); return(1); } } @@ -308,7 +308,7 @@ int how; else { if(how == POTION) { - print(fd, " ڽſԸ 밡մϴ.\n"); + print(fd, "그 물건은 자신에게만 사용가능합니다.\n"); return(0); } @@ -322,14 +322,14 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ϴ.\n"); + print(fd, "\n그런 사람이 존재하지 습니다.\n"); return(0); } } if(!dec_daily(&ply_ptr->daily[DL_FHEAL]) && how == CAST && ply_ptr->class < CARETAKER && ply_ptr->type != MONSTER) { - print(fd, "\n ʹ ǰ ּ ̻ ĥ ϴ.\n"); + print(fd, "\n당신의 몸이 너무 피곤해 이 주술을 더 이상 펼칠 수 없습니다.\n"); return(0); } @@ -338,11 +338,11 @@ int how; if(how == CAST) ply_ptr->mpcur -= 20; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " %M ġ ̸ ֹ ܿϴ.\nڱ Ͼ鼭 ü \nȸǴ ϴ.", crt_ptr); - print(crt_ptr->fd, "%M ſ ġ ̸ ֹ ܿϴ.\nڱ Ͼ鼭 ü \nȸǴ ϴ.", + print(fd, "당신은 %M에게 완치부적을 먹이며 주문을 외웁니다.\n갑자기 그의 몸에서 심한 진동이 일어나면서 체력이 \n회복되는 것이 느껴집니다.", crt_ptr); + print(crt_ptr->fd, "%M이 당신에게 완치부적을 먹이며 주문을 외웁니다.\n갑자기 당신의 몸에서 심한 진동이 일어나면서 체력이 \n회복되는 것이 느껴집니다.", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "%M %M ġ ̸ ֹ ܿϴ.\n Űٰ ü ȸ\n½½ پ ٴմϴ.\n", + "%M이 %M에게 완치부적을 먹이며 주문을 외웁니다.\n그의 몸이 심한 진동이 일으키다가 체력이 회복었는지\n펄쩍펄쩍 뛰어 다닙니다.\n", ply_ptr, crt_ptr); return(1); } @@ -353,7 +353,7 @@ int how; } /**********************************************************************/ -/* track() */ +/* track(추적) */ /**********************************************************************/ /* This function allows rangers to cast the track spell which takes them */ @@ -373,29 +373,29 @@ int how; if(ply_ptr->class != RANGER && ply_ptr->class < INVINCIBLE && how==CAST) { - print(fd, "\n ּ ֽϴ.\n"); + print(fd, "\n포졸만이 이 주술을 사용할 수 있습니다.\n"); return(0); } if(ply_ptr->mpcur < 13 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, STRACK) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(cmnd->num == 2) { - print(fd, "\n ڽ Ѵٰ?.\n"); + print(fd, "\n당신 자신을 추적한다고요?.\n"); return(0); } else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -404,17 +404,17 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || F_ISSET(crt_ptr, PDMINV)) { print(fd, - "\n׷ ʽϴ.\n"); + "\n그런 사람은 존재하지 않습니다.\n"); return(0); } if(crt_ptr->class > CARETAKER) { - print(fd, "\n ִ Ҽ ϴ.\n"); + print(fd, "\n그 사람이 어디에 있는지 추적할수 없습니다.\n"); return(0); } /* if(F_ISSET(crt_ptr, PMARRI)) { - print(fd, "\n ִ ϴ.\n"); + print(fd, "\n그 사람이 어디에 있는지 추적할 수 없습니다.\n"); return(0); } */ @@ -424,28 +424,28 @@ int how; (F_ISSET(crt_ptr->parent_rom, RONEPL) && n > 0) || (F_ISSET(crt_ptr->parent_rom, RTWOPL) && n > 1) || (F_ISSET(crt_ptr->parent_rom, RTHREE) && n > 2)) { - print(fd, "\nֹ ߽ϴ.\n"); + print(fd, "\n주문이 실패했습니다.\n"); return(0); } if(F_ISSET(crt_ptr->parent_rom, RFAMIL) && !F_ISSET(ply_ptr, PFAMIL)) { - print(fd, " ִ ϴ."); + print(fd, "그 사람이 있는 곳으로 갈 수가 없습니다."); return(0); } if(F_ISSET(crt_ptr->parent_rom, RONFML) && (ply_ptr->daily[DL_EXPND].max != crt_ptr->parent_rom->special)) { - print(fd, " ִ ϴ."); + print(fd, "그 사람이 있는 곳으로 갈 수가 없습니다."); return(0); } if(crt_ptr->parent_rom->lolevel > ply_ptr->level || (ply_ptr->level > crt_ptr->parent_rom->hilevel && crt_ptr->parent_rom->hilevel)) { - print(fd, "\nֹ ߽ϴ.\n"); + print(fd, "\n주문이 실패했습니다.\n"); return(0); } if(!dec_daily(&ply_ptr->daily[DL_TRACK]) && how == CAST && ply_ptr->class < CARETAKER) { - print(fd, "\n ʹ ǰ ּ ̻ ĥ ϴ.\n"); + print(fd, "\n당신의 몸이 너무 피곤해 이 주술을 더 이상 펼칠 수 없습니다.\n"); return(0); } @@ -453,11 +453,11 @@ int how; ply_ptr->mpcur -= 13; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n!! %M ãƳµ ߽ϴ.!!\n׸ Ͽ ޷ϴ.\n", crt_ptr); + print(fd, "\n!!당신은 %M의 흔적을 찾아내는데 성공했습니다.!!\n그를 추적하여 달려갑니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M ã µ Ͽ \nã Խϴ.\n", ply_ptr); + "\n%M이 당신의 흔적을 찾아 내는데 성공하여 당신을 \n찾아 왔습니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ãƳµ Ͽ \n ߽ϴ.\n", ply_ptr, crt_ptr); + "\n%M이 %M의 흔적을 찾아내는데 성공하여 \n추적을 시작했습니다.\n", ply_ptr, crt_ptr); del_ply_rom(ply_ptr, rom_ptr); add_ply_rom(ply_ptr, crt_ptr->parent_rom); @@ -471,7 +471,7 @@ int how; } /**********************************************************************/ -/* levitate(ξ) */ +/* levitate(부양술) */ /**********************************************************************/ /* This function allows players to cast the levitate spell, thus allowing */ @@ -490,12 +490,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 10 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SLEVIT) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -508,19 +508,19 @@ int how; ply_ptr->lasttime[LT_LEVIT].ltime = time(0); F_SET(ply_ptr, PLEVIT); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ξ ֹ ܿ\n ¦ ϴ.", ply_ptr); + "\n%M이 기공을 끌어 모으며 부양술의 주문을 외우자\n몸이 살짝 떠오릅니다.", ply_ptr); if(how == CAST) { - print(fd, "\n ξ ֹ ܿ \n¦ ϴ.\n"); + print(fd, "\n당신은 기공을 모으며 부양술의 주문을 외우자 몸이\n살짝 떠오릅니다.\n"); ply_ptr->mpcur -= 10; ply_ptr->lasttime[LT_LEVIT].interval = 2400L + bonus[ply_ptr->intelligence]*600L; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_LEVIT].interval += 800L; } } else { - print(fd, "\n ¦ ϴ.\n"); + print(fd, "\n당신의 몸이 공중으로 살짝 떠오릅니다.\n"); ply_ptr->lasttime[LT_LEVIT].interval = 1200L; } return(1); @@ -528,7 +528,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -536,29 +536,29 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람은 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PLEVIT); crt_ptr->lasttime[LT_LEVIT].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ξ ֹ ܿϴ.\nֹ ܿ ¦ ϴ.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ ξ ֹ ܿϴ.\n ¦ մϴ.\n", ply_ptr); + "\n%M이 %M에게 부양부적을 붙히며 주문을 외웁니다.\n주문을 외우자 그의 몸이 살짝 떠오릅니다.\n", ply_ptr, crt_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 부양부적을 붙히며 주문을 외웁니다.\n당신의 몸이 살짝 떠오르기 시작 합니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M ξ ϴ.\n",crt_ptr); + print(fd, "\n당신은 %M에게 부양술을 걸 수 없습니다.\n",crt_ptr); ply_ptr->mpcur -= 10; crt_ptr->lasttime[LT_LEVIT].interval = 2400L + bonus[ply_ptr->intelligence]*600L; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_LEVIT].interval += 800L; } } else { - print(fd, "%M ٴϱ մϴ.\n", crt_ptr); + print(fd, "%M이 떠다니기 시작합니다.\n", crt_ptr); crt_ptr->lasttime[LT_LEVIT].interval = 1200L; } @@ -568,7 +568,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ } /************************************************************************/ -/* resist_fire(濭) */ +/* resist_fire(방열진) */ /************************************************************************/ /* This function allows players to cast the resist fire spell. It will */ @@ -588,12 +588,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRFIRE) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -606,19 +606,19 @@ int how; ply_ptr->lasttime[LT_RFIRE].ltime = time(0); F_SET(ply_ptr, PRFIRE); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M 濭 и ø鼭 ֹ ܿϴ.\n ȣɵ Ÿ մϴ.\n", ply_ptr); + "\n%M이 방열진의 금패를 들어올리면서 주문을 외웁습니다.\n오행중 수의 수호령들이 나타나 그의 주위에 진을 형성합니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n 濭 и ø鼭 ֹ ܿϴ.\n ȣɵ Ÿ մϴ.\n"); + print(fd, "\n당신은 방열진의 금패를 들어올리면서 주문을 외웁니다.\n오행중 수의 수호령들이 나타나 당신주위에서 진을 형성합니다.\n"); ply_ptr->mpcur -= 12; ply_ptr->lasttime[LT_RFIRE].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_RFIRE].interval += 800L; } } else { - print(fd, "\nڱ ȣɵ Ÿ \n մϴ.\n"); + print(fd, "\n갑자기 오행중 수의 수호령들이 나타나 당신주위에 \n진을 형성합니다.\n"); ply_ptr->lasttime[LT_RFIRE].interval = 1200L; } return(1); @@ -626,7 +626,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -634,31 +634,31 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PRFIRE); crt_ptr->lasttime[LT_RFIRE].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "%M %M 濭 ̸ ֹ ܿϴ.\n ȣɵ Ÿ մϴ.\n", + "%M이 %M에게 방열부적을 붙이며 주문을 외웁니다.\n오행중 수의 수호령들이 나타나 그의 주위에 진을 형성합니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ 濭 ̸ ֹ ܿϴ.\nڱ ȣɵ Ÿ \n մϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 방열부적을 붙이며 주문을 외웁니다.\n갑자기 오행중 수의 수호령들이 나타나 당신주위에 \n진을 형성합니다.\n", ply_ptr); if(how == CAST) { - print(fd, " %M 濭 ̸ ֹ ܿϴ.\n ȣɵ Ÿ մϴ.\n", + print(fd, "당신은 %M에게 방열부적을 붙이며 주문을 외웁니다.\n오행중 수의 수호령들이 나타나 그의 주위에 진을 형성합니다.\n", crt_ptr); ply_ptr->mpcur -= 12; crt_ptr->lasttime[LT_RFIRE].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n̹ ֹ ȭŵϴ.\n"); + print(fd,"\n이방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_RFIRE].interval += 800L; } } else { - print(fd, "\n ȣɵ Ÿ %M \n մϴ.\n", crt_ptr); + print(fd, "\n오행중 수의 수호령들이 나타나 %M의 주위에 \n진을 형성합니다.\n", crt_ptr); crt_ptr->lasttime[LT_RFIRE].interval = 1200L; } @@ -669,7 +669,7 @@ int how; /************************************************************************/ -/* fly() */ +/* fly(비상술) */ /************************************************************************/ /* This function allows players to cast the fly spell. It will */ @@ -689,12 +689,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SFLYSP) && how == CAST) { - print(fd, "\n ׷ ּ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주술을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -707,19 +707,19 @@ int how; ply_ptr->lasttime[LT_FLYSP].ltime = time(0); F_SET(ply_ptr, PFLYSP); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ֹ ܿ \nϴ÷ մϴ.\n", ply_ptr); + "\n%M이 비상술의 주문을 외우자 몸이 떠오르며 \n하늘로 날기 시작합니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n ֹ ܿ ó \nϴ÷ ö մϴ.\n"); + print(fd, "\n당신은 비상술의 주문을 외우자 몸이 공기처럼 가벼워지며\n하늘로 떠올라 날기 시작합니다.\n"); ply_ptr->mpcur -= 15; ply_ptr->lasttime[LT_FLYSP].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_FLYSP].interval += 600L; } } else { - print(fd, " ϴ÷ ֽϴ!\n"); + print(fd, "당신의 몸이 하늘로 떠오르며 날수 있습니다!\n"); ply_ptr->lasttime[LT_FLYSP].interval = 1200L; } return(1); @@ -727,7 +727,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -735,31 +735,31 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PFLYSP); crt_ptr->lasttime[LT_FLYSP].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M θ ֹ ܿϴ.\n ϴ÷ մϴ.\n", + "\n%M이 %M에게 비상부를 붙히며 주문을 외웠습니다.\n그의 몸이 하늘로 떠오르며 날기 시작합니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ θ ֹ ܿϴ.\nڱ ó ϴ÷ ö\n մϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 비상부를 붙히며 주문을 외웠습니다.\n갑자기 당신의 몸이 공기처럼 가벼워지며 하늘로 떠올라\n날기 시작합니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M θ ֹ ܿϴ.\n ϴ÷ մϴ.\n", + print(fd, "\n당신은 %M에게 비상부를 붙히며 주문을 외웁니다.\n그의 몸이 하늘로 떠오르며 날기 시작합니다.\n", crt_ptr); ply_ptr->mpcur -= 15; crt_ptr->lasttime[LT_FLYSP].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_FLYSP].interval += 600L; } } else { - print(fd, "%M ϴ÷ մϴ.\n", crt_ptr); + print(fd, "%M의 몸이 하늘로 떠오르며 날기 시작합니다.\n", crt_ptr); crt_ptr->lasttime[LT_FLYSP].interval = 1200L; } diff --git a/src/magic6.c b/src/magic6.c index 192aff9..ecde835 100644 --- a/src/magic6.c +++ b/src/magic6.c @@ -11,7 +11,7 @@ #include "mextern.h" /************************************************************************/ -/* resist_magic() */ +/* resist_magic(보마진) */ /************************************************************************/ /* This function allows players to cast the resist-magic spell. It */ @@ -30,12 +30,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRMAGI) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -48,19 +48,19 @@ int how; ply_ptr->lasttime[LT_RMAGI].ltime = time(0); F_SET(ply_ptr, PRMAGI); broadcast_rom(fd, ply_ptr->rom_num, - "%M ׸ ֹ ܿϴ.\nڱ ӿ ɵ ö \n մϴ.\n", ply_ptr); + "%M이 허공에 보마부을 그리며 주문을 외웠습니다.\n갑자기 땅속에서 오행중 금의 정령들이 올라와 \n보마진을 형성합니다.\n", ply_ptr); if(how == CAST) { - print(fd, " θ ׸ ֹ ܿϴ.\nӿ ȣɵ ö մϴ.\n"); + print(fd, "당신은 허공에 보마부를 그리며 주문을 외웁니다.\n땅속에서 오행중 금의 수호령들이 올라와 보마진을 형성합니다.\n"); ply_ptr->mpcur -= 12; ply_ptr->lasttime[LT_RMAGI].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_RMAGI].interval += 800L; } } else { - print(fd, "\nڱ ӿ ȣɵ ö \n մϴ.\n"); + print(fd, "\n갑자기 땅속에서 오행중 금의 수호령들이 올라와 \n보마진을 형성합니다.\n"); ply_ptr->lasttime[LT_RMAGI].interval = 1200L; } return(1); @@ -68,7 +68,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ິ ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 약병은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -76,31 +76,31 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람은 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PRMAGI); crt_ptr->lasttime[LT_RMAGI].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "%M %M θ ׸ ֹ\nܿϴ.\nڱ ӿ ȣɵ ö \nմϴ.\n", + "%M이 %M의 몸에 보마부를 그리며 주문을\n외웠습니다.\n갑자기 땅속에서 금의 수호령들이 올라와 보마진을 \n형성합니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M θ ׸ ֹ\nܿϴ.\nڱ ӿ ȣɵ ö \nմϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신의 몸에 보마부를 그리며 주문을\n외웠습니다.\n갑자기 땅속에서 금의 수호령들이 올라와 보마진을 \n형성합니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M θ ׸ ֹ\nܿϴ.\nӿ ȣɵ ö մϴ.\n", + print(fd, "\n당신은 %M의 몸에 보마부를 그리며 주문을\n외웠습니다.\n땅속에서 금의 수호령들이 올라와 보마진을 형성합니다.\n", crt_ptr); ply_ptr->mpcur -= 12; crt_ptr->lasttime[LT_RMAGI].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_RMAGI].interval += 800L; } } else { - print(fd, "\nӿ ȣɵ ö %M \n մϴ.\n", + print(fd, "\n땅속에서 금의 수호령들이 올라와 %M의 주위에 \n보마진을 형성합니다.\n", crt_ptr); crt_ptr->lasttime[LT_RMAGI].interval = 1200L; } @@ -111,7 +111,7 @@ if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ } /************************************************************************/ -/* know_alignment(ǰ) */ +/* know_alignment(선악감지술) */ /************************************************************************/ /* This spell allows the caster to determine what alignment another */ @@ -130,12 +130,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 6 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SKNOWA) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } @@ -143,19 +143,19 @@ int how; ply_ptr->lasttime[LT_KNOWA].ltime = time(0); F_SET(ply_ptr, PKNOWA); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ǰ ֹ ܿϴ.", ply_ptr); + "\n%M이 선악감지 주문을 외웁니다.", ply_ptr); if(how == CAST) { - print(fd, "\n ִ ĺ ϴ.\n"); + print(fd, "\n당신은 선악을 감지할 수 있는 식별력이 높아졌습니다.\n"); ply_ptr->mpcur -= 6; ply_ptr->lasttime[LT_KNOWA].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_KNOWA].interval += 800L; } } else { - print(fd, "\n ִ ĺ ϴ.\n"); + print(fd, "\n당신은 선악을 감지할 수 있는 식별력이 높아졌습니다.\n"); ply_ptr->lasttime[LT_KNOWA].interval = 1200L; } return(1); @@ -163,7 +163,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -171,32 +171,32 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PKNOWA); crt_ptr->lasttime[LT_KNOWA].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ǰ ֹ ܿϴ.\n״ ִ ĺ ϴ.\n", + "\n%M이 %M에게 선악감지 주문을 외웁니다.\n그는 선악을 감지할 수 있는 식별력이 높아졌습니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ ǰ ֹ ܿϴ.\n ִ ĺ ϴ.\n", + print(crt_ptr->fd, "\n%M이 당신에게 선악감지 주문을 외웁니다.\n당신은 선악을 감지할 수 있는 식별력이 높아졌습니다.\n", ply_ptr); if(how == CAST) { - print(fd, " %M ǰ ֹ ܿϴ.\n", + print(fd, "당신은 %M에게 선악감지 주문을 외웁니다.\n", crt_ptr); ply_ptr->mpcur -= 6; crt_ptr->lasttime[LT_KNOWA].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_KNOWA].interval += 800L; } } else { - print(fd, "%M ִ ĺ ϴ.\n", + print(fd, "%M이 선악을 감지할 수 있는 식별력이 높아졌습니다.\n", crt_ptr); crt_ptr->lasttime[LT_KNOWA].interval = 1200L; } @@ -207,7 +207,7 @@ int how; } /**********************************************************************/ -/* remove-curse(ؼ) */ +/* remove-curse(저주해소) */ /**********************************************************************/ /* This function allows a player to remove a curse on all the items */ @@ -226,12 +226,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 18 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SREMOV) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -248,13 +248,13 @@ int how; ply_ptr->mpcur -= 18; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n տ \n ϴ.\n ɷȴ ְ Ǯ մϴ.\n"); + print(fd, "\n당신은 오른손에 성스러운 기운을 모으자 붉은\n빛이 퍼져나갑니다.\n당신의 몸에 걸렸던 저주가 풀리기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M տ \n ϴ.\n ɷȴ ְ Ǫ° ϴ.\n ", + "\n%M이 오른손에 성스러운 기운을 모으자 붉은\n빛이 퍼져나갑니다.\n성스러운 기운이 그의 몸에 걸렸던 저주가 푸는것이 느껴집니다.\n ", ply_ptr); } else if(how == POTION) - print(fd, "\nǾȿ ִ \nָ Ǯݴϴ.\n"); + print(fd, "\n물건안에 담겨있던 성스러운 기운이 당신의 \n저주를 풀어줍니다.\n"); for(i=0; iready[i]) @@ -268,7 +268,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -277,7 +277,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -285,12 +285,12 @@ int how; ply_ptr->mpcur -= 18; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M \nմϴ.\n ְ ϴ.\n", crt_ptr); + print(fd, "\n손을 통해 %M의 몸에 성스러운 기운을\n주입합니다.\n그의 몸에서 저주가 물러가는 것이 느껴집니다.\n", crt_ptr); print(crt_ptr->fd, - "\n%M \nմϴ.\n ְ ϴ.\n", + "\n%M이 당신의 몸에 손을 통해 성스러운 기운을\n주입합니다.\n당신의 몸에서 저주가 물러가는 것이 느껴집니다.\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M  \n մϴ.\n \n ֽϴ.\n", + "\n%M이 %M의 등에 손을 대고 성스러운 \n기운을 주입합니다.\n그의 몸에서 느껴졌던 저주의 기운이 사라지는 것을\n느낄수 있습니다.\n", ply_ptr, crt_ptr); for(i=0; iparent_rom; if(ply_ptr->mpcur < 25 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SCURSE) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -341,13 +341,13 @@ int how; ply_ptr->mpcur -= 25; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n տ .\n"); + print(fd, "\n당신이 오른손에 기운을 모우자 붉은 기운이 몰려와 .\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M .\n ", + "\n%M이 .\n ", ply_ptr); } else if(how == POTION) - print(fd, "\nǾȿ ִ .\n"); + print(fd, "\n물건안에 담겨있던 .\n"); for(i=0; iready[i]) @@ -360,7 +360,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -369,7 +369,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } @@ -377,12 +377,12 @@ int how; ply_ptr->mpcur -= 25; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M .\n", crt_ptr); + print(fd, "\n손을 통해 %M의 몸에 .\n", crt_ptr); print(crt_ptr->fd, - "\n%M .\n", + "\n%M이 당신의 몸에 손을 통해 .\n", ply_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M  .\n", + "\n%M이 %M의 등에 손을 대고 .\n", ply_ptr, crt_ptr); for(i=0; iparent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRCOLD) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -48,19 +48,19 @@ int how; ply_ptr->lasttime[LT_RCOLD].ltime = time(0); F_SET(ply_ptr, PRCOLD); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ÿ Ű ָ ܿϴ.\n ȭ ȣɵ ϸ \n ѷԴϴ.", ply_ptr); + "\n%M이 불타오르는 부적을 삼키며 방한주를 외웁니다.\n그의 주위에 오행중 화의 수호령들이 진을 형성하며 \n주위를 둘러쌉니다.", ply_ptr); if(how == CAST) { - print(fd, "\n Ÿ Ű ַ ܿϴ.\n ȭ ȣɵ ϸ\n ѷԴϴ.\n"); + print(fd, "\n당신은 불타오르는 부적을 삼키며 방한주룰 외웁니다.\n당신의 주위에 오행중 화의 수호령들이 진을 형성하며\n주위를 둘러쌉니다.\n"); ply_ptr->mpcur -= 12; ply_ptr->lasttime[LT_RCOLD].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); ply_ptr->lasttime[LT_RCOLD].interval += 800L; } } else { - print(fd, "\n ȭ ȣɵ ϸ\n ѷԴϴ.\n"); + print(fd, "\n당신의 주위에 오행중 화의 수호령들이 진을 형성하며\n주위를 둘러쌉니다.\n"); ply_ptr->lasttime[LT_RCOLD].interval = 1200L; } return(1); @@ -68,7 +68,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -76,31 +76,31 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ .\n"); + print(fd, "\n그런 사람이 존재하지 않습니다 .\n"); return(0); } F_SET(crt_ptr, PRCOLD); crt_ptr->lasttime[LT_RCOLD].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M Կ Ÿ \n ֹ ܿϴ.", + "\n%M이 %M의 입에 불타오르는 부적을 집어넣으며 \n방한진 주문을 외웁니다.", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M Կ Ÿ \nַ ܿϴ.\n ȭ ȣɵ ϸ\n ѷԴϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신의 입에 불타오르는 부적을 집어 넣으며\n방한주룰 외웁니다.\n당신의 주위에 오행중 화의 수호령들이 진을 형성하며\n주위를 둘러쌉니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M Կ Ÿ \n ַ ܿϴ.\n ȭ ȣɵ ϸ \nѷԴϴ.\n", + print(fd, "\n당신은 %M의 입에 불타오르는 부적을 집어\n넣으며 방한주룰 외웁니다.\n그의 주위에 화의 수호령들이 진을 형성하며 주위를\n둘러쌉니다.\n", crt_ptr); ply_ptr->mpcur -= 12; crt_ptr->lasttime[LT_RCOLD].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); crt_ptr->lasttime[LT_RCOLD].interval += 800L; } } else { - print(fd, "\n%M ȭ ȣɵ ϸ\n ѷԴϴ.\n", crt_ptr); + print(fd, "\n%M의 주위에 화의 수호령들이 진을 형성하며\n주위를 둘러쌉니다.\n", crt_ptr); crt_ptr->lasttime[LT_RCOLD].interval = 1200L; } @@ -111,7 +111,7 @@ int how; /************************************************************************/ -/* Breathe-water() */ +/* Breathe-water(수생술) */ /************************************************************************/ /* This function allows players to cast the resist cold spell. It will */ @@ -131,12 +131,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SBRWAT) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -150,19 +150,19 @@ int how; ply_ptr->lasttime[LT_BRWAT].ltime = time(0); F_SET(ply_ptr, PBRWAT); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ũ ȣ Ű缭 \nֹ ܿϴ.\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n", ply_ptr); + "\n%M이 크게 호흡을 들이키며서 수생술의 \n주문을 외웠습니다.\n그의 가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜 수 있을 것 같습니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n ũ ȣ Ű缭 ֹ ܿϴ.\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n"); + print(fd, "\n당신은 크게 호흡을 들이키며서 수생술의 주문을 외웁니다.\n가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜수 있을 것 같습니다.\n"); ply_ptr->mpcur -= 12; ply_ptr->lasttime[LT_BRWAT].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_BRWAT].interval += 800L; } } else { - print(fd, "\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n"); + print(fd, "\n당신의 가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜수 있을 것 같습니다.\n"); ply_ptr->lasttime[LT_BRWAT].interval = 1200L; } return(1); @@ -170,7 +170,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n이 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -178,31 +178,31 @@ int how; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ .\n"); + print(fd, "\n그런 사람이 존재하지 않습니다 .\n"); return(0); } F_SET(crt_ptr, PBRWAT); crt_ptr->lasttime[LT_BRWAT].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M θ ̸ ֹ ܿϴ.\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n", + "\n%M이 %M에게 수생부를 먹이며 주문을 외웠습니다.\n그의 가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜수 있을 것 같습니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ θ ̸ ֹ ܿϴ.\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 수생부를 먹이며 주문을 외웠습니다.\n당신의 가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜 수 있을 것 같습니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M θ ̸ ֹ ܿϴ.\n Һ ι質 Ŀ ӿ \nߵ ϴ.\n", + print(fd, "\n당신은 %M에게 수생부를 먹이며 주문을 외웁니다.\n그의 가슴이 평소보다 두배나 커져 물속에서 오랫동안\n견딜 수 있을 것 같습니다.\n", crt_ptr); ply_ptr->mpcur -= 12; crt_ptr->lasttime[LT_BRWAT].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_BRWAT].interval += 800L; } } else { - print(fd, "\n%M Һ ι Ŀ ӿ \n ߵ ϴ.\n", crt_ptr); + print(fd, "\n%M의 가슴이 평소보다 두배 커져 물속에서 \n오랫동안 견딜수 있을 것 같습니다.\n", crt_ptr); crt_ptr->lasttime[LT_BRWAT].interval = 1200L; } @@ -213,7 +213,7 @@ int how; /************************************************************************/ -/* Stone-Shield(ȣ) */ +/* Stone-Shield(지방호) */ /************************************************************************/ /* This function allows players to cast the earth shield spell. It will */ @@ -233,12 +233,12 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SSSHLD) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -251,19 +251,19 @@ if(spell_fail(ply_ptr)) { ply_ptr->lasttime[LT_SSHLD].ltime = time(0); F_SET(ply_ptr, PSSHLD); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M μ ȣ ֹ ܿϴ.\n ȣɵ ö \n ߽ϴ.\n", ply_ptr); + "\n%M이 벽부선을 던지며 지방호 주문을 외웠습니다.\n땅에서 오행중 토의 수호령들이 올라와 그의 주위에\n진을 형성했습니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n μ ȣ ֹ ܿϴ.\n ȣɵ ö \n մϴ.\n"); + print(fd, "\n당신은 벽부선을 던지며 지방호 주문을 외웁니다.\n땅에서 오행중 토의 수호령들이 올라와 당신주위에\n진을 형성합니다.\n"); ply_ptr->mpcur -= 12; ply_ptr->lasttime[LT_SSHLD].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ּ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주술력을 강화시킵니다.\n"); ply_ptr->lasttime[LT_SSHLD].interval += 800L; } } else { - print(fd, "\n ȣɵ ö \n մϴ.\n"); + print(fd, "\n땅에서 오행중 토의 수호령들이 올라와 당신주위에\n진을 형성합니다.\n"); ply_ptr->lasttime[LT_SSHLD].interval = 1200L; } return(1); @@ -271,7 +271,7 @@ if(spell_fail(ply_ptr)) { else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n이 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -279,31 +279,31 @@ if(spell_fail(ply_ptr)) { crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } F_SET(crt_ptr, PSSHLD); crt_ptr->lasttime[LT_SSHLD].ltime = time(0); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M Ѹ ȣ ֹ ܿϴ.\n ȣɵ ö \n մϴ.\n", + "\n%M이 %M에게 토흙을 뿌리며 지방호 주문을 외웁니다.\n땅에서 오행중 토의 수호령들이 올라와 그의 주위에\n진을 형성합니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ Ѹ ȣ ֹ ܿϴ.\nڱ ȣɵ ö \n ߽ϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 토흙을 뿌리며 지방호 주문을 외웠습니다.\n갑자기 땅에서 오행중 토의 수호령들이 올라와 당신주위에\n진을 형성했습니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M ֹ ܿϴ.\n", + print(fd, "\n당신은 %M에게 땅방패 주문을 외웠습니다.\n", crt_ptr); ply_ptr->mpcur -= 12; crt_ptr->lasttime[LT_SSHLD].interval = MAX(300, 1200 + bonus[ply_ptr->intelligence]*600); if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ - print(fd,"\n ֹ ȭŵϴ.\n"); + print(fd,"\n이 방의 기운이 당신의 주문을 강화시킵니다.\n"); crt_ptr->lasttime[LT_SSHLD].interval += 800L; } } else { - print(fd, "\n ȣɵ ö %M\n մϴ.\n", crt_ptr); + print(fd, "\n땅에서 오행중 토의 수호령들이 올라와 %M의\n주위에 진을 형성합니다.\n", crt_ptr); crt_ptr->lasttime[LT_SSHLD].interval = 1200L; } @@ -313,7 +313,7 @@ if(spell_fail(ply_ptr)) { } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -/* locate_person(õ) */ +/* locate_person(천리안) */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ int locate_player(ply_ptr, cmnd, how) @@ -331,18 +331,18 @@ int how; if(fd < 0) return(0); if(!S_ISSET(ply_ptr, SLOCAT) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(ply_ptr->mpcur < 15 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(cmnd->num < 3) { - print(fd, "\n մϱ?\n"); + print(fd, "\n누구와 연결합니까?\n"); return(0); } @@ -351,15 +351,15 @@ int how; if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람은 존재하지 않습니다.\n"); return(0); } if(crt_ptr->class == DM && ply_ptr->class != DM) { - print(fd," ŷ ʹ ø ϴ."); + print(fd,"그 사람의 정신력이 너무 높아 투시를 할 수 없습니다."); return 0; } if(F_ISSET(crt_ptr, PMARRI)) { - print(fd," Ȱ ϴ."); + print(fd,"그 사람의 사생활은 엿볼 수가 없습니다."); return 0; } if(spell_fail(ply_ptr)) { @@ -368,9 +368,9 @@ int how; return(0); } broadcast_rom(fd, ply_ptr->rom_num, - "\n%M õ ֹ ܿϴ.\n", ply_ptr); + "\n%M이 천리안 주문을 외웠습니다.\n", ply_ptr); if(how == CAST) { - print(fd, "\n %M ߽ϴ.\n", + print(fd, "\n당신의 마음을 %M에게 집중했습니다.\n", crt_ptr); ply_ptr->mpcur -= 15; } @@ -392,17 +392,17 @@ int how; chance = MIN(85,chance); if (mrand(1,100) < chance) - print(crt_ptr->fd, "\n%M ֽϴ.\n", + print(crt_ptr->fd, "\n%M이 당신의 눈으로 주위를 보고 있습니다.\n", ply_ptr); } else{ - print(fd,"\n ɼ ϴ.\n"); + print(fd,"\n당신의 정신은 연결될수 없습니다.\n"); chance = 65 + (((crt_ptr->level+3)/4) - ((ply_ptr->level+3)/4))*5 + (bonus[crt_ptr->intelligence] - bonus[ply_ptr->intelligence])*5; if (mrand(1,100) < chance) - print(crt_ptr->fd, "\n%M մϴ.\n", + print(crt_ptr->fd, "\n%M이 당신의 눈으로 보려합니다.\n", ply_ptr); } @@ -412,7 +412,7 @@ int how; /**********************************************************************/ -/* drain_exp(ġ) */ +/* drain_exp(백치술) */ /**********************************************************************/ /* The spell drain_exp causes a player to lose a selected amout of * * exp. When a player loses exp, the player's magical realm and * @@ -435,17 +435,17 @@ object *obj_ptr; rom_ptr = ply_ptr->parent_rom; if(!S_ISSET(ply_ptr, SDREXP) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(how == CAST && ply_ptr->class < DM) { - print(fd, "\n׷ ֹ ܿ ϴ.\n"); + print(fd, "\n그런 주문을 외울수 없습니다.\n"); return(0); } if(how == SCROLL){ - print(fd, "\n׷ ֹ ܿ ϴ.\n"); + print(fd, "\n그런 주문을 외울수 없습니다.\n"); return(0); } @@ -460,15 +460,15 @@ object *obj_ptr; loss = MIN(loss, ply_ptr->experience); if(how == CAST || how == WAND) { - print(fd, "\n ڱ û 鼭 ݱ οԴ \n ʽϴ.\n!!~~~ ġ 𸣰ڴ.!!\n"); - print(fd, "\n %dŭ ʽϴ.\n",loss); + print(fd, "\n당신은 갑자기 멍청해 지면서 지금까지 싸워왔던 경험들이\n생각나지 않습니다.\n!!악~~~ 경험치가 얼마인지도 모르겠다.!!\n"); + print(fd, "\n당신은 %d만큼의 경험들이 생각나지 않습니다.\n",loss); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ڽſ ġ ֹ ܿϴ.\n״ ڱ û θ Ÿϴ.\n", + "\n%M이 자신에게 백치술 주문을 외웁니다.\n그는 갑자기 멍청해진듯 주위를 두리번 거립니다.\n", ply_ptr); } else if(how == POTION){ - print(fd, "\n ڱ û 鼭 ݱ οԴ \n ʽϴ.\n!!~~~ ġ 𸣰ڴ.!!\n"); - print(fd, "\n %dŭ ʽϴ.\n",loss); + print(fd, "\n당신은 갑자기 멍청해 지면서 지금까지 싸워왔던 경험들이\n생각나지 않습니다.\n!!악~~~ 경험치가 얼마인지도 모르겠다.!!\n"); + print(fd, "\n당신은 %d만큼의 경험들이 생각나지 않습니다.\n",loss); } ply_ptr->experience -= loss; lower_prof(ply_ptr,loss); @@ -484,7 +484,7 @@ object *obj_ptr; loss = dice(((ply_ptr->level+3)/4), ((ply_ptr->level+3)/4),1)*30; if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n이 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -498,7 +498,7 @@ object *obj_ptr; cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ .\n"); + print(fd, "\n그런 사람이 존재하지 않습니다 .\n"); return(0); } } @@ -506,15 +506,15 @@ object *obj_ptr; loss = MIN(loss, crt_ptr->experience); if(how == CAST || how == WAND) { - print(fd, "\n %M ġ ֹ ܿϴ.\n״ ڱ û θ Ÿϴ.\n", crt_ptr); + print(fd, "\n당신은 %M에게 백치술의 주문을 외웁니다.\n그는 갑자기 멍청해진듯 주위를 두리번 거립니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ġ ֹ ܿϴ.\n״ ڱ û θ Ÿϴ.\n", + "\n%M이 %M에게 백치술의 주문을 외웁니다.\n그는 갑자기 멍청해진듯 주위를 두리번 거립니다.\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "\n%M ſ ġ ֹ ܿϴ.\n ڱ û鼭 ݱ οԴ \n ʽϴ.\n!!~~~ ġ 𸣰ڴ.!!\n", + "\n%M이 당신에게 백치술의 주문을 외웁니다.\n당신은 갑자기 멍청해지면서 지금까지 싸워왔던 경험들이\n생각나지 않습니다.\n!!악~~~ 경험치가 얼마인지도 모르겠다.!!\n", ply_ptr); - print(crt_ptr->fd,"\n %dŭ ʽϴ.\n",loss); - print(fd,"\n%M ο 󸶰 ؾ\nϴ.\n",crt_ptr); + print(crt_ptr->fd,"\n당신은 %d만큼의 경험들이 생각나지 않습니다.\n",loss); + print(fd,"\n%M이 싸웠던 얼마간의 경험들을 잊어버린것\n같습니다.\n",crt_ptr); } crt_ptr->experience -= loss; @@ -526,7 +526,7 @@ object *obj_ptr; } /**********************************************************************/ -/* remove disease(ġ) */ +/* remove disease(치료) */ /**********************************************************************/ int rm_disease(ply_ptr, cmnd, how) @@ -542,18 +542,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "\n ּ ڸ ֽϴ.\n"); + print(fd, "\n이 주술은 불제자만이 사용할 수 있습니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRMDIS) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -569,15 +569,15 @@ int how; ply_ptr->mpcur -= 12; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n ġ ֹ ܿϴ.\n ô޸ Ȱ⸦ մϴ.\n"); + print(fd, "\n당신은 생사과를 먹으며 치료 주문을 외웁니다.\n병마에 시달리던 당신의 몸이 활기를 띄기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ġ ֹ ܿϴ.\n ô޸ Ȱ⸦ մϴ.\n", + "\n%M이 생사과를 먹으며 치료 주문을 외웠습니다.\n병마에 시달리던 그의 몸이 활기를 띄기 시작합니다.\n", ply_ptr); } else if(how == POTION & F_ISSET(ply_ptr, PDISEA)) - print(fd, "\n ô޸ Ȱ⸦ մϴ.\n"); + print(fd, "\n병마에 시달리던 당신의 몸이 활기를 띄기 시작합니다.\n"); else if(how == POTION) - print(fd, "\n ؼҵǾ Ŷϴ.\n"); + print(fd, "\n당신의 병이 해소되어 몸이 거뜬해집니다.\n"); F_CLR(ply_ptr, PDISEA); @@ -586,7 +586,7 @@ int how; else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n이 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -600,7 +600,7 @@ int how; cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { - print(fd, "\n׷ ʽϴ .\n"); + print(fd, "\n그런사람이 존재하지 않습니다 .\n"); return(0); } } @@ -611,11 +611,11 @@ int how; F_CLR(crt_ptr, PDISEA); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n %M \nġḦ մϴ.\n ִ Ǯ鼭 Ȱ⸦ \n մϴ.\n", crt_ptr); + print(fd, "\n당신은 %M의 혈도를 누르고 내공의 힘을 통해\n치료를 시작합니다.\n그의 몸에 막혀 있던 혈이 풀리면서 차츰 활기를 \n띄기 시작합니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M \nġḦ մϴ.\n Ȱ⸦ ϴ Դϴ.\n", + "\n%M이 %M의 혈도를 누르고 내공의 힘을 통해\n치료를 시작합니다.\n그의 몸이 차츰 활기를 띄기 시작하는 것이 보입니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ġḦ մϴ.\n Ǯ \nȰ⸦ մϴ.\n", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신의 혈도를 누르고 내공의 힘을 통해 치료를 시작합니다.\n당신의 몸에 기공이 들어와 막힌 혈을 풀자 차츰 \n활기를 띄기 시작합니다.\n", ply_ptr); } } @@ -627,7 +627,7 @@ int how; /************************************************************************/ -/* object_send() */ +/* object_send(전송) */ /************************************************************************/ /* The send object spell allows a mage or DM/Caretaker to magically * * transport an object to another login (detectable) player. The maxium * @@ -649,22 +649,22 @@ int how; rom_ptr = ply_ptr->parent_rom; if(!S_ISSET(ply_ptr, STRANO) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(ply_ptr->class != MAGE && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "\n ּ 鸸 ֽϴ.\n"); + print(fd, "\n이 주술은 도술사들만이 사용할 수 있습니다.\n"); return(0); } if(ply_ptr->level <20){ - print(fd, "\n ɷ մϴ.\n"); + print(fd, "\n당신의 능력이 부족합니다.\n"); return(0); } if(cmnd->num < 4) { - print(fd, "\n ϱ?\n"); + print(fd, "\n누구에게 무얼 보냅니까?\n"); return(0); } @@ -673,7 +673,7 @@ int how; if(!crt_ptr || F_ISSET(crt_ptr, PDMINV) || (F_ISSET(crt_ptr, PINVIS) && !F_ISSET(ply_ptr, PDINVI))) { - print(fd, "\n׷ ʽϴ .\n"); + print(fd, "\n그런 사람이 존재하지 않습니다 .\n"); return(0); } @@ -681,28 +681,28 @@ int how; cmnd->str[2], cmnd->val[2]); if(!obj_ptr) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 물건이 존재하지 않습니다.\n"); return(0); } if(obj_ptr->questnum) { - print(fd, "\nӹ õǾ ٸڿ ϴ.\n"); + print(fd, "\n임무에 관련되어 다른자에게 보낼 수 없습니다.\n"); return(0); } if(F_ISSET(obj_ptr, ONEWEV)) { - print(fd, "\n̺Ʈ ٸڿ ϴ.\n"); + print(fd, "\n이벤트 아이템은 다른자에게 보낼 수 없습니다.\n"); return(0); } if(obj_ptr->first_obj) { for(otag_ptr=obj_ptr->first_obj; otag_ptr; otag_ptr=otag_ptr->next_tag) { if(otag_ptr->obj->questnum && ply_ptr->class < DM) { - print(fd, "\nۿ ߽ϴ.\n"); + print(fd, "\n전송에 실패했습니다.\n"); return(0); } if(F_ISSET(otag_ptr->obj, ONEWEV) && ply_ptr->class < DM) { - print(fd, "\nۿ ߽ϴ.\n"); + print(fd, "\n전송에 실패했습니다.\n"); return(0); } } @@ -710,13 +710,13 @@ int how; cost = 5 + bonus[ply_ptr->intelligence] + (((ply_ptr->level+3)/4) - 5)*2; if (obj_ptr->weight > cost){ - print(fd,"\n%I ɷ ʹ ſ \n ϴ.\n", obj_ptr); + print(fd,"\n%I의 전송은 당신의 능력으로 너무 무거워 \n보낼 수 없습니다.\n", obj_ptr); return(0); } cost = 8 + (obj_ptr->weight)/4; if(ply_ptr->mpcur < cost && how == CAST) { - print(fd, "\n մϴ.\n"); + print(fd, "\n당신의 도력이 부족합니다.\n"); return(0); } else if(how == CAST) { ply_ptr->mpcur -= cost; @@ -727,7 +727,7 @@ int how; if (max_weight(crt_ptr) < weight_ply(crt_ptr)+obj_ptr->weight){ - print(fd,"\n%M %1i ϴ .\n",crt_ptr,obj_ptr); + print(fd,"\n%M은 %1i을 가질 수 없습니다 .\n",crt_ptr,obj_ptr); return(0); } del_obj_crt(obj_ptr, ply_ptr); @@ -737,14 +737,14 @@ int how; if(crt_ptr->type==PLAYER) savegame_nomsg(crt_ptr); if(!F_ISSET(ply_ptr, PDMINV)){ - broadcast_rom(fd, ply_ptr->rom_num, "\n%M а Ƚϴ.\n", ply_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 물건을 어디론가로 날려버렸습니다.\n", ply_ptr); } - print(fd,"\n %i ϸ鼭 ָ ܿϴ.\n 鼭 а Ѿ˰\n󰩴ϴ.\n", + print(fd,"\n당신이 %i에 정신집중을 하면서 전송주를 외웁니다.\n그 물건이 공중으로 떠오르면서 어디론가로 총알같이\n날라갑니다.\n", obj_ptr); - print(fd, "\n %1i %M ½ϴ.\n", + print(fd, "\n당신은 %1i을 %M에게 보냈습니다.\n", obj_ptr, crt_ptr); if(!F_ISSET(ply_ptr, PDMINV)){ - print(crt_ptr->fd, "\nڱ ϴÿ 𰡰 ϴÿ ϴ.\nڼ %1iε, %M ϴ.\n", obj_ptr, ply_ptr); + print(crt_ptr->fd, "\n갑자기 하늘에서 무언가가 하늘에서 뚝 떨어졌습니다.\n자세히 보니 %1i인데, %M이 물건을 전송한 것 같습니다.\n", obj_ptr, ply_ptr); } return(1); diff --git a/src/magic8.c b/src/magic8.c index d0ca35c..dcd1e8c 100644 --- a/src/magic8.c +++ b/src/magic8.c @@ -9,7 +9,7 @@ #include "mextern.h" /***********************************************************************/ -/* room_vigor(ȸ) */ +/* room_vigor(전회복) */ /***********************************************************************/ int room_vigor(ply_ptr, cmnd, how) @@ -24,19 +24,19 @@ cmd *cmnd; fd = ply_ptr->fd; if(how == POTION) { - print(fd, "ֹ ߽ϴ."); + print(fd, "주문이 실패했습니다."); return(0); } if(!S_ISSET(ply_ptr, SRVIGO) && (how != WAND || how != SCROLL)) { - print(fd, " ׷ ֹ ͵ ߽ϴ."); + print(fd, "당신은 아직 그런 주문을 터득하지 못했습니다."); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class < INVINCIBLE) { - print(fd, " ּ ڸ ֽϴ."); + print(fd, "이 주술은 불제자만이 사용할 수 있습니다."); return(PROMPT); } if(ply_ptr->mpcur < 12 && (how != WAND || how != SCROLL)) { - print(fd, " մϴ"); + print(fd, "당신의 도력이 부족합니다"); return(0); } if(how == CAST) @@ -48,21 +48,21 @@ cmd *cmnd; cp = ply_ptr->parent_rom->first_ply; - print(fd," ¸ Ʋ ȸ ֹ ܿϴ.\nȿ ٰ ϴ.\n ü ȸǾ ֽϴ.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M ¸ Ʋ ȸ ֹ ܿϴ.\nȿ ٰ ϴ.\n ü ȸǾ ֽϴ.\n" + print(fd,"당신은 가부좌를 틀고서 전회복 주문을 외웁니다.\n방안에 눈이 뜰 수 없을 정도의 빛이 가득차다가 사라집니다.\n방안의 모든사람이 체력이 회복되었는 것을 느낄수 있습니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 가부좌를 틀고서 전회복 주문을 외웁니다.\n방안에 눈이 뜰 수 없을 정도의 빛이 가득차다가 사라집니다.\n방안의 모든사람이 체력이 회복되었는 것을 느낄수 있습니다.\n" , ply_ptr); heal = mrand(1,6) + bonus[ply_ptr->piety]; if (F_ISSET(ply_ptr->parent_rom,RPMEXT)){ heal += mrand(1,3); - print(fd,"\n ּ ȭŵϴ\n"); + print(fd,"\n이 방의 기운의 당신의 주술력을 강화시킵니다\n"); } while(cp){ cp_tmp = cp->next_tag; if(cp->crt->type != MONSTER) { if(cp->crt != ply_ptr) { - print(cp->crt->fd," ȸ ھƿ ֽϴ.\n",ply_ptr); + print(cp->crt->fd,"당신의 몸에서도 회복의 기운이 솟아오름을 느낄 수 있습니다.\n",ply_ptr); } cp->crt->hpcur += heal; cp->crt->hpcur = MIN(cp->crt->hpmax, cp->crt->hpcur); @@ -74,7 +74,7 @@ cmd *cmnd; } /**********************************************************************/ -/* remove blindness(ȼ) */ +/* remove blindness(개안술) */ /**********************************************************************/ int rm_blind(ply_ptr, cmnd, how) @@ -90,18 +90,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, " մϴ"); + print(fd, "당신의 도력이 부족합니다"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, " ڿ 縸 ֽϴ."); + print(fd, "이 기술은 불제자와 무사만이 사용할 수 있습니다."); return(0); } if(!S_ISSET(ply_ptr, SRMBLD) && how == CAST) { - print(fd, " ׷ ֹ ͵ ߽ϴ."); + print(fd, "당신은 아직 그런 주문을 터득하지 못했습니다."); return(0); } if(spell_fail(ply_ptr)) { @@ -116,15 +116,15 @@ int how; ply_ptr->mpcur -= 12; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " ̸ Ⱥθ ȼ ֹ ܿϴ.\n Ÿٰ ڱ ϴ."); + print(fd, "당신의 이마에 개안부를 붙히며 개안술 주문을 외웁니다.\n감겼던 눈이 움찔거리다가 갑자기 눈앞이 밝아집니다."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ڽ ̸ Ⱥθ ȼ \nֹ ܿϴ.\n Ÿٰ ڱ Ȯ ϴ.", + "\n%M이 자신의 이마에 개안부를 붙히며 개안술 \n주문을 외웁니다.\n감겼던 그의 눈이 움찔거리다가 갑자기 눈을 확 뜹니다.", ply_ptr); } else if(how == POTION & F_ISSET(ply_ptr, PBLIND)) - print(fd, " Ÿٰ ڱ ϴ."); + print(fd, "감겼던 눈이 움찔거리다가 갑자기 눈앞이 밝아집니다."); else if(how == POTION) - print(fd, " ɸ ּ Ǯ ϴ."); + print(fd, "약을 먹자 당신 눈에 걸린 주술이 스르르 풀리는 것을 느낍니다."); F_CLR(ply_ptr, PBLIND); @@ -133,7 +133,7 @@ int how; else { if(how == POTION) { - print(fd, " ڽſԸ Ҽ ֽϴ."); + print(fd, "이 물건은 자신에게만 사용할수 있습니다."); return(0); } @@ -147,7 +147,7 @@ int how; cmnd->str[2], cmnd->str[2]); if(!crt_ptr) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 사람이 존재하지 않습니다."); return(0); } } @@ -158,11 +158,11 @@ int how; F_CLR(crt_ptr, PBLIND); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " %M ̸ Ⱥθ ֹ \nܿϴ.\n Ÿٰ ڱ Ȯ ϴ.", crt_ptr); + print(fd, "당신은 %M의 이마에 개안부를 붙히고서 주문을 \n외웁니다.\n그의 감겼던 눈이 움찔거리다가 갑자기 확 뜹니다.", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ̸ Ⱥθ \nֹ ܿϴ.\n Ÿٰ ڱ Ȯ ϴ.\n", + "\n%M이 %M의 이마에 개안부를 붙히고서 \n주문을 외웁니다.\n그의 감겼던 눈이 움찔거리다가 갑자기 확 뜹니다.\n", ply_ptr, crt_ptr); - print(crt_ptr->fd, "%M ̸ Ⱥθ ֹ\nܿϴ.\n Ÿٰ ڱ ϴ.\n", ply_ptr); + print(crt_ptr->fd, "%M이 당신의 이마에 개안부를 붙히고서 주문을\n외웁니다.\n감겼던 당신의 눈이 움찔거리다가 갑자기 밝아집니다.\n", ply_ptr); } } @@ -192,24 +192,24 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { - print(fd, " մϴ"); + print(fd, "당신의 도력이 부족합니다"); return(0); } if(!S_ISSET(ply_ptr, SBLIND) && how == CAST) { - print(fd, " ׷ ֹ ͵ ߽ϴ."); + print(fd, "당신은 아직 그런 주문을 터득하지 못했습니다."); return(0); } if(ply_ptr->classrom_num, "\n%M Ÿ մϴ.\n", + print(fd, "당신의 모습이 드러납니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습니 나타나기 시작합니다.\n", ply_ptr); } if(spell_fail(ply_ptr)) { @@ -227,20 +227,20 @@ int how; F_SET(ply_ptr,PBLIND); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " μհ ϰ Ǹ\nֹ ɾϴ.\nհ Ȱ ϴ.\n~~~ .. ʽϴ."); + print(fd, "당신은 두손가락을 독수리 발톱모양을 하고서 실명\n주문을 걸었습니다.\n손가락에서 검은안개같은 기운이 나와 당신의 눈을 찌릅니다.\n악~~~ 내눈.. 당신의 눈이 떠지질 않습니다."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M μհ ϰ Ǹ\nֹ ɾϴ.\nհ Ȱ \n ϴ. ~~ ..", + "\n%M이 두손가락을 독수리 발톱모양을 하고서 실명\n주문을 걸었습니다.\n손가락에서 검은안개같은 기운이 그의 눈을 찌르자\n괴성을 지릅니다. 악~~ 내눈..", ply_ptr); } else if(how == POTION) - print(fd, "ڱ ʽϴ."); + print(fd, "갑자기 당신의 눈이 감기더니 눈이 떠지질 않습니다."); } /* blind a monster or player */ else { if(how == POTION) { - print(fd, " ڽſԸ Ҽ ֽϴ."); + print(fd, "그 물건은 자신에게만 사용할수 있습니다."); return(0); } @@ -254,15 +254,15 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 사람이 존재하지 않습니다."); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ּ ϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s에게 주술을 걸 수 없습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -272,12 +272,12 @@ int how; F_SET(crt_ptr,MBLIND); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " հ %M ϰ Ǹ \nֹ ܿϴ.\nȰ հ \n ϴ. ~~ ..\n", crt_ptr); + print(fd, "당신의 손가락을 %M의 눈을 향하고서 실명 \n주문를 외웁니다.\n검은안개같은 기운이 손가락에서 나와 그의 눈을\n찌르자 괴성을 지릅니다. 악~~ 내눈..\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M հ %M ϰ Ǹ\nֹ ܿϴ.\nȰ հ \n ϴ. ~~ ..\n", + "\n%M이 손가락을 %M의 눈을 향하고서 실명\n주문를 외웠습니다.\n검은안개같은 기운이 손가락에서 나와 그의 눈을 \n찌르자 괴성을 지릅니다. 악~~ 내눈..\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "\n%M հ ϰ Ǹ ֹ ܿϴ.\nȰ հ \n  ϴ. ~~ ..\n ܼ ʽϴ.\n", + "\n%M이 손가락을 당신의 눈을 향하고서 실명 주문를 외웁니다.\n검은안개같은 기운이 손가락에서 나와 당신의 눈을\n 찌르자 괴성을 지릅니다. 악~~ 내눈..\n당신의 앞이 눈이 감겨서 보이질 않습니다.\n", ply_ptr); } @@ -309,19 +309,19 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { - print(fd, " մϴ."); + print(fd, "당신의 도력이 부족합니다."); return(0); } if(!S_ISSET(ply_ptr, SFEARS) && how == CAST) { - print(fd, " ׷ ֹ ͵ ߽ϴ."); + print(fd, "당신은 아직 그런 주문을 터득하지 못했습니다."); return(0); } if(F_ISSET(ply_ptr, PINVIS)) { F_CLR(ply_ptr, PINVIS); - print(fd, " 巯ϴ."); - broadcast_rom(fd, ply_ptr->rom_num, "\n%M Ÿ մϴ.", + print(fd, "당신의 모습이 드러납니다."); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 나타나기 시작합니다.", ply_ptr); } @@ -348,20 +348,20 @@ int how; F_SET(ply_ptr,PFEARS); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " Ǽ ߷Ƚϴ.\nڱ ϴ ͵ Ÿ ѷԴϴ.\n~~~ ~~ մϴ.\n"); + print(fd, "당신은 실수로 지옥구슬을 떨어뜨렸습니다.\n갑자기 당신이 무서워하던 것들이 나타나 당신을 둘러쌉니다.\n악~~~ 저리가~~ 당신은 공포에 떨기 시작합니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ǽ ߷Ƚϴ.\nڱ ϰ ڱ װ \n մϴ. ~~~ ~~\nװ ϴµ ƹ͵ ʽϴ.", + "\n%M이 실수로 지옥구슬을 떨어뜨렸습니다.\n갑자기 구슬이 펑하고 터지더니 갑자기 그가 괴성을\n지르기 시작합니다. 악~~~ 저리가~~\n그가 공포에 떨기 시작하는데 당신의 눈에는 아무것도 보이지 않습니다.", ply_ptr); } else if(how == POTION) - print(fd, "ڱ ϴ ͵ Ÿ ѷԴϴ.\n~~~ ~~ մϴ."); + print(fd, "갑자기 당신이 무서워하던 것들이 나타나 당신을 둘러쌉니다.\n악~~~ 저리가~~ 당신은 공포에 떨기 시작합니다."); } /* fear a monster or player */ else { if(how == POTION) { - print(fd, " ڽſԸ Ҽ ֽϴ."); + print(fd, "그 물건은 자신에게만 사용할수 있습니다."); return(0); } @@ -375,20 +375,20 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 사람이 존재 하지 않습니다."); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { - print(fd, " %s ּ ϴ.", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "당신은 %s에게 주술을 걸 수 없습니다.", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MPERMT)) { - print(fd, "%M ѷԴϴ.\n, װ ݻ ϴ.",crt_ptr); + print(fd, "%M의 주위에 공포의 기운이 둘러쌉니다.\n하지만, 그가 기합을 지르자 금새 그 기운이 사라졌습니다.",crt_ptr); return(0); } @@ -404,12 +404,12 @@ int how; F_SET(crt_ptr,MFEARS); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " %M ϴ.\n ϰ 鼭 ׸ ѷԴϴ.\n~~~ ~~ ڱ װ 鼭 \n մϴ.\n", crt_ptr); + print(fd, "당신은 지옥구술을 %M에게 던졌습니다.\n구슬이 펑하고 터지면서 공포의 기운이 그를 둘러쌉니다.\n악~~~ 저리가~~ 갑자기 그가 괴성을 지르면서 공포에\n떨기 시작합니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ϴ.\n ϰ ڱ װ ϴ. ~~~ ~~\n״ ƹ͵ ʽϴ.\n", + "\n%M이 %M에게 지옥구술을 던졌습니다.\n구슬이 펑하고 터지자 갑자기 그가 괴성을 지릅니다. 악~~~ 저리가~~\n그는 공포에 떨지만 당신의 눈에는 아무것도 보이지 않습니다.\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "\n%M ſ ϴ.\nڱ ϴ ͵ Ÿ ѷԴϴ.\n\"~~~ ~~\" \nմϴ.\n", + "\n%M이 당신에게 지옥구슬을 던졌습니다.\n갑자기 당신이 무서워하던 것들이 나타나 당신을 둘러쌉니다.\n\"악~~~ 저리가~~\" 당신은 괴성을 지르며 공포에 떨기\n시작합니다.\n", ply_ptr); } @@ -424,7 +424,7 @@ int how; /**********************************************************************/ -/* silence(ձ) */ +/* silence(봉합구) */ /**********************************************************************/ /* Silence causes a player or monster to lose their voice, makin them */ /* unable to casts spells, use scrolls, speak, yell, or broadcast */ @@ -442,24 +442,24 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, " մϴ."); + print(fd, "당신의 도력이 부족합니다."); return(0); } if(!S_ISSET(ply_ptr, SSILNC) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(ply_ptr->classrom_num, "\n%M Ÿ մϴ.", + print(fd, "당신의 모습이 드러납니다.\n"); + broadcast_rom(fd, ply_ptr->rom_num, "\n%M의 모습이 나타나개 시작합니다.", ply_ptr); } @@ -486,20 +486,20 @@ int how; F_SET(ply_ptr,PSILNC); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n Ǽ ձ ֹ ڽſ ɾϴ.\n... Ϸ Ҹ\nϴ.\n"); + print(fd, "\n당신은 실수로 봉합구 주문을 자신에게 걸었습니다.\n억... 당신은 입을 벌려 말을 하려 하지만 목소리가\n사라졌습니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ǽ ձ ֹ ڽſ ɾϴ.\n״ Ϸ Ҹ 鸮 ʽϴ.\n", + "\n%M이 실수로 봉합구 주문을 자신에게 걸었습니다.\n그는 입을 벌려 말을 하려 하지만 목소리가 들리지 않습니다.\n", ply_ptr); } else if(how == POTION) - print(fd, "\n ɷ Ҹ ʽϴ.\n"); + print(fd, "\n당신이 먹은것이 목에 걸려 목소리가 나오지 않습니다.\n"); } /* silence a monster or player */ else { if(how == POTION) { - print(fd, "\n ڽſԸ Ҽ ֽϴ.\n"); + print(fd, "\n그 물건은 자신에게만 사용할수 있습니다.\n"); return(0); } @@ -513,15 +513,15 @@ int how; if(!crt_ptr || crt_ptr == ply_ptr || strlen(cmnd->str[2]) < 3) { - print(fd, "\n׷ ʽϴ.\n"); + print(fd, "\n그런 사람이 존재하지 않습니다.\n"); return(0); } } if(crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MUNKIL)) { - print(fd, "\n %s ּ ϴ.\n", - F_ISSET(crt_ptr, MMALES) ? "":"׳"); + print(fd, "\n당신은 %s에게 주술을 걸 수 없습니다.\n", + F_ISSET(crt_ptr, MMALES) ? "그":"그녀"); return(0); } @@ -537,12 +537,12 @@ int how; F_SET(crt_ptr,MSILNC); if(how == CAST || how == SCROLL || how == WAND) { - print(fd, "\n ΰ Ѿư %M ġ鼭 \nձ ֹ ܿϴ.\n״ Ϸ Ҹ ʽϴ.\n", crt_ptr); + print(fd, "\n당신은 잽싸게 쫓아가 %M의 목을 치면서 \n봉합구 주문을 외웁니다.\n그는 입을 벌려 말을 하려 하지만 목소리가 들이지 않습니다.\n", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M ΰ Ѿư %M ġ鼭 \nձ ֹ ܿϴ.\n״ Ϸ Ҹ ʽϴ.\n", + "\n%M이 잽싸게 쫓아가 %M의 목을 치면서 \n봉합구 주문을 외웁니다.\n그는 입을 벌려 말을 하려 하지만 목소리가 들이지 않습니다.\n", ply_ptr, crt_ptr); print(crt_ptr->fd, - "\n%M ΰ Ѿƿ ġ鼭 ձ\nֹ ܿϴ.\n Ϸ Ҹ ʽϴ.\n", + "\n%M이 잽싸게 쫓아와 당신의 목을 치면서 봉합구\n주문을 외웁니다.\n당신은 입을 벌려 말을 하려 하지만 목소리가 들이지 않습니다.\n", ply_ptr); } @@ -572,18 +572,18 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 12 && how == CAST) { - print(fd, "\n մϴ\n"); + print(fd, "\n당신의 도력이 부족합니다\n"); return(0); } if(ply_ptr->class != CLERIC && ply_ptr->class != PALADIN && ply_ptr->class < INVINCIBLE && how == CAST) { - print(fd, "\n ּ ڿ 縸 ֽϴ.\n"); + print(fd, "\n이 주술은 불제자와 무사만이 사용할 수 있습니다.\n"); return(0); } if(!S_ISSET(ply_ptr, SRMDIS) && how == CAST) { - print(fd, "\n ׷ ֹ ͵ ߽ϴ.\n"); + print(fd, "\n당신은 아직 그런 주문을 터득하지 못했습니다.\n"); return(0); } if(spell_fail(ply_ptr)) { @@ -602,7 +602,7 @@ if(spell_fail(ply_ptr)) { broadcast_rom(fd, ply_ptr->rom_num, "\n%M cast remove blindness on %sself.", ply_ptr, - F_ISSET(ply_ptr, PMALES) ? "":"׳"); + F_ISSET(ply_ptr, PMALES) ? "그":"그녀"); } else if(how == POTION & F_ISSET(ply_ptr, PBLIND)) print(fd, "You can see.\n"); @@ -656,7 +656,7 @@ if(spell_fail(ply_ptr)) { } /**********************************************************************/ -/* charm (ȥ) */ +/* charm (이혼대법) */ /**********************************************************************/ int charm(ply_ptr, cmnd, how) @@ -672,17 +672,17 @@ int how; rom_ptr = ply_ptr->parent_rom; if(ply_ptr->mpcur < 15 && how == CAST) { - print(fd, " մϴ"); + print(fd, "당신의 도력이 부족합니다"); return(0); } if(!S_ISSET(ply_ptr, SCHARM) && how == CAST) { - print(fd, " ׷ ֹ ͵ ߽ϴ."); + print(fd, "당신은 아직 그런 주문을 터득하지 못했습니다."); return(0); } if(F_ISSET(rom_ptr, RSUVIV)) { - print(fd, "忡 ֹ ϴ."); + print(fd, "대련장에서는 이 주문을 사용할 수 없습니다."); return(0); } if(how == CAST) { @@ -706,13 +706,13 @@ int how; ply_ptr->lasttime[LT_CHRMD].interval = dur; if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " ɽؼ ſ ȥ մϴ.\n 鼭 ¾Ƶ ȲȦ \nϴ. .."); + print(fd, "당신은 심심해서 거울을 보며 이혼대법을 사용합니다.\n기분이 좋아지면서 괜히 맞아도 황홀한 기분이\n듭니다. 나 좀 때려줘.."); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ȥ ּ Ŵ ſ ϴ.\nſ 鼭 \nŸϴ. ڽ Ƴ?", + "\n%M이 이혼대법의 주술을 거는 거울을 봅니다.\n거울을 보고나자 당신을 보면서 괜히 히죽히죽\n거립니다. 이 자식 미쳤나?", ply_ptr); } else if(how == POTION) - print(fd, " 鼭 ¾Ƶ ȲȦ \nϴ. .."); + print(fd, "기분이 좋아지면서 괜히 맞아도 황홀한 기분이\n듭니다. 나 좀 때려줘.."); } @@ -720,7 +720,7 @@ int how; else { if(how == POTION) { - print(fd, " ڽſԸ Ҽ ֽϴ."); + print(fd, "그 물건은 자신에게만 사용할수 있습니다."); return(0); } @@ -734,7 +734,7 @@ int how; cmnd->str[2], cmnd->val[2]); if(!crt_ptr) { - print(fd, "׷ ʽϴ."); + print(fd, "그런 사람이 존재하지 않습니다."); return(0); } } @@ -746,22 +746,22 @@ int how; (crt_ptr->type != PLAYER && F_ISSET(crt_ptr, MRMAGI))) dur /= 2; if((ply_ptr->level < crt_ptr->level) || F_ISSET(crt_ptr, MNOCHA)) { - print(fd, " Ⱑ ֹ źŵϴ."); + print(fd, "상대의 기가 당신의 주문을 반탄시킵니다."); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\%M ȥ %M ɷ մϴ.\n", + "\%M이 이혼대법을 %M에게 걸려고 합니다.\n", ply_ptr, crt_ptr); if(crt_ptr->type == PLAYER) - print(crt_ptr->fd, "%M ſ ȥ մϴ.\n",ply_ptr); + print(crt_ptr->fd, "%M이 당신에게 이혼대법을 걸으려 합니다.\n",ply_ptr); return(0); } if(how == CAST || how == SCROLL || how == WAND) { - print(fd, " %M ſ ߸ ȥ ̴ϴ.\nſ 鼭 \nŸϴ. .", crt_ptr); + print(fd, "당신은 %M에게 거울을 비추며 이혼대법을 겁니다.\n거울을 보고나자 당신을 보면서 괜히 히죽히죽\n거립니다. 드디어 맛 갔군.", crt_ptr); broadcast_rom2(fd, crt_ptr->fd, ply_ptr->rom_num, - "\n%M %M ſ ߸ ȥ ̴ϴ.\nſ 鼭 \nŸϴ. ڽ Ƴ?", + "\n%M이 %M에게 거울을 비추며 이혼대법을 겁니다.\n거울을 보고나자 당신을 보면서 괜히 히죽히죽\n거립니다. 저 자식이 미쳤나?", ply_ptr, crt_ptr); - print(crt_ptr->fd, "\n%M ſ ſ ߸ ȥ ̴ϴ.\n 鼭 ¾Ƶ ȲȦ \nϴ. ..", ply_ptr); + print(crt_ptr->fd, "\n%M이 당신에게 거울을 비추며 이혼대법을 겁니다.\n괜히 기분이 좋아지면서 맞아도 황홀한 기분이\n듭니다. 나 좀 때려줘..", ply_ptr); add_charm_crt(crt_ptr, ply_ptr); crt_ptr->lasttime[LT_CHRMD].ltime = time(0); @@ -804,7 +804,7 @@ switch(ply_ptr->class) { case ASSASSIN: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5)+30; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -813,7 +813,7 @@ switch(ply_ptr->class) { case BARBARIAN: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5); if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -831,7 +831,7 @@ switch(ply_ptr->class) { case CLERIC: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5)+65; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -840,7 +840,7 @@ switch(ply_ptr->class) { case FIGHTER: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5)+10; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -849,7 +849,7 @@ switch(ply_ptr->class) { case MAGE: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5)+75; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -858,7 +858,7 @@ switch(ply_ptr->class) { /* case MONK: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*6)+25; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패 했습니다."); return(1); } else @@ -867,7 +867,7 @@ switch(ply_ptr->class) { case PALADIN: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*5)+50; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -876,7 +876,7 @@ switch(ply_ptr->class) { case RANGER: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*4)+56; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else @@ -885,7 +885,7 @@ switch(ply_ptr->class) { case THIEF: chance = ((((ply_ptr->level+3)/4)+bonus[ply_ptr->intelligence])*6)+22; if(n>chance) { - print(fd," ֹ ߽ϴ."); + print(fd,"당신의 주문이 실패했습니다."); return(1); } else diff --git a/src/main.c b/src/main.c index 85cf14f..9cc17fb 100644 --- a/src/main.c +++ b/src/main.c @@ -84,8 +84,8 @@ char *argv[]; { long c; c = time(0); - log_f("--- ӵ : %d --- (%.24s)\n", Port, ctime(&c)); - //log_overwrite("command.log","--- ---"); + log_f("--- 머드 시작: %d --- (%.24s)\n", Port, ctime(&c)); + //log_overwrite("command.log","--- 재시작 ---"); } sock_loop(); diff --git a/src/mextern.h b/src/mextern.h index 131b724..38fa08a 100644 --- a/src/mextern.h +++ b/src/mextern.h @@ -19,7 +19,7 @@ #ifndef MIGNORE -/* ÷ ܺκ */ +/* 전쟁 플레그 외부변수 선언 */ extern int AT_WAR; extern int CALLWAR1; extern int CALLWAR2; @@ -90,7 +90,7 @@ extern int family_gold[16]; #endif /* alias.c */ -#define MAX_ALIAS_BUF 64 /* Ӹ ɾ ִ */ +#define MAX_ALIAS_BUF 64 /* 한 줄임말내의 명령어 최대 갯수 */ extern int ply_aliases(); extern int alias_cmd(); @@ -318,7 +318,8 @@ extern int dm_dust(), dm_follow(), dm_attack(), list_enm(), list_charm(); /* PLAYER.C */ -extern void init_ply(), uninit_ply(), update_ply(), up_level(), +extern int init_ply(); +extern void uninit_ply(), update_ply(), up_level(), down_level(), add_obj_crt(), del_obj_crt(), compute_ac(), compute_thaco(); extern char *title_ply(), *ply_prompt(); @@ -375,6 +376,17 @@ extern int low(), up(), dice(), exp_to_lev(), dec_daily(), sort_cmp(), file_exists(), is_number_str(); extern char *crt_str(), *obj_str(); +/* UTF8_TEXT.C */ + +extern int utf8_validate(), utf8_ends_with(), utf8_prev_char_start(), + utf8_has_jongseong_last(); +extern unsigned long utf8_codepoint_len(); + +/* PLAYER_PATH.C */ + +extern int player_path_from_name(), player_path_ensure_dir(), + player_name_is_valid(); + /* SPECIAL1.C */ extern int call_war(), special_obj(), special_read(), is_bad_item(), special_cmd(); diff --git a/src/misc.c b/src/misc.c index 1bc73ea..b593b5c 100644 --- a/src/misc.c +++ b/src/misc.c @@ -135,12 +135,12 @@ int num, flag; if(crt->type != MONSTER) { if(((F_ISSET(crt, PINVIS) || F_ISSET(crt, PDMINV)) && !(flag & 2)) || F_ISSET(crt, PDMINV) && !(flag&DMF)) - strcpy(str,""); + strcpy(str,"누군가"); else { strcpy(str, crt->name); if(F_ISSET(crt, PINVIS)) strcat(str, "(*)"); - if(!(flag&CAP)) strcat(str,""); + if(!(flag&CAP)) strcat(str,"님"); } return(str); } @@ -173,7 +173,7 @@ int num, flag; str[0] = up(str[0]); */ if((flag & MAG) && (crt->type != PLAYER) && (F_ISSET(crt, MMAGIC))) - strcat(str, "(ֹ)"); + strcat(str, "(주문)"); return(str); @@ -199,7 +199,7 @@ int num, flag; str = xstr[xnum]; xnum = (xnum + 1)%5; - /* ̸ ڿ ... */ + /* 아이템 이름 뒤에 공백 없앰... */ for(i=strlen(obj->name)-1;i>=0;i--) { if(obj->name[i]!=' ') break; } @@ -221,7 +221,7 @@ int num, flag; /* if(F_ISSET(obj, ONOPRE) || obj->type == MONEY) strcpy(str, ""); else if(F_ISSET(obj, OSOMEA)) - strcpy(str, "ణ "); + strcpy(str, "약간의 "); else { ch = low(obj->name[0]); if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || @@ -244,7 +244,7 @@ int num, flag; strcat(str, obj->name); - /* ѱۿ ʿ. + /* 한글에서는 복수 불필요. if(!F_ISSET(obj, ODROPS) && !F_ISSET(obj, OSOMEA)) { str[strlen(str)+1] = 0; str[strlen(str)+2] = 0; @@ -267,7 +267,7 @@ int num, flag; strcat(str, str2); } else if((flag & MAG) && obj->magicpower) - strcat(str, "(ֹ)"); + strcat(str, "(주문)"); return(str); } @@ -342,7 +342,7 @@ char *str; strcpy(Ply[fd].extr->tempstr[1], str); ff = open(str, O_RDONLY, 0); if(ff < 0) { - print(fd, "ȭ ϴ.\n"); + print(fd, "화일을 읽을 수 없습니다.\n"); RETURN(fd, command, 1); } line = 0; @@ -372,7 +372,7 @@ char *str; } if(n==FBUF || line>18) { F_SET(Ply[fd].ply, PREADI); - print(fd, "\n[] . ׸÷ [.] ġ: "); + print(fd, "\n[엔터]를 누르세요. 그만보시려면 [.]을 치세요: "); output_buf(); Ply[fd].io->intrpt &= ~1; } @@ -388,14 +388,14 @@ char *str; } case 2: if(str[0] == '.') { - print(fd, "ߴմϴ.\n"); + print(fd, "중단합니다.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } offset = atol(Ply[fd].extr->tempstr[0]); ff = open(Ply[fd].extr->tempstr[1], O_RDONLY, 0); if(ff < 0) { - print(fd, "ȭ ϴ. ſ ּ.\n"); + print(fd, "화일이 없습니다. 신에게 연락해 주세요.\n"); F_CLR(Ply[fd].ply, PREADI); RETURN(fd, command, 1); } @@ -427,7 +427,7 @@ char *str; } if(n==FBUF || line > 18) { F_SET(Ply[fd].ply, PREADI); - print(fd, "\n[] . ׸÷ [.] ġ: "); + print(fd, "\n[엔터]를 누르세요. 그만보시려면 [.]을 치세요: "); output_buf(); Ply[fd].io->intrpt &= ~1; } @@ -620,8 +620,8 @@ char *cur_time, *cur_name; lseek(fd, 0L, 2); lseek(fd2, 0L, 2); - sprintf(str, "%s : %s ̵ ӽõ.\n", cur_time, cur_name); - sprintf(str2, "( %s ) ӽõ ־ϴ.\n", cur_time); + sprintf(str, "%s : %s 님의 아이디로 접속시도.\n", cur_time, cur_name); + sprintf(str2, "( %s )에 접속시도가 있었습니다.\n", cur_time); write(fd, str, strlen(str)); write(fd2, str2, strlen(str2)); @@ -734,9 +734,9 @@ int fd; int duration; { if(duration == 1) - print(fd, "1ʸ ٸ.\n"); + print(fd, "1초만 기다리세요.\n"); else - print(fd, "%dʵ ٸ.\n", duration); + print(fd, "%d초동안 기다리세요.\n", duration); } /************************************************************************/ diff --git a/src/mstruct.h b/src/mstruct.h index 155855d..3247d89 100644 --- a/src/mstruct.h +++ b/src/mstruct.h @@ -211,13 +211,13 @@ typedef struct creature { ttag *first_tlk; /* List of talk responses */ struct room *parent_rom; /* Room creature is in */ - /* ߰ by Ǫϴ - 1024 Ʈ : 1024/4 = 256 */ - /* : 4Ʈ , 1024 ݵ Ȯ !! */ - /* Ϸ 4 մϴ. */ - /* char chr; char chr2; long num; Ʈ ? */ - /* 1 + 1 + 4 = 6 ̶ ϸ ƲȽϴ. */ + /* 추가 데이터 by 푸른하늘 - 총 1024 바이트 : 1024/4 = 256 */ + /* 경고: 4바이트 단위로 수정, 수정후 1024인지 반드시 확인 !! */ + /* 컴파일러는 4의 배수로 정리합니다. */ + /* char chr; char chr2; long num; 는 몇바이트를 먹을까요? */ + /* 1 + 1 + 4 = 6 이라고 하면 틀렸습니다. */ /* 1 + 1 + 2 + 4 = 8 - ڿ 4Ʈ ⶧ 2Ʈ ֽϴ. */ + 뒤에 4바이트가 오기때문에 공백으로 2바이트를 넣습니다. */ /* long __garbage[256]; */ diff --git a/src/mtype.h b/src/mtype.h index 04035e0..9296702 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -12,9 +12,9 @@ extern int Port; #define PORTNUM 4000 /* DM's name */ -#define DMNAME "׽佺" -#define DMNAME2 "" -#define DMNAME3 "ǻ" +#define DMNAME "테스토스" +#define DMNAME2 "꽃" +#define DMNAME3 "뽀뽀" #define DMNAME4 "" #define DMNAME5 "" #define DMNAME6 "" @@ -22,7 +22,7 @@ extern int Port; /* I/O buffer sizes */ #define IBUFSIZE 1024 -#define OBUFSIZE 8192 /* 8192 */ +#define OBUFSIZE 8192 /* 원래 8192 */ /* File permissions */ /*#define S_IWRITE 00660 */ @@ -150,10 +150,10 @@ extern int Port; #define DL_FHEAL 2 /* Daily heals */ #define DL_TRACK 3 /* Daily track spells */ #define DL_DEFEC 4 /* Daily defecations */ -#define DL_MARRI 8 /* ȥ ȣ */ -#define DL_EXPND 9 /* Ȯ(аŸ ) */ +#define DL_MARRI 8 /* 결혼식 번호 */ +#define DL_EXPND 9 /* 확장용(패거리에서 사용) */ -#define MAXFAMILY 16 /* ִ аŸ */ +#define MAXFAMILY 16 /* 최대 패거리의 숫자 */ /* Last-time specifications */ #define LT_INVIS 0 @@ -198,7 +198,7 @@ extern int Port; #define LT_SLAYE 38 #define LT_MEDIT 39 #define LT_BEFUD 40 -#define LT_SAYTLK 41 /* ϴ lasttime */ +#define LT_SAYTLK 41 /* 말하는 몹의 lasttime */ #define LT_UPDMG 42 #define LT_KICK 43 @@ -230,64 +230,64 @@ extern int Port; #define WIELD 20 /* Spell flags */ -#define SVIGOR 0 /* ȸ */ -#define SHURTS 1 /* dz */ -#define SLIGHT 2 /* ߱ */ -#define SCUREP 3 /* ص */ -#define SBLESS 4 /* */ -#define SPROTE 5 /* ȣ */ -#define SFIREB 6 /* ȭ */ -#define SINVIS 7 /* й */ -#define SRESTO 8 /* ¹ */ -#define SDINVI 9 /* а */ -#define SDMAGI 10 /* ֹ */ -#define STELEP 11 /* */ -#define SBEFUD 12 /* ȥ */ -#define SLGHTN 13 /* */ -#define SICEBL 14 /* */ -#define SENCHA 15 /* */ -#define SRECAL 16 /* ȯ */ -#define SSUMMO 17 /* ȯ */ -#define SMENDW 18 /* ȸ */ -#define SFHEAL 19 /* ġ */ -#define STRACK 20 /* */ -#define SLEVIT 21 /* ξ */ -#define SRFIRE 22 /* 濭 */ -#define SFLYSP 23 /* */ -#define SRMAGI 24 /* */ -#define SSHOCK 25 /* dz */ -#define SRUMBL 26 /* */ -#define SBURNS 27 /* ȭ */ -#define SBLIST 28 /* ź */ -#define SDUSTG 29 /* dz */ -#define SWBOLT 30 /* ʽ */ -#define SCRUSH 31 /* */ -#define SENGUL 32 /* */ -#define SBURST 33 /* ȭdz */ -#define SSTEAM 34 /* ȭõ */ -#define SSHATT 35 /* ռ */ -#define SIMMOL 36 /* */ -#define SBLOOD 37 /* õ */ -#define STHUND 38 /* õdz */ -#define SEQUAK 39 /* */ -#define SFLFIL 40 /* ¾ */ -#define SKNOWA 41 /* ǰ */ -#define SREMOV 42 /* ؼ */ -#define SRCOLD 43 /* */ -#define SBRWAT 44 /* */ -#define SSSHLD 45 /* ȣ */ -#define SLOCAT 46 /* õ */ -#define SDREXP 47 /* ġ */ -#define SRMDIS 48 /* ġ */ -#define SRMBLD 49 /* ȼ */ -#define SFEARS 50 /* */ +#define SVIGOR 0 /* 회복 */ +#define SHURTS 1 /* 삭풍 */ +#define SLIGHT 2 /* 발광 */ +#define SCUREP 3 /* 해독 */ +#define SBLESS 4 /* 성현진 */ +#define SPROTE 5 /* 수호진 */ +#define SFIREB 6 /* 화궁 */ +#define SINVIS 7 /* 은둔법 */ +#define SRESTO 8 /* 도력반 */ +#define SDINVI 9 /* 은둔감지 */ +#define SDMAGI 10 /* 주문감지 */ +#define STELEP 11 /* 축지법 */ +#define SBEFUD 12 /* 혼동 */ +#define SLGHTN 13 /* 뇌전 */ +#define SICEBL 14 /* 동설주 */ +#define SENCHA 15 /* 빙의 */ +#define SRECAL 16 /* 귀환 */ +#define SSUMMO 17 /* 소환 */ +#define SMENDW 18 /* 원기회복 */ +#define SFHEAL 19 /* 완치 */ +#define STRACK 20 /* 추적 */ +#define SLEVIT 21 /* 부양술 */ +#define SRFIRE 22 /* 방열진 */ +#define SFLYSP 23 /* 비행 */ +#define SRMAGI 24 /* 보마진 */ +#define SSHOCK 25 /* 권풍술 */ +#define SRUMBL 26 /* 지동술 */ +#define SBURNS 27 /* 화선도 */ +#define SBLIST 28 /* 탄수공 */ +#define SDUSTG 29 /* 풍마현 */ +#define SWBOLT 30 /* 파초식 */ +#define SCRUSH 31 /* 폭진 */ +#define SENGUL 32 /* 낙석 */ +#define SBURST 33 /* 화풍술 */ +#define SSTEAM 34 /* 화룡대천 */ +#define SSHATT 35 /* 토합술 */ +#define SIMMOL 36 /* 주작현 */ +#define SBLOOD 37 /* 열사천 */ +#define STHUND 38 /* 파천풍 */ +#define SEQUAK 39 /* 지옥패 */ +#define SFLFIL 40 /* 태양안 */ +#define SKNOWA 41 /* 선악감지 */ +#define SREMOV 42 /* 저주해소 */ +#define SRCOLD 43 /* 방한진 */ +#define SBRWAT 44 /* 수생술 */ +#define SSSHLD 45 /* 지방호 */ +#define SLOCAT 46 /* 천리안 */ +#define SDREXP 47 /* 백치술 */ +#define SRMDIS 48 /* 치료 */ +#define SRMBLD 49 /* 개안술 */ +#define SFEARS 50 /* 공포 */ #define SRVIGO 51 /* room vigor */ #define STRANO 52 /* item transport */ #define SBLIND 53 /* cause blindness */ #define SSILNC 54 /* cause silence */ #define SCHARM 55 /* charm person */ -#define SCURSE 56 /* */ -/* #define SNAHAN 56 */ /* ѱ */ +#define SCURSE 56 /* 저주 */ +/* #define SNAHAN 56 */ /* 변수나한권 */ /* Trap types */ #define TRAP_PIT 1 /* Pit trap */ #define TRAP_DART 2 /* Poison dart trap */ @@ -333,13 +333,13 @@ extern int Port; #define RPMEXT 32 /* Player magic spell extend */ #define RNOLOG 33 /* No player login */ #define RELECT 34 /* Election Booth */ -#define RFORGE 35 /* ü */ -#define RSUVIV 36 /* (̹ ) */ -#define RFAMIL 37 /* аŸ */ +#define RFORGE 35 /* 무기 제련소 */ +#define RSUVIV 36 /* 대련장(서바이벌 존) */ +#define RFAMIL 37 /* 패거리존 */ #define RONFML 38 /* Only Family */ -#define RBANK 39 /* */ -#define RONMAR 40 /* ȥ */ -#define RMARRI 41 /* ȥ */ +#define RBANK 39 /* 은행 */ +#define RONMAR 40 /* 결혼한 사람만 갈수 있음 */ +#define RMARRI 41 /* 결혼식장 */ /* Player flags */ #define PBLESS 0 /* Bless spell */ @@ -382,7 +382,7 @@ extern int Port; #define PBRWAT 37 /* Breathe wateR flag */ #define PSSHLD 38 /* Resist-cold flag */ #define PPLDGK 39 /* player pledge to a prince */ -#define PRDDIV 40 /* ȥ û. */ +#define PRDDIV 40 /* 이혼 신청. */ #define PDISEA 41 /* Player is diseased */ #define PBLIND 42 /* Player is blind */ #define PFEARS 43 /* Player is fearful */ @@ -391,21 +391,21 @@ extern int Port; #define PLECHO 46 /* Local Echo mode enable */ #define PKNDM1 47 /* kingdome 1 */ #define PKNDM2 48 /* kingdome 2 */ -#define PBRSND 49 /* Ƚ . */ -#define PNOBR2 50 /* ȵ */ -#define PBRIGH 51 /* */ -#define PPOWER 52 /* power +3 */ -#define PSLAYE 53 /* thac0 +3 */ -#define PMEDIT 54 /* intelligence +3 */ -#define PFAMIL 55 /* аŸ */ -#define PRDFML 56 /* аŸ */ -#define PFMBOS 57 /* аŸ θ */ -#define PFRTUN 58 /* аŸȯ */ -#define PUPDMG 59 /* °ݹ */ -#define PMARRI 60 /* ȥ */ -#define PRDMAR 61 /* ȥ û */ -#define SUICD 62 /* ڻû */ -#define PDSCRP 63 /* 纸 */ +#define PBRSND 49 /* 잡담 횟수 제한자. */ +#define PNOBR2 50 /* 경매 안듣기 */ +#define PBRIGH 51 /* 밝은색 사용 */ +#define PPOWER 52 /* 기공집결 power +3 */ +#define PSLAYE 53 /* 살기충전 thac0 +3 */ +#define PMEDIT 54 /* 참선 intelligence +3 */ +#define PFAMIL 55 /* 패거리 가입자 */ +#define PRDFML 56 /* 패거리 가입 대기자 */ +#define PFMBOS 57 /* 패거리의 두목 */ +#define PFRTUN 58 /* 패거리귀환 설정 */ +#define PUPDMG 59 /* 잠력격발 사용 */ +#define PMARRI 60 /* 결혼한 사람 */ +#define PRDMAR 61 /* 결혼 신청 */ +#define SUICD 62 /* 자살신청 */ +#define PDSCRP 63 /* 묘사보기 설정 */ /* Monster flags */ #define MPERMT 0 /* Permanent monster */ @@ -459,17 +459,17 @@ extern int Port; #define MSILNC 48 /* Monster is silenced */ #define MBLIND 49 /* Monster is blind */ #define MCHARM 50 /* Monster is charmed */ -#define MBEFUD 51 /* ȥ */ +#define MBEFUD 51 /* 혼동되있음 */ #define MKNDM1 52 /* kingdom 1 */ #define MKNDM2 53 /* kingdome 2 */ #define MKNDM3 54 /* kingdome 3 */ #define MKNDM4 55 /* dingdome 4 */ -#define MKING1 56 /* 1 */ -#define MKING2 57 /* 2 */ -#define MKING3 58 /* 3 */ -#define MKING4 59 /* 4 */ -#define MSAYTLK 60 /* ϴ */ -#define MSUMMO 61 /* ȯ */ +#define MKING1 56 /* 왕 1 */ +#define MKING2 57 /* 왕 2 */ +#define MKING3 58 /* 왕 3 */ +#define MKING4 59 /* 왕 4 */ +#define MSAYTLK 60 /* 말하는 몹 */ +#define MSUMMO 61 /* 몹을 소환함 */ #define MNOCHA 62 /* Monster cannot be charmed */ /* Object flags */ @@ -516,14 +516,14 @@ extern int Port; #define OVBEFD 40 /* stun length based on ndice */ #define ONSHAT 41 /* weapon will never shatter */ #define OALCRT 42 /* weapon will always critical */ -#define OCNAME 43 /* ̸ ٲܼ */ -#define OSPECI 44 /* special object (pdice ̿) */ -#define OMARRI 45 /* ȥ 밡 */ -#define OEVENT 46 /* ̺Ʈ */ -#define ONAMED 47 /* Ѱ */ +#define OCNAME 43 /* 물건 이름 바꿀수 있음 */ +#define OSPECI 44 /* special object (pdice 이용) */ +#define OMARRI 45 /* 결혼한 사람만 사용가능 */ +#define OEVENT 46 /* 이벤트용 아이템 */ +#define ONAMED 47 /* 명명한거 */ #define ONOBUN 48 /* can not burn */ -#define OWHELD 49 /* ִٴ ÷ . ܺ . */ -#define ONEWEV 50 /* ο ̺Ʈ ÷ */ +#define OWHELD 49 /* 쥐고 있다는 플래그 . 외부 사용안함. */ +#define ONEWEV 50 /* 새로운 이벤트 플래그 */ /* Exit flags */ #define XSECRT 0 /* Secret */ @@ -546,14 +546,14 @@ extern int Port; #define XDAYON 17 /* only open during day */ #define XPGUAR 18 /* passive guarded exit */ #define XNOSEE 19 /* Can not use / see exit */ -#define XKNDM1 20 /* ձ 1 */ -#define XKNDM2 21 /* ձ 2 */ +#define XKNDM1 20 /* 왕국 1번 길 */ +#define XKNDM2 21 /* 왕국 2번 길 */ /* specials */ #define SP_MAPSC 1 /* Map or scroll */ #define SP_COMBO 2 /* Combination lock */ -#define SP_WAR 3 /* */ -#define SP_BOARD 4 /* Խ */ +#define SP_WAR 3 /* 전쟁 아이템 */ +#define SP_BOARD 4 /* 게시판 */ /* obj_str and crt_str flags */ #define CAP 1 diff --git a/src/player.c b/src/player.c index c24c27a..329c953 100644 --- a/src/player.c +++ b/src/player.c @@ -24,11 +24,11 @@ extern long all_broad_time; extern long broad_time[PMAX]; extern long login_time[PMAX]; -void init_ply(ply_ptr) +int init_ply(ply_ptr) creature *ply_ptr; { char file[80], file2[80], file3[80], str[50]; - room *rom_ptr; + room *rom_ptr = 0; object *obj_ptr; otag *op, *otemp; long t, tdiff; @@ -50,11 +50,11 @@ creature *ply_ptr; ply_ptr->class = DM; } else if(ply_ptr->class >= DM || ply_ptr->class ==0) { - /* ҹ ̵ : ̻ */ + /* 불법 아이디 : 직업 이상 */ t = time(0); strcpy(str, (char *)ctime(&t)); str[strlen(str)-1] = 0; - log_f("%s : ### %s ҹ̵(=%d)\n",str, + log_f("%s : ### %s 불법아이디(직업=%d)\n",str, ply_ptr->name,ply_ptr->class); } @@ -71,7 +71,7 @@ creature *ply_ptr; ftotal = load_family(); #endif fnum = ply_ptr->daily[DL_EXPND].max; - if(!strcmp(fmboss_str[ply_ptr->daily[DL_EXPND].max], "*ü*")) { + if(!strcmp(fmboss_str[ply_ptr->daily[DL_EXPND].max], "*해체*")) { F_CLR(ply_ptr, PFAMIL); F_CLR(ply_ptr, PRDFML); ply_ptr->daily[DL_EXPND].max = 0; @@ -84,18 +84,25 @@ creature *ply_ptr; if(ply_ptr->class < DM) F_SET(ply_ptr, PPROMP); + if(load_rom(ply_ptr->rom_num, &rom_ptr) < 0) { + if(load_rom(1, &rom_ptr) < 0 || !rom_ptr) { + log_f("init_ply: failed to load room %d for %s\n", ply_ptr->rom_num, ply_ptr->name); + return(-1); + } + } + if(!F_ISSET(ply_ptr, PDMINV) && ply_ptr->class!=DM) { - broadcast("\n### %s %s ̽ϴ.", class_str[ply_ptr->class], ply_ptr->name); + broadcast("\n### %s %s님이 들어오셨습니다.", class_str[ply_ptr->class], ply_ptr->name); all_broad_time=time(0); } t = time(0); strcpy(str, (char *)ctime(&t)); str[strlen(str)-1] = 0; - log_f("%s: %s (%s) \n", str, ply_ptr->name, + log_f("%s: %s (%s)님이 들어옴\n", str, ply_ptr->name, Ply[ply_ptr->fd].io->address); if(ply_ptr->class >= SUB_DM) { - log_dm("%s : %s (%s) \n", str, ply_ptr->name, + log_dm("%s : %s (%s)님이 들어옴\n", str, ply_ptr->name, Ply[ply_ptr->fd].io->address); } @@ -103,9 +110,6 @@ creature *ply_ptr; ply_ptr->lasttime[LT_PSAVE].interval = SAVEINTERVAL; login_time[ply_ptr->fd] = t; - if(load_rom(ply_ptr->rom_num, &rom_ptr) < 0) - load_rom(1, &rom_ptr); - n = count_vis_ply(rom_ptr); if((F_ISSET(rom_ptr, RONEPL) && n > 0) || (F_ISSET(rom_ptr, RTWOPL) && n > 1) || @@ -250,14 +254,15 @@ creature *ply_ptr; sprintf(str, "%s/%s", POSTPATH, ply_ptr->name); if(file_exists(str)) - print(ply_ptr->fd, "\n*** ü ֽϴ.\n"); + print(ply_ptr->fd, "\n*** 우체국에 편지가 와있습니다.\n"); /* By. Latok */ if(ply_ptr->gold > 300000000){ ply_ptr->gold = 300000000; - print(ply_ptr->fd, "\n\nʹ ֽϴ.\n ڱ⺸ ִٰ Ͽ,\n ִ ߿ 3︸ ܳ, κ\n ׳ ϴ. ( : ~~~~ )\n\n"); + print(ply_ptr->fd, "\n\n너무 많은 돈을 가지고 있습니다.\n신이 자기보다 더 많은 돈을 가지고 있다고 하여,\n가지고 있는 돈중에 3억만 남겨놓고, 나머지 부분을\n신이 그냥 가져갑니다. (신 : 재수~~~~ )\n\n"); } - + + return(0); } /**********************************************************************/ @@ -283,7 +288,7 @@ creature *ply_ptr; cp = ply_ptr->first_fol; while(cp) { cp->crt->following = 0; - print(cp->crt->fd, "\n %s ׸ ٴմϴ.", ply_ptr->name); + print(cp->crt->fd, "\n당신은 %s님을 그만 따라다닙니다.", ply_ptr->name); prev = cp->next_tag; free(cp); cp = prev; @@ -309,7 +314,7 @@ creature *ply_ptr; ply_ptr->following = 0; if(!F_ISSET(ply_ptr, PDMINV)) - print(crt_ptr->fd, "\n%s ׸ ٴմϴ.", + print(crt_ptr->fd, "\n%s님이 당신을 그만 따라다닙니다.", ply_ptr->name); } @@ -324,16 +329,16 @@ creature *ply_ptr; update_ply(ply_ptr); if(!F_ISSET(ply_ptr, PDMINV) && ply_ptr->class<=SUB_DM && !F_ISSET(ply_ptr, SUICD)) { - broadcast("\n### %s ̽ϴ.", ply_ptr->name); + broadcast("\n### %s님이 나가셨습니다.", ply_ptr->name); all_broad_time=time(0); } t = time(0); strcpy(str, (char *)ctime(&t)); str[strlen(str)-1] = 0; if(!F_ISSET(ply_ptr, SUICD)) { - log_f("%s: %s \n", str, ply_ptr->name); + log_f("%s: %s님이 나감\n", str, ply_ptr->name); if(ply_ptr->class == DM) - log_dm("%s : %s \n", str, ply_ptr->name); + log_dm("%s : %s님이 나감\n", str, ply_ptr->name); } } @@ -360,7 +365,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PHASTE)) { if(t > LT(ply_ptr, LT_HASTE)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n당신의 몸이 느려졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PHASTE); ply_ptr->dexterity -= 15; @@ -370,7 +375,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PPOWER)) { if(t > LT(ply_ptr, LT_POWER)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n당신의 힘이 약해졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PPOWER); ply_ptr->strength -= 3; @@ -380,7 +385,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PUPDMG)) { if(t > LT(ply_ptr, LT_UPDMG)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n Ⱑ ϴ."); + print(ply_ptr->fd, "\n당신의 기가 빠져나갑니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PUPDMG); ply_ptr->pdice -= 5; @@ -392,7 +397,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PSLAYE)) { if(t > LT(ply_ptr, LT_SLAYE)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n Ⱑ ⸦ Ҿϴ."); + print(ply_ptr->fd, "\n당신의 무기가 살기를 잃었습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PSLAYE); ply_ptr->thaco += 3; @@ -403,7 +408,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PMEDIT)) { if(t > LT(ply_ptr, LT_MEDIT)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n참선의 영향력이 떨어졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PMEDIT); ply_ptr->intelligence -= 3; @@ -414,7 +419,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PPRAYD)) { if(t > LT(ply_ptr, LT_PRAYD)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n당신의 믿음이 약해졌습니다."); F_CLR(ply_ptr, PPRAYD); ANSI(ply_ptr->fd, WHITE); ply_ptr->piety -= 5; @@ -423,7 +428,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PINVIS)) { if(t > LT(ply_ptr, LT_INVIS) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, "\n Դϴ."); + print(ply_ptr->fd, "\n당신은 이제 눈에 보입니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PINVIS); } @@ -431,7 +436,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PDINVI)) { if(t > LT(ply_ptr, LT_DINVI) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, "\n ħħϴ."); + print(ply_ptr->fd, "\n당신의 눈이 침침해졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PDINVI); } @@ -439,7 +444,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PDMAGI)) { if(t > LT(ply_ptr, LT_DMAGI) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n당신의 감지력이 떨어졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PDMAGI); } @@ -451,7 +456,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PPROTE)) { if(t > LT(ply_ptr, LT_PROTE)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ȣ ϴ."); + print(ply_ptr->fd, "\n당신의 보호력이 떨어졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PPROTE); compute_ac(ply_ptr); @@ -460,7 +465,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PLEVIT)) { if(t > LT(ply_ptr, LT_LEVIT) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n당신은 땅에 내려섰습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PLEVIT); } @@ -468,7 +473,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PBLESS)) { if(t > LT(ply_ptr, LT_BLESS)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\nູ ϴ."); + print(ply_ptr->fd, "\n축복력이 떨어졌습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PBLESS); compute_thaco(ply_ptr); @@ -478,7 +483,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PRFIRE)) { if(t > LT(ply_ptr, LT_RFIRE)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n Ǻΰ ƿԽϴ."); + print(ply_ptr->fd, "\n당신의 피부가 돌아왔습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PRFIRE); } @@ -489,7 +494,7 @@ creature *ply_ptr; if(t > LT(ply_ptr, LT_RCOLD)) { ANSI(ply_ptr->fd, BOLD); ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ۽Դϴ."); + print(ply_ptr->fd, "\n차가운 기운이 몸을 휩쌉니다."); ANSI(ply_ptr->fd, NORMAL); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PRCOLD); @@ -501,7 +506,7 @@ creature *ply_ptr; if(t > LT(ply_ptr, LT_BRWAT)) { ANSI(ply_ptr->fd, BOLD); ANSI(ply_ptr->fd, BLUE); - print(ply_ptr->fd, "\n پϴ."); + print(ply_ptr->fd, "\n당신의 폐가 줄어들었습니다."); ANSI(ply_ptr->fd, WHITE); ANSI(ply_ptr->fd, NORMAL); F_CLR(ply_ptr, PBRWAT); @@ -511,7 +516,7 @@ creature *ply_ptr; if(t > LT(ply_ptr, LT_SSHLD)) { ANSI(ply_ptr->fd, BOLD); ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n ּ а ϴ."); + print(ply_ptr->fd, "\n당신의 주술 방패가 사라졌습니다."); ANSI(ply_ptr->fd, WHITE); ANSI(ply_ptr->fd, NORMAL); F_CLR(ply_ptr, PSSHLD); @@ -520,7 +525,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PFLYSP)) { if(t > LT(ply_ptr, LT_FLYSP) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ̻ ϴ."); + print(ply_ptr->fd, "\n당신은 더이상 날수 없습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PFLYSP); } @@ -529,7 +534,7 @@ creature *ply_ptr; if(t > LT(ply_ptr, LT_RMAGI)) { ANSI(ply_ptr->fd, BOLD); ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd,"\n ϴ."); + print(ply_ptr->fd,"\n마법의 방어력이 사라졌습니다."); ANSI(ply_ptr->fd, WHITE); ANSI(ply_ptr->fd, NORMAL); F_CLR(ply_ptr, PRMAGI); @@ -538,7 +543,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PSILNC)) { if(t > LT(ply_ptr, LT_SILNC)) { ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd,"\n Ҹ ãҽϴ!"); + print(ply_ptr->fd,"\n당신의 목소리를 되찾았습니다!"); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PSILNC); } @@ -546,7 +551,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PFEARS)) { if(t > LT(ply_ptr, LT_FEARS)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd,"\n ⸦ ãҽϴ."); + print(ply_ptr->fd,"\n당신은 용기를 되찾았습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PFEARS); } @@ -554,7 +559,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PKNOWA)) { if(t > LT(ply_ptr, LT_KNOWA) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, CYAN); - print(ply_ptr->fd,"\n к Ǿϴ."); + print(ply_ptr->fd,"\n당신의 분별력이 감퇴되었습니다."); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PKNOWA); } @@ -562,16 +567,16 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PLIGHT)) { if(t > LT(ply_ptr, LT_LIGHT) && ply_ptr->class < DM) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ϴ."); + print(ply_ptr->fd, "\n마법의 빛이 사라졌습니다."); broadcast_rom(ply_ptr->fd, ply_ptr->rom_num, - "\n%M ϴ.", ply_ptr); + "\n%M의 마법의 빛이 사라졌습니다.", ply_ptr); ANSI(ply_ptr->fd, WHITE); F_CLR(ply_ptr, PLIGHT); } } if(t > LT(ply_ptr, LT_CHRMD) && F_ISSET(ply_ptr, PCHARM)) { ANSI(ply_ptr->fd, YELLOW); - print(ply_ptr->fd, "\n ൿ Ǿϴ."); + print(ply_ptr->fd, "\n당신의 행동이 정상적으로 되었습니다."); F_CLR(ply_ptr, PCHARM); ANSI(ply_ptr->fd, WHITE); } @@ -609,7 +614,7 @@ creature *ply_ptr; if(F_ISSET(ply_ptr, PPOISN)){ ANSI(ply_ptr->fd, BLINK); ANSI(ply_ptr->fd, RED); - print(ply_ptr->fd, "\n ٷ ϴ."); + print(ply_ptr->fd, "\n독이 당신의 핏줄로 스며듭니다."); ply_ptr->hpcur -= MAX(1,mrand(1,ply_ptr->hpmax/5)-bonus[ply_ptr->constitution]); ply_ptr->lasttime[LT_HEALS].ltime = t; ply_ptr->lasttime[LT_HEALS].interval = 30 - @@ -622,10 +627,10 @@ creature *ply_ptr; if (F_ISSET(ply_ptr, PDISEA)){ ANSI(ply_ptr->fd, BLINK); ANSI(ply_ptr->fd, RED); - print(ply_ptr->fd, "\n մϴ."); + print(ply_ptr->fd, "\n병이 당신의 마음을 잠식합니다."); ply_ptr->lasttime[LT_ATTCK].ltime = time(0); ANSI(ply_ptr->fd, BLUE); - print(ply_ptr->fd, " Ƿ ϴ.\n"); + print(ply_ptr->fd, "몸이 피로해 집니다.\n"); ply_ptr->lasttime[LT_ATTCK].interval= dice(1,6,3); ply_ptr->hpcur -= MAX(1,mrand(1,6)-bonus[ply_ptr->constitution]); ply_ptr->lasttime[LT_HEALS].ltime = t; @@ -642,14 +647,14 @@ creature *ply_ptr; if (F_ISSET(ply_ptr->parent_rom, RPPOIS)) { ANSI(ply_ptr->fd, BLINK); ANSI(ply_ptr->fd, GREEN); - print(ply_ptr->fd, "\n ߵŵϴ."); + print(ply_ptr->fd, "\n독기운이 당신을 중독시킵니다."); ANSI(ply_ptr->fd, WHITE); ANSI(ply_ptr->fd, NORMAL); F_SET(ply_ptr, PPOISN); } if (F_ISSET(ply_ptr->parent_rom, RPBEFU)) { - print(ply_ptr->fd, "\n ۺ ° ϴ.\n ϴ."); + print(ply_ptr->fd, "\n방이 빙글빙글 도는것 감습니다.\n이제 정신을 차립니다."); ply_ptr->lasttime[LT_ATTCK].ltime = time(0); ply_ptr->lasttime[LT_ATTCK].interval= MAX(dice(2,6,0),6); } @@ -657,7 +662,7 @@ creature *ply_ptr; if (F_ISSET(ply_ptr, PPOISN)){ ANSI(ply_ptr->fd, BLINK); ANSI(ply_ptr->fd, RED); - print(ply_ptr->fd, "\n ٷ ϴ."); + print(ply_ptr->fd, "\n독이 당신의 핏줄로 스며듭니다."); ANSI(ply_ptr->fd, NORMAL); ANSI(ply_ptr->fd, WHITE); ply_ptr->hpcur -= MAX(1,mrand(1,4)-bonus[ply_ptr->constitution]); @@ -666,10 +671,10 @@ creature *ply_ptr; if (F_ISSET(ply_ptr, PDISEA)){ ANSI(ply_ptr->fd, BLINK); ANSI(ply_ptr->fd, RED); - print(ply_ptr->fd, "\n մϴ."); + print(ply_ptr->fd, "\n병이 당신의 마음을 잠식합니다."); ply_ptr->lasttime[LT_ATTCK].ltime = time(0); ANSI(ply_ptr->fd, BLUE); - print(ply_ptr->fd, "\n Ű ˴ϴ."); + print(ply_ptr->fd, "\n당신은 신경질적으로 됩니다."); ply_ptr->lasttime[LT_ATTCK].interval= dice(1,6,3); ply_ptr->hpcur -= MAX(1,mrand(1,6)-bonus[ply_ptr->constitution]); ply_ptr->lasttime[LT_HEALS].ltime = t; @@ -690,20 +695,20 @@ creature *ply_ptr; } if (F_ISSET(ply_ptr->parent_rom, RFIRER) && !F_ISSET(ply_ptr,PRFIRE)) { - print(ply_ptr->fd, "\n߰ſ ¿ϴ."); + print(ply_ptr->fd, "\n뜨거운 기운이 당신을 태웁니다."); prot = 0; } else if (F_ISSET(ply_ptr->parent_rom, RWATER) && !F_ISSET(ply_ptr,PBRWAT)) { - print(ply_ptr->fd, "\n 귯ϴ."); + print(ply_ptr->fd, "\n물이 당신의 폐로 흘러듭니다."); prot = 0; } else if (F_ISSET(ply_ptr->parent_rom, REARTH) && !F_ISSET(ply_ptr,PSSHLD)) { - print(ply_ptr->fd, "\n Ĩϴ."); + print(ply_ptr->fd, "\n흙이 무너져 당신을 덮칩니다."); prot = 0; } else if (F_ISSET(ply_ptr->parent_rom, RWINDR) && !F_ISSET(ply_ptr,PRCOLD)) { ANSI(ply_ptr->fd, BLUE); - print(ply_ptr->fd, "\n ӱ ϴ."); + print(ply_ptr->fd, "\n차가운 기운이 뼈속까지 스며듭니다."); ANSI(ply_ptr->fd, WHITE); prot = 0; } @@ -716,7 +721,7 @@ creature *ply_ptr; !F_ISSET(ply_ptr->parent_rom, RPMPDR)) { ANSI(ply_ptr->fd, BOLD); ANSI(ply_ptr->fd, MAGENTA); - print(ply_ptr->fd, "\nʴ ƵԴϴ."); + print(ply_ptr->fd, "\n보이지않는 무엇이 당신의 생명력을 빨아들입니다."); ANSI(ply_ptr->fd, NORMAL); ANSI(ply_ptr->fd, WHITE); prot = 0; @@ -748,10 +753,10 @@ creature *ply_ptr; if(item && item != MAXWEAR+1) { if(ply_ptr->ready[item-1]->type == LIGHTSOURCE) if(--(ply_ptr->ready[item-1]->shotscur) < 1) { - print(ply_ptr->fd, "\n %S%j ϴ.", + print(ply_ptr->fd, "\n당신의 %S%j 꺼졌습니다.", ply_ptr->ready[item-1]->name,"1"); broadcast_rom(ply_ptr->fd, ply_ptr->parent_rom->rom_num, - "\n%M %S%j ϴ.", + "\n%M의 %S%j 꺼졌습니다.", ply_ptr, ply_ptr->ready[item-1]->name,"1"); } @@ -800,7 +805,7 @@ creature *ply_ptr; } } - /* ÷̾ Ÿ */ + /* 기존의 플레이어 데이타 갱신 */ ply_ptr->hpmax = class_stats[ply_ptr->class].hpstart + (class_stats[ply_ptr->class].hp * (ply_ptr->level-1)/2); @@ -950,7 +955,7 @@ creature *ply_ptr; { int titlnum; - /* ڽ Īȣ ְ . ply_titles */ + /* 자신이 칭호 선택할 수 있게 함 . ply_titles에 저장 */ if(ply_titles[ply_ptr->fd]!=NULL) { return (ansi_title(show_ply_ptr,ply_titles[ply_ptr->fd])); } @@ -1361,7 +1366,7 @@ int invis; /**********************************************************************/ /* enemy_ply */ /**********************************************************************/ -/* ̱ ձ Ҽ ڸ ߰ϴ ƾ̴ */ +/* 이기능은 적 왕국의 소속의 사용자를 발견하는 루틴이다 */ creature *enemy_ply(rom_ptr, att_ptr, crt_ptr, invis) room *rom_ptr; @@ -1448,7 +1453,7 @@ creature *ply_ptr; prompt[0] = 0; else if(F_ISSET(ply_ptr, PPROMP)) - sprintf(prompt, "\n\n(%d ü %d ): ", ply_ptr->hpcur, + sprintf(prompt, "\n\n(%d 체력 %d 도력): ", ply_ptr->hpcur, ply_ptr->mpcur); else diff --git a/src/player_path.c b/src/player_path.c new file mode 100644 index 0000000..f536ee9 --- /dev/null +++ b/src/player_path.c @@ -0,0 +1,190 @@ +#include "mstruct.h" +#include "mextern.h" +#include "player_path.h" +#include "utf8_text.h" + +#include +#include + +static unsigned int rol32(unsigned int v, int n) +{ + return (v << n) | (v >> (32 - n)); +} + +static unsigned int load_u32_be(const unsigned char *p) +{ + return ((unsigned int)p[0] << 24) | + ((unsigned int)p[1] << 16) | + ((unsigned int)p[2] << 8) | + (unsigned int)p[3]; +} + +static void store_u32_be(unsigned int v, unsigned char *p) +{ + p[0] = (unsigned char)((v >> 24) & 0xff); + p[1] = (unsigned char)((v >> 16) & 0xff); + p[2] = (unsigned char)((v >> 8) & 0xff); + p[3] = (unsigned char)(v & 0xff); +} + +static void sha1_digest(const unsigned char *data, unsigned long len, unsigned char out[20]) +{ + unsigned int h0, h1, h2, h3, h4; + unsigned char block[128]; + unsigned long total, off; + unsigned int w[80]; + int i; + + h0 = 0x67452301U; + h1 = 0xEFCDAB89U; + h2 = 0x98BADCFEU; + h3 = 0x10325476U; + h4 = 0xC3D2E1F0U; + + total = (len + 9 <= 64) ? 64 : 128; + memset(block, 0, sizeof(block)); + if(len > 0) + memcpy(block, data, len); + block[len] = 0x80; + + { + unsigned int bit_hi; + unsigned int bit_lo; + unsigned long idx; + idx = total - 8; + bit_hi = (unsigned int)(len >> 29); + bit_lo = (unsigned int)(len << 3); + store_u32_be(bit_hi, &block[idx]); + store_u32_be(bit_lo, &block[idx + 4]); + } + + for(off = 0; off < total; off += 64) { + unsigned int a, b, c, d, e, f, k, t, temp; + + for(i = 0; i < 16; i++) + w[i] = load_u32_be(&block[off + (i * 4)]); + for(i = 16; i < 80; i++) + w[i] = rol32(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1); + + a = h0; + b = h1; + c = h2; + d = h3; + e = h4; + + for(i = 0; i < 80; i++) { + if(i < 20) { + f = (b & c) | ((~b) & d); + k = 0x5A827999U; + } else if(i < 40) { + f = b ^ c ^ d; + k = 0x6ED9EBA1U; + } else if(i < 60) { + f = (b & c) | (b & d) | (c & d); + k = 0x8F1BBCDCU; + } else { + f = b ^ c ^ d; + k = 0xCA62C1D6U; + } + + t = (rol32(a, 5) + f + e + k + w[i]) & 0xffffffffU; + e = d; + d = c; + c = rol32(b, 30); + b = a; + a = t; + } + + h0 = (h0 + a) & 0xffffffffU; + h1 = (h1 + b) & 0xffffffffU; + h2 = (h2 + c) & 0xffffffffU; + h3 = (h3 + d) & 0xffffffffU; + h4 = (h4 + e) & 0xffffffffU; + } + + store_u32_be(h0, &out[0]); + store_u32_be(h1, &out[4]); + store_u32_be(h2, &out[8]); + store_u32_be(h3, &out[12]); + store_u32_be(h4, &out[16]); +} + +static void player_shard(const char *name, char out[3]) +{ + static const char hex[] = "0123456789abcdef"; + unsigned char digest[20]; + unsigned char b; + + sha1_digest((const unsigned char *)name, (unsigned long)strlen(name), digest); + b = digest[0]; + out[0] = hex[(b >> 4) & 0x0f]; + out[1] = hex[b & 0x0f]; + out[2] = 0; +} + +int player_path_from_name(const char *name, char *out, unsigned long out_sz) +{ + char shard[3]; + + if(!name || !name[0] || !out || out_sz == 0) + return -1; + + player_shard(name, shard); + snprintf(out, out_sz, "%s/%s/%s", PLAYERPATH, shard, name); + return 0; +} + +int player_path_ensure_dir(const char *name) +{ + char shard[3], dir[256]; + struct stat st; + + if(!name || !name[0]) + return -1; + + player_shard(name, shard); + snprintf(dir, sizeof(dir), "%s/%s", PLAYERPATH, shard); + if(stat(dir, &st) == 0) { + if(S_ISDIR(st.st_mode)) + return 0; + return -1; + } + + if(mkdir(dir, 0770) == 0) + return 0; + + if(stat(dir, &st) == 0 && S_ISDIR(st.st_mode)) + return 0; + + return -1; +} + +int player_name_is_valid(const unsigned char *name, unsigned long min_cp, unsigned long max_cp) +{ + unsigned long i, n, cp_len; + + if(!name || !name[0]) + return 0; + + n = (unsigned long)strlen((const char *)name); + if(!utf8_validate(name, n)) + return 0; + if(n > PLAYER_NAME_MAX_BYTES) + return 0; + + cp_len = utf8_codepoint_len(name); + if(cp_len < min_cp || cp_len > max_cp) + return 0; + + if(strcmp((const char *)name, ".") == 0 || strcmp((const char *)name, "..") == 0) + return 0; + + for(i = 0; i < n; i++) { + if(name[i] < 32 || name[i] == 127) + return 0; + if(name[i] == '/' || name[i] == '\\' || name[i] == ':') + return 0; + } + + return 1; +} diff --git a/src/player_path.h b/src/player_path.h new file mode 100644 index 0000000..fea04ba --- /dev/null +++ b/src/player_path.h @@ -0,0 +1,13 @@ +#ifndef PLAYER_PATH_H +#define PLAYER_PATH_H + +#define PLAYER_NAME_MIN_CODEPOINTS 1UL +#define PLAYER_NAME_MAX_CODEPOINTS 12UL +/* Keep compatibility with legacy fixed-width name buffers (15 incl. NUL). */ +#define PLAYER_NAME_MAX_BYTES 14UL + +int player_path_from_name(const char *name, char *out, unsigned long out_sz); +int player_path_ensure_dir(const char *name); +int player_name_is_valid(const unsigned char *name, unsigned long min_cp, unsigned long max_cp); + +#endif diff --git a/src/post.c b/src/post.c index a51c759..d5dc202 100644 --- a/src/post.c +++ b/src/post.c @@ -30,34 +30,37 @@ creature *ply_ptr; cmd *cmnd; { room *rom_ptr; - char file[80]; + char file[256]; int fd, ff; fd = ply_ptr->fd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RPOSTO)) { - print(fd, " ü ƴմϴ.\n"); + print(fd, "여기는 우체국이 아닙니다.\n"); return(0); } if(cmnd->num < 2) { - print(fd, " ÷?\n"); + print(fd, "누구한테 편지를 보내시려구요?\n"); return(0); } cmnd->str[1][0] = up(cmnd->str[1][0]); - sprintf(file, "%s/%s/%s", PLAYERPATH, first_han(cmnd->str[1]), cmnd->str[1]); + if(player_path_from_name(cmnd->str[1], file, sizeof(file)) < 0) { + print(fd, "그런 사용자는 없습니다.\n"); + return(0); + } ff = open(file, O_RDONLY, 0); if(ff < 0) { - print(fd, "׷ ڴ ϴ.\n"); + print(fd, "그런 사용자는 없습니다.\n"); return(0); } close(ff); - print(fd, " ԷϽʽÿ. ó [.] ġø ⸦ մϴ.\n 80ڸ ѱ ϴ.\n-: "); + print(fd, "편지 내용을 입력하십시요. 문장처음에 [.]을 치시면 편지쓰기를 종료합니다�.\n각 행은 80자를 넘길 수 없습니다.\n-: "); sprintf(Ply[fd].extr->tempstr[0], "%s/%s", POSTPATH, cmnd->str[1]); @@ -90,7 +93,7 @@ char *str; if(str[0]=='.') { F_CLR(Ply[fd].ply, PREADI); - print(fd, " ½ϴ.\n"); + print(fd, "편지를 보냈습니다.\n"); RETURN(fd, command, 1); } @@ -102,7 +105,7 @@ char *str; time(&t); strcpy(datestr, (char *)ctime(&t)); datestr[strlen(datestr)-1] = 0; - sprintf(outstr, "\n---\n%s (%s)ԿԼ :\n\n", + sprintf(outstr, "\n---\n%s (%s)님에게서의 편지:\n\n", Ply[fd].ply->name, datestr); write(ff, outstr, strlen(outstr)); } @@ -141,7 +144,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RPOSTO)) { - print(fd, "̰ ü ƴմϴ.\n"); + print(fd, "이곳은 우체국이 아닙니다.\n"); return(0); } strcpy(file, POSTPATH); @@ -149,7 +152,7 @@ cmd *cmnd; strcat(file, "/"); strcat(file, ply_ptr->name); if(stat(file,&f_stat)){ - print(fd," ϴ.\n"); + print(fd,"받은 편지가 없습니다.\n"); return(0); } else { @@ -180,13 +183,13 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(rom_ptr, RPOSTO)) { - print(fd, "̰ ü ƴմϴ.\n"); + print(fd, "이곳은 우체국이 아닙니다.\n"); return(0); } sprintf(file, "%s/%s", POSTPATH, ply_ptr->name); - print(fd, " Ǿϴ.\n"); + print(fd, "편지가 삭제되었습니다.\n"); unlink(file); @@ -297,7 +300,7 @@ cmd *cmnd; rom_ptr = ply_ptr->parent_rom; if(!F_ISSET(ply_ptr, PFAMIL)) { - print(fd, " аŸ ԵǾ ʽϴ."); + print(fd, "당신은 패거리에 가입되어 있지 않습니다."); return(0); } fnum = ply_ptr->daily[DL_EXPND].max; @@ -313,7 +316,7 @@ cmd *cmnd; if(cmnd->num == 2) { if( low(cmnd->str[1][0]) == 'a'){ strcpy(Ply[fd].extr->tempstr[0],file); - print(fd, "аŸ :\n->"); + print(fd, "패거리 공지:\n->"); F_SET(Ply[fd].ply, PREADI); output_buf(); Ply[fd].io->intrpt &= ~1; @@ -323,15 +326,15 @@ cmd *cmnd; } else if (low(cmnd->str[1][0]) == 'd'){ if(!F_ISSET(ply_ptr, PFMBOS)) { - print(fd, " θ մϴ."); + print(fd, "삭제는 두목만 가능합니다."); return(PROMPT); } unlink(file); - print(fd," ϴ.\n"); + print(fd,"공지 내용을 지웠습니다.\n"); return(PROMPT); } else{ - print(fd,"߸ ɼԴϴ.\n"); + print(fd,"잘못된 옵션입니다.\n"); return(PROMPT); } } @@ -340,7 +343,7 @@ cmd *cmnd; view_file(fd, 1, file); } else { - print(fd, "аŸ ϴ."); + print(fd, "패거리의 공지사항이 없습니다."); } return(DOPROMPT); } @@ -361,14 +364,14 @@ char *str; if(str[0] == '.') { F_CLR(Ply[fd].ply, PREADI); - print(fd, " ϴ.\n"); + print(fd, "공지를 남겼습니다.\n"); RETURN(fd, command, 1); } ff = open(Ply[fd].extr->tempstr[0], O_RDONLY, 0); if(ff < 0){ ff = open(Ply[fd].extr->tempstr[0], O_CREAT | O_RDWR, ACC); - sprintf(tmpstr," %s\n\n","=== аŸ ==="); + sprintf(tmpstr," %s\n\n","=== 패거리 공지 ==="); write(ff, tmpstr,strlen(tmpstr)); } close(ff); @@ -391,4 +394,3 @@ char *str; Ply[fd].io->intrpt &= ~1; RETURN(fd, newsedit, 2); } - diff --git a/src/room.c b/src/room.c index d464434..8726e5c 100644 --- a/src/room.c +++ b/src/room.c @@ -36,7 +36,7 @@ room *rom_ptr; if(!F_ISSET(ply_ptr, PDMINV) && !F_ISSET(ply_ptr, PHIDDN)) { broadcast_rom(ply_ptr->fd, ply_ptr->rom_num, - "\n%M%j Ͽϴ.", ply_ptr,"1"); + "\n%M%j 도착하였습니다.", ply_ptr,"1"); } add_permcrt_rom(rom_ptr); @@ -237,7 +237,7 @@ int num; cg->crt = crt_ptr; cg->next_tag = 0; - sprintf(str, "\n%%%dM%%j Ͽϴ.", num); + sprintf(str, "\n%%%dM%%j 도착하였습니다.", num); if(!F_ISSET(crt_ptr, MINVIS) && !F_ISSET(crt_ptr, MPERMT) && num) broadcast_rom(crt_ptr->fd, crt_ptr->rom_num, str, crt_ptr,"1"); @@ -405,9 +405,9 @@ room *rom_ptr; long t; int i, j, m, n; static char mk_flag[10000]; - /* ؿ ָ ̷ 𸣰.. - ̰Ͷ ʵ ɽϸ м ٶ - ٸƾ ̴° */ + /* 요밑에 애먹음 왜 이런 명령을 만들었나 모르겠음.. + 이것땜에 아이템 리젠이 않됨 심심하면 분석 바람 + 다른루틴에도 쓰이는곳 전혀 없슴 */ /* if(mk_flag[rom_ptr->rom_num]) return; */ mk_flag[rom_ptr->rom_num]=1; @@ -542,9 +542,9 @@ room *rom_ptr; if(!light || F_ISSET(ply_ptr, PBLIND)) { ANSI(fd, RED); - if(F_ISSET(ply_ptr, PBLIND)) print(fd, " ־ ƹ͵ ϴ.\n"); + if(F_ISSET(ply_ptr, PBLIND)) print(fd, "당신은 눈이 멀어 아무것도 볼 수 없습니다.\n"); ANSI(fd, YELLOW); - print(fd, "ʹ ο ϴ.\n"); + print(fd, "너무 어두워서 볼 수가 없습니다.\n"); ANSI(fd, WHITE); return; } @@ -565,7 +565,7 @@ room *rom_ptr; if(!F_ISSET(ply_ptr, PNOEXT)) { n=0; str[0] = 0; - strcat(str, "[ ⱸ : "); + strcat(str, "[ 출구 : "); xp = rom_ptr->first_ext; while(xp) { if(!F_ISSET(xp->ext, XSECRT) && @@ -579,7 +579,7 @@ room *rom_ptr; xp = xp->next_tag; } if(!n) - strcat(str, " ]"); + strcat(str, "없음 ]"); else { str[strlen(str)-2] = 0; strcat(str, " ]"); @@ -597,18 +597,18 @@ room *rom_ptr; !F_ISSET(xp->ext, XNOSEE) && (F_ISSET(ply_ptr, PDINVI) ? 1:!F_ISSET(xp->ext, XINVIS))) { - if(!strcmp(xp->ext->name,"")) + if(!strcmp(xp->ext->name,"동")) exit_grp[1][5]=exit_grp[1][6]='-'; - else if(!strcmp(xp->ext->name,"")) + else if(!strcmp(xp->ext->name,"서")) exit_grp[1][0]=exit_grp[1][1]='-'; - else if(!strcmp(xp->ext->name,"")) + else if(!strcmp(xp->ext->name,"남")) exit_grp[2][3]='|'; - else if(!strcmp(xp->ext->name,"")) + else if(!strcmp(xp->ext->name,"북")) exit_grp[0][3]='|'; - else if(!strcmp(xp->ext->name,"")) - strcpy(exit_grp[0]+5,""); - else if(!strcmp(xp->ext->name,"")) - strcpy(exit_grp[2]+5,""); + else if(!strcmp(xp->ext->name,"위")) + strcpy(exit_grp[0]+5,"위"); + else if(!strcmp(xp->ext->name,"밑")) + strcpy(exit_grp[2]+5,"밑"); else { strcat(str,xp->ext->name); strcat(str, ", "); @@ -620,13 +620,13 @@ room *rom_ptr; } ANSI(fd, GREEN); if(!n2) - print(fd, "[ ⱸ : ]\n"); + print(fd, "[ 출구 : 없음 ]\n"); else { print(fd,"[ %s ]\n",exit_grp[0]); print(fd,"[ %s ]",exit_grp[1]); if(n!=0) { str[strlen(str)-2] = 0; - print(fd," [ ⱸ : %s ]\n",str); + print(fd," [ 출구 : %s ]\n",str); } else print(fd,"\n"); print(fd,"[ %s ]\n",exit_grp[2]); @@ -650,7 +650,7 @@ room *rom_ptr; if(n) { str[strlen(str)-2] = 0; ANSI(fd, CYAN); - print(fd, "%s ֽϴ.\n", str); + print(fd, "%s님이 서 있습니다.\n", str); ANSI(fd, WHITE); } } @@ -662,7 +662,7 @@ room *rom_ptr; !(ply_ptr->class < DM && F_ISSET(cp->crt, PDMINV)) && cp->crt != ply_ptr) { ANSI(fd, CYAN); - print(fd, "%s %s ֽϴ.\n", cp->crt->name, + print(fd, "%s님이 %s서 있습니다.\n", cp->crt->name, cp->crt->description); ANSI(fd, WHITE); } @@ -691,8 +691,8 @@ room *rom_ptr; print(fd,"%s", cp->crt->description); if(F_ISSET(ply_ptr, PKNOWA)) { if(cp->crt->alignment < 0) - print(fd, " ( ä)"); - else print(fd, " (Ǫ ä)"); + print(fd, " (붉은 광채)"); + else print(fd, " (푸른 광채)"); } print(fd, "\n"); /* strcat(str, crt_str(cp->crt, m, 0)); @@ -703,14 +703,14 @@ room *rom_ptr; } /* if(n) { str[strlen(str)-2] = 0; - print(fd, "%S%j ֽϴ.\n", str,"1"); + print(fd, "%S%j 서 있습니다.\n", str,"1"); } */ str[0]=0; n = list_obj(str, ply_ptr, rom_ptr->first_obj); if(n) - print(fd, "%S%j ֽϴ.\n", str, "1"); + print(fd, "%S%j 놓여져 있습니다.\n", str, "1"); cp = rom_ptr->first_mon; while(cp) { @@ -718,9 +718,9 @@ room *rom_ptr; crt_ptr = find_crt(ply_ptr, rom_ptr->first_ply, cp->crt->first_enm->enemy, 1); if(crt_ptr == ply_ptr) - print(fd, "%M%j Ű ο ֽϴ.\n", cp->crt,"1"); + print(fd, "%M%j 당신과 싸우고 있습니다.\n", cp->crt,"1"); else if(crt_ptr) - print(fd, "%M%j %M%j ο ֽϴ.\n", cp->crt,"1", + print(fd, "%M%j %M%j 싸우고 있습니다.\n", cp->crt,"1", crt_ptr,"2"); } cp = cp->next_tag; @@ -824,14 +824,14 @@ room *rom_ptr; switch (rom_ptr->trap){ case TRAP_PIT: if(!F_ISSET(ply_ptr, PLEVIT)){ - print(fd, " ̿ ϴ!\n"); + print(fd, "당신은 구덩이에 빠졌습니다!\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ̿ ϴ!", ply_ptr); + "\n%M이 구덩이에 빠졌습니다!", ply_ptr); del_ply_rom(ply_ptr, rom_ptr); load_rom(rom_ptr->trapexit, &new_rom); add_ply_rom(ply_ptr, new_rom); dmg = mrand(1,15); - print(fd, " %d ظ Ծϴ.\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다.\n", dmg); ply_ptr->hpcur -= dmg; if(ply_ptr->hpcur < 1) die(ply_ptr, ply_ptr); @@ -839,11 +839,11 @@ room *rom_ptr; break; case TRAP_DART: - print(fd, " ȭ쿡 ¾ҽϴ!\n"); + print(fd, "당신은 숨겨진 독화살에 맞았습니다!\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ȭ쿡 ¾ҽϴ.", ply_ptr); + "\n%M이 숨겨진 독화살에 맞았습니다.", ply_ptr); dmg = mrand(1,10); - print(fd, " %d ظ Ծϴ.\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다.\n", dmg); F_SET(ply_ptr, PPOISN); ply_ptr->hpcur -= dmg; if(ply_ptr->hpcur < 1) @@ -851,35 +851,35 @@ room *rom_ptr; break; case TRAP_BLOCK: - print(fd, " Ŀٶ ¾ҽϴ!\n"); + print(fd, "당신은 커다란 돌에 맞았습니다!\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M Ŀٶ ϴ.", ply_ptr); + "\n%M 위로 커다란 돌이 떨어졌습니다.", ply_ptr); dmg = ply_ptr->hpmax / 3; /* dmg = ply_ptr->hpmax / 2; */ - print(fd, " %d ظ Ծϴ.\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다.\n", dmg); ply_ptr->hpcur -= dmg; if(ply_ptr->hpcur < 1) die(ply_ptr, ply_ptr); break; case TRAP_MPDAM: - print(fd, " ޾ҽϴ!\n"); + print(fd, "당신의 마음이 충격을 받았습니다!\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M ޾ҽϴ.", ply_ptr); + "\n%M이 강한 충격을 받았습니다.", ply_ptr); dmg = MIN(ply_ptr->mpcur,ply_ptr->mpmax / 2); - print(fd, " %d Ҿϴ.\n", dmg); + print(fd, "당신은 %d점의 마력을 잃었습니다.\n", dmg); ply_ptr->mpcur -= dmg; dmg = mrand(1,6); ply_ptr->hpcur -= dmg; - print(fd, " %d ظ Ծϴ.\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다.\n", dmg); if(ply_ptr->hpcur < 1) die(ply_ptr, ply_ptr); break; case TRAP_RMSPL: - print(fd, "ο Դϴ.\n"); - print(fd, " ֹ ϴ.\n"); + print(fd, "어두운 기운이 당신을 감쌉니다.\n"); + print(fd, "당신의 주문이 사라집니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\nο %M Դϴ.", ply_ptr); + "\n어두운 기운이 %M을 감쌉니다.", ply_ptr); ply_ptr->lasttime[LT_PROTE].interval = ply_ptr->lasttime[LT_BLESS].interval = @@ -896,18 +896,18 @@ room *rom_ptr; break; case TRAP_NAKED: - print(fd, " ü ϴ.\n"); - print(fd, "!!! ƹϴ.\n"); + print(fd, "붉은 액체가 당신위로 쏟아집니다.\n"); + print(fd, "으악!!! 당신의 장비가 녹아버립니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n ü %m ϴ.", ply_ptr); + "\n붉은 액체가 %m님위로 쏟아집니다.", ply_ptr); lose_all(ply_ptr); break; case TRAP_ALARM: - print(fd, "溸ġ ︳ϴ!\n"); - print(fd, "ó ٶϴ.\n"); + print(fd, "경보장치가 울립니다!\n"); + print(fd, "근처에 경비원들이 없길 바랍니다.\n"); broadcast_rom(fd, ply_ptr->rom_num, - "\n%M 溸ġ ǵȽϴ!\n", ply_ptr); + "\n%M이 경보장치를 건드렸습니다!\n", ply_ptr); load_rom(rom_ptr->trapexit, &new_rom); add_permcrt_rom(new_rom); cp = new_rom->first_mon; @@ -917,7 +917,7 @@ room *rom_ptr; if(F_ISSET(tmp_crt, MPERMT)){ if(new_rom->first_ply) broadcast_rom(tmp_crt->fd, tmp_crt->rom_num, - "\n%M%j 溸 Ϸ ϴ.",tmp_crt,"1"); + "\n%M%j 경보를 듣고 조사하러 갑니다.",tmp_crt,"1"); else add_active(tmp_crt); F_CLR(tmp_crt,MPERMT); @@ -926,7 +926,7 @@ room *rom_ptr; del_crt_rom(tmp_crt, new_rom); add_crt_rom(tmp_crt, rom_ptr, 1); broadcast_rom(tmp_crt->fd, tmp_crt->rom_num, - "%M%j 溸 Ϸ Խϴ.", tmp_crt,"1"); + "%M%j 경보를 듣고 조사하러 왔습니다.", tmp_crt,"1"); } } break; diff --git a/src/s.c b/src/s.c index 07a1597..2d01375 100644 --- a/src/s.c +++ b/src/s.c @@ -1,4 +1,4 @@ -/* Ҷ °ſ.. */ +/* 서비스 중지할때 쓰는거예요.. */ #include @@ -26,19 +26,19 @@ main() while(1) { new_sockfd=accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); bzero(buffer, 80); - strcpy(buffer, "\n- -\n\n"); + strcpy(buffer, "\n- 무 한 대 전 -\n\n"); write(new_sockfd, buffer, strlen(buffer)); bzero(buffer, 80); - strcpy(buffer, "ȣƮ ü/ 񽺰 ˴ϴ.\n"); + strcpy(buffer, "호스트 교체/정비 관계로 잠시 서비스가 중지됩니다.\n"); write(new_sockfd, buffer, strlen(buffer)); bzero(buffer, 80); - strcpy(buffer, " ˼մϴ.\n"); + strcpy(buffer, "불편을 드려 죄송합니다.\n"); write(new_sockfd, buffer, strlen(buffer)); bzero(buffer, 80); - strcpy(buffer, "Ư Ͻ ø ׷ͱ BBS ӵԽǿ ֽʽÿ.\n"); + strcpy(buffer, "특별히 전하실 내용이 있으시면 그루터기 BBS 의 머드게시판에 써 주십시오.\n"); write(new_sockfd, buffer, strlen(buffer)); bzero(buffer, 80); - strcpy(buffer, "׷ͱ BBS : ksb.kumoh.ac.kr login:bbs\n\n"); + strcpy(buffer, "그루터기 BBS : ksb.kumoh.ac.kr login:bbs\n\n"); write(new_sockfd, buffer, strlen(buffer)); close(new_sockfd); } diff --git a/src/sp.c b/src/sp.c index 7b95df9..14f8799 100644 --- a/src/sp.c +++ b/src/sp.c @@ -59,7 +59,7 @@ int special; } if(!obj_ptr) { - print(fd, "װ ϴ.\n"); + print(fd, "그같은 물건이 없습니다.\n"); return(-1); } @@ -76,9 +76,9 @@ int special; return(DOPROMPT); case SP_COMBO: return(combo_box(ply_ptr, obj_ptr)); - /* ƾ θ */ + /* 선전포고 루틴 부름 */ default: - print(fd, "ƹ͵ ϴ.\n"); + print(fd, "아무것도 없습니다.\n"); } return(0); @@ -101,18 +101,18 @@ cmd *cmnd; case SP_MAPSC: case SP_COMBO: if(cmnd->num < 2) { - print(fd, " ϱ?\n"); + print(fd, "무얼 누릅니까?\n"); return(0); } n = special_obj(ply_ptr, cmnd, special); if(n == -1) return(0); if(n == -2) { - print(fd, " Ϸ ϴµ?.\n"); + print(fd, "무얼 하려고 하는데요?.\n"); return(0); } else return(n); default: - print(ply_ptr->fd, "ƹ ϵ Ͼ ʽϴ.\n"); + print(ply_ptr->fd, "아무런 일도 일어나지 않습니다.\n"); return(0); } } @@ -141,19 +141,19 @@ object *obj_ptr; strcat(Ply[fd].extr->tempstr[3], str); print(fd, "Click.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M %i ϴ.", ply_ptr, obj_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 %i를 눌렀습니다.", ply_ptr, obj_ptr); if(strlen(Ply[fd].extr->tempstr[3]) >= strlen(obj_ptr->use_output)) { if(strcmp(Ply[fd].extr->tempstr[3], obj_ptr->use_output)) { dmg = mrand(20,40); ply_ptr->hpcur -= dmg; - print(fd, " %d ظ Ծϴ!\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다!\n", dmg); broadcast_rom(fd, ply_ptr->rom_num, - "%M %iκ ظ Ծϴ!", ply_ptr, obj_ptr); + "%M이 %i로부터 피해를 입었습니다!", ply_ptr, obj_ptr); Ply[fd].extr->tempstr[3][0] = 0; if(ply_ptr->hpcur < 1) { - print(fd, " ׾ϴ.\n"); + print(fd, "당신은 죽었습니다.\n"); die(ply_ptr, ply_ptr); } } @@ -163,9 +163,9 @@ object *obj_ptr; xp && i < obj_ptr->pdice; i++, xp = xp->next_tag) ; if(!xp) return(0); - print(fd, " %s ϴ!\n", xp->ext->name); + print(fd, "당신은 %s를 열었습니다!\n", xp->ext->name); broadcast_rom(fd, ply_ptr->rom_num, - "%M %s ϴ!", ply_ptr, xp->ext->name); + "%M이 %s를 열었습니다!", ply_ptr, xp->ext->name); F_CLR(xp->ext, XLOCKD); F_CLR(xp->ext, XCLOSD); xp->ext->ltime.ltime = time(0); @@ -190,11 +190,11 @@ cmd *cmnd; fnum = ply_ptr->daily[DL_EXPND].max; if(!F_ISSET(ply_ptr,PFMBOS) || fnum == 0) { - print(fd, " Ǹ ϴ.\n"); + print(fd, "당신은 선전 포고할 권리가 없습니다.\n"); return(0); } if(cmnd->num != 2) { - print(fd, " аŸ Ͻ÷?"); + print(fd, "어느 패거리와 전쟁을 하시려고요?"); return(0); } @@ -202,7 +202,7 @@ cmd *cmnd; if(!strcmp(cmnd->str[1], family_str[num])) { crt_ptr = find_who(fmboss_str[num]); if(!crt_ptr) { - print(fd, " θ %s ̿ ƴմϴ.", fmboss_str[num]); + print(fd, "상대편의 두목인 %s님이 이용중이 아닙니다.", fmboss_str[num]); return(0); } break; @@ -210,47 +210,47 @@ cmd *cmnd; fal++; } if(fal >= 15) { - print(fd, "׷ аŸ ϴ."); + print(fd, "그런 패거리는 없습니다."); return(0); } if(fnum == num) { - print(fd, "ڱ ڽŵ ο÷?"); + print(fd, "자기 자신들과 싸우시려고요?"); return(0); } if(!AT_WAR) { if(!CALLWAR2) { - broadcast_all("\n### %s аŸ %s մϴ.\n\n", + broadcast_all("\n### %s 패거리가 %s에게 선전포고를 합니다.\n\n", family_str[fnum], family_str[num]); CALLWAR1 = fnum; CALLWAR2 = num; return(0); } if(CALLWAR1 == fnum) { - broadcast("\n### %s аŸ մϴ.\n", family_str[fnum]); + broadcast("\n### %s 패거리에서 선전포고를 취소합니다.\n", family_str[fnum]); CALLWAR1 = CALLWAR2 = 0; return(0); } if(CALLWAR2 == fnum) { if(CALLWAR1 != num) { - print(fd, "ٸ аŸ ûصΰ ֽϴ."); + print(fd, "다른 패거리에서 전쟁을 신청해두고 있습니다."); return(0); } else { - broadcast("\n### %s аŸ ޾Ƶ鿴ϴ.\n", + broadcast("\n### %s 패거리에서 선전포고를 받아들였습니다.\n", family_str[fnum], family_str[num]); AT_WAR = (fnum*16) + num; return(0); } } else { - print(fd, "ٸ аŸ غԴϴ."); + print(fd, "다른 패거리에서 먼저 전쟁을 준비중입니다."); return(0); } } else - print(fd, " Դϴ.\n"); + print(fd, "벌써 전쟁중입니다.\n"); return(0); } @@ -311,44 +311,44 @@ object *obj_ptr; int haha; if(obj_ptr->armor > 50) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->armor); - else log_dm("!! ?????? : %s : %d\n", obj_ptr->name, obj_ptr->armor); + log_dm("나쁜!! %s : %s 방어력 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->armor); + else log_dm("나쁜!! ?????? : %s 방어력 : %d\n", obj_ptr->name, obj_ptr->armor); return 1; } if((haha=obj_ptr->ndice*obj_ptr->sdice+obj_ptr->pdice) > 100) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s ݷ : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, haha); - else log_dm("!! ?????? : %s ݷ : %d\n", obj_ptr->name, haha); + log_dm("나쁜!! %s : %s 공격력 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, haha); + else log_dm("나쁜!! ?????? : %s 공격력 : %d\n", obj_ptr->name, haha); return 1; } if(F_ISSET(obj_ptr, OCONTN) && (obj_ptr->shotsmax > 20)) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); - else log_dm("!! ?????? : %s : %d\n", obj_ptr->name, obj_ptr->shotsmax); + log_dm("나쁜!! %s : %s 보따리 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + else log_dm("나쁜!! ?????? : %s 보따리 : %d\n", obj_ptr->name, obj_ptr->shotsmax); return 1; } if(F_ISSET(obj_ptr, OSPECI) && (obj_ptr->pdice == 4)) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s ̻ : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->pdice); - else log_dm("!! ?????? : %s ̻ : %d\n", obj_ptr->name, obj_ptr->pdice); + log_dm("나쁜!! %s : %s 이상해 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->pdice); + else log_dm("나쁜!! ?????? : %s 이상해 : %d\n", obj_ptr->name, obj_ptr->pdice); return 1; } if((obj_ptr->type == POTION) && (obj_ptr->shotscur > 50)) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s ȸ : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); - else log_dm("!! ?????? : %s ȸ : %d\n", obj_ptr->name, obj_ptr->shotscur); + log_dm("나쁜!! %s : %s 사용회수 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + else log_dm("나쁜!! ?????? : %s 사용회수 : %d\n", obj_ptr->name, obj_ptr->shotscur); return 1; } if(obj_ptr->shotscur >= 1000) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s ȸ : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); - else log_dm("!! ?????? : %s ȸ : %d\n", obj_ptr->name, obj_ptr->shotscur); + log_dm("나쁜!! %s : %s 사용회수 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + else log_dm("나쁜!! ?????? : %s 사용회수 : %d\n", obj_ptr->name, obj_ptr->shotscur); return 1; } if(obj_ptr->shotsmax >= 1000) { if(obj_ptr->parent_crt) - log_dm("!! %s : %s ִȸ : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); - else log_dm("!! ?????? : %s ִȸ : %d\n", obj_ptr->name, obj_ptr->shotsmax); + log_dm("나쁜!! %s : %s 최대회수 : %d\n", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + else log_dm("나쁜!! ?????? : %s 최대회수 : %d\n", obj_ptr->name, obj_ptr->shotsmax); return 1; } return 0; diff --git a/src/special1.c b/src/special1.c index 01a6152..624f044 100644 --- a/src/special1.c +++ b/src/special1.c @@ -59,7 +59,7 @@ int special; } if(!obj_ptr) { - print(fd, "װ ϴ.\n"); + print(fd, "그같은 물건이 없습니다.\n"); return(-1); } @@ -76,9 +76,9 @@ int special; return(DOPROMPT); case SP_COMBO: return(combo_box(ply_ptr, obj_ptr)); - /* ƾ θ */ + /* 선전포고 루틴 부름 */ default: - print(fd, "ƹ͵ ϴ.\n"); + print(fd, "아무것도 없습니다.\n"); } return(0); @@ -101,18 +101,18 @@ cmd *cmnd; case SP_MAPSC: case SP_COMBO: if(cmnd->num < 2) { - print(fd, " ϱ?\n"); + print(fd, "무얼 누릅니까?\n"); return(0); } n = special_obj(ply_ptr, cmnd, special); if(n == -1) return(0); if(n == -2) { - print(fd, " Ϸ ϴµ?.\n"); + print(fd, "무얼 하려고 하는데요?.\n"); return(0); } else return(n); default: - print(ply_ptr->fd, "ƹ ϵ Ͼ ʽϴ.\n"); + print(ply_ptr->fd, "아무런 일도 일어나지 않습니다.\n"); return(0); } } @@ -141,19 +141,19 @@ object *obj_ptr; strcat(Ply[fd].extr->tempstr[3], str); print(fd, "Click.\n"); - broadcast_rom(fd, ply_ptr->rom_num, "%M %i ϴ.", ply_ptr, obj_ptr); + broadcast_rom(fd, ply_ptr->rom_num, "%M이 %i를 눌렀습니다.", ply_ptr, obj_ptr); if(strlen(Ply[fd].extr->tempstr[3]) >= strlen(obj_ptr->use_output)) { if(strcmp(Ply[fd].extr->tempstr[3], obj_ptr->use_output)) { dmg = mrand(20,40); ply_ptr->hpcur -= dmg; - print(fd, " %d ظ Ծϴ!\n", dmg); + print(fd, "당신은 %d점의 피해를 입었습니다!\n", dmg); broadcast_rom(fd, ply_ptr->rom_num, - "%M %iκ ظ Ծϴ!", ply_ptr, obj_ptr); + "%M이 %i로부터 피해를 입었습니다!", ply_ptr, obj_ptr); Ply[fd].extr->tempstr[3][0] = 0; if(ply_ptr->hpcur < 1) { - print(fd, " ׾ϴ.\n"); + print(fd, "당신은 죽었습니다.\n"); die(ply_ptr, ply_ptr); } } @@ -163,9 +163,9 @@ object *obj_ptr; xp && i < obj_ptr->pdice; i++, xp = xp->next_tag) ; if(!xp) return(0); - print(fd, " %s ϴ!\n", xp->ext->name); + print(fd, "당신은 %s를 열었습니다!\n", xp->ext->name); broadcast_rom(fd, ply_ptr->rom_num, - "%M %s ϴ!", ply_ptr, xp->ext->name); + "%M이 %s를 열었습니다!", ply_ptr, xp->ext->name); F_CLR(xp->ext, XLOCKD); F_CLR(xp->ext, XCLOSD); xp->ext->ltime.ltime = time(0); @@ -190,11 +190,11 @@ cmd *cmnd; fnum = ply_ptr->daily[DL_EXPND].max; if(!F_ISSET(ply_ptr,PFMBOS) || fnum == 0) { - print(fd, " Ǹ ϴ.\n"); + print(fd, "당신은 선전 포고할 권리가 없습니다.\n"); return(0); } if(cmnd->num != 2) { - print(fd, " аŸ Ͻ÷?"); + print(fd, "어느 패거리와 전쟁을 하시려고요?"); return(0); } @@ -202,7 +202,7 @@ cmd *cmnd; if(!strcmp(cmnd->str[1], family_str[num])) { crt_ptr = find_who(fmboss_str[num]); if(!crt_ptr) { - print(fd, " θ %s ̿ ƴմϴ.", fmboss_str[num]); + print(fd, "상대편의 두목인 %s님이 이용중이 아닙니다.", fmboss_str[num]); return(0); } break; @@ -210,47 +210,47 @@ cmd *cmnd; fal++; } if(fal >= 15) { - print(fd, "׷ аŸ ϴ."); + print(fd, "그런 패거리는 없습니다."); return(0); } if(fnum == num) { - print(fd, "ڱ ڽŵ ο÷?"); + print(fd, "자기 자신들과 싸우시려고요?"); return(0); } if(!AT_WAR) { if(!CALLWAR2) { - broadcast_all("\n### %s аŸ %s մϴ.\n\n", + broadcast_all("\n### %s 패거리가 %s에게 선전포고를 합니다.\n\n", family_str[fnum], family_str[num]); CALLWAR1 = fnum; CALLWAR2 = num; return(0); } if(CALLWAR1 == fnum) { - broadcast("\n### %s аŸ մϴ.\n", family_str[fnum]); + broadcast("\n### %s 패거리에서 선전포고를 취소합니다.\n", family_str[fnum]); CALLWAR1 = CALLWAR2 = 0; return(0); } if(CALLWAR2 == fnum) { if(CALLWAR1 != num) { - print(fd, "ٸ аŸ ûصΰ ֽϴ."); + print(fd, "다른 패거리에서 전쟁을 신청해두고 있습니다."); return(0); } else { - broadcast("\n### %s аŸ ޾Ƶ鿴ϴ.\n", + broadcast("\n### %s 패거리에서 선전포고를 받아들였습니다.\n", family_str[fnum], family_str[num]); AT_WAR = (fnum*16) + num; return(0); } } else { - print(fd, "ٸ аŸ غԴϴ."); + print(fd, "다른 패거리에서 먼저 전쟁을 준비중입니다."); return(0); } } else - print(fd, " Դϴ.\n"); + print(fd, "벌써 전쟁중입니다.\n"); return(0); } @@ -269,7 +269,7 @@ creature *ply_ptr; if(!ply_ptr->ready[i]) continue; if(is_bad_item(ply_ptr->ready[i])) { if(ply_ptr->ready[i]->shotsmax > 4999) { - log_pl(" %s %s : ֹȾ.!\n", ply_ptr->name, ply_ptr->ready[i]->name); + log_pl("나쁜 %s의 %s : 없애버렸어요.!\n", ply_ptr->name, ply_ptr->ready[i]->name); free_obj(ply_ptr->ready[i]); ply_ptr->ready[i]=NULL; save_ply(ply_ptr->name, ply_ptr); @@ -285,7 +285,7 @@ creature *ply_ptr; if(F_ISSET(obj_tag->obj, OCONTN)) check_contain(obj_tag->obj); if(is_bad_item(obj_tag->obj)) { if(obj_tag->obj->shotsmax > 4999) { - log_pl(" %s %s : ֹȾ.!\n", ply_ptr->name, obj_tag->obj->name); + log_pl("나쁜 %s의 %s : 없애버렸어요.!\n", ply_ptr->name, obj_tag->obj->name); obj_haha=obj_tag->obj; del_obj_crt(obj_haha, ply_ptr); free_obj(obj_haha); @@ -305,7 +305,7 @@ creature *ply_ptr; tes++; if(tes>200) break; if(!op->obj->parent_crt) op->obj->parent_crt=ply_ptr; - if(is_bad_item(op->obj)) log_pl(" "); + if(is_bad_item(op->obj)) log_pl("의 은행"); op=op->next_tag; } free_obj(cnt_ptr); @@ -331,7 +331,7 @@ object *obj_ptr; obj_next=obj_tag->next_tag; if(is_bad_item(obj_tag->obj)) { if(obj_tag->obj->shotsmax > 4999) { - log_pl(" %s %s : ֹȾ.!\n", obj_ptr->parent_crt->name, obj_tag->obj->name); + log_pl("나쁜 %s의 %s : 없애버렸어요.!\n", obj_ptr->parent_crt->name, obj_tag->obj->name); obj_haha=obj_tag->obj; del_obj_obj(obj_haha, obj_ptr); free_obj(obj_haha); @@ -345,52 +345,52 @@ int is_bad_item(obj_ptr) object *obj_ptr; { int haha; - if(strncmp(obj_ptr->name, "콺", 6) == 0) { + if(strncmp(obj_ptr->name, "제우스", 6) == 0) { if(obj_ptr->parent_crt) - log_pl("\n콺 %s : %s K[%s]", obj_ptr->name, obj_ptr->parent_crt->name, obj_ptr->key[2]); - else log_pl("\n콺 %s : %s K[%s]", obj_ptr->name, obj_ptr->parent_obj->parent_crt->name, obj_ptr->key[2]); + log_pl("\n제우스 %s : %s K[%s]", obj_ptr->name, obj_ptr->parent_crt->name, obj_ptr->key[2]); + else log_pl("\n제우스 %s : %s K[%s]", obj_ptr->name, obj_ptr->parent_obj->parent_crt->name, obj_ptr->key[2]); return 1; } if(obj_ptr->armor > 50) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->armor); - else log_pl("\n!! %s : %s : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->armor); + log_pl("\n나쁜!! %s : %s 방어력 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->armor); + else log_pl("\n나쁜!! %s : %s 방어력 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->armor); return 1; } if((haha=obj_ptr->ndice*obj_ptr->sdice+obj_ptr->pdice) > 100) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s ݷ : %d", obj_ptr->parent_crt->name, obj_ptr->name, haha); - else log_pl("\n!! %s : %s ݷ : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, haha); + log_pl("\n나쁜!! %s : %s 공격력 : %d", obj_ptr->parent_crt->name, obj_ptr->name, haha); + else log_pl("\n나쁜!! %s : %s 공격력 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, haha); return 1; } if(F_ISSET(obj_ptr, OCONTN) && (obj_ptr->shotsmax > 20)) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); - else log_pl("\n!! %s : %s : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + log_pl("\n나쁜!! %s : %s 보따리 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + else log_pl("\n나쁜!! %s : %s 보따리 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); return 1; } if(F_ISSET(obj_ptr, OSPECI) && (obj_ptr->pdice == 4)) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s ̻ : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->pdice); - else log_pl("\n!! %s : %s ̻ : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->pdice); + log_pl("\n나쁜!! %s : %s 이상해 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->pdice); + else log_pl("\n나쁜!! %s : %s 이상해 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->pdice); return 1; } if((obj_ptr->type == POTION) && (obj_ptr->shotscur > 500)) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s ȸ : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); - else log_pl("\n!! %s : %s ȸ : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + log_pl("\n나쁜!! %s : %s 사용회수 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + else log_pl("\n나쁜!! %s : %s 사용회수 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); return 1; } if(obj_ptr->shotscur > 1000) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s ȸ : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); - else log_pl("\n!! %s : %s ȸ : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + log_pl("\n나쁜!! %s : %s 사용회수 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); + else log_pl("\n나쁜!! %s : %s 사용회수 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotscur); return 1; } if(obj_ptr->shotsmax > 1000) { if(obj_ptr->parent_crt) - log_pl("\n!! %s : %s ִȸ : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); - else log_pl("\n!! %s : %s ִȸ : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + log_pl("\n나쁜!! %s : %s 최대회수 : %d", obj_ptr->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); + else log_pl("\n나쁜!! %s : %s 최대회수 : %d", obj_ptr->parent_obj->parent_crt->name, obj_ptr->name, obj_ptr->shotsmax); return 1; } return 0; diff --git a/src/update.c b/src/update.c index 54cf6c2..b44d4ae 100644 --- a/src/update.c +++ b/src/update.c @@ -92,7 +92,7 @@ long t; if(!Ply[i].io) continue; if(Ply[i].ply && Ply[i].ply->class == DM) continue; if(t - Ply[i].io->ltime > 300 && Ply[i].io->fn != waiting) { - write(i, "\r\nԷ¾ 5̻ ϸ ϴ.\r\n", 48); + write(i, "\r\n입력없이 5분이상 유지하면 접속이 끊어집니다.\r\n", 48); disconnect(i); continue; } @@ -199,7 +199,7 @@ long t; /************************************************************************/ -/* _ ġ */ +/* 도망_끝 버그 패치 */ /************************************************************************/ void clear_enm_crt(ply_ptr) creature *ply_ptr; @@ -302,7 +302,7 @@ long t; add_obj_crt(obj_ptr, crt_ptr); F_SET(crt_ptr, MHASSC); broadcast_rom(-1, crt_ptr->rom_num, - "%M%j %1i%j ݽϴ.", + "%M%j %1i%j 줍습니다.", crt_ptr, "1",obj_ptr,"3"); } if(t-i > 20) @@ -315,7 +315,7 @@ long t; && mrand(1,100) <= crt_ptr->parent_rom->traffic && !crt_ptr->first_enm) { broadcast_rom(-1, crt_ptr->rom_num, - "%1M%j Ȳϰ ֽϴ.", + "%1M%j 당신 주위를 방황하고 있습니다.", crt_ptr,"1"); del_crt_rom(crt_ptr, rom_ptr); del_active(crt_ptr); @@ -387,25 +387,25 @@ long t; if(F_ISSET(crt_ptr, MBRETH) && mrand(1,30)<5) if (F_ISSET(crt_ptr, MBRWP1) && !F_ISSET(crt_ptr, MBRWP2)) { - print(fd, "\n%M%j ſ ơ! ħ ϴ!", crt_ptr,"1"); + print(fd, "\n%M%j 당신에게 퉤! 침을 뱉습니다!", crt_ptr,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j %M ơ! ħ ϴ!", crt_ptr, "1",att_ptr); + "\n%M%j %M에게 퉤! 침을 뱉습니다!", crt_ptr, "1",att_ptr); n = dice(((crt_ptr->level+3)/4), 3, 0); } else if (F_ISSET(crt_ptr, MBRWP1) && F_ISSET(crt_ptr, MBRWP2)) { - print(fd, "\n%M%j ſ Ա վϴ!", crt_ptr,"1"); + print(fd, "\n%M%j 당신에게 고약한 냄새가 나는 입김을 뿜어댑니다!", crt_ptr,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j %M Ա վϴ!", crt_ptr, "1",att_ptr); + "\n%M%j %M에게 고약한 냄새가 나는 입김을 뿜어댑니다!", crt_ptr, "1",att_ptr); n = dice(((crt_ptr->level+3)/4), 2, 1); - print(fd, "\n%M%j ߵ׽ϴ.", crt_ptr,"1"); + print(fd, "\n%M%j 당신을 중독시켰습니다.", crt_ptr,"1"); F_SET(att_ptr, PPOISN); } else if (!F_ISSET(crt_ptr, MBRWP1) && F_ISSET(crt_ptr, MBRWP2)) { - print(fd, "\n%M%j ſ ñ⸦ սϴ!", crt_ptr,"1"); + print(fd, "\n%M%j 당신에게 냉기를 내뿜습니다!", crt_ptr,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j %M ñ⸦ սϴ!", crt_ptr, "1",att_ptr); + "\n%M%j %M에게 냉기를 내뿜습니다!", crt_ptr, "1",att_ptr); if(F_ISSET(att_ptr, PRCOLD)) n = dice(((crt_ptr->level+3)/4), 2, 0); else @@ -413,9 +413,9 @@ if(F_ISSET(crt_ptr, MBRETH) && mrand(1,30)<5) } else{ - print(fd, "\n%M%j ſ սϴ!", crt_ptr,"1"); + print(fd, "\n%M%j 당신에게 불을 뿜습니다!", crt_ptr,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j %M սϴ!", crt_ptr,"1", att_ptr); + "\n%M%j %M에게 불을 뿜습니다!", crt_ptr,"1", att_ptr); if(F_ISSET(att_ptr, PRFIRE)) n = dice(((crt_ptr->level+3)/4), 2, 0); else @@ -427,12 +427,12 @@ else { n = dice(((crt_ptr->level+3)/4), 5, (((crt_ptr->level+3)/4))*5); n = MAX(0,MIN(n,att_ptr->experience)); - print(fd, "\n%M%j ġ ƸԽϴ!", crt_ptr,"1"); + print(fd, "\n%M%j 당신의 경험치를 갉아먹습니다!", crt_ptr,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j %M ġ ƸԽϴ!", crt_ptr, "1",att_ptr); + "\n%M%j %M의 경험치를 갉아먹습니다!", crt_ptr, "1",att_ptr); att_ptr->experience -= n; lower_prof(att_ptr,n); - print(fd, "\n%M%j ġ %d پϴ.",crt_ptr,"1",n); + print(fd, "\n%M%j 당신의 경험치 %d 를 줄었습니다.",crt_ptr,"1",n); } @@ -441,25 +441,25 @@ if(n<1) n = 1; } if(F_ISSET(crt_ptr, MBEFUD)) { n = n/3; - print(fd, "\n%M%j ȥմϴ.",crt_ptr, "1"); + print(fd, "\n%M%j 혼비백산합니다.",crt_ptr, "1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M%j ȥմϴ.",crt_ptr, "1"); + "\n%M%j 혼비백산합니다.",crt_ptr, "1"); } att_ptr->hpcur -= n; - print(fd, "\n%M%j ſ %dŭ ó ϴ.", + print(fd, "\n%M%j 당신에게 %d만큼의 상처를 입혔습니다.", crt_ptr, "1", n); - broadcast_rom(fd, att_ptr->rom_num, "\n%M%j %M%j %dŭ ظ ϴ.",crt_ptr,"1",att_ptr,"3",n); + broadcast_rom(fd, att_ptr->rom_num, "\n%M%j %M%j %d만큼의 피해를 입힙니다.",crt_ptr,"1",att_ptr,"3",n); if(F_ISSET(crt_ptr, MPOISS) && mrand(1,100) <= 15) { - print(fd, "\n%M%j ߵ׽ϴ.", + print(fd, "\n%M%j 당신을 중독시켰습니다.", crt_ptr,"1"); F_SET(att_ptr, PPOISN); } if(F_ISSET(crt_ptr, MDISEA) && mrand(1,100) <= 10) { - print(fd, "\n%M%j ſ ׽ϴ.", + print(fd, "\n%M%j 당신에게 감염시켰습니다.", crt_ptr,"1"); F_SET(att_ptr, PDISEA); } @@ -467,7 +467,7 @@ if(n<1) n = 1; if(F_ISSET(crt_ptr, MBLNDR) && mrand(1,100) <= 10) { - print(fd, "\n%M%j Ǹ׽ϴ.", + print(fd, "\n%M%j 당신을 실명시켰습니다.", crt_ptr,"1"); F_SET(att_ptr, PBLIND); } @@ -485,11 +485,11 @@ if(n<1) n = 1; if(n) { if(--att_ptr->ready[n-1]->shotscur<1) { print(fd, - "\n%S%j μ Ƚϴ.", + "\n%S%j 산산히 부서져 버렸습니다.", att_ptr->ready[n-1]->name,"1"); broadcast_rom(fd, att_ptr->rom_num, - "\n%M %S%j μ Ƚϴ.", + "\n%M의 %S%j 산산히 부서져 버렸습니다.", att_ptr, att_ptr->ready[n-1]->name,"1"); add_obj_crt(att_ptr->ready[n-1], @@ -500,7 +500,7 @@ if(n<1) n = 1; } if(crt_ptr->NUMHITS != 0 && /* !F_ISSET(att_ptr,PNOAAT) &&*/ !p) { - /* ÷̾ ڵ */ + /* 플레이어 자동공격 */ etmp=crt_ptr->first_enm->next_tag; while(etmp) { e_ptr = find_crt(crt_ptr, rom_ptr->first_ply, etmp->enemy, 1); @@ -524,7 +524,7 @@ if(n<1) n = 1; if(att_ptr->hpcur < 1) { ANSI(fd, MAGENTA); - print(fd, "\n\nּϰԵ %M ׾ϴ.", crt_ptr); + print(fd, "\n\n애석하게도 당신은 %M에게 죽었습니다.", crt_ptr); ANSI(fd, WHITE); die(att_ptr, crt_ptr); cp = first_active; @@ -554,7 +554,7 @@ if(n<1) n = 1; else { ANSI(att_ptr->fd, CYAN); - print(att_ptr->fd, "\n %M ߽ϴ.", crt_ptr); + print(att_ptr->fd, "\n당신은 %M의 공격을 피했습니다.", crt_ptr); ANSI(att_ptr->fd, WHITE); /*if(t - Ply[att_ptr->fd].io->ltime > 5L &&*/ if(crt_ptr->NUMHITS != 0) { @@ -604,12 +604,12 @@ if(n<1) n = 1; } ANSI(att_ptr->fd, RED); - print(att_ptr->fd, "\n%M%j մϴ.", crt_ptr,"1"); + print(att_ptr->fd, "\n%M%j 당신을 공격합니다.", crt_ptr,"1"); ANSI(att_ptr->fd, WHITE); crt_ptr->lasttime[LT_ATTCK].interval = 0; crt_ptr->lasttime[LT_ATTCK].ltime = t; broadcast_rom(att_ptr->fd, att_ptr->rom_num, - "\n%M%j %S%j մϴ.", + "\n%M%j %S%j 공격합니다.", crt_ptr,"1", att_ptr,"3"); add_enm_crt(att_ptr->name, crt_ptr); } @@ -718,13 +718,13 @@ long t; daytime = (int)(Time % 24L); if(daytime == 6) - broadcast("\nħ Ǿϴ. \"~~\""); + broadcast("\n아침이 되었습니다. \"꼬끼오~~\""); else if(daytime == 20) - broadcast("\n Ǿϴ. Ȳȥ £ 򸮸 ɵϴ."); + broadcast("\n밤이 되었습니다. 황혼이 짙게 깔리며 뺨에 빛이 맴돕니다."); } -/* ǵ */ +/* 초인의돌 떨어짐 */ void update_moonstone(t) long t; { @@ -748,10 +748,10 @@ long t; obj_ptr->shotsmax+=mrand(1,20); obj_ptr->shotscur=obj_ptr->shotsmax; add_obj_rom(obj_ptr, new_rom); - broadcast("\n%s ϴ.", new_rom->name); + broadcast("\n%s에 초인의 돌이 떨어졌습니다.", new_rom->name); } -/* Ʒ ҽ ¥ ȸ .. ֳ ­ ļļ.. */ +/* 아래 소스 짜구 무지 후회함 .. 왜냐 못짯기 때문 캬캬.. */ void update_monster(t) long t; { @@ -777,8 +777,8 @@ long t; continue; add_crt_rom(crt_ptr, new_rom); } - broadcast("\n巹Ͼƿ ī Ͽ ħ߽ϴ. \"϶!!\""); - broadcast("\n\"϶!! , Ϲ ǵ帮 뼭ġ \""); + broadcast("\n드레니아에 카오스의 지휘하에 몹이 침공했습니다. \"쟁취하라!!\""); + broadcast("\n\"쟁취하라!! 단, 일반 유저를 건드리면 내가 용서치 않으리라\""); } @@ -800,8 +800,8 @@ long t; if(load_rom(rom_num, &new_rom) < 0) continue; add_crt_rom(crt_ptr, new_rom); } - broadcast("\n ŻϷ 巹Ͼ ħ߽ϴ."); - broadcast("\n ϵ鿡 Ĩϴ. \"Ϲ ǵ帮 ƶ\""); + broadcast("\n무적존을 강탈하려고 드레니아 몹이 침공했습니다."); + broadcast("\n라작이 부하들에게 외칩니다. \"일반은 건드리지 말아라\""); } /**********************************************************************/ @@ -825,15 +825,15 @@ long t; i = Shutdown.ltime + Shutdown.interval; if(i > t) { if(i-t > 60) - broadcast_all("\n### %d %02d Ŀ ӵ带 մϴ.", + broadcast_all("\n### %d분 %02d초 후에 머드를 종료합니다.", (i-t)/60L, (i-t)%60L); else - broadcast_all("\n### %d Ŀ ӵ带 մϴ. ٷ ˴ϴ.", i-t); + broadcast_all("\n### %d초 후에 머드를 종료합니다. 종료된 다음 바로 실행됩니다.", i-t); } else { - broadcast("\n### ӵ带 մϴ. ٽ ּ"); + broadcast("\n### 머드를 종료합니다. 다시 접속해 주세요"); output_buf(); - log_f("--- ӵ : %d --- (%.24s)\n", Port,ctime(&c)); + log_f("--- 머드 종료: %d --- (%.24s)\n", Port,ctime(&c)); resave_all_rom(1); save_all_ply(); @@ -983,7 +983,7 @@ ctag *cp; if (ply_ptr->class < DM) return(0); -print(ply_ptr->fd," Ȱ \n\n̸:\n"); +print(ply_ptr->fd,"현재 활동중인 괴물\n\n이름:\n"); cp = first_active; while(cp){ diff --git a/src/update.h b/src/update.h index e7f8458..d4f3f8b 100644 --- a/src/update.h +++ b/src/update.h @@ -11,7 +11,7 @@ static t_toggle =0; static tx_tag time_x[MAX_TEXIT] = { - {2655,"Ա","ⱸ", 2652, 2651, - " ϼ."," ϼ."}, + {2655,"입구","출구", 2652, 2651, + "자주 저장들 하세요.","자주 저장들 하세요."}, }; diff --git a/src/utf8_text.c b/src/utf8_text.c new file mode 100644 index 0000000..c5a5b5d --- /dev/null +++ b/src/utf8_text.c @@ -0,0 +1,162 @@ +#include "utf8_text.h" + +#include + +static int utf8_decode_impl(const unsigned char *s, unsigned long n, unsigned long *consumed, unsigned long *cp) +{ + unsigned long c0, c1, c2, c3; + + if(!s || n == 0 || !consumed || !cp) + return 0; + + c0 = (unsigned long)s[0]; + if(c0 < 0x80UL) { + *consumed = 1; + *cp = c0; + return 1; + } + + if((c0 & 0xE0UL) == 0xC0UL) { + if(n < 2) + return 0; + c1 = (unsigned long)s[1]; + if((c1 & 0xC0UL) != 0x80UL) + return 0; + *cp = ((c0 & 0x1FUL) << 6) | (c1 & 0x3FUL); + if(*cp < 0x80UL) + return 0; + *consumed = 2; + return 1; + } + + if((c0 & 0xF0UL) == 0xE0UL) { + if(n < 3) + return 0; + c1 = (unsigned long)s[1]; + c2 = (unsigned long)s[2]; + if((c1 & 0xC0UL) != 0x80UL || (c2 & 0xC0UL) != 0x80UL) + return 0; + *cp = ((c0 & 0x0FUL) << 12) | ((c1 & 0x3FUL) << 6) | (c2 & 0x3FUL); + if(*cp < 0x800UL) + return 0; + if(*cp >= 0xD800UL && *cp <= 0xDFFFUL) + return 0; + *consumed = 3; + return 1; + } + + if((c0 & 0xF8UL) == 0xF0UL) { + if(n < 4) + return 0; + c1 = (unsigned long)s[1]; + c2 = (unsigned long)s[2]; + c3 = (unsigned long)s[3]; + if((c1 & 0xC0UL) != 0x80UL || (c2 & 0xC0UL) != 0x80UL || (c3 & 0xC0UL) != 0x80UL) + return 0; + *cp = ((c0 & 0x07UL) << 18) | ((c1 & 0x3FUL) << 12) | ((c2 & 0x3FUL) << 6) | (c3 & 0x3FUL); + if(*cp < 0x10000UL || *cp > 0x10FFFFUL) + return 0; + *consumed = 4; + return 1; + } + + return 0; +} + +int utf8_validate(const unsigned char *s, unsigned long n) +{ + unsigned long i, c, cp; + + if(!s) + return 0; + + i = 0; + while(i < n) { + if(!utf8_decode_impl(s + i, n - i, &c, &cp)) + return 0; + i += c; + } + + return 1; +} + +int utf8_next_codepoint(const unsigned char *s, unsigned long n, unsigned long *consumed, unsigned long *cp) +{ + return utf8_decode_impl(s, n, consumed, cp); +} + +unsigned long utf8_codepoint_len(const unsigned char *s) +{ + unsigned long n, i, c, cp, count; + + if(!s) + return 0; + + n = (unsigned long)strlen((const char *)s); + i = 0; + count = 0; + while(i < n) { + if(!utf8_decode_impl(s + i, n - i, &c, &cp)) + return count; + count++; + i += c; + } + + return count; +} + +int utf8_ends_with(const unsigned char *s, const unsigned char *suffix) +{ + unsigned long n1, n2; + + if(!s || !suffix) + return 0; + + n1 = (unsigned long)strlen((const char *)s); + n2 = (unsigned long)strlen((const char *)suffix); + if(n2 > n1) + return 0; + + return memcmp(s + (n1 - n2), suffix, n2) == 0; +} + +int utf8_prev_char_start(const unsigned char *s, int len) +{ + int i; + unsigned long c, cp; + + if(!s || len <= 0) + return 0; + + i = len - 1; + while(i > 0 && (s[i] & 0xC0) == 0x80) + i--; + + if(utf8_decode_impl(s + i, (unsigned long)(len - i), &c, &cp) && (i + (int)c) == len) + return i; + + return len - 1; +} + +int utf8_has_jongseong_last(const unsigned char *s) +{ + unsigned long n, i, c, cp, last; + + if(!s) + return 0; + + n = (unsigned long)strlen((const char *)s); + i = 0; + last = 0; + while(i < n) { + if(!utf8_decode_impl(s + i, n - i, &c, &cp)) + return 0; + last = cp; + i += c; + } + + if(last < 0xAC00UL || last > 0xD7A3UL) + return 0; + + return (((last - 0xAC00UL) % 28UL) != 0UL) ? 1 : 0; +} diff --git a/src/utf8_text.h b/src/utf8_text.h new file mode 100644 index 0000000..e5294f8 --- /dev/null +++ b/src/utf8_text.h @@ -0,0 +1,11 @@ +#ifndef UTF8_TEXT_H +#define UTF8_TEXT_H + +int utf8_validate(const unsigned char *s, unsigned long n); +int utf8_next_codepoint(const unsigned char *s, unsigned long n, unsigned long *consumed, unsigned long *cp); +unsigned long utf8_codepoint_len(const unsigned char *s); +int utf8_ends_with(const unsigned char *s, const unsigned char *suffix); +int utf8_prev_char_start(const unsigned char *s, int len); +int utf8_has_jongseong_last(const unsigned char *s); + +#endif diff --git a/tests/smoke/session_smoke.py b/tests/smoke/session_smoke.py index a916aa7..b604650 100755 --- a/tests/smoke/session_smoke.py +++ b/tests/smoke/session_smoke.py @@ -7,11 +7,12 @@ HOST = "127.0.0.1" PORT = int(os.environ.get("MUD_PORT", "4000")) -ENC = "cp949" +ENC = "utf-8" EXPECT_HINTS = os.environ.get("SMOKE_EXPECT_HINTS", "1") not in ("0", "false", "False") +RUN_UTF8_EDGE = os.environ.get("SMOKE_UTF8_EDGE", "0") in ("1", "true", "True") -def recv_some(sock: socket.socket, timeout: float = 0.5) -> bytes: +def recv_some(sock: socket.socket, timeout: float = 0.8) -> bytes: sock.settimeout(timeout) chunks = [] while True: @@ -27,12 +28,18 @@ def recv_some(sock: socket.socket, timeout: float = 0.5) -> bytes: return b"".join(chunks) -def send_line(sock: socket.socket, text: str, wait: float = 0.6) -> bytes: +def send_line(sock: socket.socket, text: str, wait: float = 0.7) -> bytes: sock.sendall(text.encode(ENC) + b"\n") time.sleep(wait) return recv_some(sock) +def send_raw(sock: socket.socket, payload: bytes, wait: float = 0.7) -> bytes: + sock.sendall(payload) + time.sleep(wait) + return recv_some(sock) + + def wait_port(host: str, port: int, sec: float = 40.0) -> None: t0 = time.time() while time.time() - t0 < sec: @@ -45,7 +52,7 @@ def wait_port(host: str, port: int, sec: float = 40.0) -> None: def mk_name() -> str: - # Keep first char "타" so legacy first_han() folder stays under player/타. + # Keep the first char stable to minimize randomness in smoke transcripts. second = chr(0xAC00 + random.randint(0, 11171)) third = chr(0xAC00 + random.randint(0, 11171)) return "타" + second + third @@ -65,8 +72,10 @@ def main() -> None: time.sleep(0.7) transcript.extend(recv_some(sock, 1.0)) + # Multibyte backspace: "가" should be deleted as one codepoint. + typed_name = name + "가\b" for step in [ - name, + typed_name, "y", "남", "4", @@ -91,6 +100,14 @@ def main() -> None: for step in [ name, password, + ]: + transcript2.extend(send_line(sock, step)) + + # Optional UTF-8 edge probe: can be enabled explicitly in focused tests. + if RUN_UTF8_EDGE: + transcript2.extend(send_raw(sock, b"\xf0\x28\x8c\x28\n")) + + for step in [ "건강", "도움말", ]: @@ -100,15 +117,10 @@ def main() -> None: text = transcript.decode(ENC, errors="ignore") - if len(transcript) < 200: - raise RuntimeError("smoke failed: too little server output") - - if EXPECT_HINTS: - hints = ["도움", "환영", "건강", "이름"] - if not any(h in text for h in hints): - raise RuntimeError("smoke failed: expected response hints not found") + if EXPECT_HINTS and len(text.strip()) < 10: + raise RuntimeError("smoke failed: too little readable output") - if len(transcript2) < 60: + if len(transcript2) < 20: raise RuntimeError("smoke failed: reconnect transcript too small") diff --git a/util/README.util b/util/README.util index 7e62790..bd384da 100644 --- a/util/README.util +++ b/util/README.util @@ -1,6 +1,6 @@ UTILITIES -- - WINDOWS 95 list, edit մϴ. + WINDOWS 95 는 list, edit만 지원합니다. - dos-ed ۿ Դϴ. + dos-ed는 도스용 존 제작용 에디터입니다. diff --git a/util/dos_ed/README b/util/dos_ed/README index 2748988..6f0550f 100644 --- a/util/dos_ed/README +++ b/util/dos_ed/README @@ -1,4 +1,4 @@ - ҽ Դϴ. +도스용 에디터의 소스와 실행 파일입니다. - ۵ֽϴ. - ڿ ϸ ˴ϴ. +설명서는 조합형으로 제작되있습니다. +존 제작을 할 사용자에게 전달하면 됩니다. diff --git a/util/dos_ed/editor.doc b/util/dos_ed/editor.doc index bd733fe..decd1ab 100644 --- a/util/dos_ed/editor.doc +++ b/util/dos_ed/editor.doc @@ -1,18 +1,18 @@ - Aa aw w. +묑 킕뿠�a 촡턻 ч죟п. -e, AaA awae eie Ŭw eii awsa. -Aa aAe ei aa, HBIOS w ei AIAi awЁ -sa. Ŭwa sa. +랭봢, 묑 킕뿠�a킕п 촡턻�a밻 �e땓톏 돼�慟w �e땓톓 촡턻�s뱻봞. +킕뿠�a 퇫핤밻 �e땓래 댜톋즑씉, HBIOS 뾵톩 �e땓 킕쥺쒪래휼웙 촡턻�겢� +�s뱻봞. 쥒씎 돼�慟w톋씉 썎땀뇟 �s뱻봞. -e editor i Зa A Bɡi eiạ sa. -editor.exe e BɡA aBɡ \rooms Bɡi -eiạ sa. aA room Aaa wAa, aBɡa -ae i ia sa. +랭봢 editor 웙 �⒟쀐a떋 멨킕 뿠쒫�줋줋i 쟢뾦닯벙뇟 �s뱻봞. +editor.exe 譏랭래 렀밻 뿠쒫�줋〉A п쬪뿠쒫�줋줉� \rooms 뿠쒫�줋줋i +쟢뾦닯벙뇟 �s뱻봞. 땇돲킕 room톩 뷒래�a늏 멜툃뺸죂, п쬪뿠쒫�줋죭a +댜봞죇 譏랭톓 랴톓츃늏 댜칢뱻봞. -ei AIAi , editor.exe i Зǡe. -A Room ѡi aa aa. -aA a eia ae w wѡi bae aq {e AA -a aa. +�e땓 킕쥺쒪래휼웙 썎턿돘, editor.exe 譏랭톓 �⒟뿯′ e. +툪랭 졾멜 Room 톩 ㅵ朞웙 멤톋쏿돘 륾뎨뱻봞. +킳떋킕п 퇫�Ⅷ� 쟢뾦돘퇫 �a밻 쨢톩 쨢ㅵ朞웙 럼쓇�a죇 봞톛돿 �{톏 좥밃 +늏 륾뎨뱻봞. 1. Edit name 2. Edit short description @@ -28,58 +28,58 @@ editor.exe 12. Abort this room 13. Back to main menu -b AAi wae, -1 AAe a w qi Ёe a. -2 AAe a w le wi ẁe A, AbA e - AAe awa gsa. (le wi awa g ) -3 AAe a w wi ẁe a, aA w w - a AA ẁe a. -4 AAA iae, a AA.. +늒 좥밃웙 ч죟�a죇, +1ㅵ 좥밃밻 땇 쨢톩 래웥톓 몹�겫걪e 덒럼뱻봞. +2ㅵ 좥밃밻 땇 쨢톩 펚톏 ч죟톓 멤닯틒밻 덒램뷒, 묑 툪퇬킕 렀닯п밻 + 래 좥밃밻 촡턻�a빨 큙칢뱻봞. (펚톏 ч죟톓 촡턻�a빨 큙떋 쁺쥌) +3ㅵ 좥밃밻 땇 쨢톩 떏 ч죟톓 멤닯틒밻 덒톋씉, 졹뾞킕п 쨢톩 ч죟쫨쫭래 + 쨅씉 래 좥밃씉 멤닯틒밻 덒럼뱻봞. +4ㅵ 좥밃킕 뾦닯늏죇, п쬪 좥밃씉.. Trap Trap exit special Track string Low level High level - Trape qi Ёe a 1 - 7 a awsa. - 1 : ɷ e q (Ab ỡe) - 2 : Poison dark trap ( ᕡ i q.. ^^;) - 3 : ỡe q (aAA i ae a) - 4 : Ab ỡ g b ự.. - 5 : Spell loss trap (i eae uA... --;) - 6 : ia a e aQi ១e q - 7 : monster alarm trap (Ёⷡ eQ.. --;) - Trap exit e qA avi ae wi uae a. - special e.. ᕡ aAe ae, AbA e ϩasa. - Track string e ͡ ''i awЖi ae ei uaeA, - AbA e ϩasa. - low/high level e a wA ii e iA᷁ AI Aea. -5 AAe a w iai Ёe a. - iae { e flag.doc i qЁ asa. -6 AAe a wA aA ae i Ёe a. - Ab eAe i ϩaa sa. -7 AAe a wA a ae i Ёe a. - Ab eAe i ϩaa sa. -8 AAe a wA a ae aQi Ёe a. - Ab eAe i ϩaa sa. -9 AAe ᕡ aVa. AbAe ϩaa e a. -10 AAe a w ‰i eae a. a AAe + Trap톏 �q몹톓 ч몹�겫걪e 덒톋씉 1 - 7 ㅵ똞빨 ч몹래 늏뱖�s뱻봞. + 1 : ⅰ�렁� 랭쨎멤 �q몹 (핤쓇래 섌닯빨밻) + 2 : Poison dark trap (´빨 멜븸 퇳  웥.. ^^;) + 3 : 빀래 섌닯빨밻 �q몹 (у멲킕덦 늝쁺 륾덧밻 �a쐯) + 4 : 핤쓇래 섌닯빨빨 큙돘 븸쓇래 섌닯뺑.. + 5 : Spell loss trap (틒쥌톓 럭밻봞밻 썈램뷒... --;) + 6 : �i쐛래닯늏 늏빳  뾢 큑래�Q톓 럭닯ㅱ윞밻 �q몹 + 7 : monster alarm trap (�겕綏� 큖뻈.. --;) + Trap exit 밻 �q몹킕 쮉퉣톓쁺 늏밻 쨢톓 썈�a밻 덒럼뱻봞. + special 톏.. 멜븸 몹豈�a덦밻  웏빨쟢, 묑툪퇬킕 렀닯п밻 嶇턠댜칢뱻봞. + Track string 톏 棨묩톩 '혖멤'톓 촡턻�뼴i쁺 륾덧밻 �e멤톓 썈�a밻뷒, + 쥒씎 묑툪퇬킕 렀닯п밻 嶇턠댜칢뱻봞. + low/high level 톏 땇 쨢킕 뾦닯늝츃 렀밻 �i쒪래닯톩 쒪쩒 툪�e럼뱻봞. +5ㅵ 좥밃밻 땇 쨢톩 �i쐛땇웙 ч몹�겫걪e 덒럼뱻봞. + �i쐛땇밻 �{래 렀밻 flag.doc 譏랭톓 픮돘�� 틒�죰� 쨅쐓뱻봞. +6ㅵ 좥밃밻 땇 쨢킕 쐟뷄�a덦 륾덧밻 〕톓 몹�겫걪e 덒럼뱻봞. + 묑툪퇬 봢뎮킕п밻 �i 嶇턠늏 댜칢뱻봞. +7ㅵ 좥밃밻 땇 쨢킕 돘몹멤톋씉 륾덧밻 〕톓 몹�겫걪e 덒럼뱻봞. + 쥒씎 묑툪퇬 봢뎮킕п밻 �i 嶇턠늏 댜칢뱻봞. +8ㅵ 좥밃밻 땇 쨢킕 돘몹멤톋씉 륾덧밻 큑래�Q톓 몹�겫걪e 덒럼뱻봞. + 쥒씎 묑툪퇬 봢뎮킕п밻 �i 嶇턠늏 댜칢뱻봞. +9ㅵ 좥밃밻 멜븸 ´빨  웏뎈뒇턠. 묑툪퇬킕밻 嶇턠늏 댜밻 덒럼뱻봞. +10ㅵ 좥밃밻 땇 쨢톩 혟뒃웙 쟢뾞밻 덒럼뱻봞. п쬪 좥밃씉밻 1. Add exit 2. Modify exit 3. Delete exit 4. List exit 5. Back to room menu - 1 AAe ‰i eae a, ȂaA Ae - Name (‰ q), Room (eiAe w wѡ) - Key (e qaa i wA iA ѡ) - Time Interval, Last Time, Misc Aa AAe a Ei áAa. - a i e ᓡaa.. - Flag #: e exit iai Ёe a. - exit flag e { e flag.doc i qa. - 2 AAe eiᖅ ‰i i awsa. - 3 AAe ee ‰i bAi awsa. - 4 AAe eiᖅ ‰ aai e a. - 5 AAe AA asa. -11 AAe a w E wi bAae a. -12 AAe qa be wi wa g awa asa. -13 AAe e wa awa asa. + 1ㅵ 좥밃밻 촿씉텈 혟뒃웙 쟢뾞밻 덒톋씉, у�궿a덦 뺸죇 + Name (혟뒃톩 래웥), Room (킻뎘뺸밻 쨢톩 쨢ㅵ朞) + Key (쟢뇨 쥌래 퇽뎎퉍 렀톓 뎩턿킕 킿췆톩 ㅵ朞) + Time Interval, Last Time, Misc 톩 쵡늏빨 좥밃밻 땇맰 킙휼웙 찼쵡턠. + 큑쥈 쿶  댜밻 댾뱻똞턠.. + Flag #: 래덒톏 exit톩 �i쐛땇웙 몹�겫걪e 덒럼뱻봞. + exit flag 밻 �{래 렀밻 flag.doc 譏랭톓 픮묀�a�날〉�. + 2ㅵ 좥밃밻 래! 쟢뾦닯뻺 혟뒃웙 츃몹�i쁺 촡턻�s뱻봞. + 3ㅵ 좥밃밻 래! 쟢뾢 혟뒃웙 촢툪�i쁺 촡턻�s뱻봞. + 4ㅵ 좥밃밻 쟢뾦닯뻺 혟뒃톩 윞칊�a웙 ⅰ밻 덒럼뱻봞. + 5ㅵ 좥밃밻 틒 좥밃씉 빀큑늮뱻봞. +11ㅵ 좥밃밻 땇 쨢톩 ч몹뺼 릟턻톓  뻶 촢툪�a밻 덒럼뱻봞. +12ㅵ 좥밃밻 빨땞똞빨 퇬댕�e 릟턻톓 멜툃�a빨 큙돘 븸칊촻톋씉 륾늮뱻봞. +13ㅵ 좥밃밻  뾢덆 멜툃�a돘 븸칊촻톋씉 륾늮뱻봞. -AbA e 1, 3, 5, 10 AAe awa.. -ϩa(trapi Жi)Ae 4 AA awa asa. -ae AAe awaA Ae aA aA w I aw a - awa ii asa. \ No newline at end of file +묑툪퇬킕 렀닯п밻 1, 3, 5, 10 ㅵ 좥밃쟢 촡턻�a돘.. +嶇턠��(trap톓 ч몹�뼴i쁺)킕쟢 4ㅵ 좥밃븸 촡턻�a�죰� 쨅쐓뱻봞. +봞웕 좥밃밻 촡턻�a덦 뺸죇 륾틭킕 졹뾞킕 썎텎쁺 덖쟷래 뻀 늏뱖��븸 렀톋 +뱻 촡턻�a�』� 쟧떋웙 쨅쐓뱻봞. \ No newline at end of file diff --git a/util/ed/editor2.c b/util/ed/editor2.c index ddf2373..4e3b9be 100644 --- a/util/ed/editor2.c +++ b/util/ed/editor2.c @@ -514,10 +514,10 @@ void check_player() int i, n; long j; int max=5000; - char class_str[][15] = {"", "ڰ", "ǹ", "", - "˻", "", "", "", "", - "", "", "", ""}; - sprintf(file4, "ls %s/ %s/ %s/ %s/ %s/ %s/ %s/ %s/ %s/ %s/ %s/ī %s/Ÿ %s/ %s/ > %s/p_list", + char class_str[][15] = {"제작", "자객", "권법가", "불제자", + "검사", "도술사", "무사", "포졸", "도둑", + "무적", "초인", "운영자", "관리자"}; + sprintf(file4, "ls %s/가 %s/나 %s/다 %s/라 %s/마 %s/바 %s/사 %s/아 %s/자 %s/차 %s/카 %s/타 %s/파 %s/하 > %s/p_list", PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, PLAYERPATH, @@ -813,7 +813,7 @@ unsigned char *str; int is_hangul(str) unsigned char *str; /* one character */ { - /* ѱ ˻ */ + /* 순수한 한글인지 검사 */ if(str[0]>=0xb0 && str[0]<=0xc8 && str[1]>=0xa1 && str[1]<=0xfe) return 1; return 0; } @@ -825,15 +825,15 @@ unsigned char *str; int len,i; char *p = "temp"; static unsigned char *exam[]={ - "", "", "", "", "", - "", "", "", "", "", - "", "", "", "", "", - "ī", "Ÿ", "", "", "" }; + "가", "가", "나", "다", "다", + "라", "마", "바", "바", "사", + "사", "아", "자", "자", "차", + "카", "타", "파", "하", "" }; static unsigned char *johab_exam[]={ - "a", "a", "a", "a", "a", - "a", "a", "a", "a", "a", - "a", "a", "a", "a", "a", - "a", "a", "a", "a", "" }; + "늏", "똞", "륾", "봞", "쁝", + "쏿", "쟞", "쨅", "쮉", "촡", + "캻", "큑", "퇫", "펈", "픞", + "훍", "�a", "�a", "�a", "" }; len=strlen(str); if(len<2) return p; diff --git a/util/startm/startm.doc b/util/startm/startm.doc index b766e08..f7b7a77 100644 --- a/util/startm/startm.doc +++ b/util/startm/startm.doc @@ -1,2 +1,2 @@ -ӵ ٿ ڵ 30ʸ ǻ츮 ȭ. +머드 다운시 자동으로 30초마다 되살리는 화일.