§
    l\®j”  ã                   ó†   — d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 	 ddlZn# e$ r dZY nw xY w G d„ d¦  «        ZdS )uK  
AutoPOE2 - Hideout Navigator Module (SSoT Doc 48 / Doc 56 / Doc 61)
=================================================================
ChuyÃªn trÃ¡ch Ä‘iá»�u hÆ°á»›ng an toÃ n trong Shoreline Hideout:
- Kháº¯c phá»¥c triá»‡t Ä‘á»ƒ hiá»‡n tÆ°á»£ng káº¹t táº¡i bÃ£i biá»ƒn phÃ­a Báº¯c (Salvage Bench).
- BÃ£i biá»ƒn phÃ­a Báº¯c bá»‹ cháº·n hoÃ n toÃ n hÆ°á»›ng Ä�Ã´ng Nam bá»Ÿi vÃ¡ch Ä‘Ã¡ vÃ  biá»ƒn (S+D sáº½ Ä‘Ã¢m vÃ o vÃ¡ch Ä‘Ã¡).
- HÃ nh lang di chuyá»ƒn an toÃ n 3 cháº·ng:
  + Cháº·ng 1: Ä�i TÃ¢y (A, dx=-1.0, dy=1.0, dwell=1.5s) sang trá»¥c Ä‘Æ°á»�ng Ä‘Ã¡ chÃ­nh (khu Reforging Bench).
  + Cháº·ng 2: Ä�i Nam (S, dx=-1.0, dy=-1.0, dwell=3.0s) xuÃ´i trá»¥c Ä‘Æ°á»�ng chÃ­nh qua Alva / Relic Locker.
  + Cháº·ng 3: Ä�i Ä�Ã´ng (D, dx=1.0, dy=-1.0, dwell=1.5s) tiáº¿n lÃªn bá»‡ Ä‘Ã¡ trÃ²n Map Device.
- Kiá»ƒm tra quang há»�c sau má»—i cháº·ng: Náº¿u nháº­n diá»‡n Ä‘Æ°á»£c Map Device hoáº·c Waypoint thÃ¬ dá»«ng hÃ nh lang sá»›m
  Ä‘á»ƒ chuyá»ƒn giao cho Closed-loop WASD approach.
- TuÃ¢n thá»§ nghiÃªm ngáº·t Rule 4 (Module hÃ³a), Rule 5 (Dá»¯ liá»‡u tháº­t 100%), Rule 7 (WASD dwell >= 300ms).
é    N)ÚCallableÚOptionalÚTupleÚUnion)ÚImagec                   ó$  — e Zd Z	 	 	 ddededeeegdf                  fd„Zded	dfd
„Zde	ee
j
        f         d	efd„Z	 ddeeeegdf         deegef         deee         geeef         f         deeeef                  d	eeef         f
d„ZdS )ÚHideoutNavigatoré 
  é   NÚscreen_wÚscreen_hÚlog_callbackc                 óf   — || _         || _        |dz  | _        |dz  | _        |pt          | _        d S )Ng      ¤@g     €–@)r   r   Úscale_xÚscale_yÚprintr   )Úselfr   r   r   s       ú<C:\Projects\AutoPOE2\src\assistant_tool\hideout_navigator.pyÚ__init__zHideoutNavigator.__init__   s=   € ð !ˆŒØ ˆŒØ &Ñ(ˆŒØ &Ñ(ˆŒØ(Ð1­EˆÔÐÐó    ÚmsgÚreturnc                 ó0   — |                       |¦  «         d S ©N)r   )r   r   s     r   ÚlogzHideoutNavigator.log)   s   € Ø×Ò˜#ÑÔÐÐÐr   Ú	img_inputc                 ó¸  ‡— t           €dS 	 t          |t          ¦  «        rt          j        |¦  «        }n|}|j        \  }}t          j        |¦  «        }d„ |                     dg ¦  «        D ¦   «         }d                     |¦  «        Šddl	m
} |                     |¦  «        st          ˆfd„dD ¦   «         ¦  «        rdS |                     dg ¦  «        D ]o}|                     d	d
¦  «                             ¦   «         }	d|	v sd|	v r=|                     dg ¦  «        }
|
r%t          d„ |
D ¦   «         ¦  «        }|d|z  k    r dS Œpn# t          $ r Y nw xY wdS )u  Kiá»ƒm tra xem nhÃ¢n váº­t cÃ³ Ä‘ang Ä‘á»©ng gáº§n Salvage Bench / bá»� biá»ƒn phÃ­a Báº¯c hay khÃ´ng.
        
        Quy táº¯c báº¥t biáº¿n:
        - Náº¿u Map Device hoáº·c Portal Ä‘ang hiá»ƒn thá»‹ trÃªn view -> cháº¯c cháº¯n khÃ´ng pháº£i Ä‘ang káº¹t á»Ÿ Salvage Bench.
        - Chá»‰ kÃ­ch hoáº¡t khi cÃ³ nhÃ£n 'SALVAGE' hoáº·c 'REFORGING' á»Ÿ cá»± ly gáº§n nhÃ¢n váº­t (y >= 0.35 * h).
        - Loáº¡i trá»« 'VERISIUM' (náº±m á»Ÿ Anvil gáº§n Alva trong sÃ¢n chÃ­nh, khÃ´ng pháº£i Salvage Bench).
        NFc                 ó^   — g | ]*}|                      d d¦  «                             ¦   «         ‘Œ+S )ÚtextÚ )ÚgetÚupper)Ú.0Úls     r   ú
<listcomp>z8HideoutNavigator.is_at_salvage_bench.<locals>.<listcomp>=   s2   € ÐMÐMÐM°1�Q—U’U˜6 2Ñ&Ô&×,Ò,Ñ.Ô.ÐMÐMÐMr   Úlinesú r   c              3   ó    •K  — | ]}|‰v V — Œ	d S r   © )r#   ÚkÚ	full_texts     €r   ú	<genexpr>z7HideoutNavigator.is_at_salvage_bench.<locals>.<genexpr>B   s'   øè è € Ð7~Ð7~È1¸¸Y¸Ð7~Ð7~Ð7~Ð7~Ð7~Ð7~r   )ÚPORTALÚMONOLITHÚBURNINGÚWAYPOINTr   r    ÚSALVAGEÚ	REFORGINGÚwordsc              3   ó2   K  — | ]}|d          d         V — ŒdS )Úbounding_rectÚyNr)   )r#   Úw_infos     r   r,   z7HideoutNavigator.is_at_salvage_bench.<locals>.<genexpr>K   s,   è è € Ð#UÐ#UÀV F¨?Ô$;¸CÔ$@Ð#UÐ#UÐ#UÐ#UÐ#UÐ#Ur   g¸…ëQ¸¾?T)ÚwinocrÚ
isinstanceÚstrr   ÚopenÚsizeÚrecognize_pil_syncr!   ÚjoinÚ
src.commonÚcommonÚis_map_device_visibleÚanyr"   ÚminÚ	Exception)r   r   ÚimgÚwÚhÚresr&   r@   ÚlineÚtr3   Úmin_yr+   s               @r   Úis_at_salvage_benchz$HideoutNavigator.is_at_salvage_bench,   s¤  ø€ õ ˆ>Ø�5ð	Ý˜)¥SÑ)Ô)ð  Ý”j Ñ+Ô+��à�Ø”8‰DˆAˆqÝÔ+¨CÑ0Ô0ˆCØMÐM¸¿ºÀÈÑ8LÔ8LÐMÑMÔMˆEØŸš ™œˆIà'Ð'Ð'Ð'Ð'Ð'à×+Ò+¨CÑ0Ô0ð µCÐ7~Ð7~Ð7~Ð7~ÐP}Ð7~Ñ7~Ô7~Ñ4~Ô4~ð Ø�uð Ÿš ¨Ñ,Ô,ð (ð (�Ø—H’H˜V RÑ(Ô(×.Ò.Ñ0Ô0�Ø �>�> [°AÐ%5Ð%5Ø ŸHšH W¨bÑ1Ô1�EØð (Ý #Ð#UÐ#UÈuÐ#UÑ#UÔ#UÑ UÔ U˜Ø  D¨1¡HÒ,Ð,Ø#' 4 4øð(øõ ð 	ð 	ð 	ØˆDð	øøøàˆus   ŒB5E
 ÃBE
 ÅE
 Å

EÅEÚsend_wasd_funcÚcapture_funcÚfind_map_device_funcÚfallback_posc           
      óž  ‡— |r|d         nt          d| j        z  ¦  «        }|r|d         nt          d| j        z  ¦  «        }	 ddlm}m}  |¦   «         }	|	r ||	¦  «         n# t          $ r Y nw xY wg d¢}
t          |
d¦  «        D �]‹\  }\  }}}}|                      d|› d|d	›d
�¦  «          ||||¦  «         t          j
        d¦  «          |d|› �¦  «        } ||¦  «        \  }}d}|dk    rµ	 ddlm} t          |d¦  «        r|                     |¦  «        rd}nu|                     |¦  «        }|                     dg ¦  «        D ]I}|                     dd¦  «                             ¦   «         Št%          ˆfd„dD ¦   «         ¦  «        rd} nŒJn# t          $ r Y nw xY w|s@||f||fk    r6t'          |t(          ¦  «        r!t*          j                             |¦  «        sd}|r%|                      d|› d|› d|› d�¦  «         ||fc S �Œ� |d¦  «        } ||¦  «        \  }}|                      d|› d|› d�¦  «         ||fS )u  
        Thá»±c thi hÃ nh lang Ä‘iá»�u hÆ°á»›ng 3 cháº·ng tá»« bÃ£i biá»ƒn phÃ­a Báº¯c (Salvage Bench) vá»� bá»‡ Ä‘Ã¡ Map Device.
        
        @param send_wasd_func: HÃ m gá»­i phÃ­m di chuyá»ƒn (dx, dy, dwell_ms)
        @param capture_func: HÃ m chá»¥p mÃ n hÃ¬nh tráº£ vá»� Ä‘Æ°á»�ng dáº«n áº£nh
        @param find_map_device_func: HÃ m tÃ¬m tá»�a Ä‘á»™ Map Device quang há»�c
        @param fallback_pos: Tá»�a Ä‘á»™ fallback chuáº©n
        @return: Tá»�a Ä‘á»™ (x, y) cá»§a Map Device sau khi káº¿t thÃºc hÃ nh lang
        r   i—  é   i…  )Úfind_poe2_windowÚensure_window_focus))u8   Cháº·ng 1: Ráº½ TÃ¢y (A) ra trá»¥c Ä‘Æ°á»�ng Ä‘Ã¡ chÃ­nhç      ð¿g      ð?g      ø?)u0   Cháº·ng 2: XuÃ´i Nam (S) qua Alva & Relic LockerrU   rU   g      @)u:   Cháº·ng 3: Ráº½ Ä�Ã´ng Nam (S+D) lÃªn bá»‡ Ä‘Ã¡ Map Deviceg        rU   gÍÌÌÌÌÌü?u   ðŸš¶ [HideoutNavigator] z (dwell=z.1fzs)...gffffffÖ?ÚSTAGE2_CORRIDOR_LEG_FNrA   Tr&   r   r    c              3   ó    •K  — | ]}|‰v V — Œ	d S r   r)   )r#   r*   Útxts     €r   r,   zGHideoutNavigator.navigate_from_salvage_to_map_device.<locals>.<genexpr>Š   s'   øè è € Ð"fÐ"f° 1¨ 8Ð"fÐ"fÐ"fÐ"fÐ"fÐ"fr   )ÚMAPÚDEVICEr0   ÚFARROWÚZOLINuJ   ðŸŽ¯ [HideoutNavigator] Ä�Ã£ phÃ¡t hiá»‡n Map Device / SÃ¢n chÃ­nh táº¡i (z, u   ) ngay sau cháº·ng u9   ! Dá»«ng hÃ nh lang sá»›m Ä‘á»ƒ tiáº¿p cáº­n chÃ­nh xÃ¡c.ÚSTAGE2_CORRIDOR_COMPLETEuM   ðŸ�� [HideoutNavigator] HoÃ n thÃ nh hÃ nh lang 3 cháº·ng. Map Device táº¡i (z).)Úintr   r   Úsrc.common.win32_windowrS   rT   rD   Ú	enumerater   ÚtimeÚsleepr?   r@   ÚhasattrrA   Úsafe_recognize_pil_syncr!   r"   rB   r9   r:   ÚosÚpathÚexists)r   rM   rN   rO   rP   Úfallback_mxÚfallback_myrS   rT   ÚhwndÚlegsÚidxÚdescÚdxÚdyÚdwellÚ	check_imgÚ
detected_xÚ
detected_yÚdevice_confirmedr@   Úres_chkr$   Ú	final_imgÚfinal_xÚfinal_yrX   s                             @r   Ú#navigate_from_salvage_to_map_devicez4HideoutNavigator.navigate_from_salvage_to_map_deviceR   s{  ø€ ð  *6ÐS�l 1”o�o½3¸tÀdÄlÑ?RÑ;SÔ;SˆØ)5ÐR�l 1”o�o½3¸sÀTÄ\Ñ?QÑ;RÔ;Rˆð	ØUÐUÐUÐUÐUÐUÐUÐUØ#Ð#Ñ%Ô%ˆDØð *Ø#Ð# DÑ)Ô)Ð)øøÝð 	ð 	ð 	ØˆDð	øøøð
ð 
ð 
ˆõ +4°D¸!Ñ*<Ô*<ð &	.ñ &	.Ñ&ˆCÑ&�$˜˜B Ø�HŠHÐN°ÐNÐN¸eÐNÐNÐNÐNÑOÔOÐOØˆN˜2˜r 5Ñ)Ô)Ð)ÝŒJ�tÑÔÐð %˜Ð%A¸CÐ%AÐ%AÑBÔBˆIØ%9Ð%9¸)Ñ%DÔ%DÑ"ˆJ˜
ð  %ÐØ�QŠwˆwðØ/Ð/Ð/Ð/Ð/Ð/Ý˜vÐ'>Ñ?Ô?ð 	&ÀF×D`ÒD`ÐajÑDkÔDkð 	&Ø+/Ð(Ð(ð #)×"@Ò"@ÀÑ"KÔ"K˜Ø!(§¢¨W°bÑ!9Ô!9ð &ð &˜AØ"#§%¢%¨°Ñ"3Ô"3×"9Ò"9Ñ";Ô";˜CÝ"Ð"fÐ"fÐ"fÐ"fÐ5eÐ"fÑ"fÔ"fÑfÔfð &Ø37Ð 0Ø % ð&øøõ !ð ð ð Ø�Dðøøøð $ð ,¨°ZÐ(@À[ÐR]ÐD^Ò(^Ð(^Ý˜i­Ñ-Ô-ð ,µb´g·n²nÀYÑ6OÔ6Oð ,Ø'+Ð$àð .Ø—’ðgÐakð gð gÐoyð gð gØ(+ðgð gð gñô ð ð " :Ð-Ð-Ð-Ð-ñ.ð !�LÐ!;Ñ<Ô<ˆ	Ø/Ð/°	Ñ:Ô:Ñˆ�Ø�ŠÐwÐahÐwÐwÐlsÐwÐwÐwÑxÔxÐxØ˜ÐÐs%   ÁA% Á%
A2Á1A2Ã7B#FÆ
F(Æ'F()r
   r   Nr   )Ú__name__Ú
__module__Ú__qualname__r^   r   r   r:   r   r   r   r   ÚboolrL   Úfloatr   ry   r)   r   r   r	   r	      sX  € € € € € ð ØØ8<ð	
2ð 
2àð
2ð ð
2ð ˜x¨¨¨t¨Ô4Ô5ð	
2ð 
2ð 
2ð 
2ð�sð ˜tð ð ð ð ð$¨U°3¸¼Ð3CÔ-Dð $Èð $ð $ð $ð $ðV 37ðN ð N à  %¨°Ð!6¸Ð!<Ô=ðN ð  ˜u c˜zÔ*ðN ð '¨°¬ ¸¸cÀ3¸h¼Ð'GÔHð	N ð
 ˜u S¨# XœÔ/ðN ð 
ˆs�CˆxŒðN ð N ð N ð N ð N ð N r   r	   )Ú__doc__re   ra   ÚmathÚtypingr   r   r   r   ÚPILr   r8   ÚImportErrorr	   r)   r   r   ú<module>r„      sÒ   ððð ð 
€	€	€	Ø €€€Ø €€€Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð ðØ€M€M€M€MøØð ð ð Ø€F€F€FðøøøðD ð D ð D ð D ð D ñ D ô D ð D ð D ð D s   ¢' §1°1