§
     ‡¬jf  ã                  óÞ   — 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 G d„ d	¦  «        ¦   «         Ze G d
„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )uŸ  AutoPOE2 - Level 100 EXP Optimization & Map Rotation Planner (Doc 71).
=======================================================================
Bá»™ hoáº¡ch Ä‘á»‹nh chiáº¿n lÆ°á»£c cÃ y cáº¥p Level 90 -> 100 cho Monk Chaos Inoculation (CI):
1. Quáº£n lÃ½ chuá»—i báº£n Ä‘á»“ an toÃ n cao (Tier 15-16 Map Rotation Whitelist).
2. Thiáº¿t láº­p há»“ sÆ¡ CÃ¢y Ná»™i Táº¡i Atlas tá»‘i Æ°u EXP/giá»� (Pack Size & Magic/Rare Monsters).
3. Báº¥t biáº¿n sinh tá»“n báº¥t kháº£ xÃ¢m pháº¡m: Tá»· lá»‡ tá»­ tráº­n = 0 (INV-EXP-ZERO-DEATH).
4. Phá»‘i há»£p vá»›i Faustus Auto-Restock Ä‘á»ƒ duy trÃ¬ kho Waystone T15-16 >= 10 viÃªn.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Cold Path Tier 2 (Python 3.11).
- Rule 4: Module hÃ³a Ä‘á»™c láº­p, tráº§n file < 500 dÃ²ng.
- Rule 5: BÃ¡o cÃ¡o gáº¯n nhÃ£n [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME].
- Báº¥t biáº¿n: INV-EXP-ZERO-DEATH, INV-MAP-NO-BRICK, INV-WAYSTONE-RESTOCK-MIN.
é    )Úannotations)Ú	dataclassÚfield)ÚEnum)ÚAnyÚDictÚListÚOptionalÚSetÚTuplec                  ó   — e Zd ZdZdZdZdZdS )ÚMapSafetyTieruX   PhÃ¢n cáº¥p an toÃ n cá»§a báº£n Ä‘á»“ dá»±a trÃªn Ä‘á»‹a hÃ¬nh vÃ  rá»§i ro dá»“n gÃ³c.ÚTIER_S_OPTIMALÚTIER_A_VIABLEÚTIER_F_FORBIDDENN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © ó    úFC:\Projects\AutoPOE2\src\assistant_tool\atlas\level_100_exp_planner.pyr   r      s&   € € € € € ØbÐbØ%€NØ#€MØ)ÐÐÐr   r   c                  óº   — e Zd ZU dZ ed„ ¬¦  «        Zded<    ed„ ¬¦  «        Zded<    ed	„ ¬¦  «        Zded
<   dZ	ded<    ed„ ¬¦  «        Z
ded<   dd„ZdS )ÚMapTierRotationConfigu7   Cáº¥u hÃ¬nh chuá»—i báº£n Ä‘á»“ Tier 15-16 cho Monk CI.c                 ó
   — ddgS )Né   é   r   r   r   r   ú<lambda>zMapTierRotationConfig.<lambda>!   s
   € ¸RÀ¸H€ r   ©Údefault_factoryz	List[int]Útarget_tiersc                 ó
   — h d£S )N>   ÚMesaÚAtollÚBeachÚDunesÚCanyonÚStrandÚCemeteryr   r   r   r   r   zMapTierRotationConfig.<lambda>"   ó   € ð >ð >ð >€ r   zSet[str]Úwhitelist_mapsc                 ó
   — h d£S )N>   ú
Bone CryptúUnderground RiverÚMazeÚCellsÚDungeonÚMalformationr   r   r   r   r   zMapTierRotationConfig.<lambda>%   r*   r   Úblacklist_mapsé
   ÚintÚmin_safe_stockc                 ó
   — g d¢S )N)zPack Size MultiplierzIncreased Magic MonsterszBreach Expansion SpeedzDelirium Persistencer   r   r   r   r   zMapTierRotationConfig.<lambda>)   s   € ð Eð Eð E€ r   ú	List[str]Úpreferred_precursorsÚmap_nameÚstrÚtierÚreturnr   c                óæ   — |                      ¦   «         }|| j        v s|t          | j        ¦  «        k     rt          j        S |dv rt          j        S || j        v rt          j        S t          j        S )uH   Ä�Ã¡nh giÃ¡ má»©c Ä‘á»™ an toÃ n cá»§a báº£n Ä‘á»“ Ä‘á»‘i vá»›i Monk CI.>   r%   r&   r'   r(   )	Ústripr3   Úminr!   r   r   r   r+   r   )Úselfr:   r<   Ú
clean_names       r   Úevaluate_map_safetyz)MapTierRotationConfig.evaluate_map_safety0   sr   € à—^’^Ñ%Ô%ˆ
Ø˜Ô,Ð,Ð,°µs¸4Ô;LÑ7MÔ7MÒ0MÐ0MÝ Ô1Ð1ØÐ?Ð?Ð?Ý Ô/Ð/Ø˜Ô,Ð,Ð,Ý Ô.Ð.ÝÔ-Ð-r   N)r:   r;   r<   r5   r=   r   )r   r   r   r   r   r!   Ú__annotations__r+   r3   r6   r9   rC   r   r   r   r   r      s  € € € € € € àAÐAØ#˜eÐ4DÐ4DÐEÑEÔE€LÐEÐEÐEÑEØ$˜uð 6ð 6ð  ñ  ô  €Nð ð ð ñ ð  %˜uð 6ð 6ð  ñ  ô  €Nð ð ð ñ ð €NÐÐÐÑØ&+ eð =ð =ð 'ñ 'ô 'Ðð ð ð ñ ð	.ð 	.ð 	.ð 	.ð 	.ð 	.r   r   c                  ó”   — e Zd ZU dZdZded<   dZded<   dZded	<   d
Zded<    e	d„ ¬¦  «        Z
ded<    e	d„ ¬¦  «        Zded<   dS )ÚExpStrategyProfilez4Ho so chien luoc EXP/gio toi uu cho Level 90 -> 100.ÚMONK_CI_ZERO_DEATH_EXP_RUSHr;   Úprofile_namez	90 -> 100Útarget_level_rangeTÚboolÚzero_death_enforcedg     €F@ÚfloatÚprojected_exp_per_hour_millionsc                 ó
   — g d¢S )N)z5Breach (Mat do quai cao, dong bang dien rong an toan)z0Delirium Mirror (Tang 30% Pack Size toan ban do)z.Ritual Altars (Gom quai tung dot co kiem soat)z?Acceleration & Protection Shrines (Tang toc va giam sat thuong)r   r   r   r   r   zExpStrategyProfile.<lambda>C   s   € ð Fð Fð F€ r   r   r8   Úrecommended_mechanicsc                 ó
   — g d¢S )N)z+Pinnacle Citadel Bosses (Rui ro 1-shot cao)z,Simulacrum Wave 25+ (Hinh phat chet qua lon)z<Corrupted Nexus High Stacks (Sat thuong thoai hoa nguy hiem)r   r   r   r   r   zExpStrategyProfile.<lambda>I   s   € ð Dð Dð D€ r   Úforbidden_mechanicsN)r   r   r   r   rH   rD   rI   rK   rM   r   rO   rQ   r   r   r   rF   rF   <   sÏ   € € € € € € à>Ð>Ø5€LÐ5Ð5Ð5Ñ5Ø)ÐÐ)Ð)Ð)Ñ)Ø $ÐÐ$Ð$Ð$Ñ$Ø-1Ð#Ð1Ð1Ð1Ñ1Ø', uð >ð >ð (ñ (ô (Ðð ð ð ñ ð &+ Uð <ð <ð &ñ &ô &Ðð ð ð ñ ð ð r   rF   c                  ó0   — e Zd ZdZ	 	 ddd„Zdd„Zdd„ZdS )ÚLevel100ExpPlanneruM   Bá»™ hoáº¡ch Ä‘á»‹nh vÃ  giÃ¡m sÃ¡t chuá»—i báº£n Ä‘á»“ cÃ y cáº¥p Level 100.NÚrotation_configúOptional[MapTierRotationConfig]Ústrategy_profileúOptional[ExpStrategyProfile]c                óZ   — |pt          ¦   «         | _        |pt          ¦   «         | _        d S )N)r   ÚconfigrF   Úprofile)rA   rT   rV   s      r   Ú__init__zLevel100ExpPlanner.__init__T   s.   € ð
 &Ð@Õ)>Ñ)@Ô)@ˆŒØ'Ð?Õ+=Ñ+?Ô+?ˆŒˆˆr   Úavailable_waystonesúList[Dict[str, Any]]r=   ú$Tuple[Optional[Dict[str, Any]], str]c                óÐ  — g }|D ]q}|                      dd¦  «        }|                      dd¦  «        }| j                             ||¦  «        }|t          j        k    r|                     |||f¦  «         Œr|sdS d„ }|                     |d¬¦  «         |d	         d
         }|d|                      d¦  «        › d|                      d¦  «        › d|d	         d	         j        › d�fS )ua  
        Lá»±a chá»�n viÃªn Waystone tá»‘i Æ°u nháº¥t trong kho theo tiÃªu chuáº©n Zero-Death:
        1. Lá»�c bá»� toÃ n bá»™ map Tier F (Blacklist Ä‘á»‹a hÃ¬nh háº¹p).
        2. Æ¯u tiÃªn map Tier S (Beach, Strand, Dunes, Canyon) cÃ³ Tier 16.
        3. Tiáº¿p theo lÃ  Tier S cÃ³ Tier 15.
        4. Cuá»‘i cÃ¹ng lÃ  Tier A cÃ³ Tier 16/15.
        ÚnameÚ r<   é   )NzZKhong co Waystone nao thoa man tieu chuan an toan Level 100 (Can Auto-Restock tu Faustus).c                ó>   — | \  }}}|t           j        k    rdnd}||fS )Né   rb   )r   r   )ÚitemÚsafetyr<   Ú_Ú
safety_vals        r   Ú	_sort_keyz>Level100ExpPlanner.select_next_rotation_map.<locals>._sort_keys   s.   € Ø"‰OˆF�D˜!Ø$­Ô(DÒDÐD˜˜È!ˆJØ Ð%Ð%r   T)ÚkeyÚreverser   rd   zChon [z] Tier z (ú))ÚgetrY   rC   r   r   ÚappendÚsortÚvalue)	rA   r\   Úvalid_candidatesÚwsr`   r<   rf   ri   Úchosens	            r   Úselect_next_rotation_mapz+Level100ExpPlanner.select_next_rotation_map\   s  € ð ÐØ%ð 	<ð 	<ˆBØ—6’6˜& "Ñ%Ô%ˆDØ—6’6˜& !Ñ$Ô$ˆDØ”[×4Ò4°T¸4Ñ@Ô@ˆFØ�Ô7Ò7Ð7Ø ×'Ò'¨°°rÐ(:Ñ;Ô;Ð;øàð 	vØuÐuð	&ð 	&ð 	&ð
 	×Ò )°TÐÑ:Ô:Ð:Ø! !Ô$ QÔ'ˆØÐp §
¢
¨6Ñ 2Ô 2ÐpÐp¸6¿:º:ÀfÑ;MÔ;MÐpÐpÐQaÐbcÔQdÐefÔQgÔQmÐpÐpÐpÐpÐpr   r;   c                ó¸  — ddddd| j         j        › �d| j         j        › �d| j         j        rdnd› d	�d
| j         j        d›d�dddddddg}| j         j        D ]}|                     d|› �¦  «         Œ|                     ddg¦  «         | j         j        D ]}|                     d|› �¦  «         Œ|                     d¦  «         d 	                    |¦  «        S )uZ   Ä�á»‹nh dáº¡ng bÃ¡o cÃ¡o chiáº¿n lÆ°á»£c cÃ y cáº¥p Level 100 chuáº©n Rule 5 (ASCII-safe).zN==============================================================================z6 [MO PHONG THUAT TOAN HEADLESS - KHONG PHAI LIVE GAME]zC CHIEN LUOC ATLAS EXP LEVEL 90 -> 100 (ZERO-DEATH EXP OPTIMIZATION)z Ho So Chien Luoc          : z# Muc Tieu Cay Cap          : Level z1 Bat Bien Sinh Ton         : INV-EXP-ZERO-DEATH (zBAT BUOCÚTATrl   z Uoc Tinh EXP/Gio          : ~z.1fz Trieu EXP/h (T16 Rotation)zN------------------------------------------------------------------------------z5 DANH SACH BAN DO AN TOAN CAO (TIER 15-16 WHITELIST):z:   * Tier S (Dia hinh phang): Beach, Strand, Dunes, Canyonz3   * Tier A (Kha dung)      : Mesa, Atoll, CemeteryzR   * Tier F (CAM TUYET DOI) : Dungeon, Cells, Maze, Malformation (Nguy co ket goc)z- CO CHE LEAGUE KHUYEN NGHI (MAX EXP DENSITY):z   + z/ CO CHE CAM TUYET DOI (ZERO-DEATH ENFORCEMENT):z   - ú
)
rZ   rH   rI   rK   rM   rO   rn   ÚextendrQ   Újoin)rA   ÚlinesÚmÚfs       r   Úformat_level100_strategy_reportz2Level100ExpPlanner.format_level100_strategy_report|   s&  € ð ØDØQØØG¨D¬LÔ,EÐGÐGØS°$´,Ô2QÐSÐSØ|ÈdÌlÔNnÐ@yÀ
À
ÐtyÐ|Ð|Ð|Øz¨T¬\Ô-YÐzÐzÐzÐzØØCØIØBØaØØ;ð
ˆð" ”Ô3ð 	&ð 	&ˆAØ�LŠL˜ ˜˜Ñ%Ô%Ð%Ð%à�ŠØØ=ð
ñ 	ô 	ð 	ð ”Ô1ð 	&ð 	&ˆAØ�LŠL˜ ˜˜Ñ%Ô%Ð%Ð%à�Š�XÑÔÐØ�yŠy˜ÑÔÐr   )NN)rT   rU   rV   rW   )r\   r]   r=   r^   )r=   r;   )r   r   r   r   r[   rt   r}   r   r   r   rS   rS   Q   sn   € € € € € ØWÐWð <@Ø9=ð@ð @ð @ð @ð @ðqð qð qð qð@ ð  ð  ð  ð  ð  r   rS   N)r   Ú
__future__r   Údataclassesr   r   Úenumr   Útypingr   r   r	   r
   r   r   r;   r   r   rF   rS   r   r   r   ú<module>r‚      sM  ððð ð #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ð*ð *ð *ð *ð *�C˜ñ *ô *ð *ð ð.ð .ð .ð .ð .ñ .ô .ñ „ð.ð: ðð ð ð ð ñ ô ñ „ðð(I ð I ð I ð I ð I ñ I ô I ð I ð I ð I r   