﻿MAPLE HUNT MULTIVIEW v0.3.9
===========================

v0.3.7 - 공개 룬 미니맵 사례를 반영해 룬 색/크기/정지판정 보강
v0.3.6 - 기존 메소 수익사이트 사냥타이머 알림음과 동일하게 통일
---------------------------------------------------------------
- 룬 감지: 784 Hz -> 1046 Hz, 190ms 간격의 2음 사인톤
- 60초 종료: 523 Hz -> 660 Hz, 190ms 간격의 2음 사인톤
- 웹 타이머와 동일한 25ms 어택 / 160ms 감쇠 / 최대 게인 0.12를 WAV로 합성
- 외부 음원 파일 없이 메모리에서 생성하므로 배포 폴더에 추가 파일 필요 없음
- 안전 모델 변경 없음. DWM 복제 + 화면 픽셀 분석 구조 그대로 유지

MAPLE HUNT MULTIVIEW v0.3.5
===========================

v0.3.5 - 실제 4클라 스크린샷으로 감지 재보정
--------------------------------------------
사용자가 준 실제 2798x1680 4클라 화면(슬롯 1399x840)에서 노란 캐릭터 마커를
4슬롯 전부 실측해서 임계값을 다시 잡았다. 자세한 수치는 VALIDATION.txt 참고.

측정값
- 마커: 채워진 둥근 점, 5~7px, 22~28픽셀, 밀도 0.8, 가로세로비 0.85~1.0
- 색: R,G 200 이상 / B 45 이하

새 판정 규칙 (분석 영역 폭 150px 기준으로 비례 조정)
- 색: min(R,G) >= 160, B <= 105, B <= min(R,G)*0.45, |R-G| <= 45
- 크기: 기준 지름 4.5px의 0.45~2.2배, 픽셀 수 0.30~1.80 * d^2
- 모양: 가로세로비 0.60~1.70, 밀도 0.45 이상  <- 이게 핵심

'모양' 조건이 걸러내는 것들 (전부 이 스크린샷에 실제로 있었음)
- 미니맵 아래 노란 띠 (21x9, 102픽셀) - 마커와 색이 완전히 같다
- 맵 안의 노란 발판 선 (52x1)
- 가장자리 조각들
=> 재보정 결과: 4슬롯 전부 후보 정확히 1개씩. 오검출 0개.

동작 확인 범위 (실제 코드 로직을 그대로 이식해 스크린샷으로 검증)
- 슬롯 폭 600~1399px: 4/4 슬롯 정상 검출
- 슬롯 폭 480px: 3/4 (마커가 2px로 뭉개짐)
=> 2x2 기준 멀티뷰 창을 최소 1200x720 이상으로 쓸 것.
   그 아래로 줄이면 HUD에 "창이 작아 감지 불안정"이 뜬다.

룬 감지는 아직 보정 안 됨
- 이 스크린샷에 룬이 없어서 룬 색을 측정할 수 없었다.
- 지금은 보라(B >= R+25) + 마커 크기 + 둥근 모양 + 3프레임 안정화로 보수적으로 잡는다.
- 이 조건이 없으면 미니맵의 분홍 파티원 마커(9x4)가 창 크기에 따라 룬으로 오검출됐다.
- 룬이 떠 있는 미니맵 스크린샷을 주면 색을 측정해서 정확히 맞출 수 있다.

이동 감지 임계값도 완화 (2.4 -> 1.8 * scale, 최소 1.2px)


MAPLE HUNT MULTIVIEW v0.3.4
===========================

v0.3.4에서 고친 것 (v0.3.3 구조 유지 - DWM 복제 + 자기 화면 픽셀만)
--------------------------------------------------------------------
안전 모델 변경 없음. P/Invoke는 dwmapi.dll / user32.dll / gdi32.dll 3개뿐이고
safety_check.ps1을 그대로 통과한다. v0.3.3의 오버레이 개선(레이어드 창 리사이즈
아티팩트 수정, 대화상자 중 HUD 숨김)은 그대로 살렸다.

[감지 신뢰도]
1. HUD가 분석 영역을 침범하지 않음
   - 오버레이를 그릴 때 슬롯별 분석 ROI를 클리핑으로 제외한다.
   - 이전에는 라벨/타이머/룬 테두리가 미니맵을 가리고, 그 픽셀이 다시 분석 대상으로
     들어가 자기가 그린 그림을 감지하는 구조였다.
2. 가림 검사
   - 분석 직전 ROI의 5개 지점이 실제로 이 프로그램 화면인지 확인한다.
   - 다른 창이 덮고 있으면 분석을 멈추고 "가려짐 · 감지 중지"를 표시한다.
   - 클릭 통과 중에는 검사가 불가능하므로 건너뛴다.
3. 임계값 해상도 정규화
   - 마커 픽셀 수/크기/이동 임계값을 ROI 폭 150px 기준으로 비례 조정.
   - 창을 줄여도 감지가 조용히 죽지 않는다. 너무 작으면 경고를 띄운다.
4. 투명도 95% 미만이면 분석 중단 + 경고
   - 90%만 되어도 노란색 판정식이 깨지기 때문에, 틀린 결과 대신 멈추고 알린다.
5. 분석 ROI가 '실제로 그려진 영역' 기준으로 따라감 (비율 유지 모드 대응)

[안정성]
6. 클릭 통과 복구 경로
   - 트레이 아이콘 추가 (창 앞으로 / 화면 가운데로 / 클릭 통과 해제 / 컨트롤 센터 / 종료)
   - 단축키 등록 실패를 감지해 켜기 전에 경고한다.
   - 클릭 통과 플래그를 CreateParams로 선언해 투명도 변경 시 풀리지 않는다.
   - ESC는 확인 후 종료 (클릭 통과 중에도 동작).
7. 전역 예외 처리
   - 분석 루프 try/catch, 예외는 %APPDATA%\MapleHuntMultiView\error.log 에 기록.
8. 프리셋
   - 화면 밖 좌표로 복원하지 않는다 (모니터 구성이 바뀌어도 창을 잡을 수 있다).
   - 저장을 원자적 교체로 변경 (저장 중 종료돼도 기존 프리셋이 살아 있다).

[표시]
9. 화면 채우기 3모드: 비율 유지(기본) / 잘라서 꽉 채우기 / 늘여서 꽉 채우기
   - "창 크기를 원본 비율에 맞추기"로 검은 여백을 한 번에 없앨 수 있다.
10. 슬롯 구분선 on/off, 메뉴 체크 표시가 실제로 보이도록 수정
11. HUD를 변경이 있을 때만 다시 그림
    - 80ms마다 전체 비트맵을 새로 만들던 것을 캐시 + 변경 감지로 교체.
    - 창을 드래그할 때는 표면을 다시 그리지 않고 위치만 옮긴다.

[4클라]
12. 같은 창이 두 슬롯에 동시에 배정되지 않는다.
13. 순서가 어긋나면 우클릭 -> "다른 슬롯과 교체"로 즉시 교정.
14. 썸네일 등록에 실패한 슬롯은 다음 점검에서 자동 재시도.
15. 숨김/유령(cloaked) 창을 목록에서 제외.

[그 외]
16. 타이머 0초 알림음 추가 (슬롯별 ON/OFF)
17. 소스 파일을 UTF-8(BOM) + CRLF로 저장하고 csc에 /codepage:65001 지정
    - 이전 버전은 BOM이 없어 csc가 한글을 CP949로 잘못 읽었다.
    - build.bat도 ASCII + CRLF로 다시 작성 (LF면 cmd가 줄 중간부터 실행한다).
    - 빌드 출력은 build_log.txt에 저장된다.

남은 과제
- 미니맵의 캐릭터 마커는 깜빡인다. 시간축으로 깜빡이는 성분만 채택하면
  노란 NPC/오브젝트와 구조적으로 분리할 수 있다. 실제 미니맵 캡처가 있어야
  임계값을 잡을 수 있어서 이번 버전에는 넣지 않았다.

주의
- 이 프로그램은 화면을 보고 알려주는 도구이지, 대신 플레이하는 도구가 아니다.
- 게임사 정책상 허용 여부는 별개의 문제이며 어떤 프로그램도 이를 보증할 수 없다.


MAPLE HUNT MULTIVIEW v0.3.3 - SAFETY LOCKED
========================

목적
- Windows DWM Thumbnail API로 외부 창을 실시간 복제
- 복제창 4개를 프로그램 하나에서 1x4 / 2x2로 관리
- 웹 사냥 타이머와 같은 계열의 '화면 픽셀 감지'만 사용
- 게임 프로세스 메모리 읽기/쓰기, DLL 인젝션, 패킷, 자동 키/마우스 입력 없음

안전 구조 잠금 (v0.3)
- build.bat 실행 시 safety_check.ps1을 먼저 실행
- 메모리/인젝션/후킹/패킷/자동입력 관련 API가 소스에 들어오면 빌드 자체를 중단
- P/Invoke는 dwmapi.dll / user32.dll / gdi32.dll만 허용
- 원본 PID는 GetWindowThreadProcessId의 정렬 키로만 사용하며 Process 핸들을 열지 않음
- 상세 기준: SAFETY_MODEL_KO.txt

이번 버전 핵심
1. 완전 프레임리스
   - 흰색 윈도우 제목표시줄 없음
   - 평소에는 게임 화면 + 최소 HUD만 표시
   - 우클릭 메뉴 / F2 컨트롤 센터로 설정

2. 4클라 멀티뷰
   - 기본 레이아웃: 2x2 (사용자가 보여준 실제 배치 기준)
   - 1x4 / 2개 좌우 / 1개 전환 가능
   - 슬롯마다 서로 다른 원본 창 연결
   - 원본 창별 크롭 가능
   - 원본 창이 재실행되면 저장한 프로세스/클래스/순번으로 자동 재연결 시도

3. 슬롯별 60초 사냥 타이머
   - 슬롯마다 독립 60초 타이머
   - 복제 화면 좌측 상단 미니맵 영역을 자동 분석
   - 노란 캐릭터 마커 이동 감지 시 해당 슬롯만 60초 리셋
   - 타이머는 각 슬롯 우측 상단의 작은 HUD로 표시

4. 룬 감지
   - 보라 계열 룬 마커를 화면 픽셀로 감지
   - 안정적으로 연속 감지된 경우에만 룬 상태 확정
   - 첫 감지 시 Windows 알림음 1회
   - 룬이 있는 슬롯만 얇은 보라색 LIVE 테두리 애니메이션
   - 게임 입력이나 자동 처리 기능은 없음 (알려주기만 함)

5. 미니맵 영역
   - 기본: 자동 (사용자가 보내준 실제 MapleStory UI에서 미니맵 본체가 위치한 좌측 상단 비율 영역으로 보정)
   - 해상도/창 크기가 바뀌어도 비율 기반으로 따라감
   - 특이한 UI 배치에서는 우클릭 -> 사냥 어시스트 -> 미니맵/분석 영역 직접 지정
   - 직접 지정 화면에서 보라색 박스를 드래그하면 됨

6. 프리셋
   - 창 위치/크기
   - 2x2/1x4 레이아웃
   - 슬롯 1~4 원본창 매칭
   - 슬롯별 크롭
   - 타이머 ON/OFF
   - 룬 알림 ON/OFF
   - 타이머 HUD 표시
   - 자동/수동 미니맵 분석 영역
   - 항상 위 / 투명도 / 클릭 통과 / 위치 잠금
   위 설정을 한 번에 저장하고 복원

빌드
- Windows에서 build.bat 더블클릭
- 같은 폴더에 MapleHuntMultiView.exe 생성
- 별도 NuGet 패키지 없음
- .NET Framework 4.x C# 컴파일러 사용

기본 사용
1. MapleHuntMultiView.exe 실행
2. F2 -> 컨트롤 센터
3. SLOT 1~4 각각 '창 연결'
4. 기본 미니맵 AUTO 상태로 먼저 테스트
5. 필요하면 슬롯별 '미니맵 AUTO' 버튼 -> 화면에서 직접 영역 지정
6. 원하는 위치/크기로 배치
7. 우클릭 -> 프리셋 -> 현재 구성 저장

프레임리스 조작
- 좌클릭 드래그: 전체 멀티뷰 이동
- 가장자리 6px: 전체 멀티뷰 크기 조절
- 우클릭: 빠른 설정 메뉴
- F2: 컨트롤 센터
- ESC: 종료

전역 단축키
- Ctrl+Alt+O : 클릭 통과 ON/OFF
- Ctrl+Alt+L : 위치/크기 잠금 ON/OFF
- Ctrl+Alt+P : 컨트롤 센터

프리셋 파일
%APPDATA%\MapleHuntMultiView\presets.json

프리셋 바로 실행
MapleHuntMultiView.exe --preset "메이플 4클라"

감지 참고
- 픽셀 분석은 복제되어 보이는 화면의 미니맵 ROI를 약 250ms 간격으로 확인함
- 원본 게임에 키/마우스 입력을 보내지 않음
- 복제창 투명도를 너무 낮추면 화면 색이 배경과 섞여 감지 정확도가 떨어질 수 있으므로 100% 권장
- 자동 미니맵 ROI는 사용자가 보내준 4클라 2x2 스크린샷의 실제 미니맵 위치를 기준으로 보정됨
- 캐릭터/룬 색상이나 미니맵 테마가 크게 달라진 경우 직접 분석 영역 지정으로 보정 가능

현재 검증 범위
- Linux 작업환경에서 소스 구조/정적 점검 완료
- Windows DWM/화면 캡처/실제 MapleStory 창에서의 동작은 사용 PC에서 build.bat로 빌드 후 최종 실기 확인 필요

스크린샷 기반 보정
- 사용자가 보내준 2048x1157 4클라 2x2 화면을 4개 슬롯으로 나눠 동일한 색상/컴포넌트 로직을 검증함
- 자동 ROI에서 4개 슬롯 모두 캐릭터 마커 후보를 하나씩 안정적으로 분리함
- 해당 프레임에서는 룬 오검출 후보 0개 확인
- 상세: VALIDATION.txt


[v0.3.1]
- 안전검사는 실제 build.bat에 포함되는 C# 소스만 검사합니다.
- 예전 버전을 같은 폴더에 덮어풀어 WindowModel.cs 같은 잔여 파일이 있어도 오탐으로 빌드가 중단되지 않습니다.
- 실행 파일에 포함되는 소스의 안전 제한은 그대로 유지됩니다.


[v0.3.2 UI 안정화]
- 프레임리스 창을 드래그 리사이즈할 때 이전 슬롯 테두리가 반복 잔상처럼 누적되던 문제 수정
- 메인 폼은 ResizeRedraw + 즉시 Invalidate로 항상 새 크기에 맞춰 다시 그림
- HUD layered window는 Form.Bounds로 늘리지 않고 UpdateLayeredWindow에서 위치/크기/비트맵을 원자적으로 갱신
- 창 연결/크롭/미니맵 영역/프리셋 삭제 팝업 표시 중 HUD를 일시 숨겨 SLOT 카드가 팝업 위를 덮지 않음
- 모달 팝업은 메인 창의 TopMost 상태를 상속하고 BringToFront/Activate 처리
- 컨트롤 센터가 열린 동안에도 HUD를 일시 숨겨 설정 UI 가독성 보장


[v0.3.3 독립 브랜드 전환]
- 실행 파일명: MapleHuntMultiView.exe
- 프로젝트/솔루션/namespace: MapleHuntMultiView
- 프리셋 저장 위치: %APPDATA%\MapleHuntMultiView\presets.json
- Windows 파일 속성의 제품명/설명도 Maple Hunt MultiView로 통일
- 제3자 프로그램명/브랜드/서명에 의존하지 않는 독립 배포 구조로 정리


[v0.3.9 HUD / AUTO MINIMAP FIX]
- Control Center no longer hides the timer/rune HUD. F2 toggles it; ESC and a visible 닫기 button close it.
- Rune LIVE border is drawn outside the minimap analysis clip so all four purple edges remain visible.
- Per-slot timer position: top-right / top-left / bottom-right / bottom-left, saved in presets.
- Calibrated minimap ROI retained; Control Center/HUD z-order and close/toggle flow fixed so covered lower slots can resume screen-pixel detection immediately after the panel is closed.
