§
    Úÿ­j!  ã                  ól   — d Z ddlmZ ddlZddlmZ ddlZddlZddlmZm	Z	m
Z
mZ  G d„ d¦  «        ZdS )uå  
AutoPOE2 - Waystone Loader Guard & Cursor Safety Interlock (Doc 48 / Doc 56)
=============================================================================
Khá»‘i báº£o vá»‡ an toÃ n cho quy trÃ¬nh Stage 3: Atlas Node Selection & Waystone Loading.
Giáº£i quyáº¿t triá»‡t Ä‘á»ƒ sá»± cá»‘ trÃ´i chuá»™t vÃ´ tÃ¬nh nháº¥c item dÃ­nh vÃ o con trá»� (popup 'You cannot drop that item here').

TuÃ¢n thá»§ báº¥t biáº¿n kiáº¿n trÃºc:
- INV-INPUT-ABS-MOUSE: Thao tÃ¡c chuá»™t dá»©t khoÃ¡t vá»›i tá»�a Ä‘á»™ tuyá»‡t Ä‘á»‘i, zero mouse drag.
- INV-CURSOR-SAFETY: Kiá»ƒm tra vÃ  tá»± Ä‘á»™ng giáº£i phÃ³ng/Ä‘áº·t láº¡i item dÃ­nh trÃªn chuá»™t vá»� Ã´ tÃºi Ä‘á»“ trÆ°á»›c khi click TRAVERSE.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p, tráº§n file < 500 dÃ²ng.
é    )ÚannotationsN)Úwintypes)ÚAnyÚCallableÚOptionalÚTuplec                  ó€   — e Zd ZdZdZdZdZdZdZe	d"d
„¦   «         Z
e	 	 	 	 	 d#d$d„¦   «         Ze	 	 d%d&d!„¦   «         ZdS )'ÚWaystoneLoaderGuarduY   
    Bá»™ báº£o vá»‡ quy trÃ¬nh náº¡p Waystone vÃ  khÃ³a an toÃ n con trá»� chuá»™t.
    é   é   é   é   Úimg_pathúOptional[str]ÚreturnÚboolc                óˆ  ‡— | rt           j                             | ¦  «        sdS 	 ddlm} ddlm} |                     | ¦  «        } ||¦  «        }|                     dg ¦  «        D ]H}|                     dd¦  «         	                    ¦   «         Št          ˆfd„d	D ¦   «         ¦  «        r d
S ŒIn# t          $ r Y nw xY wdS )uÛ   
        Kiá»ƒm tra xem cÃ³ váº­t pháº©m nÃ o Ä‘ang dÃ­nh vÃ o con trá»� chuá»™t hoáº·c cÃ³ popup cáº£nh bÃ¡o:
        'You cannot drop that item here' / 'cannot drop' xuáº¥t hiá»‡n trÃªn mÃ n hÃ¬nh hay khÃ´ng.
        Fr   )ÚImage)Úsafe_recognize_pil_syncÚlinesÚtextÚ c              3  ó    •K  — | ]}|‰v V — Œ	d S )N© )Ú.0ÚkÚts     €ú@C:\Projects\AutoPOE2\src\assistant_tool\waystone_loader_guard.pyú	<genexpr>z>WaystoneLoaderGuard.is_item_stuck_on_cursor.<locals>.<genexpr>0   s'   øè è € ÐlÐl !�q˜A�vÐlÐlÐlÐlÐlÐló    )zCANNOT DROPzDROP THAT ITEMzCAN NOT DROPzYOU CANNOT DROPT)ÚosÚpathÚexistsÚPILr   Ú
src.commonr   ÚopenÚgetÚupperÚanyÚ	Exception)r   r   r   ÚimgÚresÚliner   s         @r   Úis_item_stuck_on_cursorz+WaystoneLoaderGuard.is_item_stuck_on_cursor!   s  ø€ ð ð 	�rœwŸ~š~¨hÑ7Ô7ð 	Ø�5ð
	Ø!Ð!Ð!Ð!Ð!Ð!Ø:Ð:Ð:Ð:Ð:Ð:Ø—*’*˜XÑ&Ô&ˆCØ)Ð)¨#Ñ.Ô.ˆCØŸš ¨Ñ,Ô,ð  ð  �Ø—H’H˜V RÑ(Ô(×.Ò.Ñ0Ô0�ÝÐlÐlÐlÐlÐ'kÐlÑlÔlÑlÔlð  Ø˜4˜4ð ð øõ ð 	ð 	ð 	ØˆDð	øøøàˆus   ¦BB2 Â0B2 Â2
B?Â>B?çš™™™™™©?ç333333Ó?FNÚscreen_xÚintÚscreen_yÚhold_msÚfloatÚdelay_afterÚis_simulatedÚhwndúOptional[int]Úuse_post_messagec                ó6  — |rdS |r2|r0ddl m}  ||t          |¦  «        t          |¦  «        ||¬¦  «        S t          j        j        }	|	                     t          |¦  «        t          |¦  «        ¦  «         t          j        d¦  «         |	 	                    | j
        | j        dd¦  «         t          j        d¦  «         |	                     t          |¦  «        t          |¦  «        ¦  «         |	                     | j        dddd¦  «         t          j        |¦  «         |	                     | j        dddd¦  «         t          j        d¦  «         |	 	                    | j
        | j        | j        d¦  «         |dk    rt          j        |¦  «         dS )un  
        Thá»±c hiá»‡n lá»‡nh Ctrl+Click dá»©t khoÃ¡t (nháº¥n Ctrl -> Click LMB -> Nháº£ Ctrl, khÃ´ng phÃ¡t sinh mouse drag).
        KhÃ³a cháº·t tá»�a Ä‘á»™ chuá»™t, triá»‡t tiÃªu hiá»‡n tÆ°á»£ng trÃ´i chuá»™t gÃ¢y nháº¥c nháº§m item lÃªn con trá»�.
        Há»— trá»£ cáº£ cháº¿ Ä‘á»™ Foreground Win32 SendInput/mouse_event láº«n Background PostMessageW.
        Tr   )Úpost_message_ctrl_click)r4   r6   g¸…ëQ¸®?r/   )Úsrc.common.win32_inputr<   r2   ÚctypesÚwindllÚuser32ÚSetCursorPosÚtimeÚsleepÚkeybd_eventÚ
VK_CONTROLÚ
SC_CONTROLÚmouse_eventÚMOUSEEVENTF_LEFTDOWNÚMOUSEEVENTF_LEFTUPÚKEYEVENTF_KEYUP)
Úclsr1   r3   r4   r6   r7   r8   r:   r<   r@   s
             r   Úcrisp_ctrl_clickz$WaystoneLoaderGuard.crisp_ctrl_click6   s”  € ð  ð 	Ø�4àð 	y ð 	yØFÐFÐFÐFÐFÐFØ*Ð*¨4µ°X±´ÅÀHÁÄÐW^ÐlwÐxÑxÔxÐxå”Ô%ˆð 	×Ò�C ™MœM­3¨x©=¬=Ñ9Ô9Ð9ÝŒ
�4ÑÔÐð 	×Ò˜3œ>¨3¬>¸1¸aÑ@Ô@Ð@ÝŒ
�4ÑÔÐð 	×Ò�C ™MœM­3¨x©=¬=Ñ9Ô9Ð9ð 	×Ò˜3Ô3°Q¸¸1¸aÑ@Ô@Ð@ÝŒ
�7ÑÔÐð 	×Ò˜3Ô1°1°a¸¸AÑ>Ô>Ð>ÝŒ
�4ÑÔÐð 	×Ò˜3œ>¨3¬>¸3Ô;NÐPQÑRÔRÐRà˜Š?ˆ?ÝŒJ�{Ñ#Ô#Ð#Øˆtr    çš™™™™™Ù?Ú
click_funcúCallable[[int, int], Any]Úslot_xÚslot_yÚpress_key_funcú#Optional[Callable[[int, int], Any]]c                óŠ   —  |||¦  «         t          j        |¦  «         |r  |dd¦  «         t          j        d¦  «         dS )uÏ   
        Tá»± Ä‘á»™ng hoÃ n tráº£ item Ä‘ang dÃ­nh trÃªn con trá»� chuá»™t vá»� láº¡i Ã´ tÃºi Ä‘á»“ (slot_x, slot_y).
        Giáº£i quyáº¿t triá»‡t Ä‘á»ƒ sá»± cá»‘ 'You cannot drop that item here'.
        é   é   g333333Ã?T)rB   rC   )rK   rN   rP   rQ   rR   r6   s         r   Ú recover_cursor_item_to_inventoryz4WaystoneLoaderGuard.recover_cursor_item_to_inventoryi   sW   € ð 	ˆ
�6˜6Ñ"Ô"Ð"ÝŒ
�;ÑÔÐð ð 	ØˆN˜4 Ñ&Ô&Ð&ÝŒJ�tÑÔÐØˆtr    )r   r   r   r   )r/   r0   FNF)r1   r2   r3   r2   r4   r5   r6   r5   r7   r   r8   r9   r:   r   r   r   )NrM   )rN   rO   rP   r2   rQ   r2   rR   rS   r6   r5   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   rF   rJ   rH   rI   Ústaticmethodr.   ÚclassmethodrL   rW   r   r    r   r
   r
      s¾   € € € € € ðð ð €JØ€JØ€OØ!ÐØÐàðð ð ñ „\ðð( ð
 Ø Ø"Ø"Ø!&ð0ð 0ð 0ð 0ñ „[ð0ðd ð ?CØ ðð ð ð ñ „[ðð ð r    r
   )r[   Ú
__future__r   r>   r   r!   rB   Útypingr   r   r   r   r
   r   r    r   ú<module>r`      s°   ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ðhð hð hð hð hñ hô hð hð hð hr    