NSRT Support HUD v1.15.4
========================



v1.15.4 - First-slot White Highlight
----------------------------------------------------
- 개인 HUD 1번 슬롯의 미니맵 하이라이트를 흰색으로 분리했습니다.
- 2번 슬롯은 기존 노란색, 3~4번 슬롯은 기존 녹색을 유지합니다.
- WhiteHighlight_1~8.tga는 기존 노란 하이라이트와 동일한 위치/원 반경/조준선/알파/그림자 구조를 사용하고 색상만 흰색으로 변경했습니다.
- 실제 자기 구슬 대상의 Crimson 하이라이트는 기존처럼 최상위 레이어로 추가됩니다.
- Secret 징표 토큰은 계속 SetFormattedText의 %s 슬롯으로만 전달하며 Lua에서 숫자를 판별하지 않습니다.
- v1.15.3의 RightButton pass-through 및 이전 기능은 그대로 유지합니다.


v1.15.3 - Right-drag Pass-through Fix
----------------------------------------------------
- `스조라크 인카운트에서만 활성화` 상태에서 다른 보스 전투 중에도 Secure state driver가 `boss1` 때문에 표시될 수 있던 투명 입력 레이어의 우클릭 차단을 수정했습니다.
- 일반 메인 HUD 징표 버튼, 전투용 Secure 징표 버튼, 비활성 Secure blocker, 메인 지도 드래그 영역 모두 `RightButton`을 아래 Frame/WorldFrame으로 통과시킵니다.
- 따라서 메인 HUD가 보이든 숨겨져 있든 해당 위치에서 우클릭 드래그 카메라 회전이 가능합니다.
- 좌클릭 징표 입력, Secure 채팅, 좌클릭 HUD 이동 기능은 기존대로 유지됩니다.
- v1.15.2의 스조라크 인카운트 범위 미니맵 아이콘 확대 동작은 그대로 유지합니다.


v1.15.2 - Encounter-scoped Minimap Icon Scale
----------------------------------------------------
- `스조라크 인카운트에서만 활성화`가 ON이면 `기본 아이콘 확대`도 같은 활성 수명을 따릅니다.
- 스조라크 외부에서는 설정창이 열려 있을 때만 저장 배율을 미리보기로 적용합니다.
- 설정창을 닫으면 즉시 1.0x로 복원합니다.
- 스조라크 ENCOUNTER_START에서 저장 배율을 적용하고 ENCOUNTER_END에서 1.0x로 복원합니다.
- 설정창이 열린 채 인카운트가 끝난 경우에는 미리보기 상태이므로 확대를 유지하고, 설정창을 닫을 때 1.0x로 복원합니다.
- `스조라크 인카운트에서만 활성화`가 OFF이면 기존처럼 기본 아이콘 확대가 항상 적용됩니다.
- v1.15.1의 내부 DirArrow 자산 및 노랑/녹색/크림슨 하이라이트 구조는 그대로 유지합니다.

v1.15.1 - Internal Arrow Path Fix
----------------------------------------------------
- DirArrow 경로의 Secret-safe 포맷 토큰을 `%%s`에서 `%s`로 수정했습니다.
- 개인 HUD와 대형 개인 알림이 Media/DirArrow_1~8.tga를 정상 호출합니다.
- 화살표 이미지 파일 자체는 수정하지 않았습니다.
- v1.15.0의 노랑/녹색 슬롯 하이라이트 및 미니맵 아이콘 확대 기능은 그대로 유지합니다.

v1.15.0 - Slot Color + Internal Arrow Assets
----------------------------------------------------
- 개인 HUD 1~2번 슬롯의 미니맵 하이라이트는 노란색을 유지합니다.
- 개인 HUD 3~4번 슬롯은 동일한 기하/정렬의 녹색 하이라이트를 사용합니다.
- 실제 자기 구슬 대상의 크림슨 하이라이트는 최상위 레이어로 그대로 유지합니다.
- 기존 8방향 화살표 파일의 그림 내용은 수정하지 않고 AddOns/NSRTSupportHUD/Media/DirArrow_1~8.tga로 이관했습니다.
- 개인 HUD/대형 개인 알림/미니맵 런처의 방향 화살표 경로를 애드온 내부 파일로 변경했습니다.
- 기존 Interface/Icons 전역 Override 폴더를 제거했습니다.
- v1.14.0의 Minimap:SetIconScale 1.0x~3.0x 설정은 그대로 유지합니다.

v1.12.1 - Personal HUD-synced Dual-track Highlight
----------------------------------------------------
- 노란색 `+` 하이라이트의 트리거를 구슬 대상 감지에서 개인 HUD 상태로 변경했습니다.
  - 개인 HUD 슬롯에 징표가 들어오는 즉시 같은 징표가 미니맵에 노란색으로 표시됩니다.
  - 3/4칸에 현재 들어있는 모든 징표를 동시에 미러링합니다.
  - Add / Undo / Clear / 자동 새 세트 시작 / 4->3칸 변경 등 개인 HUD 시퀀스가 갱신되면 노란 하이라이트도 즉시 동일하게 갱신됩니다.
  - raw chat Secret token은 여전히 Lua에서 해석하지 않고 `%s` renderer pass-through만 사용합니다.
- 주황색 `X` 하이라이트는 구슬 대상 감지 전용으로 유지합니다.
  - `UnitIsUnit("boss1target","player")` Secret boolean을 `SetAlphaFromBoolean()`에 직접 전달합니다.
  - 각 사용자는 실제 자기 구슬 순번의 주황색 강조만 보게 됩니다.
  - 새 구슬 감지 Window가 시작되면 주황색만 초기화되고 노란색 HUD 미러는 유지됩니다.
- 개인 HUD 시퀀스 자체가 변경되면 오래된 주황색 강조는 무효이므로 초기화합니다.
- `/nsh highlighttest 1~8` 로컬 미리보기는 계속 노란색 + 주황색을 함께 보여줍니다.


v1.12.0 - Dual-track Minimap Assignment Highlight
----------------------------------------------------
- 미니맵 구슬 위치 강조를 2트랙으로 분리했습니다.
- Track A: 모든 사용자에게 현재 감지 Window의 구슬 순번 징표를 노란색 `+` Glow로 표시합니다.
  - #1 대상 감지 시 슬롯 #1 징표가 켜지고 유지됩니다.
  - #2 대상 감지 시 슬롯 #2 징표가 추가되어 #1/#2가 함께 유지됩니다.
  - 따라서 구슬 대상자가 아닌 공대원도 이번 구슬이 깔릴 대략적인 위치를 볼 수 있습니다.
- Track B: 실제 구슬 대상자 본인에게만 같은 위치에 더 밝은 주황색 `X` Glow를 추가합니다.
  - `UnitIsUnit("boss1target","player")` 결과를 Lua 분기하지 않고 `SetAlphaFromBoolean()` Gate에 직접 전달합니다.
  - 주황색 레이어는 TOOLTIP strata / FrameLevel 1700으로 노란색보다 위에 배치합니다.
  - 강한 3회 Pulse 후 정적으로 유지됩니다.
- 노란/주황 두 트랙 모두 다음 구슬 감지 Window가 시작될 때 초기화됩니다.
- 기존 raw chat Secret token -> `%s` custom texture pass-through 원칙은 그대로 유지합니다.
- CrimsonHighlight_1~8.tga를 추가했습니다. 각 텍스처는 크림슨 레드 Glow + 대각선 외곽 조준선으로 구성됩니다.
- `/nsh highlighttest 1~8`은 이제 노란색 + 주황색 두 트랙을 겹쳐서 로컬 미리보기합니다.
- 미니맵 징표 표시 OFF 시 두 강조 레이어도 함께 숨겨집니다.


v1.11.0 - Secret Minimap Assignment Highlight
-----------------------------------------------
- test NSH Secret Highlight Probe의 커스텀 `Highlight_%s.tga` pass-through 구조를 본체에 통합했습니다.
- 개인 HUD 입력이 그룹 채팅일 때 저장된 raw chat token을 Lua에서 해석하지 않고 그대로 Highlight 파일명 `%s`에 전달합니다.
- 강조 시점은 채팅 수신 순간이 아니라 실제 `UNIT_TARGET + boss1target` 구슬 대상 순번이 확정될 때입니다.
  - 대상 #1 -> 개인 HUD 슬롯 #1 token
  - 대상 #2 -> 슬롯 #2 token
  - 다음 감지 Window -> 슬롯 #3/#4 token
- `UnitIsUnit("boss1target", "player")`의 결과는 Lua 분기에 사용하지 않고 `SetAlphaFromBoolean()` Gate에 직접 전달합니다.
  따라서 각 사용자는 자기 자신이 해당 구슬 대상일 때만 자기 순번의 미니맵 징표 Glow를 봅니다.
- 한 감지 Window의 대상 #1/#2는 서로 다른 Gate를 사용하므로 #2가 잡혀도 #1 사용자의 강조가 사라지지 않습니다.
- 다음 구슬 감지 Window가 시작되면 이전 Window의 강조를 초기화합니다.
- 강조는 짧게 2회 Pulse한 뒤 정적으로 유지되며 OnUpdate polling은 사용하지 않습니다.
- 미니맵 징표 표시 옵션이 OFF이면 강조 Overlay도 함께 숨겨집니다.
- Highlight_1~8.tga를 NSRTSupportHUD/Media에 포함했습니다.
- 레이드 없이 시각 조정 가능: `/nsh highlighttest 1~8`, 종료: `/nsh highlightclear`.
- 실제 Encounter의 Secret=true 커스텀 파일명 pass-through는 아직 실전 검증 전입니다. 일반 채팅 non-secret 경로는 Probe에서 확인되었습니다.


v1.10.1 - Minimap Marker Visibility / Size / Layer
---------------------------------------------------
- Blizzard 미니맵 공격대 징표 크기를 24px -> 36px(1.5배)로 확대했습니다.
- 징표의 기존 각도/배치를 유지하면서 normalized radius 0.92 밖의 중심점만 radial clamp하여
  징표 중심이 미니맵 테두리에 더 가깝게 걸치도록 안쪽으로 이동했습니다.
- 미니맵 Marker Overlay를 TOOLTIP strata / high frame level로 올렸습니다.
  Overlay와 Texture는 여전히 mouse input을 받지 않아 클릭은 아래 UI로 통과합니다.
- 설정창에 `미니맵 징표 표시` 체크박스를 추가했습니다. 기본값은 ON입니다.
- 미니맵 징표 OFF 시 회전 경고를 포함한 Overlay 전체가 숨겨집니다.


v1.10.0 - Blizzard Minimap Marker Overlay
-------------------------------------------
- 메인 HUD 중앙 Player Facing Arrow / 20° Facing Cone / 방향 실패 ? 표시를 제거했습니다.
- Facing 20Hz OnUpdate, MinimapCompassTexture Secret rotation, CurveObject y=-x 경로를 제거했습니다.
- NSH가 Blizzard CVar `rotateMinimap`을 변경하는 기능을 완전히 제거했습니다.
  - 설정 버튼 제거
  - `/nsh rotateon`, `/nsh rotateoff`, `/nsh rotatetoggle` 제거
  - 기존 SavedVariables `minimapRotationWanted`는 로드시 폐기
- 실제 Blizzard Minimap 위에 1~8 공격대 징표를 표시하는 Display-only Overlay를 추가했습니다.
  - 기존 MARKERS dx/dy 배치를 Blizzard Minimap 크기에 맞춰 재사용
  - 마우스 입력 없음 / SecureAction 없음 / Tooltip 없음
  - 메인 HUD와 같은 활성 조건(표시 ON + 스조라크/Preview)에 따라 Show/Hide
- Blizzard 미니맵 회전이 ON이면 NSH는 강제로 끄지 않고 미니맵 아래에 경고만 표시합니다.
- 기존 메인 HUD Secure 입력, 3/4칸 규칙, 개인 HUD, boss1target 구슬 대상 감지, AUTO 시간표는 유지합니다.
- Facing 상시 OnUpdate 제거로 메인 HUD 표시 중에도 지속 회전 계산이 없습니다.


v1.8.6 - Minimap Rotation Button
-----------------------------------
- 설정창의 메인 HUD 크기 항목 오른쪽에 `미니맵 회전: ON/OFF` 버튼을 추가했습니다.
- 버튼은 Blizzard CVar `rotateMinimap`을 직접 토글합니다.
- ON이면 중앙 Player Facing Arrow가 즉시 활성화되고, OFF이면 안전하게 숨깁니다.
- 외부에서 미니맵 회전 설정을 바꿔도 `CVAR_UPDATE`를 받아 버튼 상태와 중앙 화살표를 동기화합니다.
- 보조 명령어: `/nsh rotateon`, `/nsh rotateoff`, `/nsh rotatetoggle`
- 별도 SavedVariables 항목을 만들지 않으며 Blizzard의 전역 미니맵 회전 설정을 그대로 사용합니다.

v1.8.4 - Main HUD Player Facing Arrow
--------------------------------------
- 메인 지도 중앙에 플레이어가 바라보는 방향을 표시하는 노란색 화살표를 추가했습니다.
- 개인 HUD 방향팩과 같은 디자인 계열인 Interface\Icons\INV_Misc_Bone_03을 사용합니다.
- 20Hz(0.05초)로 MinimapCompassTexture:GetRotation()을 읽고 화살표에 직접 전달합니다.
- Encounter에서 회전값이 Secret Number가 될 수 있으므로 + / - / 비교 / math 연산을 하지 않습니다.
- 메인 HUD가 숨겨져 있으면 부모 Frame의 OnUpdate도 실행되지 않아 idle polling이 발생하지 않습니다.
- 중앙의 cyan pivot과 반투명 plate로 기존 메인 UI와 시각적 통일성을 유지합니다.

주의:
- 이 기능은 Blizzard의 minimap-compass rotation 경로에 의존합니다.
- 향후 Blizzard가 인스턴스에서 해당 API를 제한하면 화살표 회전도 제한될 수 있습니다.


v1.8.3 - Number / Arrow / Marker stack
--------------------------------------
- 개인 HUD 각 슬롯을 위에서부터 다음 순서로 변경:
    1) 입력 숫자
    2) 방향 화살표
    3) 공격대 징표
- 그룹 채팅 수신 모드의 숫자는 Secret Text를 해석하지 않고
  FontString:SetFormattedText("%s", token)으로 그대로 표시합니다.
- 기존 화살표/징표 역시 같은 raw token을 %s 경로에 직접 전달하며,
  tonumber / 문자열 비교 / table lookup을 추가하지 않았습니다.
- 기존 3칸/4칸, Undo/Clear, 스조라크 시작 자동 초기화, Secure 메인 HUD는 유지합니다.


핵심 변경
---------
1. 개인 HUD에 '입력 소스' 설정을 추가했습니다.
   - 메인 HUD 클릭
   - 그룹 채팅 수신

2. 메인 HUD 클릭 모드
   - 기존 방식 유지
   - 자기자신/반대편 설정으로 최종 숫자를 계산
   - 개인 HUD에는 해당 징표 + 해당 방향 화살표를 동시에 표시

3. 그룹 채팅 수신 모드
   - 파티 / 파티장
   - 공격대 / 공격대장
   - 인스턴스 / 인스턴스 리더
   위 채팅 메시지를 수신합니다.
   - 보스 전투 중 Secret Text를 tonumber/비교/파싱하지 않습니다.
   - 같은 메시지를 아래 두 Blizzard Texture 경로의 %s에 그대로 전달합니다.

     징표:
       Interface\TargetingFrame\UI-RaidTargetingIcon_%s

     방향:
       Interface\Icons\INV_Misc_Bone_0%s

4. 개인 HUD는 최대 3개까지 표시합니다.
   - 4번째 입력 시 새 세트 시작
   - Undo / Clear 유지
   - 독립 위치 / 드래그 / 위치 잠금 유지

5. 기존 X(7), 해골(8) 메인 HUD 버튼은 여전히 클릭 불가입니다.
   단, 그룹 채팅으로 7/8이 들어오면 개인 HUD에는 표시 가능합니다.


Interface\Icons 방향 Override
------------------------------
방향 화살표를 사용하려면 별도 제공되는 Interface Icons Pack이 필요합니다.

최종 경로:
  World of Warcraft\_retail_\Interface\Icons\INV_Misc_Bone_01.tga
  ...
  World of Warcraft\_retail_\Interface\Icons\INV_Misc_Bone_08.tga

방향 규칙:
  1 = 서쪽   ←
  2 = 북서   ↖
  3 = 북쪽   ↑
  4 = 동쪽   →
  5 = 남동   ↘
  6 = 남쪽   ↓
  7 = 남서   ↙
  8 = 북동   ↗

설치 후 WoW 완전 종료/재실행을 권장합니다.


중요: 그룹 채팅 수신 테스트판
------------------------------
보스 전투 중에는 채팅 내용이 Secret Text가 될 수 있어 1~8인지 Lua가 검증할 수 없습니다.
따라서 그룹 채팅 수신 모드에서는 해당 기믹 구간의 호출 메시지를 받는 용도로 사용하십시오.
숫자가 아닌 일반 그룹 채팅도 한 슬롯을 소비할 수 있습니다.


명령어
------
/nsh               설정창 열기/닫기
/nsh inputclick    개인 HUD 입력 = 메인 HUD 클릭
/nsh inputchat     개인 HUD 입력 = 그룹 채팅 수신
/nsh record        개인 HUD ON
/nsh norecord      개인 HUD OFF
/nsh clear         개인 HUD 초기화
/nsh undo          마지막 입력 취소

기존 /nsh 명령어도 유지됩니다.


v1.5.1
------
- 개인 HUD를 세로형 카드 3개 구조로 변경
  - 위: 방향 화살표
  - 아래: 공격대 징표
- 개인 HUD 크기 50~150% 슬라이더 추가
- 메인 HUD의 X(7), 해골(8)은 표시만 하고 클릭/툴팁/입력 완전 비활성
- 전체 설치 ZIP은 Interface 폴더 내부에서 바로 풀 수 있도록
  최상위가 AddOns / Icons 두 폴더만 되도록 변경


v1.6.0 - RAID VERIFIED
----------------------
- 그룹 채팅 수신을 정식 기능으로 승격.
- 수신 범위:
  1) 공격대만
  2) 공격대 + 인스턴스
  3) 전체 그룹(파티 + 인스턴스 + 공격대)
- '보스 인카운트 중에만 그룹 채팅 수신' 옵션 추가.
  체크 시 ENCOUNTER_START ~ ENCOUNTER_END 사이에서만 그룹 채팅을 개인 HUD에 반영.
  ARM / 3개 자동종료 기능은 구현하지 않음.
- 채팅 발송 채널에 '인스턴스' 추가.
- Secret-safe 경로 고정:
    Interface\TargetingFrame\UI-RaidTargetingIcon_%s
    Interface\Icons\INV_Misc_Bone_0%s
  그룹 채팅 메시지 본문에 tonumber / 문자열 비교 / table lookup을 하지 않음.
- 설정창에 '방향팩 테스트' 버튼 추가.
  개인 HUD에 ← / ↑ / →가 보이면 Interface\Icons Override Pack 정상.
- 배포 ZIP 최상위는 AddOns / Icons 두 폴더만 유지.


v1.7.0 - Sszorak activation policy
----------------------------------
- v1.6.0의 '보스 인카운트 중에만 그룹 채팅 수신' 옵션 제거.
  이 옵션이 기본 ON이라 인카운트 밖에서 전체 그룹 수신을 선택해도
  PARTY / INSTANCE / RAID 채팅이 무시될 수 있었음.

- 새 옵션: '스조라크 인카운트에서만 활성화'
  대상 Dungeon Encounter ID: 3420

  ON:
    * 평소 메인 HUD 숨김
    * 평소 개인 HUD 숨김
    * 평소 그룹 채팅 수신 중지
    * 스조라크 ENCOUNTER_START 시 활성
    * 스조라크 ENCOUNTER_END 시 다시 비활성

  설정창이 열려 있는 동안:
    * 위치/크기 조정을 위해 표시 체크가 켜진 HUD는 미리보기로 유지
    * 메인 HUD 표시 OFF면 설정창을 열어도 메인 HUD는 나오지 않음
    * 개인 HUD 표시 OFF면 설정창을 열어도 개인 HUD는 나오지 않음
    * 설정창 미리보기는 채팅 수신을 활성화하지 않음

- '스조라크 인카운트에서만 활성화' OFF:
    기존처럼 항상 활성 상태.
    그룹 채팅 수신 범위(공격대만 / 공격대+인스턴스 / 전체 그룹)에 따라
    PARTY / INSTANCE / RAID 수신 가능.

- 채팅 발송의 인스턴스(INSTANCE_CHAT) 옵션 유지.
- Secret 메시지 본문은 계속 tonumber / 비교 / lookup 없이 %s에 직접 전달.


v1.7.1 - Secure Macro PoC (A experiment)
----------------------------------------
목적:
  보스 인카운트의 Chat Messaging Lockdown에서,
  SecureActionButtonTemplate + 정적 macrotext가 사용자의 실제 클릭으로
  /i 1~6을 발송할 수 있는지 검증.

설정:
  [ ] Secure /i 매크로 발송 실험 바 표시

중요:
- 반드시 전투 전에 ON/OFF 하십시오.
- 테스트 바는 스조라크 전용 HUD의 자동 Show/Hide와 독립적입니다.
  Protected frame을 ENCOUNTER_START 중 Lua로 Show/Hide 하는 문제를 피하기 위한 PoC 설계입니다.
- 바의 1~6 버튼은 각각 아래와 같이 미리 고정되어 있습니다.
    1 -> /i 1
    2 -> /i 2
    ...
    6 -> /i 6
- 버튼 클릭에는 Lua OnClick/PostClick을 붙이지 않았습니다.
  SecureActionButtonTemplate의 protected macro 경로만 테스트합니다.
- 기존 메인 HUD의 일반 SendChatMessage는 Chat Messaging Lockdown 감지 시
  호출 자체를 생략하여 ADDON_ACTION_BLOCKED 오류를 줄였습니다.

테스트 방법:
1) 공격대 찾기 입장
2) 보스 전투 전에 설정에서 Secure /i 테스트 바 ON
3) 전투 전에 1~6 버튼이 보이는지 확인
4) 보스 전투 시작 후 테스트 바의 3 등을 직접 클릭
5) 인스턴스 채팅에 '3'이 실제 발송되는지 확인
6) 그룹 채팅 수신 + 개인 HUD가 켜져 있으면 자신의 발송 메시지도 개인 HUD에 반영되는지 확인

성공 시:
  다음 단계에서 메인 HUD의 1~6 클릭과 secure macro 전송을 통합하되,
  Secure frame의 전투중 visibility 제약과 스조라크 전용 자동 표시 구조를 함께 설계해야 함.


v1.7.2 - Secure Main HUD integration
------------------------------------
PoC 결과:
  독립 Secure /i 테스트 바가 실제 보스 전투 중 정상 발송됨.

이번 버전:
- 메인 HUD 1~6 징표 클릭을 SecureActionButtonTemplate에 직접 연결.
- 기존 Lua SendChatMessage 경로가 아니라, 전투 전에 확정한 정적 macrotext 사용.

예:
  출력 방식 = 반대편
  채팅 발송 = 인스턴스

  별(1) 클릭       -> Secure "/i 4"
  동글(2) 클릭     -> Secure "/i 5"
  다이아(3) 클릭   -> Secure "/i 6"
  역삼각(4) 클릭   -> Secure "/i 1"
  달(5) 클릭       -> Secure "/i 2"
  네모(6) 클릭     -> Secure "/i 3"

자기자신 모드:
  각 버튼 번호 그대로 발송.

지원 Secure 채널:
  일반       /s
  파티       /p
  인스턴스   /i
  공격대     /raid
  사용 안 함 -> Secure 채팅 액션 없음

중요 설계:
- 보이는 메인 HUD는 일반 Frame.
- 클릭만 담당하는 투명 Secure 레이어를 별도로 둠.
- 따라서 스조라크 ENCOUNTER_START/END에서 보이는 HUD는 계속 자유롭게 Show/Hide 가능.
- Secure 레이어는 protected visibility state driver를 사용.
- 스조라크가 아닌 다른 보스 전투에서는 별도의 ordinary blocker layer가 Secure 버튼 위를 막음.
- 설정창이 열려 있을 때도 Secure 메인 버튼은 차단하여 실수 발송 방지.
- X(7), 해골(8)은 기존대로 클릭 불가.

개인 HUD:
- 개인 입력 소스 = 메인 HUD 클릭
  Secure 발송 후 PostClick에서 기존 개인 HUD 기록을 수행.
- 개인 입력 소스 = 그룹 채팅 수신
  자기 자신이 Secure 버튼으로 발송한 채팅도 수신 이벤트를 통해 개인 HUD에 들어옴.

전투 중 변경 제한:
- 채팅 발송 채널
- 자기자신 / 반대편
- 메인 HUD 크기
- 메인 HUD 위치
- 스조라크 전용 ON/OFF

이 값들은 Secure macrotext/클릭 위치와 연결되어 있으므로 전투 전에 확정해야 함.

독립 Secure /i 테스트 바는 fallback 검증용으로 당분간 유지.


v1.7.3 - Dual Click fix
-----------------------
문제:
v1.7.2에서 보이는 메인 HUD 1~6 버튼을 EnableMouse(false)로 만들고
투명 Secure 버튼만 클릭을 담당하게 했음.
그 결과 비전투, 설정 미리보기, 채널 변경 후 Secure 레이어가 숨겨진 상태에서
'버튼은 보이지만 클릭할 대상이 없는' 경우가 발생.

수정:
1) 비전투:
   - 보이는 메인 HUD 1~6 버튼이 직접 클릭을 받음.
   - 기존 일반 SendChatMessage 경로 사용.
   - 던전 안에서 채팅 발송 채널을 바꿔도 즉시 계속 클릭 가능.

2) 전투:
   - 투명 SecureActionButton 1~6이 높은 레이어에서 클릭을 받음.
   - 미리 고정된 macrotext(/s /p /i /raid)를 실행.
   - 보이는 일반 버튼은 전투 중 insecure 발송을 하지 않음.

3) Secure 레이어:
   - 항상 combat-only.
   - 비전투에는 숨김.
   - ordinary blocker 역시 비전투에는 무조건 숨김.

4) Secure 버튼의 위치:
   - 기존 +2px Y 오차 제거.
   - 보이는 징표 버튼과 정확히 같은 좌표.

5) X(7), 해골(8):
   - 계속 완전 클릭 불가.

권장 검증:
- 던전 진입
- 비전투에서 채팅 발송 채널: OFF -> PARTY -> INSTANCE -> RAID 등 변경
- 각 변경 직후 1~6 클릭 확인
- 보스 전투 진입 후 INSTANCE Secure 발송 확인


v1.8.0 - Distribution Optimization
----------------------------------
목표:
- Event-driven 구조 유지
- OnUpdate / Ticker / Polling 추가 없음
- Secure/UI 변경 경로 중복 제거
- 배포판에서 개발용 PoC 제거

적용:
1) Main HUD Scale Single Source of Truth
   - 설정 Slider도 SetScaleValue() 사용.
   - Combat Guard + Visible HUD + Secure Layer Scale을 같은 경로에서 처리.
   - 설정 Refresh가 Slider callback을 재호출하지 않도록 guard 추가.

2) PLAYER_REGEN_ENABLED 최소화
   - 매 전투 종료마다 Layout / Macro / StateDriver 전체 재설정하던 코드 제거.
   - Secure Main Layer가 없을 때만 생성.
   - 일반 blocker Gate 정리만 수행.

3) Secure Gate 중복 호출 제거
   - UpdateHUDVisibility()가 HUD visibility + Secure Gate 동기화를 책임.
   - Show/Hide HUD, ENCOUNTER_START/END의 추가 Gate 호출 제거.

4) Settings Lazy Creation
   - ADDON_LOADED에서 CreateSettings() 제거.
   - /nsh 최초 실행 시에만 생성.
   - OnShow/OnHide가 Preview visibility 갱신을 담당.

5) Secure Macro Test Bar 제거
   - v1.7.1 PoC는 실전 검증 완료.
   - Frame / SecureActionButton / 옵션 / Slash command 모두 배포판에서 제거.
   - 기존 SavedVariables의 PoC 필드는 v1.8.0 migration에서 정리.

6) StateDriver Policy Cache
   - SSZORAK_BOSS_COMBAT / ANY_COMBAT 정책이 실제로 바뀔 때만
     UnregisterStateDriver + RegisterStateDriver 수행.

7) Secure Data Dependency 분리
   - Channel / SELF-OPPOSITE 변경 -> Macro Refresh만.
   - HUD 위치/크기 변경 -> Layout Sync만.
   - sszorakOnly 변경 -> StateDriver policy + visibility/gate.
   - Personal HUD 설정은 Secure Macro/Layout을 건드리지 않음.

8) /nsh perf
   Runtime counter:
   - OnUpdate / Ticker / Periodic Scan = 0
   - HUD Visibility Updates
   - Secure Gate Updates
   - Secure Layout Syncs
   - Macro Refreshes
   - StateDriver Reconfigs
   - Settings Created
   - Chat Events Received / Accepted

유지:
- 비전투 일반 클릭
- 전투 Secure 클릭
- SELF / OPPOSITE
- SAY / PARTY / INSTANCE / RAID
- 스조라크 전용 visibility
- 개인 HUD / Secret-safe chat receive
- 설정창 Preview
- 기존 SavedVariables
- X(7) / 해골(8) 클릭 불가


v1.8.1 - Personal HUD 3 / 4 Slot
--------------------------------
- 개인 HUD 칸 수 옵션 추가:
    3칸
    4칸

- 3칸:
    1~3번째 입력 표시
    4번째 입력이 들어오면 새 세트로 시작

- 4칸:
    1~4번째 입력 표시
    5번째 입력이 들어오면 새 세트로 시작

- 개인 HUD는 4칸 선택 시 가로 폭이 자동 확장되고,
  3칸으로 변경하면 자동 축소.

- 4칸 -> 3칸 변경 시 기존 1~3 기록은 유지하고 4번째 기록만 제거.

- 기존 기능 유지:
    세로 카드
    위 = 방향 화살표
    아래 = 징표
    개인 HUD Scale 50~150%
    Undo / Clear
    그룹 채팅 Secret-safe 수신
    스조라크 전용 활성
    Secure 메인 HUD 발송

- 설정창의 '개인 징표 순서 HUD' 제목 우측에서 3칸 / 4칸 선택.

- Slash:
    /nsh slots 3
    /nsh slots 4


v1.8.2 - Sszorak Encounter Auto Clear
--------------------------------------
스조라크 ENCOUNTER_START를 받으면 HUD를 활성화하기 전에 자동으로:
- 개인 HUD의 기존 3/4칸 순서 전체 초기화
- personalCount = 0
- 메인 HUD 하단의 마지막 동작 문구 초기화

초기화하지 않는 항목:
- HUD 위치 / 크기
- 3칸 / 4칸 설정
- SELF / OPPOSITE
- 채팅 발송 채널
- Secure Button 설정
- Personal HUD ON/OFF / 입력 방식

스조라크가 아닌 다른 인카운트 시작에서는 자동 초기화하지 않습니다.


v1.8.7 - Minimap Launcher + Auto Rotation Scope
------------------------------------------------
1) rotateMinimap 자동 범위 제어

사용자가 '미니맵 회전 ON'을 선택하면 그 의도는 DB에 저장되지만,
실제 Blizzard rotateMinimap CVar는 메인 HUD가 실제로 보일 때만 ON.

예:
  메인 HUD 표시 = ON
  스조라크 인카운트에서만 활성화 = ON
  미니맵 회전 = ON

평소:
  메인 HUD 숨김
  rotateMinimap = OFF

스조라크 ENCOUNTER_START:
  메인 HUD 표시
  rotateMinimap = ON

스조라크 ENCOUNTER_END:
  메인 HUD 숨김
  rotateMinimap = OFF

다음 스조라크 ENCOUNTER_START:
  사용자의 ON 의도를 기억하고 rotateMinimap = ON 자동 복원.

'메인 HUD 표시' 자체를 OFF 하면 rotateMinimap도 즉시 OFF.

설정창 Preview로 메인 HUD가 실제 표시되는 동안은 rotateMinimap ON 허용.
설정창을 닫아 HUD가 다시 비활성화되면 OFF.

설정 버튼 상태:
  OFF  = 사용자가 회전을 원하지 않음
  ON   = 회전 희망 + 현재 HUD 활성 + 실제 CVar ON
  대기 = 회전 희망은 저장됨 + HUD 비활성이라 실제 CVar OFF


2) 미니맵 설정 런처

항상 접근 가능한 Blizzard 스타일 원형 버튼 추가.

아이콘:
  NSH에서 사용하는 노란 방향 화살표
  Interface\Icons\INV_Misc_Bone_03

동작:
  좌클릭
  → /nsh 와 동일하게 설정창 열기/닫기

  좌클릭 드래그
  → 미니맵 원형 테두리를 따라 이동
  → 각도 SavedVariables 저장

Idle:
  드래그 중에만 OnUpdate 사용
  평상시 추가 OnUpdate 없음

미니맵 크기/UI Scale 변경 및 지역 이동 시 저장된 각도로 재배치.


v1.8.8 - Minimap Launcher Icon Fix
----------------------------------
- 미니맵 런처 아이콘이 검은 원형 배경 뒤에 가려지던 DrawLayer 순서 수정.
- 배경: BACKGROUND
- 노란 방향 화살표: ARTWORK
- 원형 테두리: OVERLAY
- 화살표 크기 19px -> 22px
- 기존 미니맵 테두리 드래그 / 위치 저장 / 좌클릭 설정창 기능 유지.


v1.8.9 - Minimap Tracking Border Alignment Fix
-----------------------------------------------
문제:
MiniMap-TrackingBorder 텍스처는 자체 내부 여백을 가지고 있는데
추가로 -11, +11 오프셋을 적용해 원형 테두리가 왼쪽 위로 밀렸음.
그 결과 중앙 아이콘이 원 밖으로 튀어나온 것처럼 보였음.

수정:
- TrackingBorder anchor:
    TOPLEFT, -11, +11
  ->
    TOPLEFT, 0, 0

- 화살표 크기 22x22 유지
- 아이콘/배경 중심 위치 유지
- 드래그/설정창/위치 저장 기능 유지


v1.9.0 - Main HUD Facing Direction Fix
---------------------------------------
문제:
GetPlayerFacing()의 회전값을 Texture:SetRotation()에 그대로 전달해
캐릭터 좌/우 회전과 메인 HUD 화살표/Cone 회전 방향이 반대로 보였음.

수정:
- GetPlayerFacing() -> -facing 으로 역부호 적용.
- Arrow와 20° Cone에 같은 역회전값 적용.
- GetPlayerFacing 값이 Secret/restricted라 역부호 계산이 불가능하면
  잘못된 MinimapCompass direct fallback을 사용하지 않고 ? 표시.
- 미니맵 런처 / 개인 HUD / Secure 클릭 / rotateMinimap 정책은 변경 없음.


v1.9.1 - Sszorak Orb Target Assignment
---------------------------------------
대상 감지:
- NSRT 방식 UNIT_TARGET(boss1) + boss1target 사용.
- 한 감지 Window당 대상 2명 캡처.
- UnitExists("boss1target")가 Secret이면 해당 이벤트는 건너뜀.
- 대상 이름은 UnitName("boss1target")을 FontString에 직접 전달.
  이름 비교/가공/테이블 키 사용 없음.

AUTO:
- Normal(14), Heroic(15), Mythic(16):
  NSRT 시간표로 자동 ARM.
- Raid Finder(17):
  AUTO 없음. 수동 감지 버튼 사용.

수동:
- 개인 HUD 아래 [구슬 대상 감지] 버튼.
- 6.5초 동안 감시.
- 일반 이상에서도 비상용으로 항상 사용 가능.
- /nsh orbarm
- /nsh orbdisarm

개인 HUD:
- 각 카드 하단에 배정된 플레이어 이름 추가.
- 전체 인카운트 기준 순번으로 연결:
    첫 번째 구슬 대상 -> 카드 1
    두 번째 구슬 대상 -> 카드 2
    다음 Window 첫 대상 -> 카드 3
    다음 Window 두 번째 대상 -> 카드 4
- 3칸 모드에서는 1~3번까지만 표시.
- 새 Sequence/Clear/Encounter Start 시 이름과 배정 Cursor 초기화.
- 기존 숫자 -> 화살표 -> 징표 구조 유지.

AUTO 시간표:
Normal:
36.25 / 95.0 / 188.3 / 247.0 / 340.3

Heroic:
32.2 / 84.4 / 170.3 / 222.6 / 308.5 / 360.8

Mythic:
29.0 / 76.0 / 156.0 / 203.0 / 283.0 / 330.0


v1.9.2 - Facing Mirror + Personal Target Alert
-----------------------------------------------
[메인 HUD 플레이어 방향]
- 필드: GetPlayerFacing() 값을 그대로 SetRotation().
- 제한된 레이드/던전:
  MinimapCompassTexture:GetRotation()을 산술 처리하지 않음.
  Secret rotation을 그대로 SetRotation()에 전달.
  GetTexCoord()로 transformed corner를 받고 좌/우 corner pair만 교환.
  Arrow와 20도 Cone 모두 동일 처리.
- 매 20Hz 갱신 전에 canonical TexCoord로 초기화하여 누적 변형 방지.

[내가 구슬 대상일 때 대형 알림]
- boss1target 캡처 직후 UnitIsUnit("boss1target","player") 사용.
- 반환 boolean이 Secret이어도 Lua 조건문으로 읽지 않음.
- Frame:SetAlphaFromBoolean(value, 1, 0)로 parent gate를 직접 제어.
- 왼쪽 화면 절반: 해당 배정 화살표.
- 오른쪽 화면 절반: 해당 배정 공격대 징표.
- 두 아이콘은 화면을 거의 덮는 크기로 자동 계산.
- 배경/텍스트 없음.
- 크기 변화 없음.
- 1.5초 동안 Alpha 100% -> 0% 선형 Fade.
- 다른 사람이 대상이면 gate alpha=0이므로 보이지 않음.

[설정]
- "내가 구슬 대상일 때 대형 화살표 + 징표"
- 기본 ON.
- /nsh alerton
- /nsh alertoff


v1.9.3 - Personal Target Alert Test Button
-------------------------------------------
- 설정창의 "내가 구슬 대상일 때 대형 화살표 + 징표" 옵션 옆에
  [테스트] 버튼 추가.
- 테스트는 실제 boss1target / UnitIsUnit 판정을 사용하지 않음.
- 고정 샘플 5번을 사용:
  왼쪽 = 5번 방향 화살표
  오른쪽 = 달 공격대 징표
- 실제 알림과 동일한 화면 크기 및 1.5초 100% -> 0% 선형 Fade 사용.
- 실제 알림과 테스트 알림이 같은 Fade helper를 공유하도록 정리.
- /nsh alerttest 추가.


v1.9.4 - 4-Slot X / Skull Input
--------------------------------
메인 HUD X(7) / 해골(8) 입력 규칙 변경.

3칸 모드:
- 1~6만 클릭 가능.
- X(7), 해골(8)은 기존처럼 위치 참고용.
- 비전투 ordinary 클릭 비활성.
- 전투 Secure 버튼도 비활성.
- Secure macrotext도 생성하지 않음.

4칸 모드:
- 1~8 모두 클릭 가능.
- X(7), 해골(8)이 정식 배정 입력으로 승격.
- 비전투 ordinary 클릭 지원.
- 전투 Secure 클릭/채팅 지원.
- SELF: 7->7, 8->8
- OPPOSITE: 7->8, 8->7
- 개인 HUD 4번째 카드에도 정상 기록 가능.
- 이후 구슬 대상 배정/대형 개인 알림도 기존 token 경로 그대로 사용.

Secure 안전:
- SecureActionButton 1~8은 전투 전에 모두 미리 생성.
- 3/4칸 전환 시 7/8 mouse gate + macro attribute를 전투 밖에서 갱신.
- 3/4칸 전환은 전투 중 차단.


v1.9.5 - Secret Curve Facing Fix
---------------------------------
실전 확인:
- Raid에서 MinimapCompassTexture:GetRotation()은 Secret=true.
- 따라서 Lua의 -rotation 산술 반전은 사용할 수 없음.

변경:
- v1.9.2~1.9.4의 TexCoord mirror 방식 완전 제거.
- C_CurveUtil.CreateCurve()로 Secret-safe reverse curve 생성.
- Linear curve:
    x=-100 -> y=100
    x= 100 -> y=-100
  즉 전체 구간에서 y=-x.
- Raid:
    secretRotation = MinimapCompassTexture:GetRotation()
    reversedSecret = reverseCurve:Evaluate(secretRotation)
    Arrow:SetRotation(reversedSecret)
    Cone:SetRotation(reversedSecret)
- Lua에서 Secret rotation에 산술/비교/정규화 없음.
- Curve Evaluate 실패 시 잘못된 방향을 보여주지 않고 Arrow/Cone 숨김.

Field:
- GetPlayerFacing()이 non-secret이면 기존처럼 direct SetRotation 유지.

다른 v1.9.4 기능:
- 4칸 모드 X/해골 입력
- 구슬 대상 자동/수동 감지
- 개인 HUD 대상 이름
- 대형 개인 알림 + 테스트 버튼
모두 유지.


v1.15.0
- Minimap:SetIconScale 기반 기본 미니맵 아이콘 확대 ON/OFF 추가.
- 1.0x~3.0x, 0.1 단계 슬라이더.
- OFF 전환 시 1.0x 복원. 편집 모드 변경 후 ON 상태면 NSH 값 재적용.


v1.15.0
- Personal HUD slot 1: white minimap highlight.
- Personal HUD slot 2: yellow minimap highlight.
- Personal HUD slots 3-4: green minimap highlight with identical geometry.
- Existing 8-direction arrow artwork moved unchanged into AddOns/NSRTSupportHUD/Media/DirArrow_1~8.tga.
- Removed the global Interface/Icons override dependency.
