§
    œª½je  ã            
       ó  — d Z ddlZddlZddlZej                             dej                             ej                             ej                             e	¦  «        d¦  «        ¦  «        ¦  «         ddl
mZmZmZ  G d„ d¦  «        ZdS )z¿
Unit tests for Dynamic Ambush Trigger Engine.
Verifies proximity triggering, once-only activation, and the CRITICAL
PoE2 Safe Haven Firewall rejecting any ambush in Sanctuaries or Hideouts.
é    Nz../../server)ÚWildernessEncounterEngineÚAmbushTriggerÚAmbushTriggerTypec                   ó.   — e Zd Zdd„Zdd„Zdd„Zdd„ZdS )ÚTestAmbushTriggerEngineÚreturnNc                 ó^  — t          ¦   «         }|                     d¦  «        }|€J ‚|d         d         }|                     d|j        |j        dz   |j        dz   ¬¦  «        \  }}}|du sJ ‚d|v sJ ‚t          |¦  «        |j        k    sJ ‚|D ]}|j        dk    sJ ‚|j	        dk    sJ ‚ŒdS )	zEVerifies an ambush triggers when player is within the trigger radius.Úzone_tang_kiem_nhaiNÚambushesr   g      ð?©Úzone_idÚ
trigger_idÚplayer_xÚplayer_yTu
   bÃ¹ng ná»•)
r   Úget_zone_density_specÚcheck_and_trigger_ambushr   ÚxÚyÚlenÚambush_pack_sizeÚmax_hpÚbase_damage)ÚselfÚengineÚspecÚtrigger_defÚokÚmsgÚmobsÚms           ú>C:\Projects\FreeExile\tests\unit\test_ambush_trigger_engine.pyÚ+test_ambush_trigger_activates_within_radiuszCTestAmbushTriggerEngine.test_ambush_trigger_activates_within_radius   sñ   € å*Ñ,Ô,ˆØ×+Ò+Ð,AÑBÔBˆØÐÐÐØ˜:Ô& qÔ)ˆà×7Ò7Ø)Ø"Ô-Ø ”] SÑ(Ø ”] SÑ(ð	 8ñ 
ô 
‰ˆˆC�ð �TˆzˆzˆzˆzØ˜sÐ"Ð"Ð"Ð"Ý�4‰yŒy˜KÔ8Ò8Ð8Ð8Ð8Øð 	%ð 	%ˆAØ”8˜a’<�<�<�<Ø”= 1Ò$Ð$Ð$Ð$Ð$ð	%ð 	%ó    c                 ó  — t          ¦   «         }|                     d¦  «        }|€J ‚|d         d         }|                     d|j        |j        dz   |j        dz   ¬¦  «        \  }}}|du sJ ‚d|v sJ ‚t          |¦  «        dk    sJ ‚dS )	zMVerifies an ambush does not trigger when player is beyond the trigger radius.r
   Nr   r   g      9@r   Fu   vÆ°á»£t quÃ¡ bÃ¡n kÃ­nh©r   r   r   r   r   r   r   )r   r   r   r   r   r   r   s          r!   Ú+test_ambush_trigger_inactive_outside_radiuszCTestAmbushTriggerEngine.test_ambush_trigger_inactive_outside_radius*   s°   € å*Ñ,Ô,ˆØ×+Ò+Ð,AÑBÔBˆØÐÐÐØ˜:Ô& qÔ)ˆà×7Ò7Ø)Ø"Ô-Ø ”] TÑ)Ø ”] TÑ)ð	 8ñ 
ô 
‰ˆˆC�ð �Uˆ{ˆ{ˆ{ˆ{Ø(¨CÐ/Ð/Ð/Ð/Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~ˆ~ˆ~r#   c                 ó˜  — t          ¦   «         }|                     d¦  «        }|€J ‚|d         d         }|                     d|j        |j        |j        ¬¦  «        \  }}}|du sJ ‚t          |¦  «        dk    sJ ‚|                     d|j        |j        |j        ¬¦  «        \  }}}	|du sJ ‚d|v sJ ‚t          |	¦  «        dk    sJ ‚dS )	zEVerifies an ambush can only be activated once and does not duplicate.r
   Nr   r   r   TFu(   Ä‘Ã£ Ä‘Æ°á»£c kÃ­ch hoáº¡t trÆ°á»›c Ä‘Ã³r%   )
r   r   r   r   Úok1Ú_Úmobs1Úok2Úmsg2Úmobs2s
             r!   Ú test_ambush_trigger_is_once_onlyz8TestAmbushTriggerEngine.test_ambush_trigger_is_once_only<   s   € å*Ñ,Ô,ˆØ×+Ò+Ð,AÑBÔBˆØÐÐÐØ˜:Ô& qÔ)ˆð ×7Ò7Ø)Ø"Ô-Ø ”]Ø ”]ð	 8ñ 
ô 
‰ˆˆQ�ð �dˆ{ˆ{ˆ{ˆ{Ý�5‰zŒz˜AŠ~ˆ~ˆ~ˆ~ð "×:Ò:Ø)Ø"Ô-Ø ”]Ø ”]ð	 ;ñ 
ô 
ÑˆˆT�5ð �eˆ|ˆ|ˆ|ˆ|Ø9¸TÐAÐAÐAÐAÝ�5‰zŒz˜QŠˆˆˆˆˆr#   c           	      óî  — t          ¦   «         }t          ddt          j        dddd¬¦  «        }|                     |¦  «         |                     dddd¬¦  «        \  }}}|du sJ ‚d	|v sJ ‚t          |¦  «        d
k    sJ ‚t          ddt          j        dddd¬¦  «        }|                     |¦  «         |                     dddd¬¦  «        \  }}}	|du sJ ‚d	|v sJ ‚t          |	¦  «        d
k    sJ ‚dS )zÔ
        CRITICAL SAFE HAVEN PURITY TEST:
        Any attempt to evaluate or trigger an ambush in zone_player_hideout
        or zone_boundless_sanctuary must immediately abort with Vietnamese rejection.
        Úambush_forbidden_hideoutÚzone_player_hideoutg        g      @é   )r   r   Útrigger_typer   r   Útrigger_radiusr   r   Fu@   NghiÃªm cáº¥m kÃ­ch hoáº¡t phá»¥c kÃ­ch trong khu vá»±c An ToÃ nr   Úambush_forbidden_sanctuaryÚzone_boundless_sanctuaryg      $@é   N)r   r   r   ÚSHRINEÚregister_triggerr   r   ÚCORRUPTED_RIFT)
r   r   Úhideout_triggerÚok_hÚmsg_hÚmobs_hÚsanctuary_triggerÚok_sÚmsg_sÚmobs_ss
             r!   Ú)test_ambush_trigger_failsafe_in_sanctuaryzATestAmbushTriggerEngine.test_ambush_trigger_failsafe_in_sanctuaryX   si  € õ +Ñ,Ô,ˆõ (Ø1Ø)Ý*Ô1ØØØØð
ñ 
ô 
ˆð 	×Ò Ñ0Ô0Ð0à$×=Ò=Ø)Ø1ØØð	 >ñ 
ô 
Ñˆˆe�Vð �uˆ}ˆ}ˆ}ˆ}ØQÐUZÐZÐZÐZÐZÝ�6‰{Œ{˜aÒÐÐÐõ *Ø3Ø.Ý*Ô9ØØØØð
ñ 
ô 
Ðð 	×ÒÐ 1Ñ2Ô2Ð2à$×=Ò=Ø.Ø3ØØð	 >ñ 
ô 
Ñˆˆe�Vð �uˆ}ˆ}ˆ}ˆ}ØQÐUZÐZÐZÐZÐZÝ�6‰{Œ{˜aÒÐÐÐÐÐr#   )r   N)Ú__name__Ú
__module__Ú__qualname__r"   r&   r.   rC   © r#   r!   r   r      sd   € € € € € ð%ð %ð %ð %ð*ð ð ð ð$ð ð ð ð82 ð 2 ð 2 ð 2 ð 2 ð 2 r#   r   )Ú__doc__ÚosÚsysÚpytestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Ú!world.wilderness_encounter_enginer   r   r   r   rG   r#   r!   ú<module>rS      sÜ   ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ðv ð v ð v ð v ð v ñ v ô v ð v ð v ð v r#   