§
    Ì»©jÌW  ã                   óŒ   — d Z ddlZddlZddl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edeeef         ded	efd
„ZdS )u(  
Module TrÃ­ch Xuáº¥t Snapshot RAM Ä�á»“ng Bá»™ CÃ¹ng Timestamp (SyncMemorySnapshotManager)
Káº¿t ná»‘i bá»™ nhá»› game Path of Exile 2, bÃ³c tÃ¡ch toÃ n bá»™ tráº¡ng thÃ¡i nhÃ¢n váº­t,
duyá»‡t Entity Pointer Array Ä‘á»ƒ phÃ¡t hiá»‡n quÃ¡i váº­t vÃ  chiáº¿u tá»�a Ä‘á»™ 3D sang pixel mÃ n hÃ¬nh.
é    N)ÚAnyÚDictÚOptionalÚTuplec                   ó–  — e Zd Zd dee         fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	ed
edee         fd„Zd	edee         fd„Zd	edee         fd„Zd	edee         fd„Zededededefd„¦   «         Zd	edeeeeef                  fd„Z	 	 d!dededededededeeef         fd„Z	 	 	 d"deeeef                  dededeeef         fd„ZdS )#ÚSyncMemorySnapshotManagerNÚpidc                 óJ   — || _         d | _        |                      ¦   «          d S ©N)r	   Ú	h_processÚ_init_process_handle)Úselfr	   s     ú?C:\Projects\AutoPOE2\src\assistant_tool\sync_memory_snapshot.pyÚ__init__z"SyncMemorySnapshotManager.__init__   s(   € ØˆŒØˆŒØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ó    c                 óŽ  — | j         rdS | j        s`ddl}|                     ddg¦  «        D ]D}|j        d         r5d|j        d                              ¦   «         v r|j        d         | _         nŒE| j        rKd}d}d}||z  ||z  |fD ];}t          j        j         	                    |d	| j        ¦  «        }|r
|| _          dS Œ:dS dS )
u<   Má»Ÿ handle tiáº¿n trÃ¬nh PathOfExile.exe náº¿u cÃ³ quyá»�n.Nr   r	   ÚnameÚpathofexileé   i   i   F)
r   r	   ÚpsutilÚprocess_iterÚinfoÚlowerÚctypesÚwindllÚkernel32ÚOpenProcess)r   r   ÚpÚPROCESS_VM_READÚPROCESS_QUERY_INFORMATIONÚ!PROCESS_QUERY_LIMITED_INFORMATIONÚflagsÚhs           r   r   z.SyncMemorySnapshotManager._init_process_handle   s  € àŒ>ð 	ØˆFØŒxð 	ØˆMˆMˆMØ×(Ò(¨%°¨Ñ9Ô9ð ð �Ø”6˜&”>ð  m°q´v¸f´~×7KÒ7KÑ7MÔ7MÐ&MÐ&MØ œv eœ}�D”HØ�EøàŒ8ð 	Ø$ˆOØ(.Ð%Ø06Ð-à)Ð,EÑEØ)Ð,MÑMØ)ð+ð ð �õ ”MÔ*×6Ò6°u¸eÀTÄXÑNÔN�Øð Ø%&�D”NØ�E�Eðð	ð 	ð
ð r   c                 óœ   — | j         rD	 t          j        j                             | j         ¦  «         n# t
          $ r Y nw xY wd| _         dS dS )uO   Giáº£i phÃ³ng handle tiáº¿n trÃ¬nh Windows Ä‘á»ƒ chá»‘ng rÃ² rá»‰ tÃ i nguyÃªn.N)r   r   r   r   ÚCloseHandleÚ	Exception©r   s    r   ÚclosezSyncMemorySnapshotManager.close-   sd   € àŒ>ð 	"ðÝ”Ô&×2Ò2°4´>ÑBÔBÐBÐBøÝð ð ð Ø�ðøøøà!ˆDŒNˆNˆNð	"ð 	"s   ‰)3 ³
A ¿A c                 ó.   — |                       ¦   «          d S r   ©r(   r'   s    r   Ú__del__z!SyncMemorySnapshotManager.__del__6   ó   € Ø�
Š
‰Œˆˆˆr   c                 ó   — | S r   © r'   s    r   Ú	__enter__z#SyncMemorySnapshotManager.__enter__9   s   € Øˆr   c                 ó.   — |                       ¦   «          d S r   r*   )r   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__z"SyncMemorySnapshotManager.__exit__<   r,   r   ÚaddrÚsizeÚreturnc           	      óz  — | j         s|                      ¦   «          | j         r|dk     s|dk    rdS t          j        |¦  «        }t          j        ¦   «         }t          j        j                             | j         t          j        |¦  «        ||t          j	        |¦  «        ¦  «        r|j
        |k    r|j        S dS )u.   Ä�á»�c raw bytes tá»« Ä‘á»‹a chá»‰ bá»™ nhá»›.é   ì   ÿýÿ N)r   r   r   Úcreate_string_bufferÚc_size_tr   r   ÚReadProcessMemoryÚc_void_pÚbyrefÚvalueÚraw)r   r5   r6   ÚbufÚbrs        r   Úread_memoryz%SyncMemorySnapshotManager.read_memory?   s³   € àŒ~ð 	(Ø×%Ò%Ñ'Ô'Ð'ØŒ~ð 	 ¨¢ °4¸.Ò3HÐ3HØ�4åÔ)¨$Ñ/Ô/ˆÝŒ_ÑÔˆÝŒ=Ô!×3Ò3ØŒN�FœO¨DÑ1Ô1°3¸½f¼lÈ2Ñ>NÔ>Nñ
ô 
ð 	àŒh˜$ÒÐØ”7ˆNØˆtr   c                 ól   — |                       |d¦  «        }|rt          j        d|¦  «        d         nd S )Né   z<Ir   ©rD   ÚstructÚunpack©r   r5   Údatas      r   Úread_u32z"SyncMemorySnapshotManager.read_u32N   ó8   € Ø×Ò  aÑ(Ô(ˆØ/3Ð=�vŒ}˜T 4Ñ(Ô(¨Ô+Ð+¸Ð=r   c                 ól   — |                       |d¦  «        }|rt          j        d|¦  «        d         nd S )Né   z<Qr   rG   rJ   s      r   Úread_u64z"SyncMemorySnapshotManager.read_u64R   rM   r   c                 ól   — |                       |d¦  «        }|rt          j        d|¦  «        d         nd S )NrF   z<fr   rG   rJ   s      r   Úread_f32z"SyncMemorySnapshotManager.read_f32V   rM   r   ÚxÚyÚzc                 óÊ  — t          j        | ¦  «        r(t          j        |¦  «        rt          j        |¦  «        sdS t          | ¦  «        dk    s&t          |¦  «        dk    st          |¦  «        dk    rdS t          | |z
  ¦  «        dk     rt          ||z
  ¦  «        dk     rdS t          | ¦  «        dk     r(t          |¦  «        dk     rt          |¦  «        dk     rdS dS )uR   Kiá»ƒm tra tá»�a Ä‘á»™ cÃ³ náº±m trong dáº£i há»£p lÃ½ cá»§a game POE2 hay khÃ´ng.Fg     jè@g     ˆÃ@g{®Gáz„?gš™™™™™¹?T)ÚmathÚisfiniteÚabs)rS   rT   rU   s      r   Úis_valid_xyzz&SyncMemorySnapshotManager.is_valid_xyzZ   sÖ   € õ ”˜aÑ Ô ð 	¥T¤]°1Ñ%5Ô%5ð 	½$¼-ÈÑ:JÔ:Jð 	Ø�5åˆq‰6Œ6�GÒÐ�s 1™vœv¨Ò/Ð/µ3°q±6´6¸GÒ3CÐ3CØ�5åˆq�1‰u‰:Œ:˜ÒÐ¥ Q¨¡U¡¤¨dÒ!2Ð!2Ø�5åˆq‰6Œ6�CŠ<ˆ<�C ™FœF SšL˜L­S°©V¬V°cª\¨\Ø�5Øˆtr   c                 ó    — |                       |d¦  «        }|r5t          j        d|¦  «        \  }}}|                      |||¦  «        r|||fS d S )Né   z<3f)rD   rH   rI   rZ   )r   r5   rK   rS   rT   rU   s         r   Úread_xyzz"SyncMemorySnapshotManager.read_xyzj   sa   € Ø×Ò  bÑ)Ô)ˆØð 	!Ý”m E¨4Ñ0Ô0‰GˆAˆq�!Ø× Ò   A qÑ)Ô)ð !Ø˜1˜a�yÐ Øˆtr   é 
  é   Útarget_xÚtarget_yÚplayer_xÚplayer_yÚscreen_wÚscreen_hc                 óÈ  — ||z
  }||z
  }t          j        ||z  ||z  z   ¦  «        }	|dz  }
|dz  }|	dk     rt          |
¦  «        t          |¦  «        fS ||	z  }||	z  }d}|
||z
  |	z  |z  dz  z   }|||z   |	z  |z  dz  z
  }t          dt	          |dz
  |¦  «        ¦  «        }t          dt	          |dz
  |¦  «        ¦  «        }t          |¦  «        t          |¦  «        fS )uÂ   
        Chiáº¿u tá»�a Ä‘á»™ khÃ´ng gian báº£n Ä‘á»“ POE2 sang tá»�a Ä‘á»™ Ä‘iá»ƒm áº£nh (Pixel) mÃ n hÃ¬nh.
        Sá»­ dá»¥ng há»‡ chiáº¿u Isometric gÃ³c nhÃ¬n 45 Ä‘á»™ chuáº©n POE2.
        g       @gü©ñÒMbP?g      +@gà-� æ?gÍÌÌÌÌÌÜ?é   )rW   ÚsqrtÚintÚmaxÚmin)r   r`   ra   rb   rc   rd   re   ÚdxÚdyÚdistÚcxÚcyÚndxÚndyÚscaleÚproj_xÚproj_ys                    r   Úproject_3d_to_screenz.SyncMemorySnapshotManager.project_3d_to_screenr   s  € ð ˜Ñ ˆØ˜Ñ ˆÝŒy˜˜b™ 2¨¡7Ñ*Ñ+Ô+ˆà˜‰^ˆØ˜‰^ˆà�%Š<ˆ<Ý˜‘G”G�S ™WœWÐ%Ð%à�4‰iˆØ�4‰iˆð ˆØ�s˜S‘y DÑ(¨5Ñ0°6Ñ9Ñ9ˆØ�s˜S‘y DÑ(¨5Ñ0°6Ñ9Ñ9ˆõ �R�˜X¨™]¨FÑ3Ô3Ñ4Ô4ˆÝ�R�˜X¨™]¨FÑ3Ô3Ñ4Ô4ˆå�F‘”�S ™[œ[Ð)Ð)r   Úfallback_telemetryc                 ó  — t          j         ¦   «         }t          |dz  ¦  «        }|t          j        dt          j        |¦  «        ¦  «        | j        t          | j        ¦  «        i g g di dœ	}d}d}|rd|v r|d         }t          j         	                    t          j         
                    t          ¦  «        d¦  «        }	t          j                             |	¦  «        sBt          j         	                    t          j         
                    t          ¦  «        d¦  «        }	|dk    �rNt          j                             |	¦  «        �r.	 t          |	d¦  «        5 }
|
D ]ð}d	|v rê|                     d	¦  «        }|d                              ¦   «                              ¦   «         }|d
                              d¦  «        d                              ¦   «                              d¦  «        }d|v r_d|v r[	 |                     d¦  «        s|                     d¦  «        rt          |d¦  «        nt          |¦  «        }Œà# t$          $ r Y Œìw xY wŒñ	 ddd¦  «         n# 1 swxY w Y   n# t&          $ r Y nw xY wt          j         	                    t          j         
                    t          ¦  «        d¦  «        }t          j                             |¦  «        r^	 t          |d¦  «        5 }
d„ |
D ¦   «         }|rt          |d         d¦  «        }ddd¦  «         n# 1 swxY w Y   n# t&          $ r Y nw xY wd\  }}}d\  }}d\  }}d\  }}d\  }}| j        r¶|dk    r°|                      |¦  «        }|                      |dz   ¦  «        }|�|�d|cxk     rdk    rn n||}}|                      |dz   ¦  «        }|                      |dz   ¦  «        }|�|�
|dk    r||}}|dk    r'|                      |¦  «        } | r | j        | Ž r| \  }}}|�rÇ	 d|v r|d         �t          |d         ¦  «        }d|v r|d         �t          |d         ¦  «        }d|v r|d         �t          |d         ¦  «        }d|v r|d         �t          |d         ¦  «        }d|v r|d         �t          |d         ¦  «        }d |v r|d          �t          |d          ¦  «        }d!|v r|d!         �t          |d!         ¦  «        }d"|v r|d"         �t          |d"         ¦  «        }t/          |                     d#d$¦  «        ¦  «        }!d%|!v r³|dk    r­|!                     d%¦  «        }t          d$ 	                    t3          t.          j        |d         ¦  «        ¦  «        ¦  «        }t          d$ 	                    t3          t.          j        |d
                              ¦   «         d         ¦  «        ¦  «        ¦  «        }t/          |                     d&d$¦  «        ¦  «        }"d'|"v rø	 |"                     d'¦  «        d
                              d(¦  «        d                              d)¦  «        d         }#d%|#v r•|#                     d%¦  «        }$t          d$ 	                    t3          t.          j        |$d         ¦  «        ¦  «        ¦  «        }t          d$ 	                    t3          t.          j        |$d
         ¦  «        ¦  «        ¦  «        }nÙ# t&          $ r Y nÍw xY wd%|"v rÅ|dk    r¿	 |"                     d%¦  «        }t          d$ 	                    t3          t.          j        |d         ¦  «        ¦  «        ¦  «        }t          d$ 	                    t3          t.          j        |d
                              ¦   «         d         ¦  «        ¦  «        ¦  «        }n# t&          $ r Y nw xY wd*|"v rß	 |"                     d*¦  «        d
                              d(¦  «        d         }%d%|%v r•|%                     d%¦  «        }&t          d$ 	                    t3          t.          j        |&d         ¦  «        ¦  «        ¦  «        }t          d$ 	                    t3          t.          j        |&d
         ¦  «        ¦  «        ¦  «        }n# t&          $ r Y nw xY wd+|"v rß	 |"                     d+¦  «        d
                              d(¦  «        d         }'d%|'v r•|'                     d%¦  «        }(t          d$ 	                    t3          t.          j        |(d         ¦  «        ¦  «        ¦  «        }t          d$ 	                    t3          t.          j        |(d
         ¦  «        ¦  «        ¦  «        }n# t&          $ r Y nw xY wt/          |                     d,d$¦  «        ¦  «        })d)|)v rþd-|)v rú|d.k    rô|d.k    rî|)                     d)¦  «        d
                              d-¦  «        d                              d/¦  «        }*t7          |*d                              ¦   «         ¦  «        }+t7          |*d
                              ¦   «         ¦  «        },t9          |*¦  «        d0k    r't7          |*d0                              ¦   «         ¦  «        nd.}-|                      |+|,|-¦  «        r|+|,|-}}}n# t&          $ r Y nw xY wd|d1›�d|d1›�||t;          |dk    r||z  d2z  ndd
¦  «        ||||||t;          |d0¦  «        t;          |d0¦  «        t;          |d0¦  «        d3œ|d<   g }.d4}/| j        �rc|dk    �r\|d5z
  }0|                      |||¦  «        }1t=          d6d7¦  «        D �].}2|0|2d8z  z   }3|                      |3¦  «        }4|4r|4d9k     s|4d:k    rŒ/|                      |4|/z   ¦  «        }5|                      |4|/z   dz   ¦  «        }6|5��É|6��Æd|5cxk     r|6k    �r¸n Œy|6d;k    �r®|4||/z
  k    rŒŠd<\  }7}8}9d=D ]ª}:|                      |4|:z   ¦  «        };|;rŽd9|;cxk    rd:k    r�n Œ,d>D ]w}<|                      |;|<z   ¦  «        }=|=r[|=\  }+},}-|1rKtA          |+|z
  ¦  «        d?k    r4tA          |,|z
  ¦  «        d?k    rtA          |-|z
  ¦  «        d@k    r|+|,|-}9}8}7 n
Œo|+|,|-}9}8}7 nŒx|7� nŒ«|7�'|8�%|1r#tC          j"        |7|z
  d0z  |8|z
  d0z  z   ¦  «        ndA}>|  #                    |7�|7n|dBz   |8�|8n|dCz   ||||¦  «        }?|6dDk    }@|@rdEn	|6dFk    rdGndH}A|. $                    |2d|4d1›�|A|5|6t;          |5|6z  d2z  d
¦  «        t;          |>d
¦  «        |7�t;          |7d0¦  «        nd|8�t;          |8d0¦  «        nd|9�t;          |9d0¦  «        nd|?d         |?d
         dIœ¦  «         �Œ0|. %                    dJ„ ¬K¦  «         |.|dL<   t9          |.¦  «        |dM<   |dk    r
dN|d5z
  d1›dO�ndPd|/d1›�t9          |.¦  «        |› dQ|› �dRœ|dS<   |S )TuÙ   
        Thá»±c hiá»‡n má»™t snapshot toÃ n diá»‡n bá»™ nhá»› RAM táº¡i thá»�i Ä‘iá»ƒm hiá»‡n táº¡i.
        Tráº£ vá»� dictionary chi tiáº¿t vá»� Player, XYZ, Entity Array vÃ  tá»�a Ä‘á»™ chiáº¿u mÃ n hÃ¬nh.
        iè  z%Y-%m-%d %H:%M:%Sr   )	Útimestamp_msÚtimestamp_isor	   Úmemory_attachedÚplayerÚmonstersÚitemsÚtotal_entitiesÚdiagnosticsÚplayer_addrz../../bin/Release/offsets.tomlz../../bin/offsets.tomlÚrú=é   ú#z"'r|   r5   Ú0xÚ0Xr   Nz../../bin/Release/xyz_addrs.txtc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r.   )Ústrip)Ú.0Úlines     r   ú
<listcomp>zBSyncMemorySnapshotManager.capture_ram_snapshot.<locals>.<listcomp>Ñ   s-   € ÐHÐHÐH¨d¸4¿:º:¹<¼<ÐH˜TŸZšZ™\œ\ÐHÐHÐHr   )ç        r�   r�   )r   r   rF   iPÃ  r\   iˆ  Ú
current_hpÚmax_hpÚcurrent_manaÚmax_manaÚ
current_esÚmax_esÚcurrent_spiritÚ
max_spiritÚhpÚ ú/ÚmanazMana:ú|ú(zES:zSpirit:Úxyzú)r�   ú,é   ÚXg      Y@)ÚaddressÚxyz_addressr–   r�   Ú
hp_percentÚesr“   r™   r‘   Úspiritr•   Úpos_xÚpos_yÚpos_zi¸  i°  iÀÿÿÿé€   rO   r9   r:   i -1)NNN)é   é    é(   é0   é8   é@   éH   éP   )r¬   é,   r­   r®   r¯   éD   r°   g     p—@g     @@g      I@g      >@g      4@é˜:  z
Elite Bossé¸  zRare MonsterÚMonster)Ú
slot_indexÚentity_addressr   r–   r�   r£   Údistancer¦   r§   r¨   Úscreen_xÚscreen_yc                 ó   — | d         S )Nr¹   r.   )Úms    r   ú<lambda>z@SyncMemorySnapshotManager.capture_ram_snapshot.<locals>.<lambda>•  s
   €  A j¤M€ r   )Úkeyr}   r   zEntity Pointer Array (slot 0xz
 stride 8)u   N/A (chÆ°a cÃ³ player_addr)rS   )Úscan_windowÚstat_offsetÚmonsters_detectedÚscreen_resolutionr€   )&Útimeri   ÚstrftimeÚ	localtimer	   Úboolr   ÚosÚpathÚjoinÚdirnameÚ__file__ÚexistsÚopenÚsplitr‰   r   Ú
startswithÚ
ValueErrorr&   rL   r]   rZ   ÚstrÚgetÚfilterÚisdigitÚfloatÚlenÚroundÚrangerP   rY   rW   rh   rv   ÚappendÚsort)Br   rw   rd   re   Únow_tsÚnow_msÚsnapshotr�   Úxyz_addrÚoffsets_fileÚfr‹   Úpartsr¿   ÚvalÚxyz_fileÚlinesÚpxÚpyÚpzr–   r�   r¤   r“   r™   r‘   r¥   r•   Úp_hpÚp_mhpÚp_esÚp_mesÚp_xyzÚhp_strÚmana_rawÚm_partÚm_subÚes_partÚes_subÚsp_partÚsp_subÚxyz_strÚ
raw_coordsro   rp   Úczr}   rÁ   Úbase_array_slotÚplayer_pos_validÚiÚ	slot_addrÚent_ptrÚm_hpÚm_max_hpÚmxÚmyÚmzÚcomp_offÚcomp_ptrÚpos_offÚcand_xyzrn   Ú
screen_posÚis_bossÚm_namesB                                                                     r   Úcapture_ram_snapshotz.SyncMemorySnapshotManager.capture_ram_snapshot˜   sÇ  € õ ”‘”ˆÝ�V˜d‘]Ñ#Ô#ˆð #Ý!œ]Ð+>ÅÄÈvÑ@VÔ@VÑWÔWØ”8Ý# D¤NÑ3Ô3ØØØØØð
$
ð 
$
ˆð ˆØˆàð 	< -Ð3EÐ"EÐ"EØ,¨]Ô;ˆKå”w—|’|¥B¤G§O¢OµHÑ$=Ô$=Ð?_Ñ`Ô`ˆÝŒw�~Š~˜lÑ+Ô+ð 	]Ýœ7Ÿ<š<­¬¯ª½Ñ(AÔ(AÐC[Ñ\Ô\ˆLà˜!ÒÑ¥¤§¢¨|Ñ <Ô <ÑðÝ˜,¨Ñ,Ô,ð 
)°Ø !ð 	)ð 	)˜Ø $˜;˜;Ø$(§J¢J¨s¡O¤O˜EØ"'¨¤(§.¢.Ñ"2Ô"2×"8Ò"8Ñ":Ô":˜CØ"'¨¤(§.¢.°Ñ"5Ô"5°aÔ"8×">Ò">Ñ"@Ô"@×"FÒ"FÀuÑ"MÔ"M˜CØ'¨3˜˜°6¸S°=°=ð!)ØBEÇ.Â.ÐQUÑBVÔBVÐ2|ÐZ]×ZhÒZhÐimÑZnÔZnÐ2|µ#°c¸2±,´,°,ÕtwÐx{Ñt|Ôt| K KøÝ'1ð !)ð !)ð !)Ø$( Dð!)øøøøð	)ð
)ð 
)ð 
)ñ 
)ô 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)øøøð 
)ð 
)ð 
)ð 
)øøõ ð ð ð Ø�ðøøøõ ”7—<’<¥¤§¢µÑ 9Ô 9Ð;\Ñ]Ô]ˆÝŒ7�>Š>˜(Ñ#Ô#ð 	ðÝ˜( CÑ(Ô(ð 5¨AØHÐH°aÐHÑHÔH�EØð 5Ý#& u¨Q¤x°Ñ#4Ô#4˜ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5øøõ ð ð ð Ø�ðøøøð #‰
ˆˆB�Ø‰
ˆˆFØ‰
ˆˆFØ‰ˆˆhØ!Ñˆ�
àŒ>ð 	'˜k¨QÒ.Ð.à—=’= Ñ-Ô-ˆDØ—M’M +°¡/Ñ2Ô2ˆEØÐ EÐ$5¸!¸eÐ:LÐ:LÒ:LÐ:LÀuÒ:LÐ:LÐ:LÐ:LÐ:LØ! 5�F�ð —=’= ¨rÑ!1Ñ2Ô2ˆDØ—M’M +°Ñ"2Ñ3Ô3ˆEØÐ EÐ$5¸%À4º-¸-Ø! 5�F�ð ˜1Š}ˆ}ØŸš hÑ/Ô/�Øð 'Ð.˜TÔ.°Ð6ð 'Ø!&‘J�B˜˜Bð ñ J	ðIàÐ#5Ð5Ð5Ð:LÈ\Ô:ZÐ:fÝÐ/°Ô=Ñ>Ô>�BØÐ1Ð1Ð1Ð6HÈÔ6RÐ6^Ý Ð!3°HÔ!=Ñ>Ô>�FØ!Ð%7Ð7Ð7Ð<NÈ~Ô<^Ð<jÝÐ1°.ÔAÑBÔB�DØÐ!3Ð3Ð3Ð8JÈ:Ô8VÐ8bÝ"Ð#5°jÔ#AÑBÔB�HØÐ#5Ð5Ð5Ð:LÈ\Ô:ZÐ:fÝÐ/°Ô=Ñ>Ô>�BØÐ1Ð1Ð1Ð6HÈÔ6RÐ6^Ý Ð!3°HÔ!=Ñ>Ô>�FØ#Ð'9Ð9Ð9Ð>PÐQaÔ>bÐ>nÝ Ð!3Ð4DÔ!EÑFÔF�FØÐ#5Ð5Ð5Ð:LÈ\Ô:ZÐ:fÝ!$Ð%7¸Ô%EÑ!FÔ!F�Jõ Ð/×3Ò3°D¸"Ñ=Ô=Ñ>Ô>�Ø˜&�=�= V¨q¢[ [Ø"ŸLšL¨Ñ-Ô-�EÝ˜RŸWšW¥V­C¬K¸¸q¼Ñ%BÔ%BÑCÔCÑDÔD�BÝ  §¢­µ´¸UÀ1¼X¿^º^Ñ=MÔ=MÈaÔ=PÑ)QÔ)QÑ!RÔ!RÑSÔS�FåÐ1×5Ò5°f¸bÑAÔAÑBÔB�Ø˜hÐ&Ð&ðØ!)§¢°Ñ!8Ô!8¸Ô!;×!AÒ!AÀ#Ñ!FÔ!FÀqÔ!I×!OÒ!OÐPSÑ!TÔ!TÐUVÔ!W˜Ø &˜=˜=Ø$*§L¢L°Ñ$5Ô$5˜EÝ#& r§w¢w­vµc´kÀ5ÈÄ8Ñ/LÔ/LÑ'MÔ'MÑ#NÔ#N˜DÝ'*¨2¯7ª7µ6½#¼+ÀuÈQÄxÑ3PÔ3PÑ+QÔ+QÑ'RÔ'R˜HøøÝ$ð ð ð Ø˜ðøøøà˜H�_�_¨°Qª¨ðØ (§¢¨sÑ 3Ô 3˜Ý" 2§7¢7­6µ#´+¸uÀQ¼xÑ+HÔ+HÑ#IÔ#IÑJÔJ˜Ý#& r§w¢w­vµc´kÀ5ÈÄ8Ç>Â>ÑCSÔCSÐTUÔCVÑ/WÔ/WÑ'XÔ'XÑ#YÔ#Y˜˜øÝ$ð ð ð Ø˜ðøøøð ˜HÐ$Ð$ðØ"*§.¢.°Ñ"7Ô"7¸Ô":×"@Ò"@ÀÑ"EÔ"EÀaÔ"H˜Ø '˜>˜>Ø%,§]¢]°3Ñ%7Ô%7˜FÝ!$ R§W¢W­VµC´KÀÈÄÑ-KÔ-KÑ%LÔ%LÑ!MÔ!M˜BÝ%(¨¯ªµ½¼ÀVÈAÄYÑ1OÔ1OÑ)PÔ)PÑ%QÔ%Q˜FøøÝ$ð ð ð Ø˜ðøøøð  Ð(Ð(ðØ"*§.¢.°Ñ";Ô";¸AÔ">×"DÒ"DÀSÑ"IÔ"IÈ!Ô"L˜Ø '˜>˜>Ø%,§]¢]°3Ñ%7Ô%7˜FÝ%(¨¯ªµ½¼ÀVÈAÄYÑ1OÔ1OÑ)PÔ)PÑ%QÔ%Q˜FÝ),¨R¯WªWµV½C¼KÈÐPQÌÑ5SÔ5SÑ-TÔ-TÑ)UÔ)U˜JøøÝ$ð ð ð Ø˜ðøøøõ Ð0×4Ò4°U¸BÑ?Ô?Ñ@Ô@�Ø˜'�>�> c¨W n n¸"Àº)¸)ÈÈcÊ	È	Ø!(§¢¨sÑ!3Ô!3°AÔ!6×!<Ò!<¸SÑ!AÔ!AÀ!Ô!D×!JÒ!JÈ3Ñ!OÔ!O�JÝ˜z¨!œ}×2Ò2Ñ4Ô4Ñ5Ô5�BÝ˜z¨!œ}×2Ò2Ñ4Ô4Ñ5Ô5�BÝ9<¸Z¹¼È1Ò9LÐ9L�˜z¨!œ}×2Ò2Ñ4Ô4Ñ5Ô5Ð5ÐRU�BØ×(Ò(¨¨R°Ñ4Ô4ð 0Ø%'¨¨R ˜B˜øøÝð ð ð Ø�ðøøøð ,˜KÐ+Ð+Ð+Ø, Ð,Ð,Ð,ØØÝ¸À!º¸  f¡¨uÑ!4Ð!4ÈÈAÑNÔNØØØØ ØØ$Ý˜2˜q‘\”\Ý˜2˜q‘\”\Ý˜2˜q‘\”\ð
ð 
ˆ�Ñð( *,ˆØˆàŒ>ñ =	˜k¨QÒ.Ñ.Ø)¨EÑ1ˆOØ#×0Ò0°°R¸Ñ<Ô<ÐÝ˜3 ‘_”_ð :ñ :�Ø+¨a°!©eÑ3�	ØŸ-š-¨	Ñ2Ô2�Øð  '¨GÒ"3Ð"3°wÀÒ7OÐ7OØà—}’} W¨{Ñ%:Ñ;Ô;�ØŸ=š=¨°;Ñ)>ÀÑ)BÑCÔC�ð Ñ#¨Ñ(<ÀÀTÐAUÐAUÒAUÐAUÈXÒAUÑAUÐAUÐAUÐAUÐZbÐfnÒZnÑZnØ ;°Ñ#<Ò=Ð=Ø ð "2‘J�B˜˜BØ$Tð &ð &˜Ø#'§=¢=°¸8Ñ1CÑ#DÔ#D˜Ø#ð &¨°8Ð(MÐ(MÒ(MÐ(M¸~Ò(MÐ(MÐ(MÐ(MÐ(Mà+Uð 
.ð 
. Ø+/¯=ª=¸ÀGÑ9KÑ+LÔ+L Ø#+ð !.Ø19¡J B¨¨BØ'7ð %.Ý+.¨r°B©w©<¬<¸6Ò+AÐ+AÅcÈ"ÈrÉ'ÁlÄlÐV\ÒF\ÐF\ÕadÐegÐjlÑelÑamÔamÐqvÒavÐavØ9;¸RÀ°B°¨BØ,1¨Eøà57¸¸R°¨B¨Ø(-¨ð!.ð  "˜~Ø % øð KMÈ.Ð]_Ð]kð  qAÐ]k�4œ9 b¨2¡g°!¡^°r¸B±wÀ1±nÑ%DÑEÔEÐEð  HL�DØ!%×!:Ò!:Ø ˜n˜˜°2¸±9Ø ˜n˜˜°2¸±9Ø˜B ¨(ñ"ô "�Jð  (¨%Ò/�GØ-4Ðl˜\˜\ÈXÐX\Ê_È_¸>¸>Ðbk�Fà—O’OØ&'Ø*:¨wÐ*:Ð*:Ð*:Ø &Ø"Ø"*Ý&+¨D°8©O¸eÑ,CÀQÑ&GÔ&GÝ$)¨$°¡N¤NØ13°¥ r¨1¡¤ ÀTØ13°¥ r¨1¡¤ ÀTØ13°¥ r¨1¡¤ ÀTØ$.¨q¤MØ$.¨q¤Mð%ð %ñ ô ð ùð  	�ŠÐ1Ð1ˆÑ2Ô2Ð2Ø'ˆ�ÑÝ%(¨¡]¤]ˆÐ!Ñ"ð alÐopÒ`pÐ`pÐ\¸;ÈÑ;NÐ\Ð\Ð\Ð\Ð\ð  wTØ/ Ð/Ð/Ð/Ý!$ X¡¤Ø$,Ð!9Ð!9¨xÐ!9Ð!9ð	#
ð #
ˆ�Ñð ˆs:  ÅI( ÅBIÇ4A	H>È=IÈ>
IÉIÉ
IÉIÉI( ÉI É I( É#I É$I( É(
I5É4I5ËL' Ë*%LÌL' ÌLÌL' Ì"LÌ#L' Ì'
L4Ì3L4ÐH	k ØC&\ Ük Ü
\Ük Ü\Ük ÜB-_ ßk ß
_ßk ß_ßk ß!Cb/ â.k â/
b<â9k â;b<â<k ãCf æk æ
fæk æfæD(k ë
këkr   )r^   r_   )Nr^   r_   )Ú__name__Ú
__module__Ú__qualname__r   ri   r   r   r(   r+   r/   r4   ÚbytesrD   rL   rP   rÖ   rR   ÚstaticmethodrÇ   rZ   r   r]   rv   r   rÒ   r   r
  r.   r   r   r   r      si  € € € € € ð$ð $˜H SœMð $ð $ð $ð $ð
ð ð ð0"ð "ð "ðð ð ðð ð ðð ð ð ð ¨3ð °8¸E´?ð ð ð ð ð>˜Sð > X¨c¤]ð >ð >ð >ð >ð>˜Sð > X¨c¤]ð >ð >ð >ð >ð>˜Sð > X¨e¤_ð >ð >ð >ð >ð ð˜ð  %ð ¨Eð °dð ð ð ñ „\ðð˜Sð  X¨e°E¸5À%Ð4GÔ.HÔ%Ið ð ð ð ð Øð$*ð $*àð$*ð ð$*ð ð	$*ð
 ð$*ð ð$*ð ð$*ð 
ˆs�CˆxŒð$*ð $*ð $*ð $*ðP 8<ØØð	Hð Hà$ T¨#¨s¨(¤^Ô4ðHð ðHð ð	Hð
 
ˆc�3ˆhŒðHð Hð Hð Hð Hð Hr   r   Úscreenshot_pathÚram_snapshotÚoutput_pathr7   c                 óJ  — 	 ddl m}m} t          j                             | ¦  «        sdS |                     | ¦  «                             d¦  «        }|j        \  }}| 	                    d||fd¦  «        }| 
                    |¦  «        }	|                     di ¦  «        }
|                     dg ¦  «        }g d¢}|	                     |d	d
d¬¦  «         |                     dd¦  «        }|	                     ddd¬¦  «         |	                     dd|› �d¬¦  «         d|
                     dd¦  «        › d|
                     dd¦  «        › d|
                     dd¦  «        › d|
                     dd¦  «        › d|
                     dd¦  «        › �
}|	                     d ||
                     dd!¦  «        d"k     rd#nd$¬¦  «         d%|
                     d&d¦  «        › d|
                     d'd¦  «        › d(|
                     d)d¦  «        › d|
                     d*d¦  «        › �}|	                     d+|d,¬¦  «         d-|
                     d.d¦  «        › d/|
                     d0d¦  «        › d/|
                     d1d¦  «        › d2�}|	                     d3|d4¬¦  «         d5t          |¦  «        › d6t          |¦  «        dk    rd7nd8› �}|	                     d9|t          |¦  «        dk    rd:nd;¬¦  «         |dz  |dz  }}|	                     |d<z
  |d<z
  |d<z   |d<z   gd=d¬>¦  «         |	                     |d?z
  |d@z   fdAd=¬¦  «         t!          |dBdC…         ¦  «        D �]Ü\  }}|                     dD|¦  «        }|                     dE|¦  «        }|                     dFd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dGdH¦  «        }|dIk    }|rdJn	|dKk    rdLndM}|rdNndO}|	                     ||f||fg|d         |dP         |d         dQfdP¬R¦  «         |rdSnd?}|	                     ||z
  ||z
  ||z   ||z   g||d¬T¦  «         |	                     |d<z
  |f|d<z   |fg|dP¬R¦  «         |	                     ||d<z
  f||d<z   fg|dP¬R¦  «         dU|dPz   › dV|› dW|dX›d2�} dY|› d|› �}!|	                     |dZz
  ||z
  d[z
  |dZz   ||z
  d\z
  gd]|dP¬¦  «         |	                     |d^z
  ||z
  d_z
  f| |¬¦  «         |	                     |d^z
  ||z
  d`z
  f|!da¬¦  «         �ŒÞ|                     ||¦  «                             db¦  «        }"|"                     |dc¦  «         ddS # t(          $ r}#t+          de|#› �¦  «         Y dB}#~#dS dB}#~#ww xY w)fu  
    Váº½ lá»›p phá»§ tÆ°Æ¡ng quan (Correlation Overlay) lÃªn áº£nh chá»¥p mÃ n hÃ¬nh:
    - Bounding box vÃ  tÃ¢m ngáº¯m vÃ o tá»«ng quÃ¡i váº­t phÃ¡t hiá»‡n tá»« RAM
    - Thanh mÃ¡u, cá»± ly vÃ  thÃ´ng tin quÃ¡i váº­t
    - Báº£ng thÃ´ng sá»‘ Telemetry ngÆ°á»�i chÆ¡i
    r   )ÚImageÚ	ImageDrawFÚRGBA)r   r   r   r   r|   r}   )rg   rg   i  éÃ   )é   é   é*   éæ   )r®   é½   éø   éÿ   rŸ   )ÚfillÚoutlineÚwidthrz   r—   )é#   é   u&   âš¡ POE2 SYNC TELEMETRY & RAM SNAPSHOT)r®   r  r  )r  )r"  é4   u   Thá»�i gian: )é”   é£   é¸   u   MÃ¡u: r–   z / r�   z (r£   z	%) | ES: r¤   r˜   r“   )r"  éK   éd   r¬   )éï   r³   r³   )éJ   éÞ   r©   zMana: r™   r‘   z | Spirit: r¥   r•   )r"  éb   )é`   é¥   éú   u   Tá»�a Ä‘á»™ XYZ: (r¦   z, r§   r¨   r�   )r"  éy   )r0  éÌ   é   u   ðŸŽ¯ QuÃ¡i váº­t trong RAM: z con | Radar Core: u   Ä�á»’NG Bá»˜u   CHÆ¯A KHÃ“A)r"  é�   )éô   ér   é¶   )r  éq   r8  rO   )r+  r,  r©   r  )r   r!  rª   r\   ÚPLAYERNr  rº   r»   r¹   r   r¶   r´   )r*  r³   r³   r  rµ   )r0  r2  r3  r  )éù   és   é   r  )r*  r³   r³   é2   )r0  r2  r3  r#  r„   éx   )r  r!  r"  )r   r  r!  ú[z] u
    (cá»± ly z.0fzHP: é<   é   rF   )r  r  r  éÈ   é7   é   é   )r  r  r  ÚRGBÚPNGTu   [draw_correlated_image] Lá»—i: )ÚPILr  r  rÈ   rÉ   rÍ   rÎ   Úconvertr6   ÚnewÚDrawrÓ   Ú	rectangleÚtextr×   ÚellipseÚ	enumerater‹   Úalpha_compositeÚsaver&   Úprint)$r  r  r  r  r  Úbase_imgÚwr#   ÚoverlayÚdrawr   ÚmobsÚhud_boxÚts_strÚhp_textÚ	mana_textÚxyz_textÚ	mobs_textro   rp   ÚidxÚmobÚsxÚsyrn   rþ   Úm_mhpr   r  ÚcolorÚ
fill_colorÚbox_rÚlabelÚhp_labelÚ	final_imgÚes$                                       r   Údraw_correlated_imagerj  ¢  s  € ðOØ(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ÝŒw�~Š~˜oÑ.Ô.ð 	Ø�5à—:’:˜oÑ.Ô.×6Ò6°vÑ>Ô>ˆØŒ}‰ˆˆ1à—)’)˜F Q¨ F¨LÑ9Ô9ˆØ�~Š~˜gÑ&Ô&ˆð ×Ò˜X rÑ*Ô*ˆØ×Ò 
¨BÑ/Ô/ˆà$Ð$Ð$ˆØ�Š�wÐ%6Ð@SÐ[\ˆÑ]Ô]Ð]ð ×!Ò! /°2Ñ6Ô6ˆØ�	Š	�(ÐDÈ>ˆ	ÑZÔZÐZØ�	Š	�(Ð4¨FÐ4Ð4¸?ˆ	ÑKÔKÐKð K˜1Ÿ5š5  q™>œ>ð  Kð  K¨a¯eªe°H¸aÑ.@Ô.@ð  Kð  KÀAÇEÂEÈ,ÐXYÑDZÔDZð  Kð  KÐef×ejÒejÐkoÐqrÑesÔesð  Kð  KÐvw×v{Òv{ð  }Eð  GHñ  wIô  wIð  Kð  KˆØ�	Š	�(˜G¸1¿5º5ÀÈsÑ;SÔ;SÐVXÒ;XÐ;X¨-¨-Ð^lˆ	ÑmÔmÐmð C˜QŸUšU 6¨1Ñ-Ô-ð  Cð  C°!·%²%¸
ÀAÑ2FÔ2Fð  Cð  CÐST×SXÒSXÐYaÐcdÑSeÔSeð  Cð  CÐjk×joÒjoÐp|Ð~ñ  kAô  kAð  Cð  Cˆ	Ø�	Š	�(˜I¨Nˆ	Ñ;Ô;Ð;àf¨¯ª¨g°qÑ(9Ô(9ÐfÐf¸Q¿UºUÀ7ÈAÑ=NÔ=NÐfÐfÐRS×RWÒRWÐX_ÐabÑRcÔRcÐfÐfÐfˆØ�	Š	�)˜X¨Nˆ	Ñ;Ô;Ð;ð Fµ3°t±9´9ð  Fð  FÕcfÐgkÑclÔclÐopÒcpÐcpÐQ_ÐQ_ð  wDð  Fð  Fˆ	Ø�	Š	�)˜YÅÀDÁ	Ä	ÈAÂÀ¨_¨_ÐSbˆ	ÑcÔcÐcð �a‘˜˜a™ˆBˆØ�Š�b˜1‘f˜b 1™f b¨1¡f¨b°1©fÐ5Ð?RÐZ[ˆÑ\Ô\Ð\Ø�	Š	�2˜‘7˜B ™GÐ$ hÐ5Hˆ	ÑIÔIÐIõ " $ s¨ s¤)Ñ,Ô,ð 	Rñ 	R‰HˆC�Ø—’˜ RÑ(Ô(ˆBØ—’˜ RÑ(Ô(ˆBØ—7’7˜: qÑ)Ô)ˆDØ—7’7˜4 Ñ#Ô#ˆDØ—G’G˜H aÑ(Ô(ˆEØ—7’7˜6 9Ñ-Ô-ˆDØ˜u’}ˆGð +2ÐuÐ&Ð&ÈuÐW[Ê|È|Ð8KÐ8KÐatˆEØ.5ÐMÐ*Ð*Ð;MˆJð �IŠI˜˜B�x " b Ð*°%¸´(¸EÀ!¼HÀeÈAÄhÐPSÐ1TÐ\]ˆIÑ^Ô^Ð^ð "Ð)�B�B rˆEØ�NŠN˜B ™J¨¨U©
°B¸±JÀÀUÁ
ÐKÐUZÐakÐstˆNÑuÔuÐuð �IŠI˜˜Q™ �| b¨1¡f¨b \Ð2¸ÀaˆIÑHÔHÐHØ�IŠI˜˜B ™F�| b¨"¨q©& \Ð2¸ÀaˆIÑHÔHÐHð =˜˜A™Ð<Ð< Ð<Ð<°Ð<Ð<Ð<Ð<ˆEØ,˜dÐ,Ð, UÐ,Ð,ˆHØ�NŠN˜B ™G R¨%¡Z°"¡_°b¸2±g¸rÀE¹zÈA¹~ÐNÐUfÐpuÐ}~ˆNÑÔÐØ�IŠI�r˜B‘w  U¡
¨R¡Ð0°%¸eˆIÑDÔDÐDØ�IŠI�r˜B‘w  U¡
¨R¡Ð0°(ÀˆIÑQÔQÐQÑQð ×)Ò)¨(°GÑ<Ô<×DÒDÀUÑKÔKˆ	Ø�Š�{ EÑ*Ô*Ð*ØˆtøÝð ð ð ÝÐ3°Ð3Ð3Ñ4Ô4Ð4Øˆuˆuˆuˆuˆuøøøøðøøøs   ‚'U; «UU; Õ;
V"ÖVÖV")Ú__doc__r   rW   rÈ   rH   rÄ   Útypingr   r   r   r   r   rÒ   rÇ   rj  r.   r   r   ú<module>rm     sá   ððð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ðQð Qð Qð Qð Qñ Qô Qð QðfV¨3ð V¸dÀ3ÈÀ8¼nð VÐ[^ð VÐcgð Vð Vð Vð Vð Vð Vr   