§
    `â¨jÌC  ã            
       ó„  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
ddlmZ ej                             dej                             ej                             ej                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZmZmZ  G d„ de
j        ¦  «        Zedk    r e
j        ¦   «          dS dS )	u  
Kiá»ƒm thá»­ Bá»™ Ä�iá»�u Phá»‘i VÃ²ng Ä�á»�i Tá»± HÃ nh (Autonomous Lifecycle Manager)
Kiá»ƒm tra logic 2 giai Ä‘oáº¡n:
- Giai Ä‘oáº¡n 1 (ChÆ°a End Game): Campaign Grind (CÃ y cuá»‘c & LÃ m quest)
- Giai Ä‘oáº¡n 2 (Ä�Ã£ Ä�áº¡t End Game): Endgame Earning (Farm Map & Arbitrage)
é    N)Ú	MagicMockz..)ÚAutonomousLifecycleManagerÚLifecyclePhaseÚEndgameMappingSubStateÚCharacterLifecycleStatec                   ó†   — 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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestAutonomousLifecyclec                 óÜ   — t          ¦   «         | _        d| j        j        _        t          ¦   «         | _        d| j        j        _        t          | j        | j        ddi¬¦  «        | _        d S )NTÚauto_launch_clientF)Úcore_bridgeÚcore_controllerÚconfig)r   Úmock_bridgeÚsend_trigger_world_map_travelÚreturn_valueÚmock_controllerÚ
is_runningr   Ú	lifecycle©Úselfs    ú7C:\Projects\AutoPOE2\tests\test_autonomous_lifecycle.pyÚsetUpzTestAutonomousLifecycle.setUp   sd   € Ý$™;œ;ˆÔØFJˆÔÔ6ÔCÝ(™{œ{ˆÔØ7;ˆÔÔ'Ô4å3ØÔ(Ø Ô0Ø(¨%Ð0ð
ñ 
ô 
ˆŒˆˆó    c                 óÀ   — d| j         _        d| j         _        d| j         _        | j                              ¦   «         }|                      |t          j        ¦  «         dS )uQ   NhÃ¢n váº­t Level < 65 vÃ  á»Ÿ Act bÃ¬nh thÆ°á»�ng pháº£i á»Ÿ pha CAMPAIGN_GRIND.é   ÚG1_2zThe Ogham FarmlandsN)r   Úplayer_levelÚcurrent_area_codeÚcurrent_area_nameÚevaluate_phaseÚassertEqualr   ÚCAMPAIGN_GRIND©r   Úphases     r   Ú"test_evaluate_phase_campaign_grindz:TestAutonomousLifecycle.test_evaluate_phase_campaign_grind%   sR   € à&(ˆŒÔ#Ø+1ˆŒÔ(Ø+@ˆŒÔ(à”×-Ò-Ñ/Ô/ˆØ×Ò˜¥Ô =Ñ>Ô>Ð>Ð>Ð>r   c                 óÀ   — d| j         _        d| j         _        d| j         _        | j                              ¦   «         }|                      |t          j        ¦  «         dS )uV   NhÃ¢n váº­t Level >= 65 hoáº·c á»Ÿ Map Atlas pháº£i chuyá»ƒn sang pha ENDGAME_EARNING.éD   ÚMapTier1zStrand Map Tier 1N)r   r   r   r   r    r!   r   ÚENDGAME_EARNINGr#   s     r   Ú#test_evaluate_phase_endgame_earningz;TestAutonomousLifecycle.test_evaluate_phase_endgame_earning.   sR   € à&(ˆŒÔ#Ø+5ˆŒÔ(Ø+>ˆŒÔ(à”×-Ò-Ñ/Ô/ˆØ×Ò˜¥Ô >Ñ?Ô?Ð?Ð?Ð?r   c                 óÂ   — |                       | j        j        ¦  «         |                       | j        j        ¦  «         |                      | j        j        d¦  «         dS )uP   Khá»Ÿi táº¡o: is_in_town pháº£i lÃ  False vÃ  has_real_map_log pháº£i lÃ  False.Ú N)ÚassertFalser   Ú
is_in_townÚhas_real_map_logr!   r   r   s    r   Ú test_init_state_is_in_town_falsez8TestAutonomousLifecycle.test_init_state_is_in_town_false7   sU   € à×Ò˜œÔ2Ñ3Ô3Ð3Ø×Ò˜œÔ8Ñ9Ô9Ð9Ø×Ò˜œÔ9¸2Ñ>Ô>Ð>Ð>Ð>r   c                 óò  — d| j         _        d| j         _        d| j         _        d| j         _        d| j         _        t          j        | j         _        d| j         _	        | j          
                    ¦   «          |                      | j        j        j        ¦  «         | j         j                             d¦  «         | j          
                    ¦   «          |                      | j        j        j        ¦  «         | j        j                             ¦   «          d| j         _        d| j         _        d	| j         _        | j          
                    ¦   «          |                      | j        j        j        ¦  «         d
S )uo   Khi á»Ÿ LÃ ng trong pha Campaign, há»‡ thá»‘ng chá»‰ gá»­i lá»‡nh phÃ­m U dá»‹ch chuyá»ƒn náº¿u sang map khÃ¡c.é
   ÚG1_townúClearfell EncampmentTç        ÚUnaFÚG3_1zSandswept MarshN)r   r   r   r   r.   r/   r   r"   r$   Úlast_travel_timeÚ_execute_campaign_grind_stepr-   r   r   ÚcalledÚquesterÚrecord_objective_completedÚ
assertTrueÚ
reset_mockr   s    r   Útest_town_travel_triggerz0TestAutonomousLifecycle.test_town_travel_trigger=   s7  € à&(ˆŒÔ#Ø+4ˆŒÔ(Ø+AˆŒÔ(Ø$(ˆŒÔ!Ø*.ˆŒÔ'Ý-Ô<ˆŒÔØ*-ˆŒÔ'ð 	Œ×3Ò3Ñ5Ô5Ð5Ø×Ò˜Ô)ÔGÔNÑOÔOÐOð 	ŒÔ×9Ò9¸%Ñ@Ô@Ð@ØŒ×3Ò3Ñ5Ô5Ð5Ø�Š˜Ô(ÔFÔMÑNÔNÐNð 	ÔÔ6×AÒAÑCÔCÐCØ$)ˆŒÔ!Ø+1ˆŒÔ(Ø+<ˆŒÔ(ØŒ×3Ò3Ñ5Ô5Ð5Ø×Ò˜Ô)ÔGÔNÑOÔOÐOÐOÐOr   c                 óz  — d| j         _        d| j         _        d| j         _        d| j         _        d| j         _        t          j        | j         _        d| j         _	        | j         j
                             d¦  «         | j                              ¦   «          |                      | j        j        j        ¦  «         dS )	up   Khi chÆ°a cÃ³ log map tháº­t tá»« game (has_real_map_log = False) -> KHÃ”NG gá»­i send_trigger_world_map_travel.r2   r3   r4   TFr5   r6   N)r   r   r   r   r.   r/   r   r"   r$   r8   r;   r<   r9   r-   r   r   r:   r   s    r   Ú&test_town_travel_requires_real_map_logz>TestAutonomousLifecycle.test_town_travel_requires_real_map_logX   s›   € à&(ˆŒÔ#Ø+4ˆŒÔ(Ø+AˆŒÔ(Ø$(ˆŒÔ!Ø*/ˆŒÔ'Ý-Ô<ˆŒÔØ*-ˆŒÔ'àŒÔ×9Ò9¸%Ñ@Ô@Ð@ØŒ×3Ò3Ñ5Ô5Ð5Ø×Ò˜Ô)ÔGÔNÑOÔOÐOÐOÐOr   c                 óz  — g d¢}d| j         _        d| j         _        d| j         _        t          j        | j         _        d| j         _        |D ]m}| j        j	         
                    ¦   «          || j         _        | j                              ¦   «          |                      | j        j	        j        d|› �¦  «         ŒndS )ur   Khi tÃªn map hiá»‡n táº¡i lÃ  UI scene overlay (Act 1..4, Atlas...) -> KHÃ”NG gá»­i send_trigger_world_map_travel.)úAct 1úAct 2zAct 3zAct 4ÚAtlasú(null)z	(unknown)r2   Tr5   uA   KhÃ´ng Ä‘Æ°á»£c gá»­i travel khi current_area_name lÃ  UI scene: N)r   r   r.   r/   r   r"   r$   r8   r   r   r>   r   r9   r-   r:   )r   Ú	ui_scenesÚscenes      r   Ú"test_town_travel_rejects_ui_scenesz:TestAutonomousLifecycle.test_town_travel_rejects_ui_scenesf   sÆ   € àXÐXÐXˆ	Ø&(ˆŒÔ#Ø$(ˆŒÔ!Ø*.ˆŒÔ'Ý-Ô<ˆŒÔØ*-ˆŒÔ'àð 	ð 	ˆEØÔÔ:×EÒEÑGÔGÐGØ/4ˆDŒNÔ,ØŒN×7Ò7Ñ9Ô9Ð9Ø×ÒØÔ Ô>ÔEØ[ÐTYÐ[Ð[ñô ð ð ð		ð 	r   c                 ó`  — | j                              dd¦  «         |                      | j         j        ¦  «         |                      | j         j        d¦  «         | j                              dd¦  «         |                      | j         j        ¦  «         |                      | j         j        d¦  «         | j                              dd¦  «         |                      | j         j        ¦  «         |                      | j         j        d¦  «         |                      | j         j        ¦  «         dS )uR   on_area_changed pháº£i bá»� qua cÃ¡c UI scenes vÃ  chá»‰ cháº¥p nháº­n map tháº­t.r,   rC   rE   r3   r4   N)r   Úon_area_changedr-   r/   r!   r   r=   r.   r   s    r   Ú&test_on_area_changed_filters_ui_scenesz>TestAutonomousLifecycle.test_on_area_changed_filters_ui_scenesx   s  € ð 	Œ×&Ò& r¨7Ñ3Ô3Ð3Ø×Ò˜œÔ8Ñ9Ô9Ð9Ø×Ò˜œÔ9¸2Ñ>Ô>Ð>àŒ×&Ò& r¨7Ñ3Ô3Ð3Ø×Ò˜œÔ8Ñ9Ô9Ð9Ø×Ò˜œÔ9¸2Ñ>Ô>Ð>ð 	Œ×&Ò& yÐ2HÑIÔIÐIØ�Š˜œÔ7Ñ8Ô8Ð8Ø×Ò˜œÔ9Ð;QÑRÔRÐRØ�Š˜œÔ1Ñ2Ô2Ð2Ð2Ð2r   c                 ó*  ‡— t          ¦   «         }d|_        d|_        d|_        d|j        _        | j                             |¦  «         |                      | j        j	        ¦  «         |  
                    | j        j        d¦  «         |  
                    | j        j        d¦  «         |                      | j        j        ¦  «         g Š| j                             ˆfd„¦  «         t           j        | j        _        | j                             ¦   «          |                      | j        j        j        ¦  «         |                      t/          d„ ‰D ¦   «         ¦  «        ¦  «         |                      t/          d„ ‰D ¦   «         ¦  «        ¦  «         dS )	ua   SHM area_name Hive Fortress (Client.txt 10/09/2026 18:29) xÃ¡c thá»±c map, khÃ´ng má»Ÿ World Map.TúHive FortressÚChayulaLeague_Toweré   c                 ó.   •— ‰                      |¦  «        S ©N©Úappend©Ú_phaseÚtextÚtextss     €r   ú<lambda>z^TestAutonomousLifecycle.test_telemetry_verifies_hive_fortress_without_travel.<locals>.<lambda>˜   ó   ø€ ¸e¿lºlÈ4Ñ>PÔ>P€ r   c              3   ó   K  — | ]}d |v V — Œ	dS )u   CHIáº¾N Ä�áº¤UN© ©Ú.0Úts     r   ú	<genexpr>z_TestAutonomousLifecycle.test_telemetry_verifies_hive_fortress_without_travel.<locals>.<genexpr>œ   s(   è è € ÐAÐA°aÐ,°Ð1ÐAÐAÐAÐAÐAÐAr   c              3   óB   K  — | ]}d |                      ¦   «         v V — ŒdS )u   chá»� xÃ¡c thá»±cN)Úlowerr]   s     r   r`   z_TestAutonomousLifecycle.test_telemetry_verifies_hive_fortress_without_travel.<locals>.<genexpr>�   s0   è è € ÐMÐMÀ!Ð0°A·G²G±I´IÐ=ÐMÐMÐMÐMÐMÐMr   N)r   Ú	is_onlineÚ	area_nameÚ	area_codeÚplayerÚlevelr   Úon_telemetry_snapshotr=   r/   r!   r   r   r-   r.   Úregister_listenerr   r"   r$   r9   r   r   r:   Úany)r   ÚsnaprX   s     @r   Ú4test_telemetry_verifies_hive_fortress_without_travelzLTestAutonomousLifecycle.test_telemetry_verifies_hive_fortress_without_travel‰   se  ø€ å‰{Œ{ˆØˆŒØ(ˆŒØ.ˆŒØˆŒÔàŒ×,Ò,¨TÑ2Ô2Ð2Ø�Š˜œÔ7Ñ8Ô8Ð8Ø×Ò˜œÔ9¸?ÑKÔKÐKØ×Ò˜œÔ9Ð;PÑQÔQÐQØ×Ò˜œÔ2Ñ3Ô3Ð3àˆØŒ×(Ò(Ð)PÐ)PÐ)PÐ)PÑQÔQÐQÝ-Ô<ˆŒÔØŒ×3Ò3Ñ5Ô5Ð5Ø×Ò˜Ô)ÔGÔNÑOÔOÐOØ�Š�ÐAÐA¸5ÐAÑAÔAÑAÔAÑBÔBÐBØ×Ò�ÐMÐMÀuÐMÑMÔMÑMÔMÑNÔNÐNÐNÐNr   c                 ó(  ‡— t          ¦   «         }d|_        d|j        _        d|_        d|_        | j                             |¦  «         |                      | j        j	        ¦  «         |  
                    | j        j        d¦  «         dD ]g}||_        | j                             |¦  «         |                      | j        j	        d|› d�¦  «         |  
                    | j        j        d¦  «         Œhg Š| j                             ˆfd„¦  «         t          j        | j        _        | j                             ¦   «          |                      t%          d„ ‰D ¦   «         ¦  «        ¦  «         |                      | j        j        j        ¦  «         d	S )
uQ   area_name rá»—ng / Act 2 / Atlas khÃ´ng Ä‘Æ°á»£c coi lÃ  xÃ¡c thá»±c báº£n Ä‘á»“.Tr2   r,   )rD   rE   rF   ú[DNT] World Mapz	UI scene u    khÃ´ng Ä‘Æ°á»£c xÃ¡c thá»±cc                 ó.   •— ‰                      |¦  «        S rR   rS   rU   s     €r   rY   zZTestAutonomousLifecycle.test_telemetry_empty_or_ui_scene_does_not_verify.<locals>.<lambda>µ   rZ   r   c              3   ó   K  — | ]}d |v V — Œ	dS )u'   chá»� xÃ¡c thá»±c vá»‹ trÃ­ báº£n Ä‘á»“Nr\   r]   s     r   r`   z[TestAutonomousLifecycle.test_telemetry_empty_or_ui_scene_does_not_verify.<locals>.<genexpr>¸   s(   è è € ÐZÐZÈqÐEÈÐJÐZÐZÐZÐZÐZÐZr   N)r   rc   rf   rg   rd   re   r   rh   r-   r/   r!   r   ri   r   r"   r$   r9   r=   rj   r   r   r:   )r   rk   Úui_namerX   s      @r   Ú0test_telemetry_empty_or_ui_scene_does_not_verifyzHTestAutonomousLifecycle.test_telemetry_empty_or_ui_scene_does_not_verifyŸ   s„  ø€ å‰{Œ{ˆØˆŒØˆŒÔàˆŒØˆŒØŒ×,Ò,¨TÑ2Ô2Ð2Ø×Ò˜œÔ8Ñ9Ô9Ð9Ø×Ò˜œÔ9¸2Ñ>Ô>Ð>àFð 	Cð 	CˆGØ$ˆDŒNØŒN×0Ò0°Ñ6Ô6Ð6Ø×ÒØ”Ô/ØA˜GÐAÐAÐAñô ð ð ×Ò˜Tœ^Ô=¸rÑBÔBÐBÐBàˆØŒ×(Ò(Ð)PÐ)PÐ)PÐ)PÑQÔQÐQÝ-Ô<ˆŒÔØŒ×3Ò3Ñ5Ô5Ð5Ø�Š�ÐZÐZÐTYÐZÑZÔZÑZÔZÑ[Ô[Ð[Ø×Ò˜Ô)ÔGÔNÑOÔOÐOÐOÐOr   c                 óT  — t          ¦   «         }d|_        d|_        d|_        d|j        _        | j                             |¦  «         |                      | j        j	        ¦  «         |                      | j        j
        ¦  «         |                      | j        j        d¦  «         dS )ub   Shoreline Hideout tá»« SHM lÃ  thá»‹ tráº¥n Ä‘Ã£ xÃ¡c thá»±c (Ä‘Æ°á»£c phÃ©p travel sau cooldown).TúShoreline HideoutÚHideoutShorelineéA   N)r   rc   rd   re   rf   rg   r   rh   r=   r/   r.   r!   r   ©r   rk   s     r   Ú1test_telemetry_shoreline_hideout_is_verified_townzITestAutonomousLifecycle.test_telemetry_shoreline_hideout_is_verified_town»   s�   € å‰{Œ{ˆØˆŒØ,ˆŒØ+ˆŒØˆŒÔØŒ×,Ò,¨TÑ2Ô2Ð2Ø�Š˜œÔ7Ñ8Ô8Ð8Ø�Š˜œÔ1Ñ2Ô2Ð2Ø×Ò˜œÔ9Ð;NÑOÔOÐOÐOÐOr   c                 ón  — |                       | j                             d¦  «        ¦  «         |                       | j                             d¦  «        ¦  «         |                      | j                             d¦  «        ¦  «         |                      | j                             d¦  «        ¦  «         d S )Nrn   r,   rN   rt   )r=   r   Úis_ui_scener-   r   s    r   Útest_is_ui_scene_dnt_prefixz3TestAutonomousLifecycle.test_is_ui_scene_dnt_prefixÇ   s–   € Ø�Š˜œ×2Ò2Ð3DÑEÔEÑFÔFÐFØ�Š˜œ×2Ò2°2Ñ6Ô6Ñ7Ô7Ð7Ø×Ò˜œ×3Ò3°OÑDÔDÑEÔEÐEØ×Ò˜œ×3Ò3Ð4GÑHÔHÑIÔIÐIÐIÐIr   c                 ó|  ‡‡— g Šg Šˆˆfd„}| j                              |¦  «         t          j        | j         _        | j                              d¦  «         |                      t          ‰¦  «        d¦  «         |                      ‰d         t          j        ¦  «         |                      d‰d         ¦  «         dS )u=   Kiá»ƒm tra viá»‡c phÃ¡t thÃ´ng bÃ¡o cáº­p nháº­t giao diá»‡n.c                 ó\   •— ‰                      | ¦  «         ‰                      |¦  «         d S rR   rS   )r$   rW   Úreceived_phasesÚreceived_textss     €€r   Úsample_listenerzLTestAutonomousLifecycle.test_listeners_notification.<locals>.sample_listenerÒ   s1   ø€ Ø×"Ò" 5Ñ)Ô)Ð)Ø×!Ò! $Ñ'Ô'Ð'Ð'Ð'r   zTest MessagerP   r   N)	r   ri   r   r"   r$   Ú_notify_listenersr!   ÚlenÚassertIn)r   r€   r~   r   s     @@r   Útest_listeners_notificationz3TestAutonomousLifecycle.test_listeners_notificationÍ   sÂ   øø€ àˆØˆð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	Œ×(Ò(¨Ñ9Ô9Ð9Ý-Ô<ˆŒÔØŒ×(Ò(¨Ñ8Ô8Ð8à×Ò�˜_Ñ-Ô-¨qÑ1Ô1Ð1Ø×Ò˜¨Ô+­^Ô-JÑKÔKÐKØ�Š�n n°QÔ&7Ñ8Ô8Ð8Ð8Ð8r   c                 ó  — ddl }ddlm}m} d| j        j        _        t          dg¬¦  «        | j        j	        _
        d| j        _        d| j        _        d| j        _        t          j        | j        _        |j        | j        _        | j                             ¦   «          |                      | j        j        |j        ¦  «         | j                             ¦   «          |                      | j        j        |j        ¦  «         | j                             ¦   «          |                      | j        j        |j        ¦  «         | j                             ¦   «          |                      | j        j        j        ¦  «         |                      | j        j        |j        ¦  «         t          ¦   «         }d|_        d|_        d	|_        |j        |_        | j                              |¦  «         | j                             ¦   «          |                      | j        j        |j!        ¦  «          |j         ¦   «         d
z
  | j        _"        t          ¦   «         }d|_        d|_        d|_        |j        |_        | j                              |¦  «         | j                             ¦   «          |                      | j        j        |j#        ¦  «         | j                             ¦   «          |                      | j        j        d¦  «         dS )uc   Kiá»ƒm thá»­ chu trÃ¬nh EndgameMappingSubState Ä‘á»“ng bá»™ vá»›i CharacterLifecycleState (Doc 58).r   N)r   r   T)r   iÃ  i6  g     €Q@©r   é   ÚSandspitÚMap_Sandspitg      $@rt   ru   rP   )$ÚtimeÚ'src.assistant_tool.autonomous_lifecycler   r   r   Úsend_map_devicer   r   r   Úinventory_scannerÚscan_row1_waystonesÚmax_mapsÚmaps_completedr.   r   r)   r$   ÚHIDEOUT_IDLEÚlifecycle_stateÚ_execute_endgame_earning_stepr!   Úmapping_substateÚPRECHECK_INVENTORYÚSELECT_WAYSTONEÚDISPATCH_MAP_DEVICEr=   r:   ÚWAIT_ZONE_ENTERrc   rd   re   ÚMAP_LOADING_GRACErh   ÚIN_MAP_MONITORINGÚmap_start_timeÚMAP_COMPLETED)r   rŠ   r   r   rk   Úsnap_returns         r   ÚEtest_endgame_earning_state_transitions_with_character_lifecycle_statez]TestAutonomousLifecycle.test_endgame_earning_state_transitions_with_character_lifecycle_stateÞ   s­  € àˆˆˆØkÐkÐkÐkÐkÐkÐkÐkà8<ˆÔÔ(Ô5Ý?HÐWkÐVlÐ?mÑ?mÔ?mˆŒÔ(Ô<Ø"#ˆŒÔØ()ˆŒÔ%Ø$(ˆŒÔ!Ý-Ô=ˆŒÔØ)@Ô)MˆŒÔ&ð 	Œ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ8Ð:PÔ:cÑdÔdÐdð 	Œ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ8Ð:PÔ:`ÑaÔaÐað 	Œ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ8Ð:PÔ:dÑeÔeÐeð 	Œ×4Ò4Ñ6Ô6Ð6Ø�Š˜Ô(Ô8Ô?Ñ@Ô@Ð@Ø×Ò˜œÔ8Ð:PÔ:`ÑaÔaÐaõ ‰{Œ{ˆØˆŒØ#ˆŒØ'ˆŒØ6ÔHˆÔØŒ×,Ò,¨TÑ2Ô2Ð2àŒ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ8Ð:PÔ:bÑcÔcÐcð )2¨¬	©¬°dÑ(:ˆŒÔ%Ý‘k”kˆØ $ˆÔØ 3ˆÔØ 2ˆÔØ&=Ô&JˆÔ#ØŒ×,Ò,¨[Ñ9Ô9Ð9àŒ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ8Ð:PÔ:^Ñ_Ô_Ð_ð 	Œ×4Ò4Ñ6Ô6Ð6Ø×Ò˜œÔ6¸Ñ:Ô:Ð:Ð:Ð:r   c                 óÒ  — t          d¬¦  «        | j        _        t          j        | j        _        t          j        | j        _	        t          j
        ¦   «         dz
  | j        _        d| j        _        d| j        _        d| j        _        | j                             ¦   «          |                      | j        j        j        ¦  «         |                      | j        j        ¦  «         dS )u    Khi á»Ÿ trong Map vÃ  thá»�a mÃ£n Ä‘iá»�u kiá»‡n hoÃ n thÃ nh (quÃ¡i sáº¡ch/timeout/core bÃ¡o), pháº£i tá»± Ä‘á»™ng gá»­i lá»‡nh Town Portal (Key . / Opcode 4).Tr†   g      i@zCreek Tier 15FN)r   r   Úsend_cast_emergency_portalr   r)   r   r$   r   rš   r”   rŠ   r›   Úcurrent_farming_map_namer.   Úportal_exit_triggeredr“   r=   r:   r   s    r   Ú+test_in_map_clear_triggers_town_portal_exitzCTestAutonomousLifecycle.test_in_map_clear_triggers_town_portal_exit  s±   € å6?ÈTÐ6RÑ6RÔ6RˆÔÔ3Ý-Ô=ˆŒÔÝ*@Ô*RˆŒÔ'Ý(,¬	©¬°eÑ(;ˆŒÔ%Ø2AˆŒÔ/Ø$)ˆŒÔ!Ø/4ˆŒÔ,àŒ×4Ò4Ñ6Ô6Ð6Ø�Š˜Ô(ÔCÔJÑKÔKÐKØ�Š˜œÔ<Ñ=Ô=Ð=Ð=Ð=r   c                 óŒ  — t          d¬¦  «        | j        _        t          j        | j        _        t          j        | j        _	        t          j        | j        _        | j                             ¦   «          |                      | j        j        j        ¦  «         |                      | j        j	        t          j        ¦  «         dS )up   Khi C++ Core Ä‘ang trong chu trÃ¬nh Map Device (APPROACH/ACTIVATE/PORTAL), khÃ´ng Ä‘Æ°á»£c gá»­i láº¡i Opcode 7.Tr†   N)r   r   rŒ   r   r)   r   r$   r   r—   r”   r   ÚHIDEOUT_MAP_DEVICE_APPROACHr’   r“   r-   r:   r!   r˜   r   s    r   Ú7test_hideout_map_device_interlock_prevents_opcode7_spamzOTestAutonomousLifecycle.test_hideout_map_device_interlock_prevents_opcode7_spam%  s•   € å+4À$Ð+GÑ+GÔ+GˆÔÔ(Ý-Ô=ˆŒÔÝ*@Ô*TˆŒÔ'Ý)@Ô)\ˆŒÔ&àŒ×4Ò4Ñ6Ô6Ð6à×Ò˜Ô)Ô9Ô@ÑAÔAÐAà×Ò˜œÔ8Õ:PÔ:`ÑaÔaÐaÐaÐar   c                 ój   — t          ¦   «         }d|_        ddddœddddœg|_        || j        _        d	S )
uT   Kiá»ƒm tra trÃ­ch xuáº¥t khoáº£ng cÃ¡ch Map Device tá»« danh sÃ¡ch thá»±c thá»ƒ RAM.Tú
Map Deviceé   g      -@)ÚnameÚtypeÚdistÚZombierP   g      >@N)r   rc   Úentitiesr   Úlast_snapshotrw   s     r   Ú+test_get_map_device_distance_from_telemetryzCTestAutonomousLifecycle.test_get_map_device_distance_from_telemetry2  sH   € å‰{Œ{ˆØˆŒà!¨1°dÐ;Ð;Ø q°$Ð7Ð7ð
ˆŒð *.ˆÔÔ&Ð&Ð&r   c                 ó   — d| j         _        d| j         _        d| j         _        | j                              ¦   «         }|                      |t          j        ¦  «         |                      | j         j        d¦  «         dS )uw   NhÃ¢n váº­t táº¡i Shoreline Hideout ká»ƒ cáº£ khi player_level=1 pháº£i luÃ´n Ä‘Æ°á»£c Ä‘Ã¡nh giÃ¡ lÃ  ENDGAME_EARNING.rP   ÚHideoutrt   rv   N)	r   r   r   r   r    r!   r   r)   ÚassertGreaterEqualr#   s     r   Ú6test_hideout_automatically_detected_as_endgame_earningzNTestAutonomousLifecycle.test_hideout_automatically_detected_as_endgame_earning;  sm   € à&'ˆŒÔ#Ø+4ˆŒÔ(Ø+>ˆŒÔ(à”×-Ò-Ñ/Ô/ˆØ×Ò˜¥Ô >Ñ?Ô?Ð?Ø×Ò ¤Ô ;¸RÑ@Ô@Ð@Ð@Ð@r   c                 óx  — d| j         _        d| j         _        d| j         _        d| j         _        d| j         _        t          j        | j         _        | j          	                    ¦   «          |  
                    | j        j        j        ¦  «         |                      | j         j        t          j        ¦  «         dS )uc   Ä�ang á»Ÿ Hideout thÃ¬ tuyá»‡t Ä‘á»‘i cáº¥m phÃ¡t lá»‡nh send_trigger_world_map_travel tá»›i Act 1.rP   r²   rt   TN)r   r   r   r   r.   r/   r   r"   r$   r9   r-   r   r   r:   r!   r)   r   s    r   Ú.test_hideout_prevents_world_map_travel_to_act1zFTestAutonomousLifecycle.test_hideout_prevents_world_map_travel_to_act1E  s–   € à&'ˆŒÔ#Ø+4ˆŒÔ(Ø+>ˆŒÔ(Ø$(ˆŒÔ!Ø*.ˆŒÔ'Ý-Ô<ˆŒÔàŒ×3Ò3Ñ5Ô5Ð5Ø×Ò˜Ô)ÔGÔNÑOÔOÐOØ×Ò˜œÔ-­~Ô/MÑNÔNÐNÐNÐNr   c                 óì   — | j         j                             ddd¬¦  «        }|                      |j        d¦  «         |                      d|j        ¦  «         |                      |j        d¦  «         dS )	ua   AutoQuester nháº­n diá»‡n Hideout lÃ  Endgame Map Device chá»© khÃ´ng pháº£i Act 1 The Riverbank.r²   rt   rP   )Ú
area_levelÚ
MAP_DEVICEr¨   zThe RiverbankN)	r   r;   Úresolve_active_objectiver!   Úaction_typerƒ   Útarget_nameÚassertNotEqualrd   )r   Úobjs     r   Ú0test_auto_quester_hideout_objective_not_campaignzHTestAutonomousLifecycle.test_auto_quester_hideout_objective_not_campaignR  so   € àŒnÔ$×=Ò=¸iÐI\ÐijÐ=ÑkÔkˆØ×Ò˜œ¨,Ñ7Ô7Ð7Ø�Š�l C¤OÑ4Ô4Ð4Ø×Ò˜CœM¨?Ñ;Ô;Ð;Ð;Ð;r   N)Ú__name__Ú
__module__Ú__qualname__r   r%   r*   r0   r?   rA   rI   rL   rl   rr   rx   r{   r„   rž   r£   r¦   r°   r´   r¶   r¿   r\   r   r   r	   r	      s_  € € € € € ð

ð 

ð 

ð?ð ?ð ?ð@ð @ð @ð?ð ?ð ?ðPð Pð Pð6Pð Pð Pðð ð ð$3ð 3ð 3ð"Oð Oð Oð,Pð Pð Pð8
Pð 
Pð 
PðJð Jð Jð9ð 9ð 9ð"7;ð 7;ð 7;ðr>ð >ð >ðbð bð bð.ð .ð .ðAð Að AðOð Oð Oð<ð <ð <ð <ð <r   r	   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚosÚsysrŠ   ÚunittestÚunittest.mockr   ÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__r‹   r   r   r   r   ÚTestCaser	   rÀ   Úmainr\   r   r   ú<module>r×      s;  ððð ð € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rðð ð ð ð ð ð ð ð ð ð ð ð<ð <ð <ð <ð <˜hÔ/ñ <ô <ð <ðD
 ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   