Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
KTin 통합 README
==============================================================================
이 파일은 기존 README 계열 문서를 한 파일로 통합한 문서입니다.
각 원본 문서의 내용은 아래 파일명 구분선 아래에 보존되어 있습니다.
통합 원본 파일
- README.md
- README_BUILD_WSL.md
- README_SAFE.txt
- README_SAFE_FIX3.txt
- README_SAFE_FIX4.txt
- README_SAFE_FIX5.txt
- README_SAFE_FIX6.txt
- README_SAFE_FIX7.txt
- README_BUILD_FIX10.txt
- README_BUILD_FIX12.txt
- README_BUILD_FIX13.txt
- README_BUILD_FIX15.txt
- README_BUILD_FIX16.txt
- README_BUILD_FIX17.txt
- README_BUILD_FIX18.txt
- README_BUILD_FIX19.txt
- README_BUILD_FIX20.txt
- README_BUILD_FIX21.txt
- README_BUILD_FIX22.txt
- README_BUILD_FIX23.txt
- README_BUILD_FIX24.txt
- README_BUILD_FIX25.txt
- README_BUILD_FIX26.txt
- README_BUILD_FIX28.txt
- README_BUILD_FIX30.txt
- README_BUILD_FIX31.txt
- README_BUILD_FIX32.txt
- README_BUILD_FIX33.txt
- README_BUILD_FIX34.txt
- README_BUILD_FIX35.txt
- README_BUILD_FIX36.txt
- README_BUILD_FIX37.txt
- README_BUILD_FIX38.txt
- README_TRIGGER_EDITOR_2.7.13.txt
- README_TRIGGER_EDITOR_2.7.14.txt
- README_TRIGGER_EDITOR_2.7.15.txt
==============================================================================
[ 원본: README.md ]
==============================================================================
# KTin 2.7.14
> 현재 버전: **2.7.14** — TinTin++ 트리거 파일을 BOM 없이 저장하고, 트리거 편집기에서 파일 불러오기·다른 이름 저장·주소록 연결을 지원합니다.
## 2.7.14 트리거 파일 로딩·저장·화면 수정
- KTin 트리거 파일을 **UTF-8 BOM 없이** 저장합니다. 파일 첫 바이트가 `#`(16진수 `23`)가 되므로 TinTin++의 `#read`가 BOM을 명령 문자로 오인하지 않습니다.
- 트리거 편집기 배경·글자·입력칸·트리·버튼을 현재 KTin ANSI 테마에 맞춰 표시합니다.
- 상단에 `파일 불러오기...`, `다른 이름 저장...`, `주소록에 현재 파일 지정` 버튼을 추가했습니다.
- 주소록 스크립트가 비어 있으면 임의의 `triggers\ktin_<호스트>_<ID>.tin`을 만들지 않고 기본 `ktin_triggers.tin`을 주소록에 지정합니다.
- 파일을 불러와 편집만 할 수도 있고, 명시적으로 현재 주소록의 접속 스크립트로 지정할 수도 있습니다.
- `ktin_c_<고유번호>`는 파일명이 아니라 한글 폴더를 TinTin++에서 묶기 위한 내부 Class 이름임을 화면에 안내합니다.
- 프로그램 및 Windows 리소스 버전을 `2.7.14` / `2.7.14.0`으로 갱신했습니다.
## 2.7.13 폴더/Class 기반 TinTin++ 트리거 편집기
- `편집 → 트리거 편집(&A)...` 메뉴를 추가했습니다.
- Mudlet과 비슷한 트리 구조에서 폴더, 하위 폴더, 트리거를 추가·수정·삭제·정렬할 수 있습니다.
- 폴더와 트리거를 각각 켜고 끌 수 있으며, 상위 폴더를 끄면 하위 폴더와 트리거도 생성하지 않습니다.
- 한글 폴더명은 편집 화면에 그대로 표시하고 TinTin++ 내부 Class는 `ktin_c_<영문/숫자 ID>`로 안전하게 생성합니다.
- 한글 이름과 폴더 구조는 별도 INI 대신 해당 `.tin` 파일의 KTin 관리 메타데이터에 UTF-8로 보존합니다.
- 주소록으로 접속한 상태에서 편집기를 열면 그 주소록의 스크립트 파일을 편집합니다. 스크립트가 비어 있으면 `triggers\ktin_<호스트>_<ID>.tin`을 만들고 `sessions.ini`의 주소록 항목에 자동 연결합니다.
- 주소록 접속 시 `main.tin` 다음에 해당 주소록 스크립트가 그 세션에만 로드되도록 `#session`의 스크립트 인수를 사용합니다.
- 주소록 세션이 없으면 전역 기본 파일 `ktin_triggers.tin`을 편집하며, 이 파일이 있으면 TinTin++ 시작 직후 ConPTY로 `#read {ktin_triggers.tin}`을 자동 전송합니다.
- 저장 전 기존 파일은 `.bak`으로 백업하고 `.tmp` 파일을 통한 원자 교체를 사용합니다.
- KTin 관리 구역 밖의 기존 사용자 스크립트는 그대로 보존하며, 편집 트리에는 KTin 관리 구역의 항목만 표시합니다.
- 폴더를 삭제한 뒤 다시 읽어도 이전 Class를 먼저 정리하여 삭제된 트리거가 현재 세션에 남지 않습니다.
- 프로그램 및 Windows 리소스 버전을 `2.7.13` / `2.7.13.0`으로 갱신했습니다.
## 2.7.12 주소록 Enter 연결 수정
- `Alt+A`로 주소록을 연 뒤 위·아래 방향키로 주소를 선택하고 Enter를 누르면 연결됩니다.
- 리스트뷰의 Enter 알림(`NM_RETURN`)을 더블클릭과 같은 접속 동작으로 처리합니다.
- 주소록을 열 때 첫 주소가 기본 선택되므로, 목록이 하나뿐이면 바로 Enter로 접속할 수 있습니다.
- 더블클릭·Enter·연결 버튼이 하나의 공통 연결 함수를 사용합니다.
- 프로그램 및 Windows 리소스 버전을 `2.7.12` / `2.7.12.0`으로 갱신했습니다.
## 2.7.11 서버 수신 문구 즉시 표시 수정
ConPTY 출력 읽기 스레드는 빠른 출력 중 UI 메시지를 줄이기 위해 50ms 단위로 갱신을 묶었습니다. 그러나 `ReadFile()`이 블로킹 방식이어서, 마지막 출력 조각이 직전 갱신 후 50ms 안에 도착하면 알림을 보류한 채 다음 데이터를 기다렸습니다. 그 결과 서버는 이미 이름 확인 질문을 보냈는데도 KTin에서는 다음 Enter나 다음 서버 출력이 올 때까지 3~6초 늦게 보일 수 있었습니다.
- 줄바꿈 없는 로그인 질문과 일반 프롬프트를 수신 즉시 UI에 알림
- 같은 시점에 여러 조각이 들어올 때는 원자 플래그로 UI 메시지를 한 개만 유지
- 기존 UI 30ms 다시 그리기 타이머는 유지하여 빠른 전투 출력의 paint 호출을 계속 묶음
- 다른 MUD 클라이언트와 동일하게 서버가 보낸 질문을 즉시 확인 가능
- 프로그램 및 Windows 리소스 버전을 `2.7.11` / `2.7.11.0`으로 갱신
## 2.7.10 도움말 열 정렬·스크롤 잔상 수정
- 단축키·메뉴명 첫 열이 내용창 가운데까지 밀리던 문단 시작 들여쓰기를 제거했습니다.
- 키·메뉴명은 구역 제목 아래에서 한 단계만 들여쓰고, 설명은 고정된 둘째 열에 맞춥니다.
- `기본 / 전체 단축키`, `파일 메뉴 / 연결`, `편집 메뉴`, `보기 메뉴`, `입력창 사용법`, `로그창 / 선택 / 복사`, `단축버튼 / 기능키`, 메모장 및 파일 위치 페이지에 동일한 열 규칙을 적용했습니다.
- 원문에 있는 2칸·4칸 단계 공백과 RichEdit 문단 들여쓰기가 이중 적용되던 문제를 없앴습니다.
- 도움말을 마우스 휠·스크롤바·PageUp/PageDown으로 움직일 때 하단에 이전 문단이 잔상으로 남는 문제를 전체 다시 그리기로 보완했습니다.
- 프로그램 및 Windows 리소스 버전을 `2.7.10` / `2.7.10.0`으로 갱신했습니다.
## 2.7.9 정보창 버전·도움말 문단 서식 수정
- 정보창이 패치 번호를 무시하고 빌드 번호를 두 자리로 출력하여 `2.7.8`을 `2.7.00`으로 표시하던 문제 수정
- 정보창, 메인창 제목, 트레이 설명과 도움말 제목이 `app_version.h`의 같은 버전 문자열을 사용하도록 통일
- 도움말 본문에서 제목·구역·키·설명을 여러 색으로 표시하지 않고 한 가지 글자색만 사용
- 제목과 구역 구분은 글자 크기와 굵기로만 표현하여 ANSI 색상 문서처럼 보이던 현상 제거
- RichEdit 문단 위치 계산을 CR 한 글자 기준으로 맞춰 뒤쪽 구역 제목에 앞 문단의 들여쓰기가 잘못 이어지던 문제 수정
- `[연결과 프로그램]`, `[입력창과 화면]`, `[사용자 지정]`처럼 같은 단계의 구역 제목은 모두 같은 첫 열에서 시작
## 2.7.8 도움말 열 정렬·줄바꿈 정리
도움말의 키와 설명은 더 이상 여러 개의 공백으로 위치를 맞추지 않습니다. RichEdit의 실제 탭 위치와 내어쓰기를 사용하므로 가변폭 글꼴에서도 키 열과 설명 열이 일정하게 정렬됩니다.
- 키·메뉴명은 왼쪽 열, 설명은 고정된 오른쪽 열에 표시
- 긴 설명이 자동 줄바꿈되면 오른쪽 설명 열 아래로 이어짐
- 제목·부제·구역 제목·본문의 크기, 색상, 문단 간격 통일
- 기본 도움말 창 확대, 사용자가 크기 조절·최대화 가능
- 도움말 제목의 버전을 `app_version.h`에서 자동 표시
- 체력 막대 설명을 현재 구조인 `Looming.Vitals` 또는 일반 텍스트 프롬프트 분석으로 갱신
## 2.7.7 ANSI 변환 보기 빈행 수정
메모장의 `ANSI 변환 보기`에서 화면 지우기용 SGR/CSI 코드만 남은 행을 실제 문자 행으로 오인하여 전투 메시지 사이에 빈행이 추가되던 문제를 수정했습니다. `ANSI 코드 제거`와 `ANSI 변환 보기`가 같은 논리 행 구조를 사용하므로 인게임 출력과 동일한 줄 간격을 유지합니다.
## 2.7.6 재접속 화면 보존·갈무리 형식·빈행 정리
2.7.5는 `ESC[2J`가 도착한 순간의 화면만 스크롤 기록으로 보존했습니다. 일부 서버와 TinTin++ 출력은 `ESC[2J`보다 먼저 여러 `ESC[K`와 커서 이동으로 현재 화면을 지우기 때문에, 마지막 전투·사망·세션 종료 내용이 이미 사라진 뒤 스냅샷되는 경우가 있었습니다.
2.7.6은 다음 세 경계에서 화면을 먼저 보존합니다.
- TinTin++의 세션 종료·연결 실패 문구 수신 직후
- 자동 재접속 명령을 보내기 직전
- 접속 성공 문구 뒤 새 로그인 화면을 지우기 직전
같은 화면을 세 경계에서 반복 보존하더라도 히스토리 끝과 비교해 중복 스냅샷은 추가하지 않습니다.
갈무리에는 `코드 갈무리`와 `일반 갈무리`가 추가되었습니다.
- **코드 갈무리**: 기존 방식처럼 ANSI/OSC/커서 제어 바이트까지 원형 저장 (`*_ansi.txt`)
- **일반 갈무리**: ANSI 제어 코드를 제외하고 실제 문자만 UTF-8로 저장 (`*_plain.txt`)
- 갈무리 켜짐/꺼짐과 관계없이 형식을 미리 바꿀 수 있음
- 갈무리 중 형식을 바꾸면 서로 다른 형식이 한 파일에 섞이지 않도록 새 파일을 시작
메모장 `편집 → 연속되는 빈행 삭제`는 일반 빈행과 `ESC[K` 같은 ANSI 지우기 코드만 있는 행을 모두 빈행으로 판단하여 연속 구간을 한 행으로 줄입니다.
## 2.7.5 재접속 화면 지우기 전 스크롤 기록 보존
TinTin++ 또는 서버가 재접속·로그인 화면을 시작하면서 보내는 `ESC[2J`는 현재 터미널 화면을 지웁니다. 이전 버전은 이 명령을 처리할 때 현재 화면을 스크롤 기록으로 옮기지 않아, 전투 직후 연결이 끊기고 자동 재접속하면 화면에 있던 마지막 전투 내용과 세션 종료·재접속 메시지가 PageUp에서도 사라질 수 있었습니다.
2.7.5부터는 `ESC[2J` 처리 직전에 현재 화면의 실제 내용이 있는 행을 스크롤 기록으로 보존한 뒤 새 화면을 지웁니다.
- 마지막 전투 출력과 체력 변화 보존
- 세션 종료, `#zap`, 재접속 시도 및 접속 성공 메시지 보존
- PageUp/PageDown으로 이전 화면 확인 가능
- 문자색·배경색·굵기·한글 전각 셀 보존
- 화면 위아래의 완전히 빈 행은 제외
- 연속된 빈 `ESC[2J`는 중복 기록하지 않음
- 갈무리 원시 로그 저장 방식은 기존과 동일하게 유지
> 이 변경은 KTin 화면 버퍼의 보존 문제를 수정합니다. 서버가 사망 메시지를 보내기 전에 연결을 종료하는 문제는 Sector_D의 사망 처리 순서를 별도로 확인해야 합니다.
## 2.7.4 서버 프롬프트 원문 복원
KTin은 더 이상 `Looming.Cursor` 값을 지연시간 뒤에 강제로 터미널에 그리지 않습니다. 함께 제공되는 TinTin++ 수정본은 `Core.Supports.Set`에서 `Looming.Cursor`만 제외합니다. Sector_D는 Cursor 지원이 없으면 기존 `write_prompt()` 경로로 일반 텍스트 프롬프트를 보내므로, 방 설명·물건·NPC·명령 결과가 끝난 실제 서버 전송 위치에 프롬프트가 그대로 표시됩니다.
- 빈 Enter, 이동, `봐`, `누구`, `점수` 뒤의 프롬프트를 서버 전송 순서 그대로 표시
- 120ms 대기, 출력 끝 추측, KTin 강제 프롬프트 삽입 기능 완전 제거
- 일반 텍스트 `[ 체력/최대체력,정신력/최대정신력 <명령수> ]`를 화면 출력과 별도로 관찰하여 체력·정신력 막대 갱신
- `Looming.Vitals` 지원은 계속 알리며, 서버가 Vitals JSON을 보내는 경우에도 동일한 막대 갱신
- `Looming.Map`, `Room`, `Char`, `Combat`, `Party`, `System`, `Info`, `Chat`, `Term` GMCP 기능은 그대로 유지
- 2.7.2와 2.7.3에서 사용한 Cursor 강제 출력 방식은 폐기
> 이 변경은 KTin과 TinTin++를 함께 교체해야 완성됩니다. 이전 TinTin++가 `Looming.Cursor`를 계속 광고하면 Sector_D가 일반 프롬프트를 생략할 수 있습니다.
KTin은 TinTin++를 Windows GUI에서 사용할 수 있도록 만든 한국어 MUD 클라이언트 래퍼입니다. TinTin++의 세션·스크립트·매크로 기능을 유지하면서 고정폭 ANSI 터미널, 3줄 입력창, 주소록, 갈무리, 메모장, GMCP 지도/상태, 접근성용 화면 키패드와 보조창 도킹을 제공합니다.
이 문서는 과거의 `README_SAFE*`, `README_BUILD_WSL.md`, `README_BUILD_FIX10~36.txt` 내용을 모두 통합한 유일한 README입니다. 이전 README 파일은 중복과 버전 혼동을 막기 위해 제거했습니다.
## 버전
- KTin GUI: **2.7.14**
- Windows 실행 파일 리소스 버전: `2.7.14.0`
- 소스 기준: C++17, Unicode Win32 GUI
- 포함 TinTin++ 표기 기준: `2.3.0.0`
## 목차
1. [주요 기능](#주요-기능)
2. [빠른 시작](#빠른-시작)
3. [메인창 구성](#메인창-구성)
4. [메인 메뉴 전체 설명](#메인-메뉴-전체-설명)
5. [메인 단축키 전체 표](#메인-단축키-전체-표)
6. [입력창](#입력창)
7. [로그창과 선택 영역](#로그창과-선택-영역)
8. [단축버튼·기능키·키패드](#단축버튼기능키키패드)
9. [주소록·빠른 연결·자동 로그인·재연결](#주소록빠른-연결자동-로그인재연결)
10. [갈무리와 갈무리 보기](#갈무리와-갈무리-보기)
11. [GMCP](#gmcp)
12. [메모장](#메모장)
13. [환경설정](#환경설정)
14. [상태바·변수·줄임말·타이머](#상태바변수줄임말타이머)
15. [빌드](#빌드)
16. [실행 파일과 설정 파일](#실행-파일과-설정-파일)
17. [문제 해결](#문제-해결)
18. [이전 README 통합 기록](#이전-readme-통합-기록)
## 주요 기능
- TinTin++를 ConPTY로 실행하고 Windows GUI에 ANSI 출력을 표시
- UTF-8 및 EUC-KR/CP949 서버 접속
- 전각·모호폭 문자와 MUD 문자 지도를 고려한 고정폭 렌더링
- 현재 화면과 지난 화면을 분리한 터미널 스크롤백
- 3줄 입력창과 명령 기록 탐색
- 여러 행 클립보드 본문을 MUD 글쓰기 모드로 즉시 전송
- 주소록, 빠른 연결, 스크립트 읽기, 자동 로그인, 자동 재연결
- 창마다 독립된 TinTin++ 내부 세션명과 재연결 대상
- 10개 단축버튼, 48개 기능키 매크로, 숫자 키패드 매크로
- 마우스로 누르는 접근성용 화면 키패드
- 변수, 줄임말, 타이머, 사용자 상태바
- 갈무리 로그와 필터별 갈무리 보기창
- 일반 텍스트와 ANSI 코드 포함 복사·저장
- KTin 메모장: 파일, 인코딩, 찾기/바꾸기, 구문강조, 지도 그리기
- TinTin++ GMCP 브리지, GMCP 지도·체력·정신력·모듈 정보창
- GMCP·키패드·갈무리 보조창 자석 도킹
- Mud둥근모 폰트의 실행 파일 내장 또는 실행 폴더 로드
## 빠른 시작
1. `ktin.exe` 옆 `bin\tt++.exe`가 있는지 확인합니다.
2. KTin을 실행합니다.
3. `파일 → 빠른 연결` 또는 `Alt+Q`를 누릅니다.
4. 서버 주소, 포트, 문자셋을 선택해 접속합니다.
5. 자주 쓰는 서버는 `파일 → 주소록`에서 저장합니다.
6. 명령은 하단 입력창에 쓰고 Enter로 보냅니다.
7. 프로그램의 전체 사용법은 `도움말 → 단축키 도움말`에서 확인합니다.
## 메인창 구성
위에서 아래 순서입니다.
1. 사용자 메뉴바
2. ANSI 로그/터미널 화면
3. 단축버튼 1~0
4. 3줄 입력창
5. 사용자 지정 상태바
보조창은 GMCP 지도, GMCP 정보, 화면 키패드, 갈무리 보기, 메모장, 특수 기호 등이 있습니다.
## 메인 메뉴 전체 설명
### 파일
| 메뉴 | 단축키 | 설명 |
|---|---:|---|
| 새 창 띄우기 | | 별도의 KTin 프로세스를 실행합니다. 각 창은 접속 및 자동 재연결 정보를 독립 관리합니다. |
| 빠른 연결 | Alt+Q | 호스트·포트·문자셋을 지정해 즉시 접속합니다. |
| 주소록 | Alt+A | 서버 정보, 스크립트, 로그인, 재연결 설정을 관리합니다. |
| 연결 끊기(#ZAP) | Ctrl+F9 | 사용자가 현재 세션을 종료합니다. |
| 스크립트 읽기 | Alt+S | 파일을 선택하여 TinTin++ `#read`로 읽습니다. |
| 메모장 | Alt+V | KTin 내장 메모장을 엽니다. |
| 끝내기 | Alt+X | 프로그램을 종료합니다. 트레이 옵션이 켜진 경우 X 버튼은 숨기기로 동작합니다. |
### 편집
- 찾기 (`Ctrl+F`)
- 변수 설정
- 줄임말 설정
- 단축키 설정
- 타이머 설정
- 상태바 설정
- 숫자 키패드 매크로
- 지난 화면을: 일반 복사·저장, ANSI 코드 복사·저장, 지우기
- 현재 화면을: 일반 복사·저장, ANSI 코드 복사·저장, 지우기
- 전체 화면을: 일반 복사·저장, ANSI 코드 복사·저장, 지우기
### 보기
- 메뉴 숨기기
- 갈무리: 켜기/끄기, 갈무리창 모두 닫기, 폴더 열기
- 갈무리 보기: 전체, 잡담, 경매, 대화, 아이템 획득, 경험치, 사용자 1~3, 임시 문자열
- 갈무리 필터 설정
- ANSI 테마 선택
- 화면 여백 없애기
- GMCP 지도 보기
- GMCP 정보 보기
- 키패드 보기
- 특수 기호 (`F4`)
### 옵션
- 환경 설정
- 단축버튼 표시/숨김
- 접속 유지 켜기/끄기
### 도움말
- 단축키 도움말: 키·메뉴명과 설명을 고정된 두 열로 표시하며, 긴 설명은 설명 열 아래로 정렬되어 이어집니다. 창 크기를 조절하거나 최대화할 수 있습니다.
- 정보
## 메인 단축키 전체 표
### 프로그램과 연결
| 단축키 | 동작 |
|---|---|
| Alt+Q | 빠른 연결 |
| Alt+A | 주소록 |
| Alt+S | TinTin++ 스크립트 읽기 |
| Alt+V | 메모장 |
| Alt+X | 프로그램 끝내기 |
| Ctrl+F9 | 연결 끊기(#zap) |
| Ctrl+F | 로그 찾기 |
| F4 | 특수 기호 창 열기/닫기 |
### 입력창과 로그
| 단축키 | 동작 |
|---|---|
| Enter | 현재 입력줄 전송; 빈 줄이면 빈 Enter 전송 |
| Ctrl+A | 현재 입력줄 모두 선택 |
| Alt+Space | 입력창 3줄과 입력 기록 모두 삭제 |
| Ctrl+Space | 현재 로그 화면 지우기 |
| Ctrl+Shift+Space | 현재·지난 로그와 입력 기록 모두 삭제 |
| PageUp / PageDown | 로그를 반 화면씩 이동 |
| Ctrl+Home | 지난 화면 맨 위로 이동 |
| Ctrl+End | 실시간 화면으로 복귀 |
| Ctrl+Shift+Home | 처음부터 현재 보기 아래까지 블럭 선택 |
| Ctrl+Shift+End | 현재 보기 위부터 최신 화면까지 블럭 선택 |
| 위 / 아래 | 입력줄 이동, 이전·다음 명령 기록 탐색 |
| 왼쪽 / 오른쪽 | 커서가 줄 경계일 때 앞·뒤 입력줄로 이동 |
| Home / End | 현재 입력줄 처음·끝 |
| Shift+Home / Shift+End | 현재 줄 범위 선택 |
| Ctrl+C / Ctrl+X / Ctrl+V | 입력줄 복사·잘라내기·붙여넣기 |
| Shift+Insert | 붙여넣기 |
### 사용자 지정 단축키
- `Alt+1~Alt+0`: 단축버튼 1~10
- `F1~F12`
- `Alt+F1~Alt+F12`
- `Shift+F1~Shift+F12`
- `Ctrl+F1~Ctrl+F12`
`F4`와 `Ctrl+F9`는 예약되어 다시 지정할 수 없습니다.
## 입력창
입력창은 3줄이며 현재 입력과 가까운 명령 기록을 동시에 보여줍니다.
- Enter는 현재 줄을 전송합니다.
- 빈 줄에서 Enter를 누르면 서버로 빈 Enter를 보냅니다.
- 위·아래 키는 줄 사이를 이동하고 맨 위/아래에서는 기록을 탐색합니다.
- 줄 맨 앞의 Backspace는 이전 줄 끝으로 이동합니다. `Backspace 키로 삭제를 현재 행으로 제한`을 켜면 넘어가지 않습니다.
- 왼쪽·오른쪽도 줄 경계에서 인접 입력줄로 이동합니다.
### 여러 행 붙여넣기
한 줄 텍스트는 입력창에 붙습니다. 줄바꿈이 포함된 텍스트는 입력창에 넣지 않고 모든 줄을 즉시 TinTin++로 전송합니다.
- Windows CRLF, Unix LF, 단독 CR 지원
- 본문의 빈 줄 유지
- 마지막 줄에 엔터가 없어도 전송
- 클립보드 원문은 변경하지 않음
게시판 사용 예:
1. MUD에서 글쓰기 모드로 들어갑니다.
2. 외부 메모장에서 본문을 복사합니다.
3. 입력창에서 Ctrl+V를 누릅니다.
4. 본문 전체가 전송된 뒤 입력창에 `.`을 쓰고 Enter를 누릅니다.
## 로그창과 선택 영역
### 마우스
- 휠: 3줄씩 스크롤
- 한 단어 클릭: 단어를 MUD 명령으로 전송
- 왼쪽 드래그: 블럭 선택
- 드래그 중 창 위/아래: 자동 스크롤
- 오른쪽 클릭: 복사하기, 파일저장, 지우기, 닫기 하위 메뉴
### 블럭 선택 완료 동작
`옵션 → 환경 설정 → 기타 설정 → 블럭 설정 후`:
1. 반전선택 클립보드
2. 반전선택 코드로 클립보드
3. 반전선택 파일저장
4. 반전선택 코드로 파일저장
5. 선택메뉴 띄우기
선택메뉴에는 일반 복사·파일저장, ANSI 코드 복사·파일저장, 닫기가 있습니다.
### 일반 내보내기와 코드 내보내기
- 일반: 화면의 글자만 UTF-8 텍스트로 내보냅니다.
- 코드로: 셀의 글자색·배경색·굵기를 ANSI true-color SGR 코드로 재구성합니다.
- 일반 파일: UTF-8 BOM
- 코드 파일: ESC 바이트를 보존하는 UTF-8, BOM 없음
- 기본 저장 폴더: `실행폴더\저장`
- 기본 파일명: `YYYYMMDD_HHMMSS.txt`
## 단축버튼·기능키·키패드
### 단축버튼
10개의 버튼을 제공하며 화면 클릭 또는 `Alt+1~Alt+0`으로 실행합니다.
- 자유 라벨
- ON 명령
- OFF 명령
- 토글 여부
### 기능키
`편집 → 단축키 설정`에서 48개 조합을 관리합니다.
- 일반 F1~F12
- Alt+F1~F12
- Shift+F1~F12
- Ctrl+F1~F12
예약 키는 `할당됨`으로 표시됩니다.
### 물리 숫자 키패드
`편집 → 숫자 키패드 매크로`에서 Num0~Num9와 `/`, `*`, `-`, `+`, `.` 명령을 설정합니다.
### 화면 키패드
`보기 → 키패드 보기`에서 엽니다.
- 키 이름 대신 실제 전송 명령 표시
- 마우스 클릭으로 명령 전송
- 키보드 입력이 불편한 사용자를 위한 접근성 기능
- 메인창 왼쪽·오른쪽·위·아래 도킹
- 위치·크기·도킹 방향 저장
- 매크로 설정 변경 즉시 반영
## 주소록·빠른 연결·자동 로그인·재연결
### 주소록 항목
- 표시 이름
- 호스트
- 포트
- UTF-8 또는 EUC-KR/CP949
- TinTin++ 스크립트
- 아이디와 비밀번호
- 아이디/비밀번호 패턴 및 실패 패턴
- 연결 실패/끊김 시 자동 재연결
- 최근 접속 시간
비밀번호는 INI 안전 HEX 형태로 저장합니다.
### 창별 세션 분리
빠른 연결의 고정 이름이나 주소록 표시명을 실제 TinTin++ 세션명으로 재사용하지 않습니다. 프로세스 ID와 접속 순번을 조합한 내부 이름을 사용하므로 새 창의 자동 재연결이 기존 창의 서버로 연결되는 것을 방지합니다.
### 첫 접속 #zap 보호
처음 접속할 때 추적 중인 세션이 없으면 인자 없는 `#zap`을 보내지 않습니다. 사용자가 `파일 → 연결 끊기`를 선택했을 때만 현재 세션을 직접 종료합니다.
## 갈무리와 갈무리 보기
### 갈무리
- 서버 수신 내용을 실행 폴더의 `log`에 기록
- 켜기/끄기 메뉴명 동적 변경
- `코드 갈무리`/`일반 갈무리`를 별도로 전환
- 코드 갈무리는 ANSI 원문을 `*_ansi.txt`에 저장
- 일반 갈무리는 ANSI를 제거한 문자를 `*_plain.txt`에 저장
- 켜진 상태에서 형식을 바꾸면 새 로그 파일을 즉시 시작
- 폴더 열기
- 접속별 로그 파일 추적
### 갈무리 보기
- 전체
- 잡담
- 경매
- 대화
- 아이템 획득
- 경험치
- 사용자 정의 1~3
- 임시 문자열
필터는 정규식 대신 단순 포함 검색이며 여러 문자열은 세미콜론으로 구분합니다.
보기창 기능:
- 여러 창과 여러 탭
- 탭 설정
- 상태바
- 메뉴 보이기/숨기기
- 상태바 보이기/숨기기
- 항상 위
- 선택/전체 복사
- 모두 선택
- 창 자동 붙기
장시간 안정성을 위해 공통 tail 읽기, UI 배치 갱신, 표시 줄 제한을 사용합니다.
## GMCP
### 데이터 흐름
```text
Sector_D GMCP
→ TinTin++ GMCP 협상·수신
→ 화면에 표시하지 않는 OSC 777 KTIN_GMCP 브리지
→ KTin GMCP 지도·정보창
```
Sector_D JSON 생성 방식은 변경하지 않습니다.
### GMCP 지도
- `Looming.Map`의 지역명과 `lines` 표시
- 메인 로그창과 동일한 폰트·색상·전각 정렬
- 방 기호 클릭 시 연결선 분석과 최단 경로 계산
- 이동 명령을 한 칸씩 전송하고 다음 지도 수신을 기다림
- 수신이 멈추면 자동 중지 후 다시 시도 또는 이동 취소
- 휠 및 세로 스크롤
- 메인창 자석 도킹
### GMCP 정보
- 서버가 보낸 일반 텍스트 프롬프트를 분석하거나 `Looming.Vitals`에서 체력·최대체력, 정신력·최대정신력 추출
- 체력 빨간 막대, 정신력 파란 막대, 수치와 백분율 표시
- 환경설정에서 Vitals, Cursor(호환 표시용), Char, Combat, Party, Room, System, Info, Chat, Term, 기타 모듈 원문 표시 선택
- 체크는 서버에 전송을 요구하지 않으며 실제 수신된 모듈만 표시
- 긴 원문은 세로 스크롤과 마우스 휠 지원
- 선택 모듈이 아직 오지 않으면 수신 대기 표시
## 메모장
메모장은 `Alt+V`로 엽니다.
### 갈무리 로그 열기와 ANSI 보기
메모장 `파일` 메뉴에는 실행 폴더의 `log` 디렉터리를 바로 여는 **갈무리 폴더 열기**와,
0KB 파일을 제외하고 최근 수정 순으로 최대 5개를 고르는 **마지막 갈무리 열기**가 있습니다.
메모장 `특수` 메뉴의 ANSI 도구는 다음처럼 작동합니다.
- **ANSI 코드 제거**: CSI, OSC, DCS 등 터미널 제어 코드를 제거하고 편집 가능한 새 문서로 만듭니다. 화면 끝까지 채운 공백과 커서 이동을 함께 정리하여 입력 명령과 전투 메시지가 불필요하게 오른쪽으로 밀리지 않게 합니다. 원본 로그를 실수로 덮어쓰지 않도록 저장 시 새 파일명을 묻습니다.
- **ANSI 변환 보기**: 현재 ANSI 테마에 따라 글자색, 배경색, 굵기를 적용합니다. 녹색 ANSI 글자는 녹색으로 표시됩니다. 화면 재생용 커서 이동·지우기와 줄 끝 패딩을 정리하며, 화면 채움 공백에 붙은 ANSI 코드만 있는 행을 실제 글자 행으로 오인하지 않으므로 전투 메시지 사이에 원본에 없는 빈행이 추가되지 않습니다. 원본 보호를 위해 읽기 전용이며, 편집하려면 먼저 ANSI 코드 제거를 선택합니다.
- **현재 파일 닫기 (`Ctrl+W`)**: 메모장은 한 번에 한 문서만 표시합니다. ANSI 변환/제거 결과는 디스크 임시 파일이 아니라 메모리에서 유지되며, 이 메뉴로 현재 원본과 변환 상태를 모두 닫고 빈 문서로 돌아갑니다.
- **연속되는 빈행 삭제**: `편집` 메뉴에서 연속된 빈행을 한 행으로 줄입니다. 공백만 있는 행뿐 아니라 `ESC[K`처럼 ANSI 화면 지우기 코드만 있는 행도 빈행으로 계산하며, 연속된 `ESC[K` 행은 첫 한 행만 남깁니다.
- 화면 지우기, 커서 이동, 창 제목 변경 같은 비표시 터미널 명령은 화면에 문자로 표시하지 않습니다.
### 메모장 메뉴
#### 파일
- 열기 (`Ctrl+O`)
- 갈무리 폴더 열기
- 마지막 갈무리 열기
- 현재 파일 닫기 (`Ctrl+W`)
- 저장 (`Ctrl+S`)
- 다른 이름으로 저장 (`Ctrl+Shift+S`)
- TinTin으로 나가기 (`Alt+G`)
- 자동 저장 복구
- 닫기 (`Esc`)
#### 편집
- 실행취소/다시실행 (`Ctrl+Z`, `Ctrl+Y`)
- 잘라내기/복사/붙여넣기 (`Ctrl+X/C/V`)
- 삭제 (`Del`)
- 문서 처음/마지막 (`Ctrl+Home/End`)
- 화면 처음/마지막 (`Ctrl+PageUp/Down`)
- 뒤쪽 지우기 (`Alt+Y`)
- 앞/뒤 단어 지우기 (`Ctrl+Backspace`, `Ctrl+Delete`)
- 한 줄 지우기 (`Ctrl+L`)
- 모두 선택 (`Ctrl+A`)
#### 찾기
- 찾기 (`Ctrl+F`)
- 다음/이전 (`F3`, `Shift+F3`)
- 바꾸기 (`Ctrl+H`)
- 행 찾아가기 (`Ctrl+G`)
#### 서식
- 글자색/선색, 배경색, 폰트
- UTF-8/CP949 인코딩
- 자동 줄바꿈 열 너비
- 선택영역 정렬
- 구문 테마
- TinTin++, C/C++, C# 구문 강조
- 조판 부호 보기
#### 특수
- 그리기 모드 (`Alt+D`)
- 마지막 기호 반복 (`Ctrl+R`)
- 자동저장
- 행 번호
- 특수 기호 (`F4`)
그리기 모드에서는 방향키가 선 또는 선택 기호를 그리며 이동합니다.
## 환경설정
### 일반 설정
- 화면 가로칸/세로줄
- 상하좌우 여백
- ClearType
- 왼쪽/중앙/오른쪽 정렬
- 접속 후 60초 자동 로그인 패턴 검사
### 폰트 및 색상
- Mud둥근모 우선 사용
- 메인 로그 폰트·글자색·배경색
- 입력창 폰트·글자색·배경색
- GMCP 창은 메인 폰트를 함께 사용
### 접속 유지
- 사용 여부
- 전송 간격
- 명령; 비어 있으면 빈 Enter
### 기타 설정
- 종료 시 입력창 저장
- 실행 시 빠른 연결/주소록 표시
- Backspace 현재 행 제한
- X 버튼 트레이 숨기기
- 모든 Beep 사용
- 모호한 동아시아 문자 폭 넓게 처리
- 메인창 항상 위
- 갈무리창 자동 붙기
- 블럭 설정 후 동작
### 단축버튼
10개 버튼의 라벨·ON·OFF·토글 설정.
### GMCP
정보창 원문 영역에 표시할 모듈 선택. Map은 전용 지도창에서만 사용합니다.
## 상태바·변수·줄임말·타이머
### 상태바
- 1~5칸
- 칸별 형식 문자열
- 왼쪽·가운데·오른쪽 정렬
- `$변수명`을 현재 변수 값으로 확장
- 세션 가동시간 변수 `$uptime`
### 변수
문자열·숫자·참/거짓·목록 형태의 값을 저장하고 상태바 등에 사용합니다.
### 줄임말
입력한 한 줄이 등록 이름과 완전히 일치할 때 지정한 명령으로 바꿔 전송합니다.
### 타이머
지정 시간마다 명령을 전송합니다. 지나치게 짧은 간격은 서버의 플러딩 제한을 초과할 수 있습니다.
## 빌드
### 권장: Visual Studio 2022 MSVC
`x64 Native Tools Command Prompt for VS 2022`:
```bat
cd /d D:\Tintin_gui\1
build_msvc.bat
```
빌드 스크립트는:
1. 이전 `.obj`, `Resource.res`, `ktin.exe` 삭제
2. `Resource.rc` 컴파일
3. 모든 `.cpp`를 C++17 UTF-8 Unicode Release로 컴파일
4. `ktin.exe` 생성
`MudDunggeunmo-Regular.ttf not found`는 오류가 아니라 폰트를 내장하지 않았다는 안내입니다. 같은 폰트 파일을 실행 파일 옆에 두면 프로세스 전용으로 불러올 수 있습니다.
### WSL MinGW-w64
Ubuntu/WSL:
```bash
sudo apt update
sudo apt install -y build-essential mingw-w64
cd /mnt/d/Tintin_gui/1
make clean
make -j"$(nproc)"
```
확인:
```bash
x86_64-w64-mingw32-g++ --version
x86_64-w64-mingw32-windres --version
file ktin.exe
```
리소스 빌드가 실패할 때만:
```bash
make nores
```
설치 대상 지정:
```bash
make install INSTALL_DIR=/mnt/d/배포/KTin
```
최종 Windows 배포본은 MSVC 빌드를 권장합니다.
## 실행 파일과 설정 파일
| 경로 | 용도 |
|---|---|
| `ktin.exe` | KTin GUI |
| `bin\tt++.exe` | KTin이 실행하는 TinTin++ |
| `config.ini` | 화면, 폰트, 환경, GMCP, 보조창 위치 |
| `sessions.ini` | 주소록, 기능키 및 세션 관련 값 |
| `main.tin` | 선택적인 TinTin++ 시작 스크립트 |
| `log\` | 갈무리 로그 |
| `저장\` | 화면/블럭 내보내기 |
| `autosave\` | 메모장 자동 저장 복구 |
배포 압축과 Git에는 다음을 제외하는 것을 권장합니다.
```gitignore
.vs/
bin/
obj/
x64/
x86/
Debug/
Release/
*.bak
*.bak_*
*.old
*.tmp
*.obj
*.res
*.exe
*.pdb
*.ilk
*.log
```
실행에 필요한 `bin\tt++.exe`와 DLL을 별도 배포 구조로 포함할 때는 위 제외 규칙을 배포 방식에 맞게 조정합니다.
## 문제 해결
### `patch` 명령이 Windows CMD에서 안 됨
```bat
wsl bash -lc "cd /mnt/d/Tintin_gui/1 && patch --dry-run -p1 < 파일.patch"
wsl bash -lc "cd /mnt/d/Tintin_gui/1 && patch -p1 < 파일.patch"
```
Windows CMD의 줄 이어쓰기는 `\`가 아닙니다. 위처럼 한 줄로 실행합니다.
### 전각 지도에 빈 줄이 생김
`모호한 동아시아 문자 폭을 넓게 처리` 옵션을 서버 출력과 맞춥니다. KTin 2.7은 오른쪽 끝 채움 공백이 전각 문자 계산 차이로 빈 행이 되는 경우를 보정합니다.
### GMCP 창이 비어 있음
- GMCP 브리지 수정본 `tt++.exe`가 `bin`에 있는지 확인
- 서버가 해당 GMCP 모듈을 실제로 보내는지 확인
- 환경설정의 체크박스는 수신 요청이 아니라 표시 선택
### 새 창 자동 재연결이 다른 서버로 감
2.7 소스는 각 프로세스와 접속마다 고유 내부 세션명을 사용합니다. 과거 `tt++.exe`나 `ktin.exe`가 섞이지 않았는지 확인합니다.
### 빌드 후 실행 파일이 바뀌지 않음
```bat
dir /s /od D:\Tintin_gui\1\*.exe
```
가장 최근 `ktin.exe`를 실행·배포합니다.
### C++ `std::max`에서 LONG/int 오류
Windows의 `RECT`, `TEXTMETRIC` 값은 `LONG`일 수 있습니다. `static_cast<int>`로 같은 형식으로 맞춰야 합니다. 2.7 소스에는 현재 알려진 GMCP 관련 형식 수정이 포함되어 있습니다.
## 라이선스
KTin 소스의 라이선스와 TinTin++ 원본 라이선스를 각각 확인하십시오. 폰트 파일은 라이선스를 확인하지 않은 상태로 저장소나 릴리스에 포함하지 마십시오.
## 이전 README 통합 기록
아래는 삭제된 과거 README 파일의 내용을 파일별로 보존한 기록입니다. 현재 사용법과 충돌할 때는 이 문서 상단의 KTin 2.7 설명과 실제 소스를 우선합니다.
### README_BUILD_FIX10.txt
````text
KTin safe buildfix10
- 메모장 그리기 모드에서 방향키 이동 시 선/특수기호가 그려지지 않던 문제 수정.
- 원인: MemoEditSubclassProc에서 DefSubclassProc를 먼저 호출해 RichEdit가 방향키를 소비한 뒤라 그리기 루틴이 실행되지 않았음.
- 수정: WM_KEYDOWN을 먼저 가로채고, 그리기 모드 ON일 때 방향키를 MemoDrawStep 또는 MemoBrushStep으로 연결.
- Alt+D도 메모장 편집창 포커스 상태에서 그리기 모드 토글 가능.
````
### README_BUILD_FIX12.txt
````text
KTin safe buildfix12
=====================
추가 기능:
- 보기 > 갈무리 > 전체 수신 로그 저장
화면 캡처/정규식 분류 없이 TinTin++에서 수신된 텍스트를 UTF-8 로그 파일로 저장합니다.
저장 위치: 실행 폴더\log\YYYYMMDDHHMMSS.txt
- 보기 > 갈무리 > 갈무리 보기 > 전체/잡담/경매/아이템 획득/사용자 문자열
저장된 로그 파일을 1초 간격으로 tail 방식으로 읽어 새로 추가된 줄만 보여줍니다.
KTin 본체의 화면 렌더링과 분리되어 있으며, Tail 창은 표시 줄 수를 제한합니다.
- 보기 > 갈무리 > 갈무리 폴더 열기
주의:
- Tail 필터는 본체 수신/렌더링 경로에서 실행하지 않습니다.
- 사용자 문자열은 정규식이 아니라 단순 포함 검색입니다.
- 정규식 기반 트리거/채팅캡처는 계속 제거 상태입니다.
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
````
### README_BUILD_FIX13.txt
````text
KTin buildfix13
================
수정 내용:
1. log_tail.cpp 315줄의 std::max/LONG/int 충돌 오류 수정.
2. 보기 > 갈무리 메뉴의 하위 메뉴 구성을 보강.
3. 갈무리 보기 필터를 사용자가 직접 설정할 수 있도록 추가.
- 보기 > 갈무리 > 갈무리 필터 설정...
- 잡담 / 경매 / 대화 / 아이템 획득 문자열을 세미콜론(;)으로 구분해서 설정.
- 정규식은 사용하지 않음. 단순 포함 검색만 사용하여 안정성을 우선함.
- 잡담 특수값:
[]: => [이름]: 내용 형식
<>: => <이름>: 내용 형식
4. 보기 > 갈무리 > 갈무리 보기 > 대화 항목 추가.
빌드:
build_msvc.bat
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
````
### README_BUILD_FIX15.txt
````text
KTin buildfix15
수정 내용:
- 접속 유지 명령이 동작하지 않던 문제 수정.
- 원인: SendKeepAliveNow()가 g_app->isConnected == false 이면 바로 return 했음.
안전판에서는 실제 접속되어 있어도 isConnected가 false로 남을 수 있으므로 접속 유지 명령이 차단됨.
- 변경: keepAliveEnabled가 켜져 있고 명령 문자열이 비어 있지 않으면 TinTin++ 프로세스로 그대로 전송.
````
### README_BUILD_FIX16.txt
````text
KTin safe buildfix16
====================
변경 내용:
- 자동 로그인 패턴 기능을 복원했습니다.
- 환경설정 일반 설정에 아이디/비밀번호/성공/실패 패턴 입력을 복원했습니다.
- 주소록 새 주소/수정 팝업에 주소별 아이디/비밀번호/성공/실패 패턴 입력을 복원했습니다.
- 패턴 검사는 접속 후 60초 동안만 동작합니다.
- 아이디/비밀번호 전송이 끝나거나 성공 패턴/실패 패턴을 만나면 60초 전이라도 검사를 중지합니다.
- 접속유지 명령은 자동 로그인 검사 중에는 보내지 않고, 검사 종료 후 동작합니다.
- 자동 재접속은 복원하지 않았습니다. 재접속은 TinTin++ 스크립트에서 처리하는 방향입니다.
주의:
- 이 기능은 화면을 계속 감시하지 않고 접속 직후 제한 시간 안에서만 검사합니다.
- 패턴은 정규식이 아니라 단순 포함 문자열 검사입니다.
````
### README_BUILD_FIX17.txt
````text
KTin safe buildfix17
변경 내용:
1. 사용자 갈무리 패턴 입력창을 부모 창 중앙에 띄우도록 수정했습니다.
2. 사용자 갈무리 패턴/갈무리 필터 설정 창의 컨트롤 폰트를 기본 메뉴/UI 폰트로 통일했습니다.
3. 갈무리 필터 설정을 확장했습니다.
- 잡담
- 대화
- 경매
- 아이템 획득
- 경험치
- 사용자 정의 1~3: 이름과 패턴을 직접 설정 가능
4. 갈무리 보기 메뉴에 경험치, 사용자 정의 1~3 항목을 추가했습니다.
5. 필터 설정 저장 후 메뉴를 다시 만들어 사용자 정의 이름이 메뉴에 반영되게 했습니다.
필터 방식:
- 정규식이 아니라 단순 포함 검색입니다.
- 여러 패턴은 세미콜론(;)으로 구분합니다.
- []: 는 [이름]: 형식, <>: 는 <이름>: 형식을 의미합니다.
````
### README_BUILD_FIX18.txt
````text
KTin safe buildfix18
- 주소록 비밀번호가 다시 열 때 지워지거나 깨지는 문제를 수정했습니다.
이전 빌드에서 평문으로 저장된 값은 그대로 읽고, 새 저장분은 INI 안전 HEX 형식으로 저장합니다.
- 자동 로그인 패턴 UI를 성공/실패가 아니라 아이디 실패패턴 2개, 비밀번호 실패패턴 2개로 정리했습니다.
내부 저장 키는 호환을 위해 기존 success1/success2, fail1/fail2를 재사용합니다.
- 자동 로그인 검사 로직도 성공패턴 검사를 제거하고, 아이디 실패/비밀번호 실패만 60초 제한 안에서 검사합니다.
- ANSI 테마 미리보기에서 숫자 코드(37/90/91)를 제거하고 일반색/밝은색을 좌우로 따로 보여주도록 수정했습니다.
````
### README_BUILD_FIX19.txt
````text
buildfix19
- 주소록 새 주소/수정에 "연결 실패/끊김 시 자동 재연결" 체크박스를 복구했습니다.
- 주소록 저장/불러오기에서 al_recon_N 값을 다시 보존합니다.
- 주소록으로 연결한 세션에서 TinTin++의 접속 실패/종료/Broken pipe/Timed out 문구를 감지하면 3초 뒤 같은 주소록 항목으로 재접속합니다.
- 사용자가 메뉴의 연결 끊기(#zap)를 누른 경우에는 hasActiveSession을 false로 만들기 때문에 자동 재연결하지 않습니다.
- 빠른 연결은 주소록 항목이 아니므로 자동 재연결 대상이 아닙니다.
````
### README_BUILD_FIX20.txt
````text
buildfix20
- ANSI 테마 미리보기에서 일반색/밝은색 샘플 사이 간격을 줄여 오른쪽 글자가 잘리지 않도록 수정했습니다.
````
### README_BUILD_FIX21.txt
````text
KTin buildfix21
================
변경 내용
1. 보기 메뉴 구조 정리
- 보기 > 갈무리
* 갈무리 켜기 / 갈무리 끄기
* 갈무리 폴더 열기
- 보기 > 갈무리 보기 를 상위 메뉴로 이동
* 전체, 잡담, 경매, 대화, 아이템 획득, 경험치, 사용자1~3, 임시 문자열
- 보기 > 갈무리 필터 설정... 을 상위 메뉴로 이동
2. 갈무리 켜기/끄기 메뉴명 동적 변경
- 갈무리가 꺼져 있으면 "갈무리 켜기"
- 갈무리가 켜져 있으면 "갈무리 끄기"
3. 갈무리 보기 timestamp
- 전체 보기: 원문 그대로 표시
- 잡담/대화/경매/아이템/경험치/사용자 정의/임시 문자열 보기:
각 줄 앞에 [HH:MM:SS] timestamp 표시
4. 사용자 문자열 메뉴 이름 정리
- "사용자 문자열..."은 저장되는 사용자4가 아니라 1회성 검색이므로
"임시 문자열..."로 이름을 바꿈
- 사용자 정의 저장 필터는 사용자1, 사용자2, 사용자3만 유지
빌드
build_msvc.bat
````
### README_BUILD_FIX22.txt
````text
KTin buildfix22
================
변경 내용:
1. 보기 -> 갈무리 메뉴의 토글 문구를 "갈무리 켜짐" / "갈무리 꺼짐"으로 변경.
2. 갈무리 보기 창을 다중 창 방식으로 변경.
- 잡담 창을 연 뒤 경매 창을 다시 열어도 기존 창이 닫히지 않습니다.
3. 갈무리 보기 창에 탭 컨트롤 추가.
- 기본은 메뉴에서 선택한 항목 1개 탭만 표시합니다.
- 갈무리 보기 창 우클릭 또는 창 메뉴의 보기 -> 탭 설정에서 표시할 탭을 선택할 수 있습니다.
- 각 창마다 표시 탭을 다르게 둘 수 있습니다.
4. 갈무리 보기 창 메뉴 숨기기/보이기 지원.
- 메뉴 숨김 상태에서는 우클릭 메뉴에 "메뉴 보이기"가 표시됩니다.
5. 갈무리 보기 창의 왼쪽 드래그 선택 복사 지원.
- 선택 후 마우스 왼쪽 버튼을 놓으면 선택 내용이 클립보드로 복사됩니다.
- 우클릭 메뉴의 선택/전체 복사도 지원합니다.
6. 갈무리 보기 창의 빈 마지막 줄 문제 완화.
- 새 줄을 append할 때 끝에 CRLF를 붙이지 않고, 다음 줄 앞에 CRLF를 붙여 마지막 빈 줄 커서를 줄였습니다.
주의:
- Tail 필터링은 기존처럼 로그 파일의 새로 추가된 줄만 읽어 단순 포함 검색합니다.
- KTin 본체의 터미널 렌더링/수신 처리 경로에는 정규식 기반 실시간 캡처를 넣지 않았습니다.
````
### README_BUILD_FIX23.txt
````text
buildfix23
- 프로그램 시작 직후에는 자동 로그인 60초 창을 열지 않도록 수정했습니다.
자동 로그인 패턴 검사는 #session/#ses/#connect, 빠른연결, 주소록 연결이 실제로 발생한 뒤에만 켜집니다.
- 접속유지 명령은 isConnected 또는 isSessionActive가 true인 경우에만 전송됩니다.
미접속 상태에서 봐/점수 같은 접속유지 명령이 반복 출력되는 문제를 막았습니다.
- TinTin++ 출력 중 "현재 세션이 활성화되어 있지 않습니다" 문구를 연결 끊김/미접속 상태로 인식하도록 추가했습니다.
- 주소록 자동 재연결은 주소록 항목에서 재연결을 체크한 경우에만 기존처럼 3초 뒤 수행합니다.
````
### README_BUILD_FIX24.txt
````text
KTin safe buildfix24
변경 내용:
1. 갈무리 보기 창의 하단 가로 스크롤바 제거
- 갈무리 보기 출력 EDIT 컨트롤에서 WS_HSCROLL / ES_AUTOHSCROLL 제거.
2. 갈무리 보기 창 상태바 숨기기/보기 지원
- 보기 메뉴에 상태바 숨기기 / 상태바 보기 항목 추가.
- 상태바를 숨기면 편집 영역이 아래까지 확장됨.
- 메뉴를 숨긴 상태에서도 우클릭 메뉴에서 상태바 숨기기/보기를 실행 가능.
3. 갈무리 보기 창 탭 자동 숨김
- 표시 탭이 1개뿐이면 탭 컨트롤을 숨김.
- 제목 표시줄에 이미 “갈무리 보기 - 잡담”처럼 표시되므로 단일 탭은 보이지 않게 함.
- 탭 설정에서 2개 이상 선택하면 탭 컨트롤이 다시 나타남.
빌드:
build_msvc.bat
````
### README_BUILD_FIX25.txt
````text
KTin buildfix25
================
1. 갈무리 로그 저장 방식을 원본 ANSI 바이트 저장으로 변경했습니다.
- 본체 화면 렌더링 경로에서 패턴 검색은 하지 않습니다.
- 갈무리 보기의 필터 검색은 ANSI 제거 텍스트 기준으로 합니다.
2. 갈무리 필터 설정에 ANSI 보기 체크박스를 추가했습니다.
- 전체/잡담/대화/경매/아이템 획득/경험치/사용자1~3별로 선택 가능합니다.
- ANSI 보기 ON: 검정 배경 + 현재 메인 ANSI 테마 기준으로 색상 표시합니다.
- ANSI 보기 OFF: ANSI 코드를 제거한 일반 텍스트로 표시합니다.
3. 보기 > 갈무리 메뉴에 갈무리창 모두 닫기 메뉴를 추가했습니다.
- 갈무리 보기 창이 1개 이상 열려 있을 때만 메뉴에 표시됩니다.
- 갈무리 보기 창이 없으면 메뉴에서 숨겨집니다.
주의:
- buildfix25부터 새로 저장되는 갈무리 로그는 ANSI 원문을 포함합니다.
- 이전 빌드에서 만든 일반 텍스트 로그도 갈무리 보기에서 계속 읽을 수 있습니다.
````
### README_BUILD_FIX26.txt
````text
buildfix26
- 갈무리 보기 창의 출력창/상태바/탭 글꼴을 메인 출력창 글꼴과 동일하게 맞췄습니다.
- 보기/설정에서 메인 출력창 폰트를 바꾸면 이미 열려 있는 갈무리 보기 창도 즉시 같은 폰트로 갱신됩니다.
- ANSI 보기 색상은 유지하고 글꼴/크기만 바꾸도록 처리했습니다.
````
### README_BUILD_FIX28.txt
````text
buildfix28
주소록 리스트 왼쪽 검은 선/아이콘 여백 보정.
- 주소록 ListView에 행 높이 조정용 더미 small image list를 붙이지 않도록 변경
- LVS_EX_DOUBLEBUFFER 추가
````
### README_BUILD_FIX30.txt
````text
Buildfix30 - 터미널 화면 여백 설정 추가
변경 사항:
- 옵션 → 환경설정 → 일반 설정에 화면 여백 설정(px) 추가
왼쪽 / 오른쪽 / 위 / 아래
- 기본값은 모두 0px
- 화면 정렬은 설정된 여백을 제외한 영역 안에서 계산됨
왼쪽: 왼쪽 여백부터 시작
중앙: 왼쪽/오른쪽 여백을 제외한 영역의 중앙
오른쪽: 오른쪽 여백을 남기고 붙임
- 출력 높이가 화면보다 클 때는 아래 여백을 보존하고 프롬프트가 보이도록 아래쪽 기준으로 정렬
- 보기 → 화면 여백 없애기에서 창 크기를 맞출 때도 설정된 여백을 포함해 계산
````
### README_BUILD_FIX31.txt
````text
KTin buildfix31
변경 사항:
1. 갈무리 보기 창 자동 붙기(스냅) 추가
- 갈무리창을 메인창/다른 갈무리창 가까이 가져간 뒤 마우스를 놓으면 자동으로 붙습니다.
- 위/아래로 붙을 때는 대상 창의 가로폭에 맞춥니다.
- 모니터 작업 영역을 벗어나면 세로 크기를 줄입니다.
- Shift 키를 누른 채 이동하면 자동 붙기를 임시로 무시합니다.
2. 항상 위 옵션 추가
- 옵션 > 환경설정 > 기타 설정: 메인창 항상 위
- 갈무리 보기 창 메뉴/우클릭 메뉴: 항상 위
3. 주소록 새 주소/수정 창 높이 보정
- '접속 후 60초...' 안내와 확인/취소 버튼 사이의 과도한 빈 공간을 줄였습니다.
4. 접속 유지 상태 판정 보강
- TinTin++의 접속 성공/끊김 문구 감지 tick을 추가했습니다.
- isConnected/isSessionActive가 흔들려도 마지막 접속 성공 이후 끊김 감지가 없으면 접속유지가 계속 동작하도록 보강했습니다.
- 새 접속 시도 시 이전 접속 성공 상태를 초기화합니다.
5. 갈무리 보기 파일 추적 보강
- 갈무리 파일이 새로 생성/변경되면 이미 열린 갈무리 보기 창도 현재 갈무리 파일을 따라가도록 수정했습니다.
````
### README_BUILD_FIX32.txt
````text
buildfix32
- 갈무리 보기창 붙이기 기준을 DWM 실제 표시 프레임 기준으로 바꿔 메인창과 갈무리창 사이에 보이는 간격을 줄였습니다.
- 메인창이 이동할 때 메인창 위/아래/좌우에 붙어 있는 갈무리 보기창도 함께 이동합니다.
- 갈무리창이 여러 개 위아래로 붙어 있는 경우, 메인창에 붙은 창을 따라 같은 스택의 갈무리창도 같이 이동하도록 보강했습니다.
- Shift를 누른 채 갈무리창을 이동하면 기존처럼 자동 붙기를 임시 무시합니다.
````
### README_BUILD_FIX33.txt
````text
KTin buildfix33
수정 내용:
1. 주소록/환경설정의 아이디 실패/비번 실패 패턴 입력칸 제거
- 자동 로그인은 접속 후 60초 동안 아이디 패턴/비밀번호 패턴만 검사합니다.
- 아이디와 비밀번호 전송 후 즉시 패턴 검사를 끕니다.
2. 환경설정 적용 시 갈무리가 꺼지는 문제 수정
- 메인창 항상 위 체크/해제 등 환경설정 적용이 갈무리 상태를 변경하지 않습니다.
- 갈무리는 보기 -> 갈무리 -> 갈무리 켜짐/꺼짐 메뉴에서만 켜고 끕니다.
3. 메인창 항상 위 체크/해제 시 갈무리 보기창이 검정색으로 변하는 문제 완화
- 실제 메인 출력 폰트가 바뀐 경우에만 갈무리 RichEdit 전체 폰트를 다시 적용합니다.
- 단순 topmost 변경 때는 갈무리창 ANSI 글자색을 다시 만지지 않습니다.
4. 주소록 새 주소/수정 팝업 높이 축소
- 제거된 실패 패턴 입력칸 공간을 줄였습니다.
5. 갈무리 보기 중복 출력 방지 보정
- Tail 처리 중 같은 줄이 두 번 추가될 수 있던 중복 호출을 제거했습니다.
````
### README_BUILD_FIX34.txt
````text
KTin buildfix34
주요 수정:
1. 갈무리 보기 ANSI RichEdit 색상 출력 안정화
- 장시간 테스트에서 ANSI 보기 켜짐 상태가 UI 멈춤/검정 글자/메뉴 무응답 원인으로 의심되어 일단 비활성화.
- 갈무리 로그 파일에는 ANSI 원문이 계속 저장됨.
- 갈무리 보기창은 ANSI 코드를 제거한 평문으로 표시.
- 필터 설정의 ANSI 보기 체크박스는 호환을 위해 남기되 회색 처리.
2. 갈무리 보기 공통 tail 타이머
- 갈무리 보기창마다 별도 타이머를 돌리지 않고 대표 창 하나의 타이머가 모든 갈무리창을 순서대로 갱신.
- 각 창 처리 중 재진입 방지 플래그 추가.
3. 갈무리 보기 상태바 줄 수 보정
- 표시 버퍼는 2000줄까지만 유지하지만, 상태바의 줄 카운터는 누적 매칭 줄 수를 표시.
- 예: 4026줄 | 표시 2000줄
4. 갈무리 보기 상태바 폰트 변경
- 상태바는 메인 로그 폰트가 아니라 Windows 메뉴/대화상자 계열 폰트를 사용.
5. 파일 메뉴에 새 창 띄우기 추가
- 현재 KTin 실행 파일을 한 번 더 실행해 새 프로그램 창을 띄움.
빌드:
cd /d D:\Tintin_gui\1
build_msvc.bat
````
### README_BUILD_FIX35.txt
````text
KTin buildfix35
- MudDunggeunmo-Regular.ttf를 소스 폴더에 복사한 뒤 build_msvc.bat를 실행하면 exe 리소스로 포함합니다.
- 사용자가 폰트를 Windows에 설치하지 않아도 KTin 실행 중에는 Mud둥근모를 사용할 수 있습니다.
- 폰트 파일이 없으면 일반 빌드로 진행됩니다. 이 경우 exe 옆에 MudDunggeunmo-Regular.ttf를 두면 실행 시 현재 프로세스 전용으로 불러옵니다.
- 폰트 파일은 라이선스 문제 때문에 이 압축에는 포함하지 않았습니다.
````
### README_BUILD_FIX36.txt
````text
KTin 2.6-a04 build fix 36
==========================
수정 내용
---------
- 기본 입력창은 단일 행 EDIT 컨트롤이어서 여러 행 텍스트를 붙여넣으면 첫 줄만 남던 문제를 수정했습니다.
- 입력창에서 Ctrl+V, Shift+Insert, 우클릭 붙여넣기 등으로 WM_PASTE가 들어올 때 클립보드에 줄바꿈이 있으면 전체 내용을 감지합니다.
- CRLF(Windows), LF(Unix), CR(Mac) 줄바꿈을 모두 ConPTY의 Enter 입력인 CR로 통일해 TinTin++로 한 번에 전달합니다.
- 클립보드 마지막 줄에 줄바꿈이 없어도 마지막 줄까지 전송합니다.
- 빈 줄이 여러 개 포함된 경우에도 줄 수를 유지합니다.
- 한 줄짜리 클립보드는 기존처럼 현재 입력창에 붙여넣습니다.
- 붙여넣기 과정은 클립보드를 읽기만 하며 원래 클립보드 내용을 변경하지 않습니다.
수정 파일
---------
- input.cpp
- utils.cpp
- utils.h
사용 예
-------
1. MUD 게시판에서 글쓰기 모드로 들어갑니다.
2. 메모장에서 여러 행의 본문을 복사합니다.
3. KTin 입력창에서 Ctrl+V를 누릅니다.
4. 여러 행이 즉시 순서대로 MUD에 전달됩니다.
5. 입력창에 마침표(.)를 입력하고 Enter를 눌러 글쓰기를 끝냅니다.
확인 항목
---------
- 한 줄 붙여넣기는 입력창에만 들어가는지 확인합니다.
- 두 줄 이상 붙여넣으면 모든 줄이 MUD 글쓰기 모드에 들어가는지 확인합니다.
- 본문 중간의 빈 줄이 유지되는지 확인합니다.
- 한글, 영문, 특수문자가 깨지지 않는지 확인합니다.
- 붙여넣기 후 Windows 클립보드 원문이 그대로 남아 있는지 확인합니다.
빌드
----
Windows 개발자 명령 프롬프트:
build_msvc.bat
WSL MinGW 환경:
make clean
make
추가 수정: 전각·모호한 동아시아 문자 행의 빈 행 보정
---------------------------------------------------
- 지도뿐 아니라 박스 테두리, 전각 기호, 도형 문자가 들어간 고정폭 출력에서도 한 줄씩
빈 행이 끼어 보이던 문제를 수정했습니다.
- 서버 또는 ConPTY가 한 줄을 화면 폭만큼 ASCII 공백으로 채워 보내는 경우, KTin이
모호한 동아시아 문자를 2칸으로 계산하면서 줄의 계산 폭이 ConPTY보다 길어졌습니다.
- 그 결과 줄 끝의 채움 공백 일부가 다음 행으로 자동 줄바꿈되어, 공백만 있는 행이 실제
터미널 버퍼에 하나씩 추가됐습니다. 환경설정 창을 닫으면 ConPTY 크기 재설정과 화면
재출력이 일어나 기존 공백 행이 사라져 보였습니다.
- 현재 행에 2칸 문자가 있고 오른쪽 끝 자동 줄바꿈 대기 상태일 때 뒤따르는 ASCII 공백은
줄 끝 채움으로 보고 버리도록 했습니다. 일반 본문 공백과 실제 다음 줄 문자는 유지됩니다.
- 효과가 없었던 전체 화면 강제 다시 그리기 보정은 제거하고 기존 부분 갱신 방식으로
되돌렸습니다.
추가 수정 파일
--------------
- terminal_buffer.cpp
- terminal_view.cpp
추가 확인 항목
--------------
- 환경설정의 "모호한 동아시아 문자 폭을 넓게 처리"를 켠 상태에서 확인합니다.
- 지도, 누구, 도움말, 박스 테두리 등 전각 문자가 들어간 출력에 빈 행이 생기지 않는지 확인합니다.
- 환경설정 창을 열었다 닫지 않아도 최초 출력부터 정상인지 확인합니다.
- 일반 ASCII 장문이 실제 화면 폭을 넘어갈 때 정상적으로 다음 줄로 넘어가는지 확인합니다.
추가 수정: 새 창별 세션 및 자동 재연결 분리
-------------------------------------------
- 빠른 연결의 고정 TinTin++ 세션명 `new`와 주소록 표시 이름을 실제 세션 식별자로
재사용하던 구조를 제거했습니다.
- 각 KTin 프로세스 ID와 접속 순번을 조합해 빠른 연결과 주소록 접속마다 고유한
내부 세션명을 생성합니다.
- 주소록의 이름은 화면 표시용으로만 사용하며 세션 종료와 재연결에는 사용하지 않습니다.
- 자동 재연결은 현재 창이 메모리에 보관한 주소록 항목 사본만 사용합니다.
- 연결이 끊기면 기존 내부 세션을 먼저 정리하고 500ms 뒤 새 내부 세션명으로
다시 연결하므로, 이전 세션이나 다른 창의 서버로 전환되지 않습니다.
- 세션 전환을 위해 보낸 `#zap`의 종료 문구는 자동 재연결 실패로 오인하지 않습니다.
- 자동 연결 전환에서는 KTin이 직접 만든 내부 세션만 이름으로 종료합니다.
추적 중인 세션이 없을 때는 인자 없는 `#zap`을 보내지 않습니다.
- 주소록은 변경 시 즉시 저장하고, 각 창 종료 시 오래된 주소록 사본을 다시 저장하지 않아
다른 창의 주소록 변경을 덮어쓰지 않습니다.
추가 수정 파일
--------------
- app_state.h
- utils.h
- utils.cpp
- address_book.h
- address_book.cpp
- dialogs.cpp
- auto_login.cpp
- main.cpp
확인 항목
---------
1. 첫 번째 창에서 서버 A에 접속합니다.
2. 파일 → 새 창 띄우기로 두 번째 창을 열고 서버 B 주소록 항목에 접속합니다.
3. 서버 B의 연결을 끊어 자동 재연결을 발생시킵니다.
4. 두 번째 창이 서버 A가 아니라 서버 B로 다시 접속하는지 확인합니다.
5. 빠른 연결과 주소록을 번갈아 사용한 뒤에도 이전 세션으로 돌아가지 않는지 확인합니다.
추가 수정: 블럭 선택 완료 동작 설정
-----------------------------------
- 옵션 → 환경 설정 → 기타 설정에 `블럭 설정 후` 드롭다운을 추가했습니다.
- `반전선택 클립보드`: 마우스 왼쪽 드래그를 놓으면 선택 내용을 즉시
클립보드로 복사하고 반전 선택을 해제합니다.
- `반전선택 파일저장`: 드래그를 놓으면 저장 대화상자를 열고 선택 내용을 UTF-8 BOM
텍스트 파일로 저장한 뒤 반전 선택을 해제합니다.
- 기본 저장 위치는 KTin 실행 파일 폴더 아래의 `저장` 디렉토리이며, 없으면 자동 생성합니다.
- 저장 대화상자의 기본 파일명은 `YYYYMMDD_HHMMSS.txt` 형식으로 미리 입력됩니다.
- `선택메뉴 띄우기`: 드래그를 놓으면 `복사하기 / 파일저장 / 닫기` 메뉴를 표시합니다.
세 항목 모두 작업 후 반전 선택을 해제합니다.
- 단순 클릭으로 화면의 단어를 MUD에 보내는 기존 기능은 그대로 유지합니다.
추가 수정 파일
--------------
- constants.h
- app_state.h
- settings.cpp
- utils.h
- utils.cpp
- terminal_view.cpp
확인 항목
---------
1. 기타 설정의 드롭다운 세 항목이 보이고 재실행 뒤에도 선택값이 유지되는지 확인합니다.
2. 클립보드 모드에서 드래그를 놓자마자 내용이 복사되고 선택 표시가 사라지는지 확인합니다.
3. 파일저장 모드에서 `저장` 폴더가 자동 생성되고 날짜·시간 파일명이 기본 입력되는지 확인합니다.
4. 선택메뉴 모드의 복사하기, 파일저장, 닫기가 각각 정상 동작하는지 확인합니다.
5. 화면의 단어를 단순 클릭했을 때 기존처럼 MUD 입력으로 전달되는지 확인합니다.
긴급 수정: 첫 접속 시 TinTin++ 종료 방지
-----------------------------------------
- 주소록 또는 빠른 연결을 처음 사용할 때 추적 중인 세션이 없는데도 인자 없는 `#zap`을
보내 TinTin++ 기본 세션이 종료되던 오류를 수정했습니다.
- 자동 서버 전환과 자동 재연결은 KTin이 알고 있는 내부 세션명이 있을 때만
`#zap {세션명}`을 전송합니다.
- `파일 -> 연결 끊기`를 사용자가 직접 선택한 경우에만 이름을 모르는 현재 세션에
인자 없는 `#zap`을 사용할 수 있습니다.
수정 파일
---------
- utils.h
- utils.cpp
- main.cpp
- README_BUILD_FIX36.txt
확인 항목
---------
1. KTin을 새로 실행한 직후 주소록 접속 시 `#zap`과 Goodbye 문구 없이 접속되는지 확인합니다.
2. KTin을 새로 실행한 직후 빠른 연결도 정상 접속되는지 확인합니다.
3. 서버 A에서 서버 B로 전환할 때 기존 내부 세션만 닫히고 서버 B에 접속되는지 확인합니다.
4. 새 창의 서버가 끊겼을 때 그 창이 사용하던 서버로 자동 재연결되는지 확인합니다.
## 블럭·화면 복사/저장 확장 및 ANSI 코드 보존
- `블럭 설정 후`에 일반/ANSI 클립보드, 일반/ANSI 파일저장, 선택메뉴의 다섯 동작을 제공합니다.
- 선택메뉴에는 `복사하기 / 파일저장 / 코드로 복사하기 / 코드로 파일저장 / 닫기`가 표시됩니다.
- 로그창 오른쪽 클릭 메뉴는 `복사하기 > / 파일저장 > / 지우기 > / 닫기` 하위 메뉴로 확장됩니다.
- 현재화면, 선택블럭, 지난화면, 전체화면을 각각 일반 텍스트 또는 ANSI 코드 포함 텍스트로 복사/저장할 수 있습니다.
- `코드로` 내보내기는 화면 셀의 글자색·배경색·굵기를 ANSI SGR true-color 코드로 재구성하며 각 행 끝에서 색상을 초기화합니다.
- 일반 텍스트 파일은 UTF-8 BOM, ANSI 코드 포함 파일은 실제 ESC 바이트가 보존되도록 UTF-8(BOM 없음)으로 저장합니다.
- 저장 대화상자의 기본 폴더는 실행 파일 옆 `저장` 폴더이고, 기본 파일명은 `YYYYMMDD_HHMMSS.txt`입니다.
- 편집 메뉴의 `지난 화면을 / 현재 화면을 / 전체 화면을`에도 복사·저장·ANSI 복사·ANSI 저장·지우기를 제공합니다.
- 기존 블럭 동작 설정값은 새 드롭다운 순서로 자동 이전됩니다.
## GMCP 브리지 및 표시 창
- TinTin++가 Sector_D의 GMCP 협상을 수락하고 Core.Hello/Core.Supports.Set을 전송합니다.
- 수신 GMCP는 화면에 보이지 않는 OSC 777 브리지로 KTin에 전달됩니다.
- 보기 메뉴에 `GMCP 지도 보기`, `GMCP 정보 보기`가 추가됩니다.
- Looming.Map의 zone/lines를 별도 지도 창에 실시간 표시합니다.
- 지도 방 기호를 클릭하면 지도 연결선을 분석해 이동 명령을 한 칸씩 보냅니다.
다음 Looming.Map이 도착한 뒤에만 다음 명령을 보내므로 명령을 한꺼번에 밀어 넣지 않습니다.
- 이동 중 전투 등으로 새 지도 정보가 오지 않으면 자동으로 멈추며 `다시 시도` 또는 `이동 취소`를 사용할 수 있습니다.
- GMCP 정보 창은 Looming.Vitals의 체력/정신력과 Party/Combat/System 등 최신 JSON을 표시합니다.
- Sector_D 소스와 JSON 생성 방식은 변경하지 않습니다.
## GMCP 보조창 UI 개선 (2026-07-15)
- GMCP 지도와 정보창이 메인 출력창의 글꼴, 글자색, 배경색을 그대로 사용합니다.
- 메인 출력창 글꼴을 변경하면 열려 있는 GMCP 창도 즉시 같은 글꼴과 행 높이로 갱신됩니다.
- 서버가 일반 텍스트로 보낸 `[ 체력/최대체력, 정신력/최대정신력 <플러딩> ]` 프롬프트를
ANSI 처리 뒤 별도로 관찰하여 체력은 빨간 막대, 정신력은 파란 막대로 표시합니다.
- 서버가 `Looming.Vitals`를 보내면 해당 JSON도 같은 상태 막대 갱신에 사용합니다.
- `Looming.Cursor`는 지원 목록에서 제외하며 KTin이 임의 시각에 프롬프트를 다시 그리지 않습니다.
- 수신 패킷 수와 모듈 수는 정보창에서 제거했습니다.
- 옵션 → 환경 설정에 `GMCP` 패널을 추가하여 정보창 아래쪽에 표시할 GMCP 모듈을
체크박스로 선택할 수 있습니다. 선택값은 config.ini에 저장됩니다.
- GMCP 정보창의 모듈 본문은 세로 스크롤바와 마우스 휠로 확인할 수 있습니다.
- GMCP 지도창도 세로 스크롤바와 마우스 휠을 지원하며, 현재 방이 보이도록 자동 정렬합니다.
- 지도창과 정보창의 가로 폭을 일치시키고 메인창 왼쪽 또는 오른쪽 가장자리에 가까이 옮기면
두 창이 세로로 정렬되어 자석처럼 붙습니다. 메인창 이동/크기 변경에도 함께 이동합니다.
- 지도창은 `지역명`, `지도`, 문자 지도 순서로 표시하고 `다시 시도`, `이동 취소` 버튼을
지도 아래쪽에 배치합니다.
## GMCP 보조창·기능키 후속 수정 (2026-07-15)
- GMCP 지도창의 `지도` 표제와 기본 클릭 안내 문구를 제거했습니다.
- 지도 문자 영역을 창 가운데에 배치하고, 메인 터미널과 동일하게 2칸 문자의 실제 글리프 폭을 측정해 가운데 정렬합니다.
- GMCP 지도창·정보창 사이 및 메인창과의 자석 결합 간격을 0으로 변경했습니다.
- 지도 아래의 `다시 시도`, `이동 취소` 버튼을 가운데 정렬했습니다.
- 체력·정신력 레이블, 막대, 수치 사이를 메인 글꼴 한 칸 간격으로 배치합니다.
- GMCP 환경설정 표시명에서 공통 접두어 `Looming.`을 생략했습니다.
- GMCP 모듈 선택 변경 시 정보창을 맨 위부터 즉시 갱신하며, 패킷 갱신 시 스크롤 위치가 빈 영역으로 넘어가지 않도록 제한합니다.
- 기능키 배열 초기화 및 설정 불러오기를 시작 과정에 연결하여 `F-111`과 빈 ALT/SHIFT/CTRL 탭을 수정했습니다.
- F4와 Ctrl+F9처럼 프로그램 메뉴에 이미 할당된 기능키는 `할당됨`으로 표시하고 수정하지 못하게 합니다.
[GMCP 보조창 후속 보정]
- DWM의 보이는 프레임 경계를 기준으로 메인창과 GMCP 창을 여백 없이 밀착합니다.
- 지도와 정보창 사이도 보이는 프레임 기준으로 빈틈 없이 이어 붙입니다.
- Map 원문 선택은 제거하고 전용 GMCP 지도창에서만 사용합니다.
- 선택한 Char/Party/Room 등이 아직 수신되지 않으면 큰 빈 원문 상자를 숨기고 수신 대기 모듈만 표시합니다.
- 선택한 모듈이 실제 수신되면 원문 상자를 자동으로 펼치고 스크롤 가능한 내용을 표시합니다.
- RichEdit 원문 글자색을 메인 로그 색상으로 강제 적용하여 검은 배경에서 보이지 않는 문제를 방지합니다.
- 지도나 정보가 창 안에 모두 들어오면 휠을 돌려도 움직이지 않는 것이 정상이며, 넘칠 때만 스크롤됩니다.
[접근성용 화면 키패드]
- 보기 메뉴에 `키패드 보기`를 추가했습니다.
- 편집 → 숫자 키패드 매크로에서 저장한 실제 전송 명령을 버튼에 바로 표시합니다.
예를 들어 숫자 4에 `서`가 저장되어 있으면 화면 키패드에는 `4←`가 아니라 `서`가 표시됩니다.
- 화면 키패드 버튼을 마우스로 클릭하면 현재 KTin 창의 활성 TinTin++ 세션으로 해당 명령을 즉시 전송합니다.
- 물리 숫자 키패드 사용 여부와 관계없이 화면 키패드 클릭은 사용할 수 있어 키패드 입력이 불편한 사용자를 지원합니다.
- 메인창의 왼쪽, 오른쪽, 위쪽, 아래쪽 프레임 가까이 이동한 뒤 놓으면 보이는 프레임 기준으로 여백 없이 자석처럼 붙습니다.
- 붙은 상태에서는 메인창을 이동하거나 크기를 바꿔도 함께 이동하며, 멀리 떼어 놓으면 독립 창으로 전환됩니다.
- 화면 키패드 창의 크기, 자유 배치 위치, 도킹 방향과 위치는 config.ini에 저장됩니다.
- 숫자 키패드 매크로 설정을 변경하면 열려 있는 화면 키패드의 버튼 글자도 즉시 갱신됩니다.
수정 파일
---------
- constants.h
- main.cpp
- main.h
- numpad.cpp
- numpad.h
- status_bar.cpp
- theme.cpp
- README_BUILD_FIX36.txt
````
### README_BUILD_WSL.md
````text
KTin WSL 빌드
===================
WSL에서 MinGW-w64 교차 컴파일러로 Windows용 ktin.exe를 만든다.
1. WSL에 빌드 도구 설치
sudo apt update
sudo apt install -y build-essential mingw-w64
2. 빌드
cd ~/ktin
make
3. 결과 파일
ktin.exe
4. 실행 시 DLL 오류가 날 때
libgcc_s_seh-1.dll 또는 libstdc++-6.dll 오류는 MinGW 런타임 DLL을
찾지 못해서 생긴다.
이 Makefile은 해당 런타임을 정적 링크하도록 설정.
기존 ktin.exe가 있다면 make clean 후 다시 빌드.
5. 리소스 빌드가 실패할 때
make clean
make nores
6. 컴파일러 확인
x86_64-w64-mingw32-g++ --version
x86_64-w64-mingw32-windres --version
7. 빌드 산출물 정리
make clean
clean은 ktin.exe, *.o, *.obj, *.res, *.aps 파일을 삭제한다.
````
### README_SAFE.txt
````text
# ktin_safe_full
이 버전은 첨부 원본 ktin 소스를 기준으로, 장시간 실행 시 화면 멈춤/백화와 관련될 가능성이 큰 기능만 제거하거나 비활성화한 안전판입니다.
유지한 기능:
- 파일: 빠른 연결, 주소록, 연결 끊기, 스크립트 읽기, 메모장, 종료
- 보기: 메뉴 숨기기, ANSI 테마 선택, 화면 여백 없애기, 특수기호(F4)
- 편집: 찾기, 변수, 줄임말, 단축키 설정, 타이머, 상태바, 숫자 키패드 매크로
- 편집: 지난 화면/현재 화면을 클립보드로 복사, 파일로 저장
- 옵션: 환경 설정, 단축버튼 표시/숨김, 접속 유지
- 자동 로그인: 아이디 패턴/비번 패턴 등
제거/비활성화한 기능:
- 트리거 설정 / 실시간 하이라이트 / 트리거 액션
- 채팅 캡처 패턴 설정 / 채팅 캡처창 / 채팅 캡처 시간 표시
- 자동 갈무리(계속 파일에 쌓는 방식)
렌더링 안정성 수정:
- WM_PAINT에서 셀마다 CreateSolidBrush/DeleteObject를 반복하지 않고 ExtTextOutW(ETO_OPAQUE)로 배경을 칠하도록 수정했습니다.
- 화면 렌더링 중 정규식 매칭을 하지 않도록 차단했습니다.
빌드 예시:
cl /utf-8 /std:c++17 /EHsc /O2 /DUNICODE /D_UNICODE /DNOMINMAX *.cpp Resource.rc user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib uxtheme.lib winmm.lib dwmapi.lib version.lib
[2026-07-07 build fix]
- /DNOMINMAX 사용 시 bare min/max가 안 보이던 문제를 constants.h에서 using std::min/max로 보정했습니다.
- settings.cpp의 제거된 채팅 캡처 줄 수 입력칸(hEditChatLines) 참조를 제거했습니다.
- build_msvc.bat가 Resource.rc를 cl에 직접 넘기지 않고 rc.exe로 Resource.res를 만든 뒤 링크하도록 수정했습니다.
- 압축에는 폰트 파일을 포함하지 않았습니다. Resource.rc의 MudDunggeunmo.ttf RCDATA 줄은 빌드 오류 방지를 위해 비활성화했습니다.
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
````
### README_SAFE_FIX3.txt
````text
KTin 안전판 buildfix3
=====================
이번 수정 내용:
1. 상단 메뉴가 보이지 않던 문제 수정
- MainWndProc WM_PAINT에서 DrawCustomMenuBar()를 다시 호출합니다.
- 상단 메뉴 클릭으로 드롭다운 메뉴가 열리도록 MainWndProc에 마우스 처리 추가.
2. 메뉴 숨김 상태 복구
- 실행 직후 menuHidden=false로 강제하여 기본은 상단 메뉴 표시.
- 메뉴 숨김 상태에서 우클릭하면 "상단 메뉴 보이기" 메뉴가 표시됩니다.
- 터미널 우클릭 메뉴는 ownerdraw 대신 일반 문자열 메뉴로 변경하여 표시 안정성을 높였습니다.
3. 입력창 전송 안 됨 수정
- isConnected 값이 false로 남아도 입력 명령을 TinTin++ 프로세스로 항상 보냅니다.
- #명령뿐 아니라 일반 MUD 명령도 막지 않습니다.
4. 상태바 기본 표시 보정
- 상태바 형식이 비어 있으면 "KTin 준비"를 기본값으로 넣습니다.
- statusbar count 저장 버그를 수정했습니다.
5. 전각/박스/기호 폭 기본값 보정
- 모호한 동아시아 문자 폭 기본값을 넓게 처리하도록 변경했습니다.
- 박스문자, 도형, 화살표 등이 1칸으로 처리되어 깨져 보이는 문제를 줄입니다.
여전히 제거/비활성화한 기능:
- 실시간 트리거/하이라이트 매칭
- 채팅 캡처 패턴 엔진
- 채팅 캡처창 누적 출력
- 자동 갈무리 기본 활성화
빌드:
build_msvc.bat
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
````
### README_SAFE_FIX4.txt
````text
fix4
- 메인 메뉴 하위 메뉴를 owner-draw가 아닌 일반 Windows 메뉴로 변경했습니다.
이전 버전은 메인 창에서 WM_MEASUREITEM/WM_DRAWITEM을 처리하지 않아 하위 메뉴 글자가 비어 보일 수 있었습니다.
- 옵션 메뉴의 토글 문구 갱신도 일반 메뉴 형식으로 변경했습니다.
- AmbiguousEastAsianWide 기본값을 0으로 되돌렸습니다.
한글/한자는 계속 2칸이지만, 박스문자/도형/화살표 같은 모호폭 문자는 기본 1칸으로 처리합니다.
ASCII 그림/박스그림이 깨지면 이쪽이 더 안전합니다.
````
### README_SAFE_FIX5.txt
````text
KTin 안전판 buildfix5
- 단축버튼이 보이지 않던 문제를 수정했습니다.
LoadShortcutSettings()와 InitializeShortcutButtons() 호출을 복구했습니다.
- 주소록 팝업을 단순화했습니다.
서버 이름, 서버 주소, 서버 포트, 서버 문자셋, TinTin 스크립트만 남겼습니다.
자동 로그인, 성공/실패 패턴, 자동 재접속은 TinTin++ 스크립트에서 처리하도록 제거했습니다.
- 옵션 일반설정에서 자동 로그인 패턴 입력 UI를 제거했습니다.
- 자동 로그인 엔진은 no-op 처리했습니다.
화면 텍스트를 계속 감시하는 기능을 안전판에서 제거했습니다.
- 모호한 동아시아 문자 폭 기본값을 넓게 처리로 바꿨습니다.
박스문자/도형/화살표가 깨질 때 필요한 원본 옵션을 기본 ON으로 두었습니다.
- 줄임말/타이머/변수 기능은 남겼습니다.
이 기능들은 기본적으로 입력/예약 전송/내부 변수 관리 쪽이며, 화면을 매 줄 정규식으로 캡처하는 트리거/채팅 캡처와는 성격이 다릅니다.
````
### README_SAFE_FIX6.txt
````text
[buildfix6]
- 주소록 새 주소/수정 팝업 높이를 키우고 하단 버튼 잘림을 줄였습니다.
- 주소록 안내문을 한 줄로 줄였습니다: 자동 로그인/자동 재접속/성공 실패 패턴은 TinTin++ 스크립트에서 처리
- 3줄 입력창의 위/아래 여백과 행간을 줄였습니다.
- 도움말에서 안전판에서 제거된 트리거/채팅 캡처/자동 로그인 감시 관련 설명을 정리했습니다.
- 정보/버전 리소스를 2.6.0.0으로 올렸습니다.
- 멀티탭/멀티세션은 이번 빌드에 넣지 않았습니다. 현재 구조는 AppState, ConPTY, TerminalBuffer가 단일 세션 기준이라 탭 지원은 별도 구조 개편이 필요합니다.
````
### README_SAFE_FIX7.txt
````text
buildfix7
- EUC-KR/CP949 서버 지도 출력에서 ○, ─, │ 같은 모호폭 기호가 깨지는 문제를 보정했습니다.
- 전각 기호를 논리적으로 2칸으로 처리하되, 렌더링 시 +16 픽셀 고정 이동을 제거했습니다.
- 글리프가 2칸보다 좁으면 2칸 셀 안에서 가운데 정렬합니다.
- 모호폭 문자 목록에 수학기호, 원문자, Fullwidth ASCII 영역을 보강했습니다.
주의:
- EUC-KR 서버는 TinTin++에서 #CONFIG {CHARSET} {CP949TOUTF8}을 써야 합니다.
- 주소록/빠른연결에서 EUC-KR(CP949)을 고르면 이 명령은 자동 전송됩니다.
````
==============================================================================
[ 원본: README_BUILD_WSL.md ]
==============================================================================
KTin WSL 빌드
===================
WSL에서 MinGW-w64 교차 컴파일러로 Windows용 ktin.exe를 만든다.
1. WSL에 빌드 도구 설치
sudo apt update
sudo apt install -y build-essential mingw-w64
2. 빌드
cd ~/ktin
make
3. 결과 파일
ktin.exe
4. 실행 시 DLL 오류가 날 때
libgcc_s_seh-1.dll 또는 libstdc++-6.dll 오류는 MinGW 런타임 DLL을
찾지 못해서 생긴다.
이 Makefile은 해당 런타임을 정적 링크하도록 설정.
기존 ktin.exe가 있다면 make clean 후 다시 빌드.
5. 리소스 빌드가 실패할 때
make clean
make nores
6. 컴파일러 확인
x86_64-w64-mingw32-g++ --version
x86_64-w64-mingw32-windres --version
7. 빌드 산출물 정리
make clean
clean은 ktin.exe, *.o, *.obj, *.res, *.aps 파일을 삭제한다.
==============================================================================
[ 원본: README_SAFE.txt ]
==============================================================================
# ktin_safe_full
이 버전은 첨부 원본 ktin 소스를 기준으로, 장시간 실행 시 화면 멈춤/백화와 관련될 가능성이 큰 기능만 제거하거나 비활성화한 안전판입니다.
유지한 기능:
- 파일: 빠른 연결, 주소록, 연결 끊기, 스크립트 읽기, 메모장, 종료
- 보기: 메뉴 숨기기, ANSI 테마 선택, 화면 여백 없애기, 특수기호(F4)
- 편집: 찾기, 변수, 줄임말, 단축키 설정, 타이머, 상태바, 숫자 키패드 매크로
- 편집: 지난 화면/현재 화면을 클립보드로 복사, 파일로 저장
- 옵션: 환경 설정, 단축버튼 표시/숨김, 접속 유지
- 자동 로그인: 아이디 패턴/비번 패턴 등
제거/비활성화한 기능:
- 트리거 설정 / 실시간 하이라이트 / 트리거 액션
- 채팅 캡처 패턴 설정 / 채팅 캡처창 / 채팅 캡처 시간 표시
- 자동 갈무리(계속 파일에 쌓는 방식)
렌더링 안정성 수정:
- WM_PAINT에서 셀마다 CreateSolidBrush/DeleteObject를 반복하지 않고 ExtTextOutW(ETO_OPAQUE)로 배경을 칠하도록 수정했습니다.
- 화면 렌더링 중 정규식 매칭을 하지 않도록 차단했습니다.
빌드 예시:
cl /utf-8 /std:c++17 /EHsc /O2 /DUNICODE /D_UNICODE /DNOMINMAX *.cpp Resource.rc user32.lib gdi32.lib shell32.lib comdlg32.lib comctl32.lib uxtheme.lib winmm.lib dwmapi.lib version.lib
[2026-07-07 build fix]
- /DNOMINMAX 사용 시 bare min/max가 안 보이던 문제를 constants.h에서 using std::min/max로 보정했습니다.
- settings.cpp의 제거된 채팅 캡처 줄 수 입력칸(hEditChatLines) 참조를 제거했습니다.
- build_msvc.bat가 Resource.rc를 cl에 직접 넘기지 않고 rc.exe로 Resource.res를 만든 뒤 링크하도록 수정했습니다.
- 압축에는 폰트 파일을 포함하지 않았습니다. Resource.rc의 MudDunggeunmo.ttf RCDATA 줄은 빌드 오류 방지를 위해 비활성화했습니다.
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
==============================================================================
[ 원본: README_SAFE_FIX3.txt ]
==============================================================================
KTin 안전판 buildfix3
=====================
이번 수정 내용:
1. 상단 메뉴가 보이지 않던 문제 수정
- MainWndProc WM_PAINT에서 DrawCustomMenuBar()를 다시 호출합니다.
- 상단 메뉴 클릭으로 드롭다운 메뉴가 열리도록 MainWndProc에 마우스 처리 추가.
2. 메뉴 숨김 상태 복구
- 실행 직후 menuHidden=false로 강제하여 기본은 상단 메뉴 표시.
- 메뉴 숨김 상태에서 우클릭하면 "상단 메뉴 보이기" 메뉴가 표시됩니다.
- 터미널 우클릭 메뉴는 ownerdraw 대신 일반 문자열 메뉴로 변경하여 표시 안정성을 높였습니다.
3. 입력창 전송 안 됨 수정
- isConnected 값이 false로 남아도 입력 명령을 TinTin++ 프로세스로 항상 보냅니다.
- #명령뿐 아니라 일반 MUD 명령도 막지 않습니다.
4. 상태바 기본 표시 보정
- 상태바 형식이 비어 있으면 "KTin 준비"를 기본값으로 넣습니다.
- statusbar count 저장 버그를 수정했습니다.
5. 전각/박스/기호 폭 기본값 보정
- 모호한 동아시아 문자 폭 기본값을 넓게 처리하도록 변경했습니다.
- 박스문자, 도형, 화살표 등이 1칸으로 처리되어 깨져 보이는 문제를 줄입니다.
여전히 제거/비활성화한 기능:
- 실시간 트리거/하이라이트 매칭
- 채팅 캡처 패턴 엔진
- 채팅 캡처창 누적 출력
- 자동 갈무리 기본 활성화
빌드:
build_msvc.bat
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
==============================================================================
[ 원본: README_SAFE_FIX4.txt ]
==============================================================================
fix4
- 메인 메뉴 하위 메뉴를 owner-draw가 아닌 일반 Windows 메뉴로 변경했습니다.
이전 버전은 메인 창에서 WM_MEASUREITEM/WM_DRAWITEM을 처리하지 않아 하위 메뉴 글자가 비어 보일 수 있었습니다.
- 옵션 메뉴의 토글 문구 갱신도 일반 메뉴 형식으로 변경했습니다.
- AmbiguousEastAsianWide 기본값을 0으로 되돌렸습니다.
한글/한자는 계속 2칸이지만, 박스문자/도형/화살표 같은 모호폭 문자는 기본 1칸으로 처리합니다.
ASCII 그림/박스그림이 깨지면 이쪽이 더 안전합니다.
==============================================================================
[ 원본: README_SAFE_FIX5.txt ]
==============================================================================
KTin 안전판 buildfix5
- 단축버튼이 보이지 않던 문제를 수정했습니다.
LoadShortcutSettings()와 InitializeShortcutButtons() 호출을 복구했습니다.
- 주소록 팝업을 단순화했습니다.
서버 이름, 서버 주소, 서버 포트, 서버 문자셋, TinTin 스크립트만 남겼습니다.
자동 로그인, 성공/실패 패턴, 자동 재접속은 TinTin++ 스크립트에서 처리하도록 제거했습니다.
- 옵션 일반설정에서 자동 로그인 패턴 입력 UI를 제거했습니다.
- 자동 로그인 엔진은 no-op 처리했습니다.
화면 텍스트를 계속 감시하는 기능을 안전판에서 제거했습니다.
- 모호한 동아시아 문자 폭 기본값을 넓게 처리로 바꿨습니다.
박스문자/도형/화살표가 깨질 때 필요한 원본 옵션을 기본 ON으로 두었습니다.
- 줄임말/타이머/변수 기능은 남겼습니다.
이 기능들은 기본적으로 입력/예약 전송/내부 변수 관리 쪽이며, 화면을 매 줄 정규식으로 캡처하는 트리거/채팅 캡처와는 성격이 다릅니다.
==============================================================================
[ 원본: README_SAFE_FIX6.txt ]
==============================================================================
[buildfix6]
- 주소록 새 주소/수정 팝업 높이를 키우고 하단 버튼 잘림을 줄였습니다.
- 주소록 안내문을 한 줄로 줄였습니다: 자동 로그인/자동 재접속/성공 실패 패턴은 TinTin++ 스크립트에서 처리
- 3줄 입력창의 위/아래 여백과 행간을 줄였습니다.
- 도움말에서 안전판에서 제거된 트리거/채팅 캡처/자동 로그인 감시 관련 설명을 정리했습니다.
- 정보/버전 리소스를 2.6.0.0으로 올렸습니다.
- 멀티탭/멀티세션은 이번 빌드에 넣지 않았습니다. 현재 구조는 AppState, ConPTY, TerminalBuffer가 단일 세션 기준이라 탭 지원은 별도 구조 개편이 필요합니다.
==============================================================================
[ 원본: README_SAFE_FIX7.txt ]
==============================================================================
buildfix7
- EUC-KR/CP949 서버 지도 출력에서 ○, ─, │ 같은 모호폭 기호가 깨지는 문제를 보정했습니다.
- 전각 기호를 논리적으로 2칸으로 처리하되, 렌더링 시 +16 픽셀 고정 이동을 제거했습니다.
- 글리프가 2칸보다 좁으면 2칸 셀 안에서 가운데 정렬합니다.
- 모호폭 문자 목록에 수학기호, 원문자, Fullwidth ASCII 영역을 보강했습니다.
주의:
- EUC-KR 서버는 TinTin++에서 #CONFIG {CHARSET} {CP949TOUTF8}을 써야 합니다.
- 주소록/빠른연결에서 EUC-KR(CP949)을 고르면 이 명령은 자동 전송됩니다.
==============================================================================
[ 원본: README_BUILD_FIX10.txt ]
==============================================================================
KTin safe buildfix10
- 메모장 그리기 모드에서 방향키 이동 시 선/특수기호가 그려지지 않던 문제 수정.
- 원인: MemoEditSubclassProc에서 DefSubclassProc를 먼저 호출해 RichEdit가 방향키를 소비한 뒤라 그리기 루틴이 실행되지 않았음.
- 수정: WM_KEYDOWN을 먼저 가로채고, 그리기 모드 ON일 때 방향키를 MemoDrawStep 또는 MemoBrushStep으로 연결.
- Alt+D도 메모장 편집창 포커스 상태에서 그리기 모드 토글 가능.
==============================================================================
[ 원본: README_BUILD_FIX12.txt ]
==============================================================================
KTin safe buildfix12
=====================
추가 기능:
- 보기 > 갈무리 > 전체 수신 로그 저장
화면 캡처/정규식 분류 없이 TinTin++에서 수신된 텍스트를 UTF-8 로그 파일로 저장합니다.
저장 위치: 실행 폴더\log\YYYYMMDDHHMMSS.txt
- 보기 > 갈무리 > 갈무리 보기 > 전체/잡담/경매/아이템 획득/사용자 문자열
저장된 로그 파일을 1초 간격으로 tail 방식으로 읽어 새로 추가된 줄만 보여줍니다.
KTin 본체의 화면 렌더링과 분리되어 있으며, Tail 창은 표시 줄 수를 제한합니다.
- 보기 > 갈무리 > 갈무리 폴더 열기
주의:
- Tail 필터는 본체 수신/렌더링 경로에서 실행하지 않습니다.
- 사용자 문자열은 정규식이 아니라 단순 포함 검색입니다.
- 정규식 기반 트리거/채팅캡처는 계속 제거 상태입니다.
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
==============================================================================
[ 원본: README_BUILD_FIX13.txt ]
==============================================================================
KTin buildfix13
================
수정 내용:
1. log_tail.cpp 315줄의 std::max/LONG/int 충돌 오류 수정.
2. 보기 > 갈무리 메뉴의 하위 메뉴 구성을 보강.
3. 갈무리 보기 필터를 사용자가 직접 설정할 수 있도록 추가.
- 보기 > 갈무리 > 갈무리 필터 설정...
- 잡담 / 경매 / 대화 / 아이템 획득 문자열을 세미콜론(;)으로 구분해서 설정.
- 정규식은 사용하지 않음. 단순 포함 검색만 사용하여 안정성을 우선함.
- 잡담 특수값:
[]: => [이름]: 내용 형식
<>: => <이름>: 내용 형식
4. 보기 > 갈무리 > 갈무리 보기 > 대화 항목 추가.
빌드:
build_msvc.bat
[buildfix14]
- 잡담 필터 기본값에 "잡담 :", "잡담:"을 추가했습니다.
- 예: "울보천사의 잡담 : 테스트"를 잡담 보기에서 잡도록 보정했습니다.
==============================================================================
[ 원본: README_BUILD_FIX15.txt ]
==============================================================================
KTin buildfix15
수정 내용:
- 접속 유지 명령이 동작하지 않던 문제 수정.
- 원인: SendKeepAliveNow()가 g_app->isConnected == false 이면 바로 return 했음.
안전판에서는 실제 접속되어 있어도 isConnected가 false로 남을 수 있으므로 접속 유지 명령이 차단됨.
- 변경: keepAliveEnabled가 켜져 있고 명령 문자열이 비어 있지 않으면 TinTin++ 프로세스로 그대로 전송.
==============================================================================
[ 원본: README_BUILD_FIX16.txt ]
==============================================================================
KTin safe buildfix16
====================
변경 내용:
- 자동 로그인 패턴 기능을 복원했습니다.
- 환경설정 일반 설정에 아이디/비밀번호/성공/실패 패턴 입력을 복원했습니다.
- 주소록 새 주소/수정 팝업에 주소별 아이디/비밀번호/성공/실패 패턴 입력을 복원했습니다.
- 패턴 검사는 접속 후 60초 동안만 동작합니다.
- 아이디/비밀번호 전송이 끝나거나 성공 패턴/실패 패턴을 만나면 60초 전이라도 검사를 중지합니다.
- 접속유지 명령은 자동 로그인 검사 중에는 보내지 않고, 검사 종료 후 동작합니다.
- 자동 재접속은 복원하지 않았습니다. 재접속은 TinTin++ 스크립트에서 처리하는 방향입니다.
주의:
- 이 기능은 화면을 계속 감시하지 않고 접속 직후 제한 시간 안에서만 검사합니다.
- 패턴은 정규식이 아니라 단순 포함 문자열 검사입니다.
==============================================================================
[ 원본: README_BUILD_FIX17.txt ]
==============================================================================
KTin safe buildfix17
변경 내용:
1. 사용자 갈무리 패턴 입력창을 부모 창 중앙에 띄우도록 수정했습니다.
2. 사용자 갈무리 패턴/갈무리 필터 설정 창의 컨트롤 폰트를 기본 메뉴/UI 폰트로 통일했습니다.
3. 갈무리 필터 설정을 확장했습니다.
- 잡담
- 대화
- 경매
- 아이템 획득
- 경험치
- 사용자 정의 1~3: 이름과 패턴을 직접 설정 가능
4. 갈무리 보기 메뉴에 경험치, 사용자 정의 1~3 항목을 추가했습니다.
5. 필터 설정 저장 후 메뉴를 다시 만들어 사용자 정의 이름이 메뉴에 반영되게 했습니다.
필터 방식:
- 정규식이 아니라 단순 포함 검색입니다.
- 여러 패턴은 세미콜론(;)으로 구분합니다.
- []: 는 [이름]: 형식, <>: 는 <이름>: 형식을 의미합니다.
==============================================================================
[ 원본: README_BUILD_FIX18.txt ]
==============================================================================
KTin safe buildfix18
- 주소록 비밀번호가 다시 열 때 지워지거나 깨지는 문제를 수정했습니다.
이전 빌드에서 평문으로 저장된 값은 그대로 읽고, 새 저장분은 INI 안전 HEX 형식으로 저장합니다.
- 자동 로그인 패턴 UI를 성공/실패가 아니라 아이디 실패패턴 2개, 비밀번호 실패패턴 2개로 정리했습니다.
내부 저장 키는 호환을 위해 기존 success1/success2, fail1/fail2를 재사용합니다.
- 자동 로그인 검사 로직도 성공패턴 검사를 제거하고, 아이디 실패/비밀번호 실패만 60초 제한 안에서 검사합니다.
- ANSI 테마 미리보기에서 숫자 코드(37/90/91)를 제거하고 일반색/밝은색을 좌우로 따로 보여주도록 수정했습니다.
==============================================================================
[ 원본: README_BUILD_FIX19.txt ]
==============================================================================
buildfix19
- 주소록 새 주소/수정에 "연결 실패/끊김 시 자동 재연결" 체크박스를 복구했습니다.
- 주소록 저장/불러오기에서 al_recon_N 값을 다시 보존합니다.
- 주소록으로 연결한 세션에서 TinTin++의 접속 실패/종료/Broken pipe/Timed out 문구를 감지하면 3초 뒤 같은 주소록 항목으로 재접속합니다.
- 사용자가 메뉴의 연결 끊기(#zap)를 누른 경우에는 hasActiveSession을 false로 만들기 때문에 자동 재연결하지 않습니다.
- 빠른 연결은 주소록 항목이 아니므로 자동 재연결 대상이 아닙니다.
==============================================================================
[ 원본: README_BUILD_FIX20.txt ]
==============================================================================
buildfix20
- ANSI 테마 미리보기에서 일반색/밝은색 샘플 사이 간격을 줄여 오른쪽 글자가 잘리지 않도록 수정했습니다.
==============================================================================
[ 원본: README_BUILD_FIX21.txt ]
==============================================================================
KTin buildfix21
================
변경 내용
1. 보기 메뉴 구조 정리
- 보기 > 갈무리
* 갈무리 켜기 / 갈무리 끄기
* 갈무리 폴더 열기
- 보기 > 갈무리 보기 를 상위 메뉴로 이동
* 전체, 잡담, 경매, 대화, 아이템 획득, 경험치, 사용자1~3, 임시 문자열
- 보기 > 갈무리 필터 설정... 을 상위 메뉴로 이동
2. 갈무리 켜기/끄기 메뉴명 동적 변경
- 갈무리가 꺼져 있으면 "갈무리 켜기"
- 갈무리가 켜져 있으면 "갈무리 끄기"
3. 갈무리 보기 timestamp
- 전체 보기: 원문 그대로 표시
- 잡담/대화/경매/아이템/경험치/사용자 정의/임시 문자열 보기:
각 줄 앞에 [HH:MM:SS] timestamp 표시
4. 사용자 문자열 메뉴 이름 정리
- "사용자 문자열..."은 저장되는 사용자4가 아니라 1회성 검색이므로
"임시 문자열..."로 이름을 바꿈
- 사용자 정의 저장 필터는 사용자1, 사용자2, 사용자3만 유지
빌드
build_msvc.bat
==============================================================================
[ 원본: README_BUILD_FIX22.txt ]
==============================================================================
KTin buildfix22
================
변경 내용:
1. 보기 -> 갈무리 메뉴의 토글 문구를 "갈무리 켜짐" / "갈무리 꺼짐"으로 변경.
2. 갈무리 보기 창을 다중 창 방식으로 변경.
- 잡담 창을 연 뒤 경매 창을 다시 열어도 기존 창이 닫히지 않습니다.
3. 갈무리 보기 창에 탭 컨트롤 추가.
- 기본은 메뉴에서 선택한 항목 1개 탭만 표시합니다.
- 갈무리 보기 창 우클릭 또는 창 메뉴의 보기 -> 탭 설정에서 표시할 탭을 선택할 수 있습니다.
- 각 창마다 표시 탭을 다르게 둘 수 있습니다.
4. 갈무리 보기 창 메뉴 숨기기/보이기 지원.
- 메뉴 숨김 상태에서는 우클릭 메뉴에 "메뉴 보이기"가 표시됩니다.
5. 갈무리 보기 창의 왼쪽 드래그 선택 복사 지원.
- 선택 후 마우스 왼쪽 버튼을 놓으면 선택 내용이 클립보드로 복사됩니다.
- 우클릭 메뉴의 선택/전체 복사도 지원합니다.
6. 갈무리 보기 창의 빈 마지막 줄 문제 완화.
- 새 줄을 append할 때 끝에 CRLF를 붙이지 않고, 다음 줄 앞에 CRLF를 붙여 마지막 빈 줄 커서를 줄였습니다.
주의:
- Tail 필터링은 기존처럼 로그 파일의 새로 추가된 줄만 읽어 단순 포함 검색합니다.
- KTin 본체의 터미널 렌더링/수신 처리 경로에는 정규식 기반 실시간 캡처를 넣지 않았습니다.
==============================================================================
[ 원본: README_BUILD_FIX23.txt ]
==============================================================================
buildfix23
- 프로그램 시작 직후에는 자동 로그인 60초 창을 열지 않도록 수정했습니다.
자동 로그인 패턴 검사는 #session/#ses/#connect, 빠른연결, 주소록 연결이 실제로 발생한 뒤에만 켜집니다.
- 접속유지 명령은 isConnected 또는 isSessionActive가 true인 경우에만 전송됩니다.
미접속 상태에서 봐/점수 같은 접속유지 명령이 반복 출력되는 문제를 막았습니다.
- TinTin++ 출력 중 "현재 세션이 활성화되어 있지 않습니다" 문구를 연결 끊김/미접속 상태로 인식하도록 추가했습니다.
- 주소록 자동 재연결은 주소록 항목에서 재연결을 체크한 경우에만 기존처럼 3초 뒤 수행합니다.
==============================================================================
[ 원본: README_BUILD_FIX24.txt ]
==============================================================================
KTin safe buildfix24
변경 내용:
1. 갈무리 보기 창의 하단 가로 스크롤바 제거
- 갈무리 보기 출력 EDIT 컨트롤에서 WS_HSCROLL / ES_AUTOHSCROLL 제거.
2. 갈무리 보기 창 상태바 숨기기/보기 지원
- 보기 메뉴에 상태바 숨기기 / 상태바 보기 항목 추가.
- 상태바를 숨기면 편집 영역이 아래까지 확장됨.
- 메뉴를 숨긴 상태에서도 우클릭 메뉴에서 상태바 숨기기/보기를 실행 가능.
3. 갈무리 보기 창 탭 자동 숨김
- 표시 탭이 1개뿐이면 탭 컨트롤을 숨김.
- 제목 표시줄에 이미 “갈무리 보기 - 잡담”처럼 표시되므로 단일 탭은 보이지 않게 함.
- 탭 설정에서 2개 이상 선택하면 탭 컨트롤이 다시 나타남.
빌드:
build_msvc.bat
==============================================================================
[ 원본: README_BUILD_FIX25.txt ]
==============================================================================
KTin buildfix25
================
1. 갈무리 로그 저장 방식을 원본 ANSI 바이트 저장으로 변경했습니다.
- 본체 화면 렌더링 경로에서 패턴 검색은 하지 않습니다.
- 갈무리 보기의 필터 검색은 ANSI 제거 텍스트 기준으로 합니다.
2. 갈무리 필터 설정에 ANSI 보기 체크박스를 추가했습니다.
- 전체/잡담/대화/경매/아이템 획득/경험치/사용자1~3별로 선택 가능합니다.
- ANSI 보기 ON: 검정 배경 + 현재 메인 ANSI 테마 기준으로 색상 표시합니다.
- ANSI 보기 OFF: ANSI 코드를 제거한 일반 텍스트로 표시합니다.
3. 보기 > 갈무리 메뉴에 갈무리창 모두 닫기 메뉴를 추가했습니다.
- 갈무리 보기 창이 1개 이상 열려 있을 때만 메뉴에 표시됩니다.
- 갈무리 보기 창이 없으면 메뉴에서 숨겨집니다.
주의:
- buildfix25부터 새로 저장되는 갈무리 로그는 ANSI 원문을 포함합니다.
- 이전 빌드에서 만든 일반 텍스트 로그도 갈무리 보기에서 계속 읽을 수 있습니다.
==============================================================================
[ 원본: README_BUILD_FIX26.txt ]
==============================================================================
buildfix26
- 갈무리 보기 창의 출력창/상태바/탭 글꼴을 메인 출력창 글꼴과 동일하게 맞췄습니다.
- 보기/설정에서 메인 출력창 폰트를 바꾸면 이미 열려 있는 갈무리 보기 창도 즉시 같은 폰트로 갱신됩니다.
- ANSI 보기 색상은 유지하고 글꼴/크기만 바꾸도록 처리했습니다.
==============================================================================
[ 원본: README_BUILD_FIX28.txt ]
==============================================================================
buildfix28
주소록 리스트 왼쪽 검은 선/아이콘 여백 보정.
- 주소록 ListView에 행 높이 조정용 더미 small image list를 붙이지 않도록 변경
- LVS_EX_DOUBLEBUFFER 추가
==============================================================================
[ 원본: README_BUILD_FIX30.txt ]
==============================================================================
Buildfix30 - 터미널 화면 여백 설정 추가
변경 사항:
- 옵션 → 환경설정 → 일반 설정에 화면 여백 설정(px) 추가
왼쪽 / 오른쪽 / 위 / 아래
- 기본값은 모두 0px
- 화면 정렬은 설정된 여백을 제외한 영역 안에서 계산됨
왼쪽: 왼쪽 여백부터 시작
중앙: 왼쪽/오른쪽 여백을 제외한 영역의 중앙
오른쪽: 오른쪽 여백을 남기고 붙임
- 출력 높이가 화면보다 클 때는 아래 여백을 보존하고 프롬프트가 보이도록 아래쪽 기준으로 정렬
- 보기 → 화면 여백 없애기에서 창 크기를 맞출 때도 설정된 여백을 포함해 계산
==============================================================================
[ 원본: README_BUILD_FIX31.txt ]
==============================================================================
KTin buildfix31
변경 사항:
1. 갈무리 보기 창 자동 붙기(스냅) 추가
- 갈무리창을 메인창/다른 갈무리창 가까이 가져간 뒤 마우스를 놓으면 자동으로 붙습니다.
- 위/아래로 붙을 때는 대상 창의 가로폭에 맞춥니다.
- 모니터 작업 영역을 벗어나면 세로 크기를 줄입니다.
- Shift 키를 누른 채 이동하면 자동 붙기를 임시로 무시합니다.
2. 항상 위 옵션 추가
- 옵션 > 환경설정 > 기타 설정: 메인창 항상 위
- 갈무리 보기 창 메뉴/우클릭 메뉴: 항상 위
3. 주소록 새 주소/수정 창 높이 보정
- '접속 후 60초...' 안내와 확인/취소 버튼 사이의 과도한 빈 공간을 줄였습니다.
4. 접속 유지 상태 판정 보강
- TinTin++의 접속 성공/끊김 문구 감지 tick을 추가했습니다.
- isConnected/isSessionActive가 흔들려도 마지막 접속 성공 이후 끊김 감지가 없으면 접속유지가 계속 동작하도록 보강했습니다.
- 새 접속 시도 시 이전 접속 성공 상태를 초기화합니다.
5. 갈무리 보기 파일 추적 보강
- 갈무리 파일이 새로 생성/변경되면 이미 열린 갈무리 보기 창도 현재 갈무리 파일을 따라가도록 수정했습니다.
==============================================================================
[ 원본: README_BUILD_FIX32.txt ]
==============================================================================
buildfix32
- 갈무리 보기창 붙이기 기준을 DWM 실제 표시 프레임 기준으로 바꿔 메인창과 갈무리창 사이에 보이는 간격을 줄였습니다.
- 메인창이 이동할 때 메인창 위/아래/좌우에 붙어 있는 갈무리 보기창도 함께 이동합니다.
- 갈무리창이 여러 개 위아래로 붙어 있는 경우, 메인창에 붙은 창을 따라 같은 스택의 갈무리창도 같이 이동하도록 보강했습니다.
- Shift를 누른 채 갈무리창을 이동하면 기존처럼 자동 붙기를 임시 무시합니다.
==============================================================================
[ 원본: README_BUILD_FIX33.txt ]
==============================================================================
KTin buildfix33
수정 내용:
1. 주소록/환경설정의 아이디 실패/비번 실패 패턴 입력칸 제거
- 자동 로그인은 접속 후 60초 동안 아이디 패턴/비밀번호 패턴만 검사합니다.
- 아이디와 비밀번호 전송 후 즉시 패턴 검사를 끕니다.
2. 환경설정 적용 시 갈무리가 꺼지는 문제 수정
- 메인창 항상 위 체크/해제 등 환경설정 적용이 갈무리 상태를 변경하지 않습니다.
- 갈무리는 보기 -> 갈무리 -> 갈무리 켜짐/꺼짐 메뉴에서만 켜고 끕니다.
3. 메인창 항상 위 체크/해제 시 갈무리 보기창이 검정색으로 변하는 문제 완화
- 실제 메인 출력 폰트가 바뀐 경우에만 갈무리 RichEdit 전체 폰트를 다시 적용합니다.
- 단순 topmost 변경 때는 갈무리창 ANSI 글자색을 다시 만지지 않습니다.
4. 주소록 새 주소/수정 팝업 높이 축소
- 제거된 실패 패턴 입력칸 공간을 줄였습니다.
5. 갈무리 보기 중복 출력 방지 보정
- Tail 처리 중 같은 줄이 두 번 추가될 수 있던 중복 호출을 제거했습니다.
==============================================================================
[ 원본: README_BUILD_FIX34.txt ]
==============================================================================
KTin buildfix34
주요 수정:
1. 갈무리 보기 ANSI RichEdit 색상 출력 안정화
- 장시간 테스트에서 ANSI 보기 켜짐 상태가 UI 멈춤/검정 글자/메뉴 무응답 원인으로 의심되어 일단 비활성화.
- 갈무리 로그 파일에는 ANSI 원문이 계속 저장됨.
- 갈무리 보기창은 ANSI 코드를 제거한 평문으로 표시.
- 필터 설정의 ANSI 보기 체크박스는 호환을 위해 남기되 회색 처리.
2. 갈무리 보기 공통 tail 타이머
- 갈무리 보기창마다 별도 타이머를 돌리지 않고 대표 창 하나의 타이머가 모든 갈무리창을 순서대로 갱신.
- 각 창 처리 중 재진입 방지 플래그 추가.
3. 갈무리 보기 상태바 줄 수 보정
- 표시 버퍼는 2000줄까지만 유지하지만, 상태바의 줄 카운터는 누적 매칭 줄 수를 표시.
- 예: 4026줄 | 표시 2000줄
4. 갈무리 보기 상태바 폰트 변경
- 상태바는 메인 로그 폰트가 아니라 Windows 메뉴/대화상자 계열 폰트를 사용.
5. 파일 메뉴에 새 창 띄우기 추가
- 현재 KTin 실행 파일을 한 번 더 실행해 새 프로그램 창을 띄움.
빌드:
cd /d D:\Tintin_gui\1
build_msvc.bat
==============================================================================
[ 원본: README_BUILD_FIX35.txt ]
==============================================================================
KTin buildfix35
- MudDunggeunmo-Regular.ttf를 소스 폴더에 복사한 뒤 build_msvc.bat를 실행하면 exe 리소스로 포함합니다.
- 사용자가 폰트를 Windows에 설치하지 않아도 KTin 실행 중에는 Mud둥근모를 사용할 수 있습니다.
- 폰트 파일이 없으면 일반 빌드로 진행됩니다. 이 경우 exe 옆에 MudDunggeunmo-Regular.ttf를 두면 실행 시 현재 프로세스 전용으로 불러옵니다.
- 폰트 파일은 라이선스 문제 때문에 이 압축에는 포함하지 않았습니다.
==============================================================================
[ 원본: README_BUILD_FIX36.txt ]
==============================================================================
KTin 2.6-a04 build fix 36
==========================
수정 내용
---------
- 기본 입력창은 단일 행 EDIT 컨트롤이어서 여러 행 텍스트를 붙여넣으면 첫 줄만 남던 문제를 수정했습니다.
- 입력창에서 Ctrl+V, Shift+Insert, 우클릭 붙여넣기 등으로 WM_PASTE가 들어올 때 클립보드에 줄바꿈이 있으면 전체 내용을 감지합니다.
- CRLF(Windows), LF(Unix), CR(Mac) 줄바꿈을 모두 ConPTY의 Enter 입력인 CR로 통일해 TinTin++로 한 번에 전달합니다.
- 클립보드 마지막 줄에 줄바꿈이 없어도 마지막 줄까지 전송합니다.
- 빈 줄이 여러 개 포함된 경우에도 줄 수를 유지합니다.
- 한 줄짜리 클립보드는 기존처럼 현재 입력창에 붙여넣습니다.
- 붙여넣기 과정은 클립보드를 읽기만 하며 원래 클립보드 내용을 변경하지 않습니다.
수정 파일
---------
- input.cpp
- utils.cpp
- utils.h
사용 예
-------
1. MUD 게시판에서 글쓰기 모드로 들어갑니다.
2. 메모장에서 여러 행의 본문을 복사합니다.
3. KTin 입력창에서 Ctrl+V를 누릅니다.
4. 여러 행이 즉시 순서대로 MUD에 전달됩니다.
5. 입력창에 마침표(.)를 입력하고 Enter를 눌러 글쓰기를 끝냅니다.
확인 항목
---------
- 한 줄 붙여넣기는 입력창에만 들어가는지 확인합니다.
- 두 줄 이상 붙여넣으면 모든 줄이 MUD 글쓰기 모드에 들어가는지 확인합니다.
- 본문 중간의 빈 줄이 유지되는지 확인합니다.
- 한글, 영문, 특수문자가 깨지지 않는지 확인합니다.
- 붙여넣기 후 Windows 클립보드 원문이 그대로 남아 있는지 확인합니다.
빌드
----
Windows 개발자 명령 프롬프트:
build_msvc.bat
WSL MinGW 환경:
make clean
make
추가 수정: 전각·모호한 동아시아 문자 행의 빈 행 보정
---------------------------------------------------
- 지도뿐 아니라 박스 테두리, 전각 기호, 도형 문자가 들어간 고정폭 출력에서도 한 줄씩
빈 행이 끼어 보이던 문제를 수정했습니다.
- 서버 또는 ConPTY가 한 줄을 화면 폭만큼 ASCII 공백으로 채워 보내는 경우, KTin이
모호한 동아시아 문자를 2칸으로 계산하면서 줄의 계산 폭이 ConPTY보다 길어졌습니다.
- 그 결과 줄 끝의 채움 공백 일부가 다음 행으로 자동 줄바꿈되어, 공백만 있는 행이 실제
터미널 버퍼에 하나씩 추가됐습니다. 환경설정 창을 닫으면 ConPTY 크기 재설정과 화면
재출력이 일어나 기존 공백 행이 사라져 보였습니다.
- 현재 행에 2칸 문자가 있고 오른쪽 끝 자동 줄바꿈 대기 상태일 때 뒤따르는 ASCII 공백은
줄 끝 채움으로 보고 버리도록 했습니다. 일반 본문 공백과 실제 다음 줄 문자는 유지됩니다.
- 효과가 없었던 전체 화면 강제 다시 그리기 보정은 제거하고 기존 부분 갱신 방식으로
되돌렸습니다.
추가 수정 파일
--------------
- terminal_buffer.cpp
- terminal_view.cpp
추가 확인 항목
--------------
- 환경설정의 "모호한 동아시아 문자 폭을 넓게 처리"를 켠 상태에서 확인합니다.
- 지도, 누구, 도움말, 박스 테두리 등 전각 문자가 들어간 출력에 빈 행이 생기지 않는지 확인합니다.
- 환경설정 창을 열었다 닫지 않아도 최초 출력부터 정상인지 확인합니다.
- 일반 ASCII 장문이 실제 화면 폭을 넘어갈 때 정상적으로 다음 줄로 넘어가는지 확인합니다.
추가 수정: 새 창별 세션 및 자동 재연결 분리
-------------------------------------------
- 빠른 연결의 고정 TinTin++ 세션명 `new`와 주소록 표시 이름을 실제 세션 식별자로
재사용하던 구조를 제거했습니다.
- 각 KTin 프로세스 ID와 접속 순번을 조합해 빠른 연결과 주소록 접속마다 고유한
내부 세션명을 생성합니다.
- 주소록의 이름은 화면 표시용으로만 사용하며 세션 종료와 재연결에는 사용하지 않습니다.
- 자동 재연결은 현재 창이 메모리에 보관한 주소록 항목 사본만 사용합니다.
- 연결이 끊기면 기존 내부 세션을 먼저 정리하고 500ms 뒤 새 내부 세션명으로
다시 연결하므로, 이전 세션이나 다른 창의 서버로 전환되지 않습니다.
- 세션 전환을 위해 보낸 `#zap`의 종료 문구는 자동 재연결 실패로 오인하지 않습니다.
- 자동 연결 전환에서는 KTin이 직접 만든 내부 세션만 이름으로 종료합니다.
추적 중인 세션이 없을 때는 인자 없는 `#zap`을 보내지 않습니다.
- 주소록은 변경 시 즉시 저장하고, 각 창 종료 시 오래된 주소록 사본을 다시 저장하지 않아
다른 창의 주소록 변경을 덮어쓰지 않습니다.
추가 수정 파일
--------------
- app_state.h
- utils.h
- utils.cpp
- address_book.h
- address_book.cpp
- dialogs.cpp
- auto_login.cpp
- main.cpp
확인 항목
---------
1. 첫 번째 창에서 서버 A에 접속합니다.
2. 파일 → 새 창 띄우기로 두 번째 창을 열고 서버 B 주소록 항목에 접속합니다.
3. 서버 B의 연결을 끊어 자동 재연결을 발생시킵니다.
4. 두 번째 창이 서버 A가 아니라 서버 B로 다시 접속하는지 확인합니다.
5. 빠른 연결과 주소록을 번갈아 사용한 뒤에도 이전 세션으로 돌아가지 않는지 확인합니다.
추가 수정: 블럭 선택 완료 동작 설정
-----------------------------------
- 옵션 → 환경 설정 → 기타 설정에 `블럭 설정 후` 드롭다운을 추가했습니다.
- `반전선택 클립보드`: 마우스 왼쪽 드래그를 놓으면 선택 내용을 즉시
클립보드로 복사하고 반전 선택을 해제합니다.
- `반전선택 파일저장`: 드래그를 놓으면 저장 대화상자를 열고 선택 내용을 UTF-8 BOM
텍스트 파일로 저장한 뒤 반전 선택을 해제합니다.
- 기본 저장 위치는 KTin 실행 파일 폴더 아래의 `저장` 디렉토리이며, 없으면 자동 생성합니다.
- 저장 대화상자의 기본 파일명은 `YYYYMMDD_HHMMSS.txt` 형식으로 미리 입력됩니다.
- `선택메뉴 띄우기`: 드래그를 놓으면 `복사하기 / 파일저장 / 닫기` 메뉴를 표시합니다.
세 항목 모두 작업 후 반전 선택을 해제합니다.
- 단순 클릭으로 화면의 단어를 MUD에 보내는 기존 기능은 그대로 유지합니다.
추가 수정 파일
--------------
- constants.h
- app_state.h
- settings.cpp
- utils.h
- utils.cpp
- terminal_view.cpp
확인 항목
---------
1. 기타 설정의 드롭다운 세 항목이 보이고 재실행 뒤에도 선택값이 유지되는지 확인합니다.
2. 클립보드 모드에서 드래그를 놓자마자 내용이 복사되고 선택 표시가 사라지는지 확인합니다.
3. 파일저장 모드에서 `저장` 폴더가 자동 생성되고 날짜·시간 파일명이 기본 입력되는지 확인합니다.
4. 선택메뉴 모드의 복사하기, 파일저장, 닫기가 각각 정상 동작하는지 확인합니다.
5. 화면의 단어를 단순 클릭했을 때 기존처럼 MUD 입력으로 전달되는지 확인합니다.
긴급 수정: 첫 접속 시 TinTin++ 종료 방지
-----------------------------------------
- 주소록 또는 빠른 연결을 처음 사용할 때 추적 중인 세션이 없는데도 인자 없는 `#zap`을
보내 TinTin++ 기본 세션이 종료되던 오류를 수정했습니다.
- 자동 서버 전환과 자동 재연결은 KTin이 알고 있는 내부 세션명이 있을 때만
`#zap {세션명}`을 전송합니다.
- `파일 -> 연결 끊기`를 사용자가 직접 선택한 경우에만 이름을 모르는 현재 세션에
인자 없는 `#zap`을 사용할 수 있습니다.
수정 파일
---------
- utils.h
- utils.cpp
- main.cpp
- README_BUILD_FIX36.txt
확인 항목
---------
1. KTin을 새로 실행한 직후 주소록 접속 시 `#zap`과 Goodbye 문구 없이 접속되는지 확인합니다.
2. KTin을 새로 실행한 직후 빠른 연결도 정상 접속되는지 확인합니다.
3. 서버 A에서 서버 B로 전환할 때 기존 내부 세션만 닫히고 서버 B에 접속되는지 확인합니다.
4. 새 창의 서버가 끊겼을 때 그 창이 사용하던 서버로 자동 재연결되는지 확인합니다.
## 블럭·화면 복사/저장 확장 및 ANSI 코드 보존
- `블럭 설정 후`에 일반/ANSI 클립보드, 일반/ANSI 파일저장, 선택메뉴의 다섯 동작을 제공합니다.
- 선택메뉴에는 `복사하기 / 파일저장 / 코드로 복사하기 / 코드로 파일저장 / 닫기`가 표시됩니다.
- 로그창 오른쪽 클릭 메뉴는 `복사하기 > / 파일저장 > / 지우기 > / 닫기` 하위 메뉴로 확장됩니다.
- 현재화면, 선택블럭, 지난화면, 전체화면을 각각 일반 텍스트 또는 ANSI 코드 포함 텍스트로 복사/저장할 수 있습니다.
- `코드로` 내보내기는 화면 셀의 글자색·배경색·굵기를 ANSI SGR true-color 코드로 재구성하며 각 행 끝에서 색상을 초기화합니다.
- 일반 텍스트 파일은 UTF-8 BOM, ANSI 코드 포함 파일은 실제 ESC 바이트가 보존되도록 UTF-8(BOM 없음)으로 저장합니다.
- 저장 대화상자의 기본 폴더는 실행 파일 옆 `저장` 폴더이고, 기본 파일명은 `YYYYMMDD_HHMMSS.txt`입니다.
- 편집 메뉴의 `지난 화면을 / 현재 화면을 / 전체 화면을`에도 복사·저장·ANSI 복사·ANSI 저장·지우기를 제공합니다.
- 기존 블럭 동작 설정값은 새 드롭다운 순서로 자동 이전됩니다.
==============================================================================
[ 원본: README_BUILD_FIX37.txt ]
==============================================================================
KTin 2.7.20 - GMCP 지도창 확장 및 하이라이트 편집기 추가
============================================================
1. GMCP 지도 팝업창
-------------------
- 제목 표시줄에 표준 최소화/최대화 버튼을 사용할 수 있습니다.
- 창 테두리와 오른쪽 아래 크기 조절 손잡이를 드래그해 크기를 바꿀 수 있습니다.
- 사용자가 직접 크기를 바꾼 뒤에는 GMCP 지도 갱신이 창 크기를 자동으로 되돌리지 않습니다.
- 창 최소 크기: 380 x 220
- 사용자 지정 최대 폭 제한을 4096픽셀로 확장했습니다.
2. GMCP 지도 저장
-----------------
- 지도창 아래의 '이동 취소' 오른쪽에 '저장' 버튼을 추가했습니다.
- 저장 위치:
KTin 실행파일 디렉터리\map\지역명.txt
- map 폴더가 없으면 자동으로 생성합니다.
- GMCP room.info의 zone 값을 지역명으로 사용합니다.
- Windows 파일명에 사용할 수 없는 문자는 밑줄(_)로 바꿉니다.
- 지역명이 비어 있으면 GMCP지도.txt로 저장합니다.
- UTF-8 BOM 형식으로 저장합니다.
3. 하이라이트 편집기
--------------------
- 메뉴 위치:
편집 -> 트리거 편집 다음 -> 하이라이트 편집(&H)...
- 트리거 편집기와 같은 주소록 스크립트 파일(.tin)을 사용합니다.
- 별도 KTin 관리 구역만 추가/교체하므로 기존 수동 스크립트와 트리거 관리 구역은 보존합니다.
- 폴더/하위 폴더/CLASS/사용 여부를 트리거 편집기와 같은 방식으로 관리합니다.
- 하이라이트 항목:
· 이름
· 사용
· CLASS
· 인식 패턴
· 글자색 16색
· 배경색 16색
· 글자색/배경색 직접 선택
· 반전
- 색상을 고르지 않고 반전만 선택할 수 있습니다.
- '저장 후 적용'은 파일을 저장한 뒤 현재 TinTin++ 백엔드에서 같은 파일을 다시 읽습니다.
- 저장 전 기존 파일을 같은 경로의 .bak 파일로 백업합니다.
4. TinTin++ 저장 구문
---------------------
하이라이트 실행 구문은 다음 순서로 저장합니다.
#highlight {인식 패턴} {색상 지정} {우선순위}
예:
#highlight {경험치를 얻었습니다} {Red} {5}
#highlight {위험} {White b red} {5}
#highlight {중요 알림} {reverse} {5}
- 배경색은 색상 지정 안에서 b 다음에 기록합니다.
- 반전은 reverse로 기록합니다.
- 직접 선택한 RGB 색상은 TinTin++의 <rgb> 형식으로 변환합니다.
5. 수정 파일
------------
- app_version.h
- constants.h
- gmcp.cpp
- highlight.cpp
- highlight.h
- main.cpp
- status_bar.cpp
6. 빌드
-------
WSL MinGW 빌드 예:
cd /mnt/d/ktin
make clean
make -j"$(nproc)"
Visual Studio/MSVC 빌드는 기존 build_msvc.bat 또는 기존 솔루션 빌드 절차를 사용합니다.
7. 권장 시험
------------
[GMCP 지도]
1) 보기 -> GMCP 지도 보기를 엽니다.
2) 최소화 후 복원합니다.
3) 최대화 후 복원합니다.
4) 오른쪽 아래 손잡이와 창 테두리를 드래그합니다.
5) GMCP 정보가 새로 들어와도 사용자 지정 크기가 유지되는지 확인합니다.
6) 저장을 눌러 map\지역명.txt 내용과 한글 파일명을 확인합니다.
[하이라이트]
1) 편집 -> 하이라이트 편집을 엽니다.
2) 폴더와 하이라이트를 추가합니다.
3) 글자색만, 배경색만, 글자색+배경색을 각각 시험합니다.
4) 색상 없이 반전만 체크한 항목을 시험합니다.
5) 폴더 사용을 끄면 내부 하이라이트가 모두 적용되지 않는지 확인합니다.
6) 저장 후 적용 뒤 출력 문자열 색상이 즉시 바뀌는지 확인합니다.
7) 같은 .tin 파일의 트리거 관리 구역과 수동 스크립트가 유지되는지 확인합니다.
==============================================================================
[ 원본: README_BUILD_FIX38.txt ]
==============================================================================
KTin 2.7.20 - BUILD FIX38
하이라이트 편집창 글꼴 크기 통일
수정 내용
1. 하이라이트 편집창의 모든 자식 컨트롤 글꼴을 트리거 편집창과 동일한 GetPopupUIFont()로 적용했습니다.
2. 폴더/하이라이트 이름 입력 보조창도 트리거 편집창의 이름 입력창과 같은 글꼴을 사용합니다.
3. 기존 GetCurrentAppFont(9)로 생성하던 작은 9픽셀 고정폭 글꼴을 제거해 버튼, 목록, 레이블, 입력란의 표시 크기가 트리거 편집창과 일치합니다.
4. 매번 새 HFONT를 생성하던 경로도 제거되어 하이라이트 창을 반복해서 열 때 발생할 수 있던 GDI 글꼴 누수를 방지합니다.
수정 파일
- highlight.cpp
- README_BUILD_FIX38.txt
빌드
Visual Studio에서 Release x86 구성으로 솔루션을 다시 빌드하십시오.
확인 항목
- 편집 > 트리거 편집과 편집 > 하이라이트 편집을 차례로 열어 글꼴 크기를 비교합니다.
- 하이라이트 트리 목록, 상세 편집 레이블, 이름/CLASS/인식 패턴 입력란, 버튼 글꼴이 트리거 편집창과 같은 크기인지 확인합니다.
- 폴더 추가 또는 하이라이트 추가 시 열리는 이름 입력창 글꼴도 같은 크기인지 확인합니다.
==============================================================================
[ 원본: README_TRIGGER_EDITOR_2.7.13.txt ]
==============================================================================
KTin 2.7.13 - 폴더/Class 기반 TinTin++ 트리거 편집기 구현 안내
====================================================================
1. 구현 목적
-----------
KTin은 트리거를 자체 실행하지 않고, 주소록에 연결된 TinTin++ .tin 파일을
편집하는 역할만 담당합니다. 실제 문자열 인식과 명령 실행은 TinTin++의
#action 및 #class 기능이 처리합니다.
메뉴 위치:
편집 -> 트리거 편집(&A)...
2. TinTin++ 로드 순서
--------------------
가. KTin 시작
process_manager.cpp의 기존 StartTinTinProcess()가 다음과 같이 실행합니다.
bin\tt++.exe main.tin
따라서 main.tin이 가장 먼저 읽힙니다.
나. 주소록으로 접속
address_book.cpp의 ConnectAddressBookEntry()가 주소록의 스크립트 경로를
#session 명령의 네 번째 인수로 넘깁니다.
#session {내부세션명} {서버주소} {포트} {주소록스크립트.tin}
주소록 스크립트는 접속에 성공한 해당 TinTin++ 세션에서 읽힙니다.
다른 주소록 세션의 전용 트리거가 섞이는 것을 피하기 위해, 접속 전에
전역 #read로 주입하는 대신 #session의 파일 인수를 사용했습니다.
다. 주소록 세션이 없는 상태
편집기는 KTin 실행 폴더의 ktin_triggers.tin을 대상으로 합니다.
이 파일이 이미 있으면 TinTin++ 백엔드가 시작된 직후 ConPTY 입력으로
다음 명령을 자동 전송합니다.
#read {ktin_triggers.tin}
main.tin은 프로세스 시작 인수로 먼저 처리되므로, 이 파일은 main.tin 뒤에
읽힙니다. 이 전역 파일의 트리거는 TinTin++ 시작 세션에서 정의되므로
이후 세션에 상속될 수 있습니다. 주소록마다 완전히 분리할 트리거는 반드시
주소록별 스크립트 파일에 작성하십시오.
3. 주소록 스크립트 자동 생성
---------------------------
현재 주소록으로 접속했거나 접속 예약 중인 상태에서 트리거 편집기를 열었는데
그 주소록의 스크립트 경로가 비어 있으면 다음 형식의 파일을 자동 지정합니다.
triggers\ktin_<서버주소>_<8자리ID>.tin
예:
triggers\ktin_mud.example.com_A1B2C3D4.tin
자동 생성 파일명은 TinTin++의 Windows 파일 처리와 로캘 차이를 피하기 위해
ASCII 문자만 사용합니다. 주소록의 한글 이름은 sessions.ini에 그대로 남습니다.
새 경로는 즉시 sessions.ini의 해당 주소록 항목에 저장됩니다.
4. 폴더와 TinTin++ Class 연결
----------------------------
편집 화면의 폴더 이름은 한글을 그대로 지원합니다. TinTin++ 내부 Class 이름은
한글 지원 여부와 무관하게 다음처럼 안전한 ASCII ID를 사용합니다.
ktin_c_0123456789ABCDEF
한글 표시 이름, 상하위 폴더 관계, 사용 여부, 트리거 이름/패턴/명령/우선순위는
별도 INI 파일이 아니라 같은 .tin 파일의 #NOP 메타데이터에 UTF-8로 저장됩니다.
관리 구역 예:
#NOP {KTIN_TRIGGER_EDITOR_BEGIN|1}
#NOP {KTIN_KNOWN_CLASS|0123456789ABCDEF}
#NOP {KTIN_FOLDER|0123456789ABCDEF||1|<한글이름 UTF-8 HEX>}
#NOP {KTIN_TRIGGER|...}
#NOP {KTIN_TRIGGER_RUNTIME_BEGIN}
#class {ktin_c_0123456789ABCDEF} {kill}
#class {ktin_c_0123456789ABCDEF} {open}
#action {인식 패턴} {실행 명령} {5}
#class {ktin_c_0123456789ABCDEF} {close}
#NOP {KTIN_TRIGGER_RUNTIME_END}
#NOP {KTIN_TRIGGER_EDITOR_END}
폴더를 끄면 그 폴더와 모든 하위 폴더의 #action을 생성하지 않습니다.
다시 읽을 때는 과거 KTin Class를 먼저 kill한 뒤 현재 켜진 폴더만 다시 만듭니다.
폴더를 삭제한 경우에도 옛 Class ID를 정리 목록에 남겨 현재 세션에 이전
트리거가 잔류하지 않게 했습니다.
5. 편집기 기능
-------------
- 폴더 추가
- 선택 항목과 같은 단계에 폴더 추가
- 선택 폴더 아래에 하위 폴더 추가
- 선택 폴더에 트리거 추가
- 폴더/트리거 삭제
- 같은 부모 안에서 위/아래 순서 이동
- 폴더/트리거 사용 여부 켜기/끄기
- 트리거 이름, 인식 패턴, 실행 명령, 우선순위(1~9) 편집
- 저장
- 저장 후 TinTin++에서 즉시 다시 읽기
- 저장 전 .bak 백업
- .tmp 파일 작성 후 원자 교체
6. 기존 .tin 파일 보존 방식
--------------------------
KTin은 다음 두 표식 사이만 다시 작성합니다.
#NOP {KTIN_TRIGGER_EDITOR_BEGIN|1}
...
#NOP {KTIN_TRIGGER_EDITOR_END}
표식 앞뒤에 사용자가 직접 작성한 alias, variable, event, action, 주석 등은
그대로 보존합니다.
중요한 제한:
기존 파일에 직접 작성되어 있던 #action은 삭제되지 않지만 자동으로 편집기
트리로 가져오지 않습니다. 편집 화면에는 KTin 관리 구역에서 만든 항목만
나타납니다. 기존 #action을 GUI에서 관리하려면 편집기에서 새 트리거로
옮긴 뒤 원래 줄을 직접 정리해야 합니다.
7. 변경 및 추가 파일
--------------------
새 파일:
trigger_editor.cpp
trigger_editor.h
수정 파일:
constants.h - 메뉴 ID
status_bar.cpp - 편집 메뉴 항목
main.cpp - TreeView 초기화, 메뉴 연결, 전역 기본 파일 자동 읽기
address_book.cpp - #session의 주소록 스크립트 인수 사용
address_book.h - SaveAddressBook() 공개
app_version.h - 2.7.13
README.md
Changelog_magun.md
help_dialog.cpp
Makefile과 build_msvc.bat은 *.cpp 전체를 빌드하므로 새 trigger_editor.cpp가
자동으로 포함됩니다.
8. 빌드 방법
-----------
WSL MinGW-w64:
cd /mnt/d/ktin
make clean
make -j"$(nproc)"
Windows Visual Studio 2022 개발자 명령 프롬프트:
cd /d D:\ktin
build_msvc.bat
9. 확인 순서
-----------
1) KTin 실행
2) 주소록에서 서버 접속
3) 편집 -> 트리거 편집
4) 주소록 스크립트가 비어 있었다면 sessions.ini의 script_N 항목과
triggers 폴더의 새 .tin 파일 확인
5) 폴더와 트리거 추가
6) 저장 후 다시 읽기
7) 서버가 인식 패턴 문구를 보낼 때 실행 명령 동작 확인
8) 폴더를 끄고 저장 후 다시 읽은 뒤 트리거가 동작하지 않는지 확인
9) 폴더를 다시 켜고 저장 후 다시 읽은 뒤 다시 동작하는지 확인
10) 다른 주소록으로 접속하여 전용 트리거가 섞이지 않는지 확인
10. 이번 작업의 검증 상태
------------------------
- 업로드된 KTin 2.7.12 전체 소스를 기준으로 변경했습니다.
- 변경 파일과 새 파일의 C++ 구문 트리를 검사했습니다.
- 메뉴 ID 중복 및 새 소스의 Makefile 자동 포함을 확인했습니다.
- 원본 대비 의도한 파일만 달라졌는지 확인했습니다.
- 이 작업 환경에는 x86_64-w64-mingw32-g++와 Visual Studio가 없어 실제
Windows 실행 파일 링크까지는 수행하지 못했습니다. 위 빌드 명령으로 최종
컴파일한 뒤 9번 확인 순서를 실행해야 합니다.
==============================================================================
[ 원본: README_TRIGGER_EDITOR_2.7.14.txt ]
==============================================================================
KTin 2.7.14 - TinTin++ 트리거 파일 로딩/저장 및 BOM 수정 안내
=================================================================
수정 목적
---------
1. KTin이 만든 .tin 파일이 UTF-8 BOM(EF BB BF)으로 시작하여 TinTin++가
다음 오류를 내던 문제를 수정합니다.
#오류: #READ {ktin_triggers.tin}: 파일 시작 문자가 올바르지 않습니다 '?'.
2. 트리거 편집 창이 KTin의 어두운 ANSI 테마와 무관하게 흰색으로 보이던
문제를 수정합니다.
3. 기본 ktin_triggers.tin뿐 아니라 사용자가 선택한 다른 .tin 파일도
불러오고 다른 이름으로 저장할 수 있게 합니다.
4. 현재 편집 파일을 주소록의 접속 스크립트로 명시적으로 지정할 수 있게
합니다.
핵심 변경
---------
- trigger_editor.cpp의 SaveTriggerModel()은 WriteUtf8NoBomTextFile()을 사용합니다.
- utils.cpp / utils.h에 WriteUtf8NoBomTextFile()이 추가되어 있습니다.
- 저장되는 파일의 첫 바이트는 '#'의 16진수 값인 23입니다.
- 파일에 기존 UTF-8 BOM이 있어도 편집기에서 저장하면 BOM이 제거됩니다.
- 팝업 배경, 정적 글자, 입력칸, 트리, 버튼을 현재 ANSI 테마에 맞춥니다.
- 트리거 편집기 상단에 다음 버튼을 추가했습니다.
파일 불러오기...
다른 이름 저장...
주소록에 현재 파일 지정
기본 파일과 주소록 동작
----------------------
- 주소록으로 접속하지 않은 상태:
ktin_triggers.tin을 편집합니다.
- 현재 주소록의 스크립트가 비어 있는 상태:
임의의 triggers\ktin_<호스트>_<ID>.tin 파일을 만들지 않습니다.
ktin_triggers.tin을 기본 파일로 지정하고 sessions.ini에도 기록합니다.
- 현재 주소록에 기존 .tin 파일이 지정되어 있는 상태:
해당 파일을 편집기로 엽니다.
- 다른 파일을 편집하려면:
'파일 불러오기...'를 누릅니다. 이 동작만으로 주소록 설정은 바뀌지 않습니다.
- 불러온 파일을 주소록 접속 시 자동으로 읽게 하려면:
'주소록에 현재 파일 지정'을 누릅니다.
- 새 파일을 만들려면:
'다른 이름 저장...'을 누른 뒤 .tin 파일명을 지정합니다.
ktin_c_고유번호의 의미
----------------------
ktin_c_DB7B75B9687E83DE 같은 문자열은 파일명이 아닙니다.
한글 폴더를 TinTin++ Class로 묶기 위한 내부 식별자입니다.
화면 표시 폴더 이름: 기본
TinTin++ 내부 Class: ktin_c_DB7B75B9687E83DE
폴더 이름을 한글로 저장하면서도 TinTin++에서 안전하게 그룹을 관리하기 위해
Class 식별자는 영문과 숫자로 생성합니다.
빌드
----
Visual Studio 개발자 명령 프롬프트에서 소스 폴더로 이동한 뒤:
build_msvc.bat
WSL에 MinGW-w64가 설치되어 있다면:
make clean
make
확인 절차
---------
1. 새 ktin.exe를 실행합니다.
2. 편집 -> 트리거 편집을 엽니다.
3. 폴더와 트리거를 추가합니다.
4. 인식 패턴 예:
[ENTER]를 입력하면 게임에 들어갑니다. :
5. 실행 명령 예:
#CR
6. '저장 후 다시 읽기'를 누릅니다.
7. TinTin++ 입력창에서 다음을 입력합니다.
#act
8. 등록된 ACTIONS 목록에 패턴이 표시되는지 확인합니다.
9. 직접 시험하려면 다음을 입력합니다.
#showme {[ENTER]를 입력하면 게임에 들어갑니다. :}
10. 트리거 동작 추적은 다음 명령으로 확인합니다.
#debug {actions} {on}
BOM 확인
--------
PowerShell:
Format-Hex -Path .\ktin_triggers.tin | Select-Object -First 2
정상 파일 첫 바이트:
23
잘못된 UTF-8 BOM 파일 첫 세 바이트:
EF BB BF
WSL 또는 Linux:
xxd -l 16 ktin_triggers.tin
정상 출력은 00000000 위치에서 23으로 시작합니다.
트리거가 목록에는 있으나 실제 서버 문구에서 동작하지 않을 때
-----------------------------------------------------------
로그인 프롬프트처럼 줄바꿈 없이 나뉘어 들어오는 문자열은 서버 패킷 분할의
영향을 받을 수 있습니다. 먼저 #act에 트리거가 실제 등록되었는지 확인합니다.
등록되어 있다면 TinTin++에서 다음 값을 시험할 수 있습니다.
#config {packet patch} {0.5}
또는 서버가 GA/EOR 프롬프트를 보내는지 확인합니다.
수정 파일
---------
- trigger_editor.cpp
- utils.cpp
- utils.h
- app_version.h
- README.md
- Changelog_magun.md
- README_TRIGGER_EDITOR_2.7.14.txt
검증 제한
---------
현재 작업 환경에는 Windows SDK/Visual Studio 및 MinGW-w64 Windows 헤더가 없어
실제 ktin.exe 컴파일과 Windows 실행 시험은 수행하지 못했습니다. 소스 구조,
괄호 균형, 파일 변경점, 저장 함수 연결과 패치 적용 결과를 정적 검사했습니다.
==============================================================================
[ 원본: README_TRIGGER_EDITOR_2.7.15.txt ]
==============================================================================
KTin 2.7.15 - 트리거 폴더 사용 상태 및 상세 화면 색상 수정
================================================================
수정 내용
---------
1. 폴더 또는 트리거를 선택하고 `사용`을 체크하거나 해제하면
`상세 적용`을 따로 누르지 않아도 왼쪽 트리의 `[켬]/[끔]` 표시가
즉시 갱신됩니다.
2. 상위 폴더가 꺼져 있으면 하위 폴더와 트리거의 개별 `사용` 값이
켜져 있어도 실제로는 실행되지 않으므로 트리에는 `[끔]`으로 표시합니다.
상위 폴더를 다시 켜면 각 하위 항목의 원래 개별 설정이 복원됩니다.
3. 상세 편집 영역만 흰색으로 보이던 이유는 Windows의 `BS_GROUPBOX`
컨트롤이 일부 테마에서 내부 배경을 흰색으로 직접 그렸기 때문입니다.
해당 컨트롤을 현재 KTin 테마 배경을 사용하는 프레임으로 교체했습니다.
4. `ktin_c_DB7B75B9687E83DE` 같은 값은 파일명이 아닙니다.
한글 폴더를 TinTin++ Class로 묶기 위한 내부 식별자입니다.
실제 편집 파일은 창 맨 위 `편집 파일`에 표시됩니다.
5. 주소록에 별도 스크립트 파일이 지정되지 않았으면 기본 편집 파일은
`ktin_triggers.tin`입니다. 다른 파일은 `파일 불러오기...`로 열고,
`다른 이름 저장...`으로 새 파일을 만들 수 있습니다.
확인 절차
---------
1. 편집 -> 트리거 편집을 엽니다.
2. 폴더 안에 트리거를 하나 만들고 두 항목을 모두 `사용`으로 둡니다.
3. 폴더를 선택하여 `사용` 체크를 해제합니다.
4. 폴더와 내부 트리거가 모두 즉시 `[끔]`으로 표시되는지 확인합니다.
5. 폴더를 다시 켜면 내부 트리거가 원래 개별 설정대로 `[켬]`으로
돌아오는지 확인합니다.
6. 상세 편집 영역이 나머지 창과 같은 어두운 배경으로 표시되는지 확인합니다.
빌드
----
Visual Studio 개발자 명령 프롬프트:
build_msvc.bat
WSL MinGW-w64 환경:
make clean
make