§
    r¦j´$  ã                   óà   — d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZ  G d„ de¦  «        Ze G d„ d	¦  «        ¦   «         Ze G d
„ d¦  «        ¦   «         Z G d„ d¦  «        Zdedefd„ZdS )uÂ  
Poe2VisualTool Map & Monster Modifier Filter
PhÃ¢n tÃ­ch, phÃ¢n loáº¡i thuá»™c tÃ­nh Báº£n Ä‘á»“ (Map Modifiers) vÃ  QuÃ¡i váº­t (Monster Modifiers) tá»« text OCR hoáº·c clipboard.
100% Zero-Disk, Zero-Ban risk (hoÃ n toÃ n thá»¥ Ä‘á»™ng, khÃ´ng can thiá»‡p bá»™ nhá»› hay tá»‡p game GGPK).
Ä�Ã¡nh giÃ¡ Ä‘á»™ an toÃ n (Safety Score), cáº£nh bÃ¡o Brick Mod (Reflect, No Leech, No Regen...) vÃ  nháº­n diá»‡n Reward Mod (Quantity, Rarity, Pack Size).
é    N)Ú	dataclassÚfield)ÚEnum)ÚDictÚListÚOptionalÚTuplec                   ó   — e Zd ZdZdZdZdZdS )ÚModSeverityÚBRICKÚ	DANGEROUSÚNEUTRALÚREWARDN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © ó    ú;C:\Projects\Poe2VisualTool\src\assistant\modifier_filter.pyr   r      s"   € € € € € Ø€EØ€IØ€GØ€F€F€Fr   r   c                   ó8   — e Zd ZU eed<   eed<   eed<   eed<   dS )ÚModItemÚtextÚcategoryÚseverityÚdescriptionN)r   r   r   ÚstrÚ__annotations__r   r   r   r   r   r      s<   € € € € € € à
€I€I�IØ€M€M�MØÐÐÑØÐÐÑÐÐr   r   c                   óü   — e Zd ZU eed<    ee¬¦  «        Zee         ed<    ee¬¦  «        Z	ee         ed<    ee¬¦  «        Z
ee         ed<   dZeed<   dZeed	<   d
Zeed<    ee¬¦  «        Zee         ed<   dS )Ú	ModReportÚraw_text)Údefault_factoryÚred_modsÚ
green_modsÚneutral_modséd   Úsafety_scoreFÚis_bricku   AN TOÃ€NÚdanger_summaryÚdetailsN)r   r   r   r   r   r   Úlistr"   r   r#   r$   r&   Úintr'   Úboolr(   r)   r   r   r   r   r   r      sÏ   € € € € € € à€M€M�MØ˜%°Ð5Ñ5Ô5€Hˆd�3ŒiÐ5Ð5Ñ5Ø!˜E°$Ð7Ñ7Ô7€J��S”	Ð7Ð7Ñ7Ø#˜e°DÐ9Ñ9Ô9€L�$�s”)Ð9Ð9Ñ9Ø€L�#ÐÐÑØ€HˆdÐÐÑØ$€N�CÐ$Ð$Ñ$Ø"˜U°4Ð8Ñ8Ô8€GˆT�'Œ]Ð8Ð8Ñ8Ð8Ð8r   r   c                   ó”  — e Zd ZU dZddej        dfddej        dfdd	ej        d
fddej        dfddej        dfddej        dfddej        dfddej        dfddej        dfg	Zee	e
e
ee
f                  ed<   ddej        d fd!d"ej        d#fd$d%ej        d&fd'd(ej        d)fgZee	e
e
ee
f                  ed*<   ed+e
d,efd-„¦   «         Zd.S )/ÚModifierFilteru  
    Bá»™ lá»�c vÃ  Ä‘Ã¡nh giÃ¡ thuá»™c tÃ­nh Map / QuÃ¡i váº­t trong Path of Exile 2.
    PhÃ¢n loáº¡i theo quy chuáº©n:
    - Ä�á»Ž (Nguy hiá»ƒm / Brick):
      * Reflect: Pháº£n Ä‘Ã²n sÃ¡t thÆ°Æ¡ng váº­t lÃ½ / nguyÃªn tá»‘
      * No Leech: KhÃ´ng thá»ƒ hÃºt mÃ¡u / ES / Mana
      * No Regen: KhÃ´ng thá»ƒ há»“i phá»¥c (Life, Mana, Energy Shield)
      * -Max Res: Giáº£m khÃ¡ng tá»‘i Ä‘a (-% maximum Resistances)
      * Crit / Extra Dmg: QuÃ¡i cÃ³ thÃªm chÃ­ máº¡ng hoáº·c sÃ¡t thÆ°Æ¡ng nguyÃªn tá»‘ cá»™ng thÃªm
      * Corrupted Blood / Curse: Lá»�i nguyá»�n nguy hiá»ƒm hoáº·c máº·t Ä‘áº¥t Desecrated Ground
    - XANH (An toÃ n / ThÆ°á»Ÿng cao):
      * Quantity: TÄƒng sá»‘ lÆ°á»£ng Ä‘á»“ rÆ¡i
      * Rarity: TÄƒng Ä‘á»™ hiáº¿m Ä‘á»“ rÆ¡i
      * Pack Size: TÄƒng máº­t Ä‘á»™ quÃ¡i
    z_Reflects?\s+(?:\d+[\.,]?\d*%\s+of\s+)?(?:Physical|Elemental|Chaos)?\s*Damage|Monsters\s+reflectÚReflectuG   Pháº£n Ä‘Ã²n sÃ¡t thÆ°Æ¡ng váº­t lÃ½ / nguyÃªn tá»‘ (Cháº¿t tá»©c thÃ¬)z(?:Players\s+)?Cannot\s+LeechzNo Leechu-   KhÃ´ng thá»ƒ hÃºt MÃ¡u / Energy Shield / ManazG(?:Players\s+)?cannot\s+Regenerate|no\s+Life\s+or\s+Mana\s+regenerationzNo Regenu9   KhÃ´ng thá»ƒ há»“i phá»¥c MÃ¡u, Mana hoáº·c Energy Shieldzž-\s*(\d+)%\s+(?:to\s+(?:all\s+)?maximum|maximum\s+(?:Player\s+)?Resistances?|reduced\s+maximum\s+Resistances?)|-?\s*(\d+)?%?\s*maximum\s+Player\s+Resistances?z-Max ResuT   Giáº£m khÃ¡ng tá»‘i Ä‘a cá»§a nhÃ¢n váº­t (TÄƒng máº¡nh sÃ¡t thÆ°Æ¡ng pháº£i nháº­n)zOMonsters\s+take\s+(?:\d+%\s+)?reduced\s+Extra\s+Damage\s+from\s+Critical\s+HitszReduced Crit DmguM   QuÃ¡i giáº£m sÃ¡t thÆ°Æ¡ng chÃ­ máº¡ng pháº£i nháº­n (Kháº¯c tinh build Crit)ztMonsters\s+have\s+(?:\d+%\s+)?increased\s+Attack,\s*Cast\s+and\s+Movement\s+Speed|Monsters\s+gain\s+(?:.*)?OnslaughtzMonster Speedu=   TÄƒng tá»‘c Ä‘Ã¡nh, xuáº¥t chiÃªu vÃ  di chuyá»ƒn cá»§a quÃ¡iz[Monsters\s+have\s+(?:\d+%\s+)?chance\s+to\s+(?:Poison|Bleed|Ignite|Freeze|Shock)\s+on\s+HitzAilment on HituX   QuÃ¡i cÃ³ tá»‰ lá»‡ gÃ¢y hiá»‡u á»©ng xáº¥u (Ä�á»™c/Cháº£y mÃ¡u/Sá»‘c) khi Ä‘Ã¡nh trÃºngz®Monsters\s+deal\s+(?:.*%)?\s*extra\s+Damage\s+as|Monsters\s+have\s+(?:.*%)?\s*increased\s+Critical\s+Strike\s+Chance|\+?(\d+)%\s+to\s+Monster\s+Critical\s+Strike\s+MultiplierzCrit / Extra DmguB   QuÃ¡i gÃ¢y thÃªm sÃ¡t thÆ°Æ¡ng nguyÃªn tá»‘ hoáº·c chÃ­ máº¡ng caozyArea\s+has\s+patches\s+of\s+Desecrated\s+Ground|Players\s+are\s+Cursed\s+with|Corrupted\s+Blood|Area\s+contains\s+patcheszCorrupted Blood / Curseu@   Tráº¡ng thÃ¡i nguy hiá»ƒm / Lá»�i nguyá»�n / Ä�áº¥t Ä‘á»™c háº¡iÚRED_PATTERNSzG(?:Pack\s+Size:\s*\+?(\d+)%|(\d+)%\s+increased\s+Monster\s+Pack\s+Size)z	Pack Sizeu;   TÄƒng máº­t Ä‘á»™ vÃ  sá»‘ lÆ°á»£ng quÃ¡i trong báº£n Ä‘á»“ze(?:Monster\s+Rarity:\s*\+?(\d+)%|Item\s+Rarity:\s*\+?(\d+)%|(\d+)%\s+increased\s+Rarity\s+of\s+Items)ÚRarityu6   TÄƒng Ä‘á»™ hiáº¿m váº­t pháº©m rÆ¡i trong báº£n Ä‘á»“zq(?:Waystone\s+Drop\s+Chance:\s*\+?(\d+)%|Item\s+Quantity:\s*\+?(\d+)%|(\d+)%\s+increased\s+Quantity\s+of\s+Items)zQuantity / Drop Chanceu8   TÄƒng sá»‘ lÆ°á»£ng / tá»‰ lá»‡ rÆ¡i Ä‘á»“ vÃ  Waystonesz6(?:Gold\s+Drop:\s*\+?(\d+)%|(\d+)%\s+increased\s+Gold)ÚGoldu0   TÄƒng sá»‘ lÆ°á»£ng vÃ ng rÆ¡i trong báº£n Ä‘á»“ÚGREEN_PATTERNSr   Úreturnc           
      ó¬  — |r|                      ¦   «         st          |pddd¬¦  «        S d„ |                     ¦   «         D ¦   «         }t          |¬¦  «        }d}d}|D �]’}t          j        dd|¦  «                              ¦   «         }t          j        d	d
|¦  «        }d}| j        D ]“\  }	}
}}t          j        |	|t          j        ¦  «        rl|j         	                    d|
› d|› �¦  «         |j
         	                    t          ||
||¬¦  «        ¦  «         d}|t          j        k    rd}|dz  }n|dz  } nŒ”|rŒád}| j        D ]‰\  }	}
}}t          j        |	|t          j        ¦  «        rb|j         	                    d|
› d|› �¦  «         |j
         	                    t          ||
||¬¦  «        ¦  «         d}t!          d|dz   ¦  «        } nŒŠ|s|s|j         	                    |¦  «         �Œ”t%          dt!          d|¦  «        ¦  «        |_        ||_        |rd|_        n-|j        dk     rd|_        n|j        dk     rd|_        nd|_        |S )uÃ   
        Ä�Ã¡nh giÃ¡ danh sÃ¡ch mod tá»« vÄƒn báº£n (tá»«ng dÃ²ng hoáº·c Ä‘oáº¡n text OCR).
        Tá»± Ä‘á»™ng chuáº©n hÃ³a loáº¡i bá»� roll ranges Ä‘á»ƒ khá»›p chÃ­nh xÃ¡c trong POE2.
        Ú r%   u   AN TOÃ€N (KHÃ”NG CÃ“ MOD))r    r&   r(   c                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r   )Ústrip)Ú.0Úlines     r   ú
<listcomp>z5ModifierFilter.evaluate_modifiers.<locals>.<listcomp>¦   s-   € ÐLÐLÐL $¸t¿zºz¹|¼|ÐL�—’‘”ÐLÐLÐLr   )r    Fz	\([^)]*\)z\s+ú ú[z] )r   r   r   r   Té(   é   é   r   u>   ðŸ›‘ BRICK (Cáº¤M CHáº Y - PHáº¢N Ä�Ã’N / NO REGEN / NO LEECH)é<   u&   âš ï¸� NGUY HIá»‚M CAO (Cáº¨N TRá»ŒNG)éU   u2   âš¡ Cáº¨N TRá»ŒNG (CÃ“ MOD SÃ�T THÆ¯Æ NG / KHÃ�NG)u    ðŸŸ¢ AN TOÃ€N (CÃ“ THá»‚ CHáº Y))r8   r   Ú
splitlinesÚreÚsubr0   ÚsearchÚIr"   Úappendr)   r   r   r   r3   r#   Úminr$   Úmaxr&   r'   r(   )Úclsr   ÚlinesÚreportÚscoreÚ	has_brickr:   Ú
clean_lineÚmatched_redÚpatternÚcatÚsevÚdescÚmatched_greens                 r   Úevaluate_modifiersz!ModifierFilter.evaluate_modifiers�   sÄ  € ð ð 	p˜4Ÿ:š:™<œ<ð 	pÝ d j¨b¸sÐSnÐoÑoÔoÐoàLÐL¨$¯/ª/Ñ*;Ô*;ÐLÑLÔLˆÝ DÐ)Ñ)Ô)ˆàˆØˆ	àð  	1ñ  	1ˆDåœ ¨b°$Ñ7Ô7×=Ò=Ñ?Ô?ˆJÝœ ¨¨ZÑ8Ô8ˆJàˆKØ+.Ô+;ð 
ð 
Ñ'�˜˜c 4Ý”9˜W jµ"´$Ñ7Ô7ð 	Ø”O×*Ò*Ð+<¨sÐ+<Ð+<°dÐ+<Ð+<Ñ=Ô=Ð=Ø”N×)Ò)­'°tÀcÐTWÐeiÐ*jÑ*jÔ*jÑkÔkÐkØ"&�KØ�kÔ/Ò/Ð/Ø$(˜	Ø ™˜˜à ™˜Ø�Eð	ð ð Øà!ˆMØ+.Ô+=ð ð Ñ'�˜˜c 4Ý”9˜W jµ"´$Ñ7Ô7ð ØÔ%×,Ò,Ð->°Ð->Ð->¸Ð->Ð->Ñ?Ô?Ð?Ø”N×)Ò)­'°tÀcÐTWÐeiÐ*jÑ*jÔ*jÑkÔkÐkØ$(�MÝ  U¨Q¡YÑ/Ô/�EØ�Eðð !ð 1¨ð 1àÔ#×*Ò*¨4Ñ0Ô0Ð0ùõ " !¥S¨¨e¡_¤_Ñ5Ô5ˆÔØ#ˆŒàð 	GØ$dˆFÔ!Ð!ØÔ  2Ò%Ð%Ø$LˆFÔ!Ð!ØÔ  2Ò%Ð%Ø$XˆFÔ!Ð!à$FˆFÔ!àˆr   N)r   r   r   Ú__doc__r   r   r   r0   r   r	   r   r   r   r3   Úclassmethodr   rW   r   r   r   r.   r.   )   sÔ  € € € € € € ðð ð( oØØÔØUð		
ð -ØØÔØ;ð		
ð WØØÔØGð		
ð nØØÔ!Øbð		
ð _ØØÔ!Ø[ð		
ð DØØÔ!ØKð		
ð kØØÔ!Øfð		
ð ~ØØÔ!ØPð		
ð IØ%ØÔ!ØNð		
ðu@=€L�$�u˜S # {°CÐ7Ô8Ô9ð @ð @ñ @ðL WØØÔØIð		
ð uØØÔØDð		
ð AØ$ØÔØFð		
ð FØØÔØ>ð		
ð/?€N�D˜˜s C¨°cÐ9Ô:Ô;ð ð ñ ð> ð= cð =¨ið =ð =ð =ñ „[ð=ð =ð =r   r.   r   r4   c                 ó6   — t                                | ¦  «        S )u>   HÃ m tiá»‡n Ã­ch cáº¥p module phÃ¢n tÃ­ch vÃ  Ä‘Ã¡nh giÃ¡ mod.)r.   rW   )r   s    r   rW   rW   Þ   s   € å×,Ò,¨TÑ2Ô2Ð2r   )rX   rD   Údataclassesr   r   Úenumr   Útypingr   r   r   r	   r   r   r   r.   r   rW   r   r   r   ú<module>r^      sW  ððð ð 
€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð �$ñ ô ð ð ðð ð ð ð ñ ô ñ „ðð ð9ð 9ð 9ð 9ð 9ñ 9ô 9ñ „ð9ðrð rð rð rð rñ rô rð rðj3˜Sð 3 Yð 3ð 3ð 3ð 3ð 3ð 3r   