§
    M¬jó  ã                  ó¾  — U d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZ  G d„ dee¦  «        Z ed¬	¦  «         G d
„ d¦  «        ¦   «         Zej         eej        ddddd¬¦  «        ej         eej        ddddd¬¦  «        ej         eej        ddddd¬¦  «        ej         eej        ddddd ¬¦  «        ej         eej        d!d"d#d$d%¬¦  «        ej         eej        d&d'd(d)d%¬¦  «        ej         eej        d*d+d,dd¬¦  «        ej         eej        d-d.d/d0d¬¦  «        ej         eej        d1d2d3dd¬¦  «        i	Zd4ed5<    G d6„ d7¦  «        Zd8S )9uŽ  AutoPOE2 - Atlas Special Encounter Matcher & Value Evaluator (Doc 65 / Doc 69).
==================================================================================
Nháº­n diá»‡n vÃ  Ä‘á»‹nh giÃ¡ cÃ¡c cÆ¡ cháº¿ Ä‘áº·c biá»‡t xuáº¥t hiá»‡n trÃªn cÃ¡c Node Atlas POE2 v0.5.5+:
- Breach, Ritual, Delirium, Expedition, Boss Citadels, Unique Maps, Atlas Questlines.
- TÃ­nh toÃ¡n Ä‘iá»ƒm Æ°u tiÃªn (Encounter Priority Score) vÃ  Ä‘á»� xuáº¥t náº¡p Precursor Tablet tá»‘i Æ°u.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Cold Path Tier 2.
- Rule 4: Module hÃ³a, tráº§n file < 500 dÃ²ng.
- Rule 8: Báº¥t biáº¿n kiáº¿n trÃºc INV-ATLAS-FARM-NODE & INV-ATLAS-QUEST-PROG.
é    )Úannotations)Ú	dataclassÚfield)ÚEnum)ÚAnyÚDictÚListÚOptionalÚSetÚTuplec                  ó:   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )ÚEncounterTypeuK   PhÃ¢n loáº¡i cÃ¡c cÆ¡ cháº¿ vÃ  sá»± kiá»‡n Ä‘áº·c biá»‡t trÃªn Node Atlas.ÚBREACHÚRITUALÚDELIRIUMÚ
EXPEDITIONÚCITADEL_GUARDIANÚPINNACLE_BOSSÚ
UNIQUE_MAPÚATLAS_QUESTÚPRECURSOR_AURAÚSTANDARDN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   © ó    úBC:\Projects\AutoPOE2\src\assistant_tool\atlas\encounter_matcher.pyr   r      sG   € € € € € ØUÐUØ€FØ€FØ€HØ€JØ)ÐØ#€MØ€JØ€KØ%€NØ€H€H€Hr   r   T)Úfrozenc                  óT   — e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   dZded<   dS )ÚEncounterProfileu@   Há»“ sÆ¡ giÃ¡ trá»‹ vÃ  Ä‘á»™ nguy hiá»ƒm cá»§a má»™t cÆ¡ cháº¿.r   Úencounter_typeÚstrÚdisplay_nameÚfloatÚbase_value_weightÚdanger_levelzTuple[str, ...]Úrecommended_tabletsé   ÚintÚmin_tierN)r   r   r   r   Ú__annotations__r,   r   r   r   r"   r"   "   se   € € € € € € àJÐJØ!Ð!Ð!Ñ!ØÐÐÑØÐÐÑØÐÐÑØ(Ð(Ð(Ñ(Ø€HÐÐÐÑÐÐr   r"   z"Atlas Questline (+1 Passive Point)g      @g333333Ó?r   r*   )r#   r%   r'   r(   r)   r,   z+Citadel Guardian (One-Life Crisis Fragment)g      @gffffffæ?)z	Boss DropÚCrisisé   z7Delirium Mirror (Simulacrum Splinters & Cluster Jewels)gš™™™™™	@g      à?)ÚDeliriumÚ	Precursoré
   z0Breach Portal (Classified Splinters & Catalysts)g      @gš™™™™™Ù?)ÚBreachr1   é   z/Ritual Altar (Tribute & Deferral High Currency)gffffff@gffffffÖ?)ÚRitualr1   é   z,Expedition Excavation (Logbooks & Artifacts)gš™™™™™@gÍÌÌÌÌÌÜ?)Ú
Expeditionr1   z(Unique Map (+2 Atlas Points First Clear)g      @g333333ã?zPrecursor Tower Aura Coverageg       @gš™™™™™É?)r0   r3   r5   zStandard Waystone Mapç      ð?gš™™™™™¹?z%Dict[EncounterType, EncounterProfile]Ú_ENCOUNTER_REGISTRYc                  óH   — e Zd ZdZedd„¦   «         Ze	 	 ddd„¦   «         ZdS )ÚEncounterMatcheruI   Bá»™ nháº­n diá»‡n vÃ  tÃ­nh toÃ¡n giÃ¡ trá»‹ cÆ¡ cháº¿ trÃªn Node Atlas.Úname_or_tagr$   Úreturnr"   c                óx  — |                       ¦   «         }d|v sd|v sd|v sd|v sd|v sd|v rt          t          j                 S d|v sd|v sd	|v sd
|v rt          t          j                 S d|v sd|v rt          t          j                 S d|v sd|v rt          t          j                 S d|v sd|v rt          t          j                 S d|v sd|v sd|v rt          t          j                 S d|v rt          t          j	                 S d|v sd|v rt          t          j
                 S t          t          j                 S )uB   Nháº­n diá»‡n loáº¡i cÆ¡ cháº¿ tá»« chuá»—i text hoáº·c tháº» tag.ÚquestÚenigmaÚnexuszgreat beastÚwillowÚ
kingsmarchÚcitadelÚgeonorÚjamanraÚdoryaniÚdeliriumzmirror of deliriumÚbreachÚxeshtÚritualÚaltarÚ
expeditionÚkalguurÚlogbookÚuniqueÚtowerÚaura)Úlowerr9   r   r   r   r   r   r   r   r   r   r   )r<   Úts     r   Úidentify_encounterz#EncounterMatcher.identify_encounter|   sZ  € ð ×ÒÑÔˆØ�aˆ<ˆ<˜8 q˜=˜=¨G°q¨L¨L¸MÈQÐ<NÐ<NÐRZÐ^_ÐR_ÐR_ÐcoÐstÐctÐctÝ&¥}Ô'@ÔAÐAØ˜ˆ>ˆ>˜X¨˜]˜]¨i¸1¨n¨nÀ	ÈQÀÀÝ&¥}Ô'EÔFÐFØ˜ˆ?ˆ?Ð2°aÐ7Ð7Ý&¥}Ô'=Ô>Ð>Ø�qˆ=ˆ=˜G q˜L˜LÝ&¥}Ô';Ô<Ð<Ø�qˆ=ˆ=˜G q˜L˜LÝ&¥}Ô';Ô<Ð<Ø˜1ÐÐ 	¨Q  °)¸q°.°.Ý&¥}Ô'?Ô@Ð@Ø�qˆ=ˆ=Ý&¥}Ô'?Ô@Ð@Ø�aˆ<ˆ<˜6 Q˜;˜;Ý&¥}Ô'CÔDÐDÝ"¥=Ô#9Ô:Ð:r   r   NÚ
encountersú	List[str]Útower_coverager+   Úpreferred_encountersúOptional[List[str]]r&   c                ó   — d„ |pg D ¦   «         }d}|D ]^}|                       |¦  «        }|j        j                             ¦   «         |v s|                     ¦   «         |v rdnd}||j        |z  z  }Œ_|dk    r||dz  z  }t          |d¦  «        S )uÃ   
        TÃ­nh Ä‘iá»ƒm thÆ°á»Ÿng tá»•ng há»£p dá»±a trÃªn cÃ¡c cÆ¡ cháº¿ hiá»‡n diá»‡n trÃªn node.
        Score = sum(base_value_weight * preference_multiplier) + (tower_coverage * 0.5)
        c                ó6   — h | ]}|                      ¦   «         ’ŒS r   )rS   )Ú.0Úps     r   ú	<setcomp>z3EncounterMatcher.calculate_score.<locals>.<setcomp>�   s    € ÐDÐDÐD !�A—G’G‘I”IÐDÐDÐDr   r8   g      ø?r   g      è?é   )rU   r#   ÚvaluerS   r'   Úround)	ÚclsrV   rX   rY   Úpref_setÚtotal_scoreÚenc_tagÚprofileÚ
multipliers	            r   Úcalculate_scorez EncounterMatcher.calculate_score’   sÃ   € ð EÐDÐ(<Ð(BÀÐDÑDÔDˆØˆà!ð 	Bð 	BˆGØ×,Ò,¨WÑ5Ô5ˆGØ!(Ô!7Ô!=×!CÒ!CÑ!EÔ!EÈÐ!QÐ!QÐU\×UbÒUbÑUdÔUdÐhpÐUpÐUp˜˜ÐwzˆJØ˜7Ô4°zÑAÑAˆKˆKà˜AÒÐØ˜>¨DÑ0Ñ0ˆKå�[ !Ñ$Ô$Ð$r   )r<   r$   r=   r"   )r   N)rV   rW   rX   r+   rY   rZ   r=   r&   )r   r   r   r   ÚstaticmethodrU   Úclassmethodri   r   r   r   r;   r;   y   se   € € € € € ØSÐSàð;ð ;ð ;ñ „\ð;ð* ð  Ø48ð	%ð %ð %ð %ñ „[ð%ð %ð %r   r;   N)r   Ú
__future__r   Údataclassesr   r   Úenumr   Útypingr   r   r	   r
   r   r   r$   r   r"   r   r   r   r   r   r   r   r   r   r9   r-   r;   r   r   r   ú<module>rp      s  ðð
ð 
ð 
ð #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð �C˜ñ ô ð ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð ÔÐ/Ð/Ø$Ô0Ø9ØØØØð ñ  ô  ð Ô"Ð$4Ð$4Ø$Ô5ØBØØØ3Øð%ñ %ô %ð ÔÐ,Ð,Ø$Ô-ØNØØØ5Øðñ ô ð ÔÐ*Ð*Ø$Ô+ØGØØØ3Øðñ ô ð ÔÐ*Ð*Ø$Ô+ØFØØØ3Øðñ ô ð ÔÐ.Ð.Ø$Ô/ØCØØØ7Øðñ ô ð ÔÐ.Ð.Ø$Ô/Ø?ØØØØðñ ô ð Ô Ð"2Ð"2Ø$Ô3Ø4ØØØ<Øð#ñ #ô #ð ÔÐ,Ð,Ø$Ô-Ø,ØØØØðñ ô ðCI>Ð ð Ið Ið Iñ IðX/%ð /%ð /%ð /%ð /%ñ /%ô /%ð /%ð /%ð /%r   