§
    [ÃÀj•>  ã                  ó:  — d Z ddlm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 ddlmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;  G d„ d¦  «        Z< G d„ d¦  «        Z= G d„ d¦  «        Z> G d„ d¦  «        Z? G d„ d¦  «        Z@ G d„ d ¦  «        ZA G d!„ d"¦  «        ZB G d#„ d$¦  «        ZC G d%„ d&¦  «        ZDdS )'uô   Tier 4: Real-World Application Scenarios â€” 8-Step Human Player Journey.
Grounded against authentic server components (AccountRepository, CharacterService,
ZoneEngine, MovementAuthorityEngine, WsGatewayBridge, NpcEngine, ProceduralMapEngine).
é    )ÚannotationsN)ÚAccountRepository)Ú	CharacterÚCharacterClassÚCharacterService)ÚAccountStatus)ÚCombatantType)ÚMonsterScalingEngine)Úeuclidean_distance_2dÚis_within_radius_2d)ÚOPCODE_CAST_MARTIAL_SKILLÚOPCODE_PACKET_ENVELOPEÚOPCODE_PHANTOM_EVASIONÚWsGatewayBridgeÚdecode_binary_frameÚencode_binary_frame)Ú
combat_pb2Únetwork_pb2)ÚTileType)ÚMovementAuthorityEngineÚPlayerCharacter)Úpopulate_canonical_npcs)Ú	NpcEngine)ÚNpcServiceType)ÚProceduralMapEngine)Ú
ZoneEngine)ÚZoneType)ÚBACKPACK_CAPACITYÚCANONICAL_MARTIAL_NAMESÚSAFE_RADIUS_WAYPOINTÚSimulatedCocosPlayerc                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú TestTier4Step1OnboardingAndLoginz/Step 1 (S1): Onboarding & Guest Login (< 50ms).ÚreturnÚNonec                ó$  — t          ¦   «         }t          j        ¦   «         }|                     dt	          j        ¦   «         j        d d…         › d�ddt          j        dg¬¦  «        }t          j        ¦   «         |z
  dz  }d	}||k     }|s—t          j
        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }t          j        }	||	k    }
|
sòt          j
        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}
}	|j        }|j        }
d}	 |
|	¦  «        }|s±ddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |
¦  «        t          j        |	¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}
x}	}d S )NÚguest_é   z@freeexile.lanÚargon2id_guest_hash_simulatedÚ
ExileGuestÚEXILE_PLAYER)ÚemailÚpassword_hashÚusernameÚstatusÚrolesg     @�@g      I@)ú<)z%(py0)s < %(py3)sÚ
elapsed_ms©Úpy0Úpy3úassert %(py5)sÚpy5©ú==©zJ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.ACTIVE
}Úaccr   ©r4   Úpy2Úpy4Úpy6úassert %(py8)sÚpy8Úacc_zlassert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.account_id
}.startswith
}(%(py6)s)
})r4   r=   r>   r?   rA   )r   ÚtimeÚperf_counterÚcreate_accountÚuuidÚuuid4Úhexr   ÚACTIVEÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr/   Ú
account_idÚ
startswith)ÚselfÚrepoÚt0r;   r2   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert7s                 úHC:\Projects\FreeExile\tests\e2e_cocos\test_tier4_human_player_journey.pyÚ)test_t4_s1_guest_login_latency_under_50mszJTestTier4Step1OnboardingAndLogin.test_t4_s1_guest_login_latency_under_50ms/   sH  € Ý Ñ"Ô"ˆÝÔÑ Ô ˆØ×!Ò!Ø?�4œ:™<œ<Ô+¨B¨Q¨BÔ/Ð?Ð?Ð?Ø9Ø!Ý Ô'Ø!Ð"ð "ñ 
ô 
ˆõ Ô'Ñ)Ô)¨BÑ.°&Ñ8ˆ
Ø Ð ˆz˜DÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆz˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆzÑ Ô Ð Õ Ô ˆzÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØŒzÐ1�]Ô1Ð1ˆzÐ1Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆzÐ1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Ð1Õ1Ô1ˆzÑ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�]Ñ1Ô1Ð1Õ1Ô1�]Ñ1Ô1Ð1Ð1Õ1Ô1Ð1Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØŒ~Ð0ˆ~Ô(Ð0¨Ð0Ð(Ð(¨Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆsÑ0Ô0Ð0Õ0Ô0ˆsÑ0Ô0Ð0Ð0Õ0Ô0ˆ~Ñ0Ô0Õ0Ô0Ð(Ñ0Ô0Õ0Ô0¨Ñ0Ô0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ó    c           
     ó  — t          dd¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          j        dt          t          j        ¦   «         dz  ¦  «        d¬¦  «        }t          t          |                     ¦   «         ¦  «        }t#          |¦  «        \  }	}
|	t          k    }|sÑt          j        d|fd|	t          f¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d }t          j        }|j        } ||
¦  «        }|j        }d}||k    }|�s+t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}x}}d S )Nz	127.0.0.1i�  )ÚhostÚportF©Úis)z2%(py2)s
{%(py2)s = %(py0)s.is_running
} is %(py5)sÚbridge©r4   r=   r7   úassert %(py7)sÚpy7é   iè  s   nonce_s1)Úsequence_numberÚtimestamp_msÚnoncer8   ©z%(py0)s == %(py2)sÚopcoder   ©r4   r=   úassert %(py4)sr>   )zš%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.PacketEnvelope
}.FromString
}(%(py5)s)
}.sequence_number
} == %(py12)sr   Úpayload)r4   r=   r>   r7   rk   Úpy9Úpy12úassert %(py14)sÚpy14)r   Ú
is_runningrJ   rK   rL   rM   rN   rO   rP   rQ   r   ÚPacketEnvelopeÚintrC   r   r   ÚSerializeToStringr   Ú
FromStringrm   )rT   rh   rX   Ú@py_assert4r\   rZ   Ú@py_format8ÚenvÚframerq   rt   Ú@py_format3Ú@py_format5Ú@py_assert6Ú@py_assert8Ú@py_assert11Ú@py_assert10Ú@py_format13Ú@py_format15s                      r`   Ú)test_t4_s1_welcome_packet_handshake_statezJTestTier4Step1OnboardingAndLogin.test_t4_s1_welcome_packet_handshake_state>   s¼  € Ý  k¸Ð=Ñ=Ô=ˆØÔ Ð) EÐ)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆvÑ)Ô)Ð)Õ)Ô)ˆvÑ)Ô)Ð)Ð)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ÝÔ(¸ÍÍTÌYÉ[Ì[Ð[_ÑM_ÑI`ÔI`ÐhsÐtÑtÔtˆÝ#Õ$:¸C×<QÒ<QÑ<SÔ<SÑTÔTˆÝ-¨eÑ4Ô4‰ˆ�ØÕ/Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/ˆvÕ/Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/Õ/Ñ/Ô/Ð/Õ/Ô/Õ/Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/ÝÔ)ÐRÐ)Ô4ÐRÐ4Ð4°WÑ=Ô=ÐRÐ=ÔMÐRÐQRÐRÐMÐQRÒRÐRÐRÑRÕRÔRÐRÐRÐRÐRÐMÐQRÐRÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR�{ÑRÔRÐRÕRÔR�{ÑRÔRÐRÐRÕRÔRÐ)ÑRÔRÕRÔRÐ4ÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR°WÑRÔRÐRÕRÔR°WÑRÔRÐRÐRÕRÔRÐ=ÑRÔRÕRÔRÐMÑRÔRÕRÔRÐQRÑRÔRÐRÐRÑRÐRÐRÐRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRrb   N©r$   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ra   rŠ   © rb   r`   r#   r#   ,   sH   € € € € € Ø9Ð9ð1ð 1ð 1ð 1ðSð Sð Sð Sð Sð Srb   r#   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚTestTier4Step2CharacterCreationu?   Step 2 (S2): Character Creation with [ðŸŽ² TÃªn Ngáº«u NhiÃªn].r$   r%   c           
     óZ  — t          t          ¦  «        }d}||k    }|süt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          D �]�}t          j        }|j        } ||¦  «        }	d }
|	|
u}|�st          j        d	|fd
|	|
f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}	x}}
d}t          |¦  «        }	||	k    }d}|	|k    }|r|�st          j        d||fd||	|f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}	}�Œƒd S )Né   r8   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenr   )r4   Úpy1r5   r?   r@   rA   ©úis not©zp%(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.NAME_REGEX
}.match
}(%(py5)s)
} is not %(py10)sr   Úname©r4   r=   r>   r7   rk   Úpy10úassert %(py12)srv   é   é   )ú<=r    )z0%(py1)s <= %(py7)s
{%(py7)s = %(py4)s(%(py5)s)
}z0%(py7)s
{%(py7)s = %(py4)s(%(py5)s)
} <= %(py9)s)r–   r>   r7   rk   ru   úassert %(py11)sÚpy11)r•   r   rJ   rK   rL   rM   rN   rO   rP   rQ   r   Ú
NAME_REGEXÚmatch)rT   rW   r[   r~   r]   r^   rš   rX   r\   r„   Ú@py_assert9r…   Ú@py_format11rˆ   Ú@py_assert0Ú@py_format10Ú@py_format12s                    r`   Ú,test_t4_s2_random_name_dice_button_selectionzLTestTier4Step2CharacterCreation.test_t4_s2_random_name_dice_button_selectionK   sñ  € ÝÕ*Ñ+Ô+Ð1¨rÐ1Ð+¨rÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð+¨rÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�sÑ1Ô1Ð1Õ1Ô1�sÑ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1Õ*Ñ1Ô1Ð1Õ1Ô1Õ*Ñ1Ô1Ð1Ð1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1¨rÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ý+ð 	(ñ 	(ˆDÝ#Ô.ÐFÐ.Ô4ÐFÐ4Ð4°TÑ:Ô:ÐFÀ$ÐFÐ:À$ÐFÐFÐFÑFÕFÔFÐFÐFÐFÐFÐ:À$ÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔFÕ#ÑFÔFÐFÕFÔFÕ#ÑFÔFÐFÐFÕFÔFÐ.ÑFÔFÕFÔFÐ4ÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF°TÑFÔFÐFÕFÔF°TÑFÔFÐFÐFÕFÔFÐ:ÑFÔFÕFÔFÀ$ÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFØÐ'�˜D™	œ	Ð'�1˜	Ò'Ð' RÐ'˜	 RÒ'Ð'Ð'Ð'Ð'Ñ'Õ'Ô'Ð'Ð'Ð'Ð'Ð'�1˜	 RÐ'Ñ'Ô'Õ'Ô'�1Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�Ñ'Ô'Ð'Õ'Ô'�Ñ'Ô'Ð'Ð'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'˜DÑ'Ô'Ð'Õ'Ô'˜DÑ'Ô'Ð'Ð'Õ'Ô'˜	Ñ'Ô'Õ'Ô' RÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ñ'ð	(ð 	(rb   c                ó   — t          dt          j        ¦   «         j        d d…         › �dt          d         t
          j        ddddddd	d
¬¦  «        }g }|j        }d}||k    }|}|r$|j        }d}||k    }	|	}|	r|j	        }
d}|
|k    }|}|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |�r>t          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |	ržt          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t%          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}	x}x}
x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t%          t          j        |¦  «        ¦  «        ‚d x}x}}|j        |j        f}d }||k    }|slt          j        d|fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        d"œz  }d#d$|iz  }t%          t          j        |¦  «        ¦  «        ‚d x}x}}d S )%NÚchar_r”   Úacc_guest_1r   rl   éd   é2   Úzone_boundless_sanctuaryç        ç      $@)Úcharacter_idrR   rš   Ú
class_typeÚlevelÚ
current_hpÚmax_hpÚcurrent_manaÚmax_manaÚcurrent_zone_idÚpos_xÚpos_yr8   )z-%(py4)s
{%(py4)s = %(py2)s.level
} == %(py7)sÚhero©r=   r>   rk   ú%(py9)sru   )z6%(py13)s
{%(py13)s = %(py11)s.current_hp
} == %(py16)s©r¢   Úpy13Úpy16ú%(py18)sÚpy18)z2%(py22)s
{%(py22)s = %(py20)s.max_hp
} == %(py25)s)Úpy20Úpy22Úpy25z%(py27)sÚpy27zassert %(py30)sÚpy30)z7%(py2)s
{%(py2)s = %(py0)s.current_zone_id
} == %(py5)sri   rj   rk   ©r±   r²   ©z%(py1)s == %(py4)s©r–   r>   úassert %(py6)sr?   )r   rF   rG   rH   r   r   ÚSWORD_MASTERrµ   r¶   r·   rJ   rK   rL   rM   rN   rO   ÚappendÚ_format_booloprP   rQ   rº   r»   r¼   )rT   r½   rX   r\   r„   r[   r§   Ú@py_assert12Ú@py_assert15Ú@py_assert14Ú@py_assert21Ú@py_assert24Ú@py_assert23r   r¨   Ú@py_format17Ú@py_format19Ú@py_format26Ú@py_format28Ú@py_format29Ú@py_format31r~   rZ   rW   rƒ   r]   s                             r`   Ú,test_t4_s2_character_archetype_initial_statszLTestTier4Step2CharacterCreation.test_t4_s2_character_archetype_initial_statsQ   sê  € ÝØ8¥¤¡¤Ô!1°#°2°#Ô!6Ð8Ð8Ø$Ý(¨Ô+Ý%Ô2Ø ¨C¸bÈ2Ø6¸cÈð
ñ 
ô 
ˆð 	QÐPˆtŒzÐP˜QÐPˆz˜QŠÐPÐPÐPÐPÐP 4¤?ÐP°cÐP ?°cÒ#9ÐPÐPÐPÐPÐP¸d¼kÐPÈSÐP¸kÈSÒ>PÐPÐPÐPÐPÑPÕPÔPÐPÐPÐPÐPˆz˜QÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔPˆtÑPÔPÐPÕPÔPˆtÑPÔPÐPÐPÕPÔPˆzÑPÔPÕPÔP˜QÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÐP×PÒPÐPÑPÔPÐPÐPÑPÕPÔPÐPÐPÐPÐP ?°cÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔP 4ÑPÔPÐPÕPÔP 4ÑPÔPÐPÐPÕPÔP ?ÑPÔPÕPÔP°cÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÐP×PÒPÐPÑPÔPÐPÐPÐPÕPÔPÐPÐPÐPÐP¸kÈSÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔP¸dÑPÔPÐPÕPÔP¸dÑPÔPÐPÐPÕPÔP¸kÑPÔPÕPÔPÈSÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÐP×PÒPÐPÑPÔPÐPÕPÔPÐPÐPÑPÔPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPØÔ#ÐAÐ'AÐAÐ#Ð'AÒAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ#Ð'AÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAˆtÑAÔAÐAÕAÔAˆtÑAÔAÐAÐAÕAÔAÐ#ÑAÔAÕAÔAÐ'AÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAØ”
˜DœJÐ'Ð6¨;Ð6Ð'¨;Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð'¨;Ð6Ñ6Ô6Õ6Ô6Ð'Ñ6Ô6Õ6Ô6¨;Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6rb   Nr‹   )rŒ   r�   rŽ   r�   rª   rÝ   r�   rb   r`   r’   r’   H   sB   € € € € € ØIÐIð(ð (ð (ð (ð7ð 7ð 7ð 7ð 7ð 7rb   r’   c                  ó"   — e Zd ZdZd	d„Zd	d„ZdS )
Ú)TestTier4Step3SanctuaryArrivalAndMovementz4Step 3 (S3): Sanctuary Arrival & Zero-Residual Stop.Úsimulated_playerr!   r$   r%   c                ó*  — t          ¦   «         }|                     d¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }d} ||¦  «        }d	}	||	u }
|
sÐt          j        d
|
fd||	f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}
}	d\  |_        |_        |j        |_        |j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        |j        f}d}||k    }|slt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr°   r8   )zP%(py2)s
{%(py2)s = %(py0)s.zone_type
} == %(py6)s
{%(py6)s = %(py4)s.SANCTUARY
}Úzoner   r<   r@   rA   Frf   ©z`%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.can_spawn_hostile_monsters
}(%(py4)s)
} is %(py9)sÚze©r4   r=   r>   r?   ru   r¡   r¢   rÊ   ©z/%(py2)s
{%(py2)s = %(py0)s.zone_id
} == %(py5)srà   ri   rj   rk   rË   rÌ   rÍ   r?   )r   Úget_zoneÚ	zone_typer   Ú	SANCTUARYrJ   rK   rL   rM   rN   rO   rP   rQ   Úcan_spawn_hostile_monstersÚwxÚwyÚzone_id)rT   rà   rä   râ   rX   r[   r\   r]   r^   r…   r_   r¨   r©   r~   rZ   r   r§   rW   rƒ   s                      r`   Ú.test_t4_s3_spawn_at_sanctuary_safe_coordinateszXTestTier4Step3SanctuaryArrivalAndMovement.test_t4_s3_spawn_at_sanctuary_safe_coordinatesb   s  € Ý‰\Œ\ˆØ�{Š{Ð5Ñ6Ô6ˆØŒ~Ð3¥Ô!3Ð3ˆ~Ð!3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆ~Ð!3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆtÑ3Ô3Ð3Õ3Ô3ˆtÑ3Ô3Ð3Ð3Õ3Ô3ˆ~Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3¥Ñ3Ô3Ð3Õ3Ô3¥Ñ3Ô3Ð3Ð3Õ3Ô3Ð!3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÔ,ÐQÐ-GÐQÐ,Ð,Ð-GÑHÔHÐQÈEÐQÐHÈEÐQÐQÐQÐQÕQÔQÐQÐQÐQÐQÐHÈEÐQÑQÔQÐQÕQÔQÑQÔQÐQÐQÕQÔQˆrÑQÔQÐQÕQÔQˆrÑQÔQÐQÐQÕQÔQÐ,ÑQÔQÕQÔQÐ-GÑQÔQÕQÔQÐHÑQÔQÕQÔQÈEÑQÔQÐQÐQÑQÐQÐQÐQÐQÐQÑQÐQÕQÕQÔQÐQÑQÔQÑQÔQÐQÐQÐQÐQÐQÐQÐQÐQÐQÐQÐQØ3<Ñ0ÐÔÐ-Ô0Ø#'¤<ÐÔ ØÔ'ÐEÐ+EÐEÐ'Ð+EÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ'Ð+EÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEÐÑEÔEÐEÕEÔEÐÑEÔEÐEÐEÕEÔEÐ'ÑEÔEÕEÔEÐ+EÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEØ Ô#Ð%5Ô%8Ð9ÐH¸[ÐHÐ9¸[ÒHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐ9¸[ÐHÑHÔHÕHÔHÐ9ÑHÔHÕHÔH¸[ÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHrb   c                ó  — t          ¦   «         }t          dddd¬¦  «        }|                     |¦  «         |                     dddd¦  «        \  }}}g }|}|r
d}	||	k    }
|
}|�s&dd	d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
iz  }| 	                    |¦  «         |r‹t          j
        d|
fd||	f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }| 	                    |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}
}	t          ¦   «         }|                     ddd¦  «        \  }}}g }| }|}|r
d}||k    }	|	}|�s&dd	dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndiz  }| 	                    |¦  «         |r‹t          j
        d|	fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }| 	                    |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}	}|                     ddd¦  «        \  }}}g }|}|rd}	||	k    }
|
}|
r
d}||k    }|}|�s´dd	dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndiz  }| 	                    |¦  «         |�rt          j
        d |
fd!||	f¦  «        d"t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd"t          j        |	¦  «        dœz  }dd|iz  }| 	                    |¦  «         |
r‹t          j
        d |fd#||f¦  «        d$t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$t          j        |¦  «        d%œz  }d&d'|iz  } | 	                    | ¦  «         t          j        |d¦  «        i z  }!d(d)|!iz  }"t          t          j        |"¦  «        ¦  «        ‚d x}x}x}
x}	x}}|                     ddd¬*¦  «         g }|j        }d}	||	k    }
|
}|
r|j        }d}#||#k    }$|$}|�s~t          j
        d |
fd+||	f¦  «        d,t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,t          j        |¦  «        t          j        |	¦  «        d-œz  }dd|iz  }| 	                    |¦  «         |
ržt          j
        d |$fd.||#f¦  «        d,t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,t          j        |¦  «        t          j        |#¦  «        d/œz  } d0d1| iz  }%| 	                    |%¦  «         t          j        |d¦  «        i z  }"d2d3|"iz  }&t          t          j        |&¦  «        ¦  «        ‚d x}x}x}x}
x}	x}x}$}#|j        }d4}'||'k    }|sªt          j
        d |fd5||'f¦  «        d,t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,t          j        |¦  «        t          j        |'¦  «        d6œz  }(d7d8|(iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}'d S )9Néé  r±   r²   g      @)Ú	entity_idÚxÚyÚ
move_speedç      ð?çü©ñÒMb�?ú%(py2)sr=   Úok©ú>)z%(py4)s > %(py7)sÚnx©r>   rk   r¿   ru   r   r�   rv   znot %(py2)sÚhalted)z%(py5)s > %(py8)sÚvx)r7   rA   ú%(py10)srœ   zassert %(py13)srÁ   g¸…ëQ¸ž?g{®Gáz¤?Úhalted_stopr8   ©z%(py4)s == %(py7)sÚvx_stop©z%(py11)s == %(py14)sÚvy_stop©r¢   rx   ú%(py16)srÂ   úassert %(py19)sÚpy19)Údt)z*%(py4)s
{%(py4)s = %(py2)s.vx
} == %(py7)srà   r¾   )z.%(py13)s
{%(py13)s = %(py11)s.vy
} == %(py16)srÀ   rÃ   rÄ   úassert %(py21)sÚpy21Úidle)z2%(py2)s
{%(py2)s = %(py0)s.anim_state
} == %(py5)sri   rj   rk   )r   r   Úregister_playerÚprocess_move_inputrL   rM   rJ   rN   rO   rÏ   rK   rÐ   rP   rQ   r   Úverify_zero_residual_momentumÚapply_inputrþ   ÚvyÚ
anim_state))rT   rà   ÚmaeÚplayerrø   rû   ÚnyrX   r§   r„   r[   r‚   r   r¨   r¦   rˆ   rh   rý   rþ   r  r\   r_   rY   r^   r©   Ú@py_format14r   r  r  Ú@py_assert13rÑ   r‰   r×   Ú@py_format18Ú@py_format20rÒ   rÓ   rØ   Ú@py_format22r~   rZ   s)                                            r`   Ú2test_t4_s3_firm_kinematics_instant_stop_on_releasez\TestTier4Step3SanctuaryArrivalAndMovement.test_t4_s3_firm_kinematics_instant_stop_on_releasel   s0	  € Ý%Ñ'Ô'ˆÝ ¨4°3¸$È3ÐOÑOÔOˆØ×Ò˜FÑ#Ô#Ð#Ø×+Ò+¨D°#°s¸EÑBÔB‰
ˆˆB�ØÐˆrÐˆrÐ˜3Ð�b˜3’hÐÐÐÐÑÐÐÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÐÑÐÐ×ÒÐÑÔÐˆrÐÕÔÐÐÐÐ�b˜3ÐÑÔÐÕÔÑÔÐÐÕÔ�bÑÔÐÕÔ�bÑÔÐÐÕÔ˜3ÑÔÐÐÑÐÐÐÐÐÑÐÐ×ÒÐÑÔÐÕÔÐÐÑÔÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐå Ñ"Ô"ˆØ×=Ò=¸dÀCÈÑMÔM‰ˆ��BØ&Ð&�6ˆzÐ&ˆzÐ&ˆzÐ& 3Ð&˜b 3šhÐ&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�6Ñ&Ô&Ð&Õ&Ô&�6Ñ&Ô&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&ˆzÐ&Õ&Ô&Ð&Ð&Ð&Ð&˜b 3Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜bÑ&Ô&Ð&Õ&Ô&˜bÑ&Ô&Ð&Ð&Õ&Ô& 3Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Õ&Ô&Ð&Ð&Ñ&Ô&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&à(.×(LÒ(LÈTÐSWÐY]Ñ(^Ô(^Ñ%ˆ�W˜gØ@Ð@ˆ{Ð@ˆ{Ð@¨#Ð@˜w¨#š~Ð@Ð@Ð@Ð@Ð@¸SÐ@°'¸S².Ð@Ð@Ð@Ð@Ñ@Ð@Ð@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆ{Ñ@Ô@Ð@Õ@Ô@ˆ{Ñ@Ô@Ð@Ð@Ð@Ñ@Ð@Ð@×@Ò@Ð@Ñ@Ô@Ð@ˆ{Ñ@Õ@Ô@Ð@Ð@Ð@Ð@˜w¨#Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@˜wÑ@Ô@Ð@Õ@Ô@˜wÑ@Ô@Ð@Ð@Õ@Ô@¨#Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@×@Ò@Ð@Ñ@Ô@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@°'¸SÐ@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@°'Ñ@Ô@Ð@Õ@Ô@°'Ñ@Ô@Ð@Ð@Õ@Ô@¸SÑ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@×@Ò@Ð@Ñ@Ô@Ð@Õ@Ô@Ð@Ð@Ñ@Ô@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø×$Ò$ S¨#°%Ð$Ñ8Ô8Ð8ØHÐHÐÔ"ÐH cÐHÐ" cÒ)ÐHÐHÐHÐHÐHÐ.>Ô.AÐHÀSÐHÐ.AÀSÒ.HÐHÐHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ" cÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHÐÑHÔHÐHÕHÔHÐÑHÔHÐHÐHÕHÔHÐ"ÑHÔHÕHÔH cÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÐH×HÒHÐHÑHÔHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐ.AÀSÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHÐ.>ÑHÔHÐHÕHÔHÐ.>ÑHÔHÐHÐHÕHÔHÐ.AÑHÔHÕHÔHÀSÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÐH×HÒHÐHÑHÔHÐHÕHÔHÐHÐHÑHÔHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHØÔ*Ð4¨fÐ4Ð*¨fÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð*¨fÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð*Ñ4Ô4Õ4Ô4¨fÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4rb   N©rà   r!   r$   r%   )rŒ   r�   rŽ   r�   rî   r  r�   rb   r`   rß   rß   _   sF   € € € € € Ø>Ð>ðIð Ið Ið Ið5ð 5ð 5ð 5ð 5ð 5rb   rß   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚTestTier4Step4NPCInteractionsz<Step 4 (S4): 4 Encampment NPC Interactions & Service Modals.r$   r%   c                ó’  — t          ¦   «         }t          |¦  «         |                     d¦  «        }h d£}|j        }d„ |D ¦   «         } ||¦  «        }|sžddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|D �]H}|j        |v �r;|j        }|j        }d}	||	z   }
|j        } |||
|¦  «        }|�s~dd	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |	¦  «        d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœ	z  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}	x}
x}}|                     d|j        d|j        dz   |j        ¬¦  «        \  }}}}g }|}|rd }||u}|}|�s&dddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndiz  }|                     |¦  «         |r‹t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}|                     d¦  «         �ŒJd S )Nr°   >   Únpc_bach_hieu_sinhÚnpc_chan_vo_truyen_thuaÚnpc_thiet_tuong_au_da_tuÚnpc_van_gioi_thuong_nhanc                ó   — h | ]	}|j         ’Œ
S r�   )Únpc_id)Ú.0Únpcs     r`   ú	<setcomp>zdTestTier4Step4NPCInteractions.test_t4_s4_pathfinding_and_dialogue_with_all_4_npcs.<locals>.<setcomp>†   s   € Ð%KÐ%KÐ%K°S c¤jÐ%KÐ%KÐ%Krb   zJassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.issubset
}(%(py4)s)
}Úexpected_idsr<   rõ   z°assert %(py14)s
{%(py14)s = %(py2)s
{%(py2)s = %(py0)s.validate_interaction_distance
}(%(py3)s, (%(py6)s
{%(py6)s = %(py4)s.x
} + %(py8)s), %(py12)s
{%(py12)s = %(py10)s.y
})
}Ú
npc_enginer'  )	r4   r=   r5   r>   r?   rA   rœ   rv   rx   Ú	player_j1©Ú	player_idr%  rí   Úplayer_xÚplayer_yr÷   r=   rø   r—   ©z%(py4)s is not %(py7)sÚnoderü   r¿   ru   r   r�   rv   )r   r   Úget_npcs_in_zoneÚissubsetrL   rM   rJ   rN   rO   rP   rQ   r%  Úvalidate_interaction_distancerò   ró   Úinteract_with_npcrÏ   rK   rÐ   Úclose_dialogue_session)rT   r*  Úsanctuary_npcsr)  rX   r\   r[   r]   r'  r_   r¥   r†   r  r‰   rø   Ú_r1  r§   r„   r‚   r   r¨   r¦   rˆ   s                           r`   Ú3test_t4_s4_pathfinding_and_dialogue_with_all_4_npcszQTestTier4Step4NPCInteractions.test_t4_s4_pathfinding_and_dialogue_with_all_4_npcs�   sÜ  € Ý‘[”[ˆ
Ý 
Ñ+Ô+Ð+Ø#×4Ò4Ð5OÑPÔPˆð Að  Að  AˆØÔ$ÐLÐ%KÐ%K¸NÐ%KÑ%KÔ%KÐLÐ$Ð$Ð%KÑLÔLÐLÐLÐLÐLÐLÕLÔLÑLÔLÐLÐLÕLÔLˆ|ÑLÔLÐLÕLÔLˆ|ÑLÔLÐLÐLÕLÔLÐ$ÑLÔLÕLÔLÐ%KÑLÔLÕLÔLÐLÑLÔLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLà!ð 	?ñ 	?ˆCØŒz˜\Ð)Ñ)Ø!Ô?ÐXÀSÄUÐXÈSÐXÀUÈSÁ[ÐXÐRUÔRWÐXÐ?Ð?ÀÀ[ÐRWÑXÔXÐXÐXÑXÐXÐXÕXÔXÑXÔXÐXÐXÕXÔX�zÑXÔXÐXÕXÔX�zÑXÔXÐXÐXÕXÔXÐ?ÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔXÀÑXÔXÐXÕXÔXÀÑXÔXÐXÐXÐXÕXÔXÑXÔXÐXÐXÕXÔXÀSÑXÔXÐXÕXÔXÀSÑXÔXÐXÐXÕXÔXÀUÑXÔXÕXÔXÈSÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔXÐRUÑXÔXÐXÕXÔXÐRUÑXÔXÐXÐXÕXÔXÐRWÑXÔXÕXÔXÐXÑXÔXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXØ!+×!=Ò!=Ø)°#´*Ø6ÀÄÈÁÐWZÔW\ð ">ñ "ô "‘��A�t˜Qð /Ð.�rÐ.�rÐ.¨$Ð.˜d¨$Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�rÑ.Ô.Ð.Õ.Ô.�rÑ.Ô.Ð.Ð.Ð.Ñ.Ð.Ð.×.Ò.Ð.Ñ.Ô.Ð.�rÐ.Õ.Ô.Ð.Ð.Ð.Ð.˜d¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜dÑ.Ô.Ð.Õ.Ô.˜dÑ.Ô.Ð.Ð.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.×.Ò.Ð.Ñ.Ô.Ð.Õ.Ô.Ð.Ð.Ñ.Ô.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø×1Ò1°+Ñ>Ô>Ð>ùð	?ð 	?rb   c                ó$  — t          ¦   «         }t          |¦  «         |                     d¦  «        }g }d }||u}|}|rt          j        }|j        }||v }	|	}|�s³t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
dd|
iz  }|                     |¦  «         |ræt          j        d|	fd	||f¦  «        d
t          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd
t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	}|                     ddd|j        |j        ¬¦  «        \  }}}}g }|}|rd }||u}|}|�s&dddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndiz  }|                     |¦  «         |r‹t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d„ |j        D ¦   «         }g }t)          |¦  «        }d}||k    }|}|r|d         }	|	j        }d }||k    }|}|�s›t          j        d!|fd"||f¦  «        d#t          j	        ¦   «         v st          j
        t(          ¦  «        rt          j        t(          ¦  «        nd#d$t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd$t          j        |¦  «        t          j        |¦  «        d%œz  }d&d'|iz  }|                     |¦  «         |rst          j        d!|fd(||f¦  «        t          j        |	¦  «        t          j        |¦  «        t          j        |¦  «        d)œz  }d*d|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d+d,|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}	x}x}}|                     d¦  «         d S )-Nr"  r—   ©z%(py2)s is not %(py5)sÚsmith©r=   r7   ú%(py7)srk   ©Úin)zc%(py11)s
{%(py11)s = %(py9)s.CRAFTING_FORGE
} in %(py15)s
{%(py15)s = %(py13)s.supported_services
}r   )ru   r¢   rÁ   Úpy15ú%(py17)sÚpy17r   úassert %(py20)srÅ   r+  r°   r,  r÷   r=   rø   r0  r1  rü   r¿   ru   r�   rv   c                ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r�   )Útrigger_servicer   ÚCRAFTING_FORGE)r&  Úcs     r`   ú
<listcomp>zcTestTier4Step4NPCInteractions.test_t4_s4_service_tab_transition_clean_execution.<locals>.<listcomp>œ   s(   € ÐgÐgÐg˜q°AÔ4EÍÔIfÒ4fÐ4f˜Ð4fÐ4fÐ4frb   rl   Úchoice_open_forger8   ©z0%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
} == %(py8)sr•   Úforge_choices©r=   r5   r7   rA   rÿ   rœ   )z5%(py15)s
{%(py15)s = %(py13)s.choice_id
} == %(py18)s)rÁ   rA  rÄ   z%(py20)szassert %(py23)sÚpy23)r   r   Úget_npcr   rG  Úsupported_servicesrJ   rK   rL   rM   rN   rO   rÏ   rÐ   rP   rQ   r5  rò   ró   Úchoicesr•   Ú	choice_idr6  ) rT   r*  r<  rX   r~   r\   r§   r‡   rÓ   rÑ   rZ   r   Ú@py_format16r  rØ   Ú@py_format21rø   r8  r1  r„   r[   r‚   r¨   r¦   rˆ   rL  r_   Ú@py_assert17Ú@py_assert16r^   r  Ú@py_format24s                                    r`   Ú1test_t4_s4_service_tab_transition_clean_executionzOTestTier4Step4NPCInteractions.test_t4_s4_service_tab_transition_clean_execution’   s£  € Ý‘[”[ˆ
Ý 
Ñ+Ô+Ð+Ø×"Ò"Ð#=Ñ>Ô>ˆØ^Ð^˜DÐ^ˆu˜DÐ Ð^Ð^Ð^Ð^Ð^¥^Ô%BÐ^ÀeÔF^Ð^Ð%BÐF^Ð%^Ð^Ð^Ð^Ð^Ñ^Õ^Ô^Ð^Ð^Ð^Ð^ˆu˜DÐ^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^ˆuÑ^Ô^Ð^Õ^Ô^ˆuÑ^Ô^Ð^Ð^Õ^Ô^˜DÑ^Ô^Ð^Ð^Ñ^Ð^Ð^Ð^Ð^Ð^Ñ^Ð^Ð^×^Ò^Ð^Ñ^Ô^Ð^Ð^Ð^Õ^Ô^Ð^Ð^Ð^Ð^Ð%BÐF^Ð^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^¥^Ñ^Ô^Ð^Õ^Ô^¥^Ñ^Ô^Ð^Ð^Õ^Ô^Ð%BÑ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^ÀeÑ^Ô^Ð^Õ^Ô^ÀeÑ^Ô^Ð^Ð^Õ^Ô^ÐF^Ñ^Ô^Ð^Ð^Ñ^Ð^Ð^Ð^Ð^Ð^Ñ^Ð^Ð^×^Ò^Ð^Ñ^Ô^Ð^Õ^Ô^Ð^Ð^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ø#×5Ò5Ø!Ð*DØ.¸¼È5Ì7ð 6ñ 
ô 
‰ˆˆAˆt�Qð 	'Ð&ˆrÐ&ˆrÐ& $Ð&�d $Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆrÑ&Ô&Ð&Õ&Ô&ˆrÑ&Ô&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&ˆrÐ&Õ&Ô&Ð&Ð&Ð&Ð&�d $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�dÑ&Ô&Ð&Õ&Ô&�dÑ&Ô&Ð&Ð&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Õ&Ô&Ð&Ð&Ñ&Ô&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØgÐg D¤LÐgÑgÔgˆØ\Ð\�s�=Ñ!Ô!Ð\ QÐ\Ð! QÒ&Ð\Ð\Ð\Ð\Ð\¨=¸Ô+;Ð\Ð+;Ô+EÐ\ÐI\Ð\Ð+EÐI\Ò+\Ð\Ð\Ð\Ð\Ñ\Õ\Ô\Ð\Ð\Ð\Ð\Ð! QÐ\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�sÑ\Ô\Ð\Õ\Ô\�sÑ\Ô\Ð\Ð\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�=Ñ\Ô\Ð\Õ\Ô\�=Ñ\Ô\Ð\Ð\Õ\Ô\Ð!Ñ\Ô\Õ\Ô\ QÑ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Ð\×\Ò\Ð\Ñ\Ô\Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\Ð+EÐI\Ð\Ñ\Ô\Õ\Ô\Ð+;Ñ\Ô\Õ\Ô\Ð+EÑ\Ô\Õ\Ô\ÐI\Ñ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Ð\×\Ò\Ð\Ñ\Ô\Ð\Õ\Ô\Ð\Ð\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ø×)Ò)¨+Ñ6Ô6Ð6Ð6Ð6rb   Nr‹   )rŒ   r�   rŽ   r�   r9  rX  r�   rb   r`   r  r  ~   sB   € € € € € ØFÐFð?ð ?ð ?ð ?ð"7ð 7ð 7ð 7ð 7ð 7rb   r  c                  ó"   — e Zd ZdZd	d„Zd
d„ZdS )ÚTestTier4Step5TargetDummyCombatz1Step 5 (S5): Combat Feel Testing at Target Dummy.r$   r%   c                óf
  — t          ¦   «         }|                     dddd¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}t          ¦   «         }t          j        dddd¬¦  «        t          j        dddd¬¦  «        t          j        dddd¬¦  «        g}	d}
|
d}}|	D �]{}t          t          |                     ¦   «         ¦  «        }t!          |¦  «        \  }}|t          k    }|sÑt          j        d|fd|t          f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d }t          j        |j        dd|j        z   d|j        z   t          j        j        ¬¦  «        }||j        z  }t/          d||j        z
  ¦  «        }�Œ}g }d}||k    }|}|r|
|z
  }||k    }|}|r
d}||k    }|}|�sOt          j        d|fd||f¦  «        d t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd t          j        |¦  «        d!œz  }d"d#|iz  }|                     |¦  «         |�r�t          j        d|fd$||f¦  «        d%t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd%d&t	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nd&d t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd d'œz  }d(d)|iz  }|                     |¦  «         |r‹t          j        d|fd*||f¦  «        d%t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd%t          j        |¦  «        d+œz  }d,d-|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d.d/|iz  } t          t          j	        | ¦  «        ¦  «        ‚d x}x}x}x}x}x}x}}d S )0Nr°   Tr   )Úis_dummyÚtxÚtyrf   )z%(py0)s is %(py3)sÚdummy_okr3   r6   r7   rð   ée   g      @)Úcaster_entity_idÚskill_idÚtarget_xÚtarget_yéf   ég   i€8 r8   rp   Úopr   rr   rs   r>   i'  é´   é–   )Úsource_entity_idÚtarget_entity_idÚ
raw_damageÚmitigated_damageÚelementrl   rù   )z%(py2)s > %(py5)sÚ	total_dmgr=  r>  rk   )z %(py9)s == (%(py11)s - %(py12)s)r¶   Údummy_max_hp)ru   r¢   rv   z%(py15)srA  )z%(py17)s > %(py20)s)rC  rÅ   z%(py22)srÆ   zassert %(py25)srÇ   )r   Úvalidate_monster_spawnrJ   rK   rL   rM   rN   rO   rP   rQ   r   r   ÚCastMartialSkillRequestr   r   r|   r   ÚCombatDamageEventra  rb  ÚFiveElementsTypeÚELEMENT_PHYSICAL_KIMrm  ÚmaxrÏ   rÐ   )!rT   rä   r_  r8  rW   rX   rY   rZ   rh   Úskillsrp  r¶   ro  Úskillr�   rg  r‚   rƒ   Údmg_evtr~   r\   r§   r  r‡   Ú@py_assert19Ú@py_assert18r   r  rS  rT  Ú@py_format23rW  rÙ   s!                                    r`   Ú*test_t4_s5_target_dummy_qwe_combo_rotationzJTestTier4Step5TargetDummyCombat.test_t4_s5_target_dummy_qwe_combo_rotation¤   s  € Ý‰\Œ\ˆØ×/Ò/Ð0JÐUYÐ^_ÐdeÐ/ÑfÔf‰ˆ�!ØÐˆx˜4ÐÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐå Ñ"Ô"ˆåÔ.ÀÈsÐ]`ÐknÐoÑoÔoÝÔ.ÀÈsÐ]`ÐknÐoÑoÔoÝÔ.ÀÈsÐ]`ÐknÐoÑoÔoð
ˆð
 ˆØ ,¨a�Iˆ
Øð 
	Gñ 
	GˆEÝ'Õ(AÀ5×CZÒCZÑC\ÔC\Ñ]Ô]ˆEÝ'¨Ñ.Ô.‰EˆB�ØÕ2Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2�2Õ2Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�2Ñ2Ô2Ð2Õ2Ô2�2Ñ2Ô2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2Õ2Ñ2Ô2Ð2Õ2Ô2Õ2Ñ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ý Ô2Ø!&Ô!7È$Ø ¤Ñ/À#ÈÌÑBVÝ"Ô3ÔHðñ ô ˆGð
 ˜Ô1Ñ1ˆIÝ˜Q 
¨WÔ-EÑ EÑFÔFˆJ‰JàZÐZ˜1ÐZˆy˜1Š}ÐZÐZÐZÐZÐZ¨|¸iÑ/GÐZ Ð/GÒ!GÐZÐZÐZÐZÐZÐYZÐZÈJÐYZÊNÐZÐZÐZÐZÑZÕZÔZÐZÐZÐZÐZˆy˜1ÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZˆyÑZÔZÐZÕZÔZˆyÑZÔZÐZÐZÕZÔZ˜1ÑZÔZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÐZ×ZÒZÐZÑZÔZÐZÐZÑZÕZÔZÐZÐZÐZÐZ Ð/GÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZ ÑZÔZÐZÕZÔZ ÑZÔZÐZÐZÐZÕZÔZÑZÔZÐZÐZÕZÔZ¨|ÑZÔZÐZÕZÔZ¨|ÑZÔZÐZÐZÐZÕZÔZÑZÔZÐZÐZÕZÔZ¸iÑZÔZÐZÕZÔZ¸iÑZÔZÐZÐZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÐZ×ZÒZÐZÑZÔZÐZÐZÐZÕZÔZÐZÐZÐZÐZÈJÐYZÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZÈJÑZÔZÐZÕZÔZÈJÑZÔZÐZÐZÕZÔZÐYZÑZÔZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÐZ×ZÒZÐZÑZÔZÐZÕZÔZÐZÐZÑZÔZÐZÑZÐZÐZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZrb   rà   r!   c                ó  — t          j        ddd¬¦  «        }t          t          |                     ¦   «         ¦  «        }t          |¦  «        \  }}|t          k    }|sÑt          j        d|fd|t          f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndd	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d }d|_        |                     ¦   «          g }|j        }	d}
|	|
k    }|}|r|j        }d}||u }|}|�s~t          j        d|fd|	|
f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }|                     |¦  «         |ržt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	x}x}
x}x}}d S )Nrð   rõ   r±   )rñ   Úevasion_dir_xÚevasion_dir_yr8   rp   rg  r   rr   rs   r>   Úattack_slashÚdodgeT)z2%(py4)s
{%(py4)s = %(py2)s.anim_state
} == %(py7)srà   r¾   r¿   ru   rf   )z5%(py13)s
{%(py13)s = %(py11)s.is_iframe
} is %(py16)srÀ   rÃ   rÄ   r   r
  r  )r   ÚPhantomEvasionRequestr   r   r|   r   rJ   rK   rL   rM   rN   rO   rP   rQ   r  Útrigger_dodgeÚ	is_iframerÏ   rÐ   )rT   rà   Úeva_reqr�   rg  r8  rX   r‚   rƒ   r\   r„   r[   r§   rÑ   rÒ   rÓ   r   r¨   r×   rØ   r  r  s                         r`   Ú0test_t4_s5_iframe_dodge_cancels_attack_animationzPTestTier4Step5TargetDummyCombat.test_t4_s5_iframe_dodge_cancels_attack_animation¿   sz  € ÝÔ2¸TÐQTÐdgÐhÑhÔhˆÝ#Õ$:¸G×<UÒ<UÑ<WÔ<WÑXÔXˆÝ# EÑ*Ô*‰ˆˆAØÕ+Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆrÕ+Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆrÑ+Ô+Ð+Õ+Ô+ˆrÑ+Ô+Ð+Ð+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+Õ+Ñ+Ô+Ð+Õ+Ô+Õ+Ñ+Ô+Ð+Ð+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ø&4ÐÔ#Ø×&Ò&Ñ(Ô(Ð(Ø\Ð\ÐÔ*Ð\¨gÐ\Ð*¨gÒ5Ð\Ð\Ð\Ð\Ð\Ð:JÔ:TÐ\ÐX\Ð\Ð:TÐX\Ð:\Ð\Ð\Ð\Ð\Ñ\Õ\Ô\Ð\Ð\Ð\Ð\Ð*¨gÐ\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\ÐÑ\Ô\Ð\Õ\Ô\ÐÑ\Ô\Ð\Ð\Õ\Ô\Ð*Ñ\Ô\Õ\Ô\¨gÑ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Ð\×\Ò\Ð\Ñ\Ô\Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\Ð:TÐX\Ð\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\Ð:JÑ\Ô\Ð\Õ\Ô\Ð:JÑ\Ô\Ð\Ð\Õ\Ô\Ð:TÑ\Ô\Õ\Ô\ÐX\Ñ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Ð\×\Ò\Ð\Ñ\Ô\Ð\Õ\Ô\Ð\Ð\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\rb   Nr‹   r  )rŒ   r�   rŽ   r�   r}  r‡  r�   rb   r`   rZ  rZ  ¡   sL   € € € € € Ø;Ð;ð[ð [ð [ð [ð6]ð ]ð ]ð ]ð ]ð ]rb   rZ  c                  ó"   — e Zd ZdZd	d„Zd	d„ZdS )
ÚTestTier4Step6DungeonEntryzBStep 6 (S6): Dungeon Entry with Waypoint Safe Radius & Fog of War.rà   r!   r$   r%   c                óš  — t          ¦   «         }|                     d¦  «        }|j        }t          j        t          j        f}||v }|sªt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }d} ||¦  «        }	d}
|	|
u }|sÐt          j        d	|fd
|	|
f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	x}}
|j        |_        d\  |_        |_        |j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NÚzone_tang_kiem_nhair?  )z1%(py2)s
{%(py2)s = %(py0)s.zone_type
} in %(py5)sÚdungeon_zoneri   rj   rk   Trf   rã   rä   rå   r¡   r¢   )r±   r±   r8   ræ   rà   )r   rç   rè   r   Ú
OPEN_WORLDÚDUNGEON_INSTANCErJ   rK   rL   rM   rN   rO   rP   rQ   rê   rí   rë   rì   )rT   rà   rä   rŒ  rX   r~   r\   rZ   r   r[   r…   r_   r¨   r©   s                 r`   Ú0test_t4_s6_dungeon_transition_and_tile_grid_loadzKTestTier4Step6DungeonEntry.test_t4_s6_dungeon_transition_and_tile_grid_loadÌ   s:  € Ý‰\Œ\ˆØ—{’{Ð#8Ñ9Ô9ˆØÔ%ÐY­(Ô*=½xÔ?XÐ)YÐYÐ%Ð)YÐYÐYÐYÐYÕYÔYÐYÐYÐYÐYÐ%Ð)YÐYÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔYˆ|ÑYÔYÐYÕYÔYˆ|ÑYÔYÐYÐYÕYÔYÐ%ÑYÔYÕYÔYÐ)YÑYÔYÐYÐYÑYÐYÐYÐYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYÐYÐYØÔ,ÐKÐ-BÐKÐ,Ð,Ð-BÑCÔCÐKÀtÐKÐCÀtÐKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐCÀtÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆrÑKÔKÐKÕKÔKˆrÑKÔKÐKÐKÕKÔKÐ,ÑKÔKÕKÔKÐ-BÑKÔKÕKÔKÐCÑKÔKÕKÔKÀtÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKØ#/Ô#7ÐÔ Ø3;Ñ0ÐÔÐ-Ô0ØÔ'Ð@Ð+@Ð@Ð'Ð+@Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð'Ð+@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ÐÑ@Ô@Ð@Õ@Ô@ÐÑ@Ô@Ð@Ð@Õ@Ô@Ð'Ñ@Ô@Õ@Ô@Ð+@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@rb   c                ó 
  — t          ¦   «         }|                     d¦  «        }|j        }t          |¦  «        }d}||k    }|�st	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd	|iz  }	t          t	          j        |	¦  «        ¦  «        ‚d x}x}x}}t          t          |j                             ¦   «         ¦  «        ¦  «        }
|
j        d
z   |
j        d
z   c|_        |_        t'          |j        |j        |
j        |
j        ¦  «        }|j        }|j        }|
j        }|
j        }|
j        }t+          |||||¦  «        }|�sddt          j        ¦   «         v st	          j        t*          ¦  «        rt	          j	        t*          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |
¦  «        rt	          j	        |
¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |
¦  «        rt	          j	        |
¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |
¦  «        rt	          j	        |
¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}}|
j        }||k    }|sÕt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddt          j        ¦   «         v st	          j        |
¦  «        rt	          j	        |
¦  «        ndt	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}}d S )Nr°   r   rù   )zN%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.waypoints
})
} > %(py8)sr•   râ   )r4   r–   r5   r7   rA   zassert %(py10)srœ   g       @z×assert %(py17)s
{%(py17)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.wx
}, %(py6)s
{%(py6)s = %(py4)s.wy
}, %(py9)s
{%(py9)s = %(py7)s.x
}, %(py12)s
{%(py12)s = %(py10)s.y
}, %(py15)s
{%(py15)s = %(py13)s.safe_radius
})
}r   rà   Úwp)r4   r–   r5   r>   r?   rk   ru   rœ   rv   rÁ   rA  rC  )r    )z3%(py0)s <= %(py4)s
{%(py4)s = %(py2)s.safe_radius
}Údist)r4   r=   r>   rÍ   r?   )r   rç   Ú	waypointsr•   rJ   rK   rL   rM   rN   rO   rP   rQ   ÚnextÚiterÚvaluesrò   ró   rë   rì   r   Úsafe_radiusr   )rT   rà   rä   râ   rW   r~   r_   r„   r^   r¦   r‘  r’  r[   r…   r†   rÓ   rV  r  r\   rX   rƒ   r]   s                         r`   Ú2test_t4_s6_waypoint_safe_radius_hostile_protectionzMTestTier4Step6DungeonEntry.test_t4_s6_waypoint_safe_radius_hostile_protectionÕ   s  € Ý‰\Œ\ˆØ�{Š{Ð5Ñ6Ô6ˆØ”>Ð&�s�>Ñ"Ô"Ð& QÐ&Ð" QÒ&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&Ð" QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�sÑ&Ô&Ð&Õ&Ô&�sÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�4Ñ&Ô&Ð&Õ&Ô&�4Ñ&Ô&Ð&Ð&Õ&Ô&�>Ñ&Ô&Õ&Ô&Ð"Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ý•$�t”~×,Ò,Ñ.Ô.Ñ/Ô/Ñ0Ô0ˆØ35´4¸#±:¸r¼tÀc¹zÐ0ÐÔÐ-Ô0Ý$Ð%5Ô%8Ð:JÔ:MÈrÌtÐUWÔUYÑZÔZˆØ#3Ô#6ÐhÐ8HÔ8KÐhÈRÌTÐhÐSUÔSWÐhÐY[ÔYgÐhÕ"Ð#6Ð8KÈTÐSWÐYgÑhÔhÐhÐhÑhÐhÐhÕhÔhÑhÔhÐhÐhÕhÔhÕ"ÑhÔhÐhÕhÔhÕ"ÑhÔhÐhÐhÐhÕhÔhÑhÔhÐhÐhÕhÔhÐ#3ÑhÔhÐhÕhÔhÐ#3ÑhÔhÐhÐhÕhÔhÐ#6ÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔhÐ8HÑhÔhÐhÕhÔhÐ8HÑhÔhÐhÐhÕhÔhÐ8KÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔhÈRÑhÔhÐhÕhÔhÈRÑhÔhÐhÐhÕhÔhÈTÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔhÐSUÑhÔhÐhÕhÔhÐSUÑhÔhÐhÐhÕhÔhÐSWÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔhÐY[ÑhÔhÐhÕhÔhÐY[ÑhÔhÐhÐhÕhÔhÐYgÑhÔhÕhÔhÐhÑhÔhÐhÐhÑhÐhÕhÕhÔhÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhÐhÐhÐhÐhÐhÐhÐhÐhØ”~Ð%ˆt�~Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆt�~Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�rÑ%Ô%Ð%Õ%Ô%�rÑ%Ô%Ð%Ð%Õ%Ô%�~Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%rb   Nr  )rŒ   r�   rŽ   r�   r�  r˜  r�   rb   r`   r‰  r‰  É   sF   € € € € € ØLÐLðAð Að Að Að&ð &ð &ð &ð &ð &rb   r‰  c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚTestTier4Step7BossGateUnlockingz-Step 7 (S7): 3-Pack Kill Boss Gate Unlocking.r$   r%   c           	     óÂ  — t          j        ¦   «          t          j        dd¬¦  «        }t          j        d|¦  «         |j        }d }||u}|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        \  }}|j        |         |         }	|	j        }
t          j        }|
|k    }|sÇt          j        d
|fd|
|f¦  «        t          j
        |	¦  «        t          j
        |
¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}	x}
x}}g }|j        |         |         }
|
j        }| }|}	|r|j        }| }|}	|	sïdt          j
        |
¦  «        t          j
        |¦  «        dœz  }|                     |¦  «         |rlddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}	x}x}
x}x}x}}t          ¦   «         }|j        } ||¦  «        }d}||u }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t           ¦  «        rt          j
        t           ¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}g }|j        }|}	|r"|j        |         |         }|j        }d}||u }|}	|	�s!ddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }|                     |¦  «         |rst          j        d|fd ||f¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        d!œz  }d"d|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d#d$|iz  }t          t          j        |¦  «        ¦  «        ‚d x}	x}x}x}x}x}}d S )%Nr‹  r`  ©Úseedr—   )z5%(py2)s
{%(py2)s = %(py0)s.boss_gate
} is not %(py5)sÚmap_datari   rj   rk   r8   )zP%(py3)s
{%(py3)s = %(py1)s.tile_type
} == %(py7)s
{%(py7)s = %(py5)s.BOSS_GATE
}r   )r–   r5   r7   rk   úassert %(py9)sru   z)not %(py5)s
{%(py5)s = %(py3)s.walkable
})r5   r7   z5not %(py10)s
{%(py10)s = %(py8)s.boss_gate_breached
})rA   rœ   r   rw   rx   Trf   )zn%(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s()
}.breach_boss_gate
}(%(py5)s)
} is %(py10)sr   r›   r�   rv   z/%(py4)s
{%(py4)s = %(py2)s.boss_gate_breached
})r=   r>   )z1%(py9)s
{%(py9)s = %(py7)s.walkable
} is %(py12)s)rk   ru   rv   z%(py14)szassert %(py17)srC  )r   Úclear_zone_mapsÚgenerate_wilderness_mapÚset_zone_mapÚ	boss_gaterJ   rK   rL   rM   rN   rO   rP   rQ   ÚtilesÚ	tile_typer   Ú	BOSS_GATEÚwalkableÚboss_gate_breachedrÏ   rÐ   Úbreach_boss_gate)rT   rž  rX   r~   r\   rZ   r   ÚgxÚgyr§   rW   r„   r¨   r¥   r†   r]   r©   rˆ   r‰   r…   r¦   r‡   rƒ   rS  r  s                            r`   Ú,test_t4_s7_pack_kills_unlock_runic_boss_gatezLTestTier4Step7BossGateUnlocking.test_t4_s7_pack_kills_unlock_runic_boss_gateã   sÒ  € ÝÔ+Ñ-Ô-Ð-Ý&Ô>Ð?TÐ[^Ð_Ñ_Ô_ˆÝÔ(Ð)>ÀÑIÔIÐIØÔ!Ð-¨Ð-Ð!¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð!¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Ð-Õ-Ô-Ð!Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ#‰ˆˆBØŒ~˜bÔ! "Ô%ÐEÐ%Ô/ÐEµ8Ô3EÐEÐ/Ð3EÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ/Ð3EÐEÑEÔEÕEÔEÐ%ÑEÔEÕEÔEÐ/ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEµ8ÑEÔEÐEÕEÔEµ8ÑEÔEÐEÐEÕEÔEÐ3EÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEØVÐV�8”> "Ô% bÔ)ÐVÐ)Ô2ÐVÐ2Ð2ÐVÐ2ÐVÐ2ÐV¸8Ô;VÐVÐ;VÐ7VÐVÐ7VÐVÐVÐVÐVÕVÔVÐ)ÑVÔVÕVÔVÐ2ÑVÔVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÐ2ÐVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔV¸8ÑVÔVÐVÕVÔV¸8ÑVÔVÐVÐVÕVÔVÐ;VÑVÔVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÕVÔVÐVÐVÑVÔVÐVÑVÐVÐVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÝ"Ñ$Ô$ÐGÐ$Ô5ÐGÐ5Ð5°hÑ?Ô?ÐGÀ4ÐGÐ?À4ÐGÐGÐGÑGÕGÔGÐGÐGÐGÐGÐ?À4ÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGÕ"ÑGÔGÐGÕGÔGÕ"ÑGÔGÐGÐGÕGÔGÐ$ÑGÔGÕGÔGÐ5ÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG°hÑGÔGÐGÕGÔG°hÑGÔGÐGÐGÕGÔGÐ?ÑGÔGÕGÔGÀ4ÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGØVÐVˆxÔ*ÐVÐ*ÐVÐ*ÐV¨x¬~¸bÔ/AÀ"Ô/EÐVÐ/EÔ/NÐVÐRVÐVÐ/NÐRVÐ/VÐVÐVÐVÐVÑVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔVˆxÑVÔVÐVÕVÔVˆxÑVÔVÐVÐVÕVÔVÐ*ÑVÔVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÐ*ÐVÕVÔVÐVÐVÐVÐVÐ/NÐRVÐVÑVÔVÕVÔVÐ/EÑVÔVÕVÔVÐ/NÑVÔVÕVÔVÐRVÑVÔVÐVÐVÑVÐVÐVÐVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÕVÔVÐVÐVÑVÔVÐVÑVÐVÐVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVrb   c                óÎ  — t           j                             d¦  «        }g }d }||u}|}|r|j        }d}||u }|}|�skt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dœz  }	dd|	iz  }
| 
                    |
¦  «         |ržt	          j        d	|fd
||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }| 
                    |¦  «         t	          j        |d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}|j        rdnd}d}||v }|s—t	          j        d|fd||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }	t          t	          j        |	¦  «        ¦  «        ‚d x}}d S )Nr‹  Tr—   r;  rž  r=  r>  rk   rf   )z=%(py11)s
{%(py11)s = %(py9)s.boss_gate_breached
} is %(py14)s)ru   r¢   rx   r  rÂ   r   r  r  u<   [PHONG áº¤N Ä�Ãƒ GIáº¢I] Lá»‘i vÃ o Huyáº¿t Ä�Ã n Ä‘Ã£ má»Ÿ.ÚLOCKEDu   PHONG áº¤N Ä�Ãƒ GIáº¢Ir?  )z%(py1)s in %(py3)sÚbanner)r–   r5   r6   r7   )r   Ú_active_zone_mapsÚgetr¨  rJ   rK   rL   rM   rN   rO   rÏ   rÐ   rP   rQ   )rT   rž  rX   r~   r\   r§   r‡   r  rÑ   rZ   r   r‰   r×   r  r  r¯  rW   rY   s                     r`   Ú4test_t4_s7_proximity_banner_lore_updates_to_unsealedzTTestTier4Step7BossGateUnlocking.test_t4_s7_proximity_banner_lore_updates_to_unsealedî   sù  € Ý&Ô8×<Ò<Ð=RÑSÔSˆØKÐK˜tÐKˆx˜tÐ#ÐKÐKÐKÐKÐK¨Ô(CÐKÀtÐKÐ(CÀtÐ(KÐKÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKˆx˜tÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆxÑKÔKÐKÕKÔKˆxÑKÔKÐKÐKÕKÔK˜tÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÐK×KÒKÐKÑKÔKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐ(CÀtÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK¨ÑKÔKÐKÕKÔK¨ÑKÔKÐKÐKÕKÔKÐ(CÑKÔKÕKÔKÀtÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÐK×KÒKÐKÑKÔKÐKÕKÔKÐKÐKÑKÔKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKØS[ÔSnÐ|ÐOÐOÐt|ˆØ'Ð1Ð'¨6Ð1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð'¨6Ð1Ñ1Ô1Õ1Ô1Ð'Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨6Ñ1Ô1Ð1Õ1Ô1¨6Ñ1Ô1Ð1Ð1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1rb   Nr‹   )rŒ   r�   rŽ   r�   r¬  r²  r�   rb   r`   rš  rš  à   sF   € € € € € Ø7Ð7ð	Wð 	Wð 	Wð 	Wð2ð 2ð 2ð 2ð 2ð 2rb   rš  c                  ó"   — e Zd ZdZd	d„Zd
d„ZdS )Ú"TestTier4Step8BossExecutionAndLootzBStep 8 (S8): Strand Executioner Boss Kill & 40-Slot Backpack Loot.r$   r%   c                ó
  — t          ¦   «         }|                     dt          j        ¬¦  «        }g }|j        }d}||k    }|}|r|j        }t          j        }	||	k    }
|
}|�sÆt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }|                     |¦  «         |ræt          j        d
|
fd||	f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}
}	t!          d|j        |j        z
  ¦  «        |_        |j        }d}||k    }|sªt          j        d
|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}g d¢}g }t%          |¦  «        }d}||k    }|}|rd}||v }
|
}|�s³t          j        d
|fd||f¦  «        dt          j	        ¦   «         v st          j
        t$          ¦  «        rt          j        t$          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }|                     |¦  «         |r‹t          j        d!|
fd"||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndd#œz  }d$d%|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d&d'|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}
d S )(Né   ©rµ   Úranké˜:  rù   )z/%(py4)s
{%(py4)s = %(py2)s.max_life
} > %(py7)sÚboss_defr¾   r¿   ru   r8   )zV%(py13)s
{%(py13)s = %(py11)s.combatant_type
} == %(py17)s
{%(py17)s = %(py15)s.BOSS
}r	   )r¢   rÁ   rA  rC  z%(py19)sr  r   zassert %(py22)srÆ   r±   ©z4%(py2)s
{%(py2)s = %(py0)s.current_life
} == %(py5)sri   rj   rk   )Úblood_soul_orbÚnether_bone_nailÚblood_reaper_scytherž   r¾  rK  r•   ÚdropsrM  rÿ   rœ   r?  )z%(py13)s in %(py15)s)rÁ   rA  rB  rC  rD  rÅ   )r
   Úcreate_monster_defenser	   ÚBOSSÚmax_lifeÚcombatant_typerJ   rK   rL   rM   rN   rO   rÏ   rÐ   rP   rQ   rv  Úcurrent_lifer•   )rT   Úscalingrº  rX   r\   r„   r[   r§   rÑ   rV  rÓ   r   r¨   r  r  rT  r|  r~   rZ   r¿  r_   r^   r¦   rS  rØ   s                            r`   Ú1test_t4_s8_boss_execution_and_fountain_dispersionzTTestTier4Step8BossExecutionAndLoot.test_t4_s8_boss_execution_and_fountain_dispersionø   sÕ  € Ý&Ñ(Ô(ˆØ×1Ò1¸ÅÔASÐ1ÑTÔTˆØZÐZˆxÔ ÐZ 5ÐZÐ  5Ò(ÐZÐZÐZÐZÐZ¨XÔ-DÐZÍÔHZÐZÐ-DÐHZÒ-ZÐZÐZÐZÐZÑZÕZÔZÐZÐZÐZÐZÐ  5ÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZˆxÑZÔZÐZÕZÔZˆxÑZÔZÐZÐZÕZÔZÐ ÑZÔZÕZÔZ 5ÑZÔZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÐZ×ZÒZÐZÑZÔZÐZÐZÐZÕZÔZÐZÐZÐZÐZÐ-DÐHZÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZ¨XÑZÔZÐZÕZÔZ¨XÑZÔZÐZÐZÕZÔZÐ-DÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZÍÑZÔZÐZÕZÔZÍÑZÔZÐZÐZÕZÔZÐHZÑZÔZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÐZ×ZÒZÐZÑZÔZÐZÕZÔZÐZÐZÑZÔZÐZÑZÐZÐZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÝ # C¨Ô)>ÀÔARÑ)RÑ SÔ SˆÔØÔ$Ð+¨Ð+Ð$¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð$¨Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Ð+Õ+Ô+Ð$Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØMÐMÐMˆØAÐA�s�5‰zŒzÐA˜QÐAˆz˜QŠÐAÐAÐAÐAÐAÐ#8ÐAÐ#8¸EÐ#AÐAÐAÐAÐAÑAÕAÔAÐAÐAÐAÐAˆz˜QÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔA�sÑAÔAÐAÕAÔA�sÑAÔAÐAÐAÐAÕAÔAÑAÔAÐAÐAÕAÔA�5ÑAÔAÐAÕAÔA�5ÑAÔAÐAÐAÕAÔAˆzÑAÔAÕAÔA˜QÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ#8¸EÐAÑAÔAÕAÔAÐ#8ÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔA¸EÑAÔAÐAÕAÔA¸EÑAÔAÐAÐAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAÕAÔAÐAÐAÑAÔAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐArb   rà   r!   c                óÜ  — |                      dddœ¦  «        \  }}g }|}|r
d}||k    }|}|�s&dddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndiz  }|                     |¦  «         |r‹t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }	dd|	iz  }
|                     |
¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}|j        d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}d S )Nr¾  ÚMYTHIC©ÚidÚrarityr   r÷   r=   Úsuccessr8   r  Úslot_idxrü   r¿   ru   r�   rv   rË  rË   rÌ   rÍ   r?   )Úadd_to_inventoryrL   rM   rJ   rN   rO   rÏ   rK   rÐ   rP   rQ   Ú	inventory)rT   rà   rÌ  rÍ  rX   r§   r„   r[   r‚   r   r¨   r¦   rˆ   r\   rW   rƒ   r]   s                    r`   Ú,test_t4_s8_smart_pickup_into_backpack_slot_0zOTestTier4Step8BossExecutionAndLoot.test_t4_s8_smart_pickup_into_backpack_slot_0  sb  € Ø,×=Ò=ÐEZÐfnÐ>oÐ>oÑpÔpÑˆ�Ø(Ð(ˆwÐ(ˆwÐ( qÐ(˜8 qš=Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(ˆwÐ(Õ(Ô(Ð(Ð(Ð(Ð(˜8 qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜8Ñ(Ô(Ð(Õ(Ô(˜8Ñ(Ô(Ð(Ð(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(Õ(Ô(Ð(Ð(Ñ(Ô(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ)¨!Ô,¨XÔ6ÐB¸(ÐBÐ6¸(ÒBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ6¸(ÐBÑBÔBÕBÔBÐ6ÑBÔBÕBÔB¸(ÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBrb   Nr‹   r  )rŒ   r�   rŽ   r�   rÆ  rÐ  r�   rb   r`   r´  r´  õ   sL   € € € € € ØLÐLðBð Bð Bð BðCð Cð Cð Cð Cð Crb   r´  c                  ó"   — e Zd ZdZd	d„Zd	d„ZdS )
Ú(TestTier4ContinuousPlayerJourneySymphonyz2Tier 4: Full Continuous 8-Step Symphony Execution.rà   r!   r$   r%   c                ó¨$  — t          ¦   «         }|                     dddt          j        ¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          d         }	t          j        }|j        } ||	¦  «        }
d }|
|u}|�st          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |	¦  «        rt          j
        |	¦  «        ndt          j
        |
¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}
x}}t#          d|j        › �|j        |	t&          j        ¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t-          ¦   «         }|                     d¦  «        }|j        }|j        } ||¦  «        }
d}|
|u }|�st          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |
¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}
x}}d \  |_        |_        t9          ¦   «         }|                     d!d"d"¦  «        \  }}}g }|}|rd"}
||
k    }|}|r
d"}||k    }|}|�s´d#d$d%t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd%iz  }|                     |¦  «         |�rt          j        d|fd&||
f¦  «        d't          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd't          j
        |
¦  «        d(œz  }d)d*|iz  }|                     |¦  «         |r‹t          j        d|fd+||f¦  «        d,t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd,t          j
        |¦  «        d-œz  }d.d/|iz  }|                     |¦  «         t          j        |d0¦  «        i z  } d1d2| iz  }!t          t          j        |!¦  «        ¦  «        ‚d x}x}x}x}
x}}|                      d"d"d3¦  «         |j!        }d"}||k    }|sªt          j        d|fd4||f¦  «        d5t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd5t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}tE          ¦   «         }"tG          |"¦  «         |" $                    d6¦  «        }#d }$|#|$u}|s—t          j        d|fd7|#|$f¦  «        d8t          j        ¦   «         v st          j	        |#¦  «        rt          j
        |#¦  «        nd8t          j
        |$¦  «        d9œz  }%d:d;|%iz  }t          t          j        |¦  «        ¦  «        ‚d x}}$|"j%        }|#j&        }|#j'        } ||#||¦  «        }&|&�skd<d=t          j        ¦   «         v st          j	        |"¦  «        rt          j
        |"¦  «        nd=t          j
        |¦  «        d8t          j        ¦   «         v st          j	        |#¦  «        rt          j
        |#¦  «        nd8d8t          j        ¦   «         v st          j	        |#¦  «        rt          j
        |#¦  «        nd8t          j
        |¦  «        d8t          j        ¦   «         v st          j	        |#¦  «        rt          j
        |#¦  «        nd8t          j
        |¦  «        t          j
        |&¦  «        d>œz  }'t          t          j        |'¦  «        ¦  «        ‚d x}x}x}}&| (                    ¦   «          |j)        }|sxd?d5t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd5t          j
        |¦  «        d@œz  }t          t          j        |¦  «        ¦  «        ‚d }| *                    dA¦  «         |j)        }| }|sxdBd5t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd5t          j
        |¦  «        d@œz  }%t          t          j        |%¦  «        ¦  «        ‚d x}}|                     dC¦  «        }(|j        }|(j        } ||¦  «        }
|
sÜdDdt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dEt          j        ¦   «         v st          j	        |(¦  «        rt          j
        |(¦  «        ndEt          j
        |¦  «        t          j
        |
¦  «        dFœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}
|(j        d"d"c|_        |_        |_        |j        }dC}||k    }|sªt          j        d|fdG||f¦  «        d5t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd5t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}tW          j,        |(j        dH¬I¦  «        })g }tW          ¦   «         }|j-        } ||)¦  «        }|}|r	|)j.        }|}|�sˆdJdKt          j        ¦   «         v st          j	        tV          ¦  «        rt          j
        tV          ¦  «        ndKt          j
        |¦  «        t          j
        |¦  «        dLt          j        ¦   «         v st          j	        |)¦  «        rt          j
        |)¦  «        ndLt          j
        |¦  «        dMœz  }|                     |¦  «         |rldNdLt          j        ¦   «         v st          j	        |)¦  «        rt          j
        |)¦  «        ndLt          j
        |¦  «        dOœz  }*|                     |*¦  «         t          j        |d0¦  «        i z  }dPd/|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}}t_          ¦   «          0                    dQtb          j2        ¬R¦  «        }+|+j3        }dS}||k    }|sªt          j        dT|fdU||f¦  «        dVt          j        ¦   «         v st          j	        |+¦  «        rt          j
        |+¦  «        ndVt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d"|+_4        |+j4        }d"}||k    }|sªt          j        d|fdW||f¦  «        dVt          j        ¦   «         v st          j	        |+¦  «        rt          j
        |+¦  «        ndVt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}| 5                    dXdYdZœ¦  «        \  },}-g }|,}|,r
d0}
|-|
k    }|}|�s&d#d$d[t          j        ¦   «         v st          j	        |,¦  «        rt          j
        |,¦  «        nd[iz  }|                     |¦  «         |,r‹t          j        d|fd&|-|
f¦  «        d\t          j        ¦   «         v st          j	        |-¦  «        rt          j
        |-¦  «        nd\t          j
        |
¦  «        d(œz  }d)d*|iz  }|                     |¦  «         t          j        |d0¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}
d S )]Nzsymphony@freeexile.lanÚpw_hashÚExileSymr8   r:   r;   r   r<   r@   rA   rl   r—   r™   r   Ú	char_namer›   r�   rv   r¬   )z-%(py2)s
{%(py2)s = %(py0)s.level
} == %(py5)sÚcharri   rj   rk   r°   Frf   )z~%(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.can_spawn_hostile_monsters
}(%(py5)s
{%(py5)s = %(py3)s.zone_id
})
} is %(py10)srä   Ú	sanctuary)r4   r=   r5   r7   rk   rœ   rÊ   rð   r±   r÷   r=   rý   r  rþ   rü   r¿   ru   r  r  r  r  rÂ   r   r  r  rö   )z*%(py2)s
{%(py2)s = %(py0)s.vx
} == %(py5)srà   r   )z%(py0)s is not %(py3)sÚtrackerr3   r6   r7   z¡assert %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.validate_interaction_distance
}(%(py3)s, %(py6)s
{%(py6)s = %(py4)s.x
}, %(py9)s
{%(py9)s = %(py7)s.y
})
}r*  )r4   r=   r5   r>   r?   rk   ru   r¢   z-assert %(py2)s
{%(py2)s = %(py0)s.is_iframe
}rr   g¤p=
×£Ð?z1assert not %(py2)s
{%(py2)s = %(py0)s.is_iframe
}r‹  zyassert %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.can_spawn_hostile_monsters
}(%(py5)s
{%(py5)s = %(py3)s.zone_id
})
}Údungeon)r4   r=   r5   r7   rk   ræ   ix  rœ  zb%(py9)s
{%(py9)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s()
}.breach_boss_gate
}(%(py7)s)
}r   rž  )r=   r>   r?   rk   ru   z2%(py13)s
{%(py13)s = %(py11)s.boss_gate_breached
})r¢   rÁ   zassert %(py16)sr¶  r·  r¹  rù   )z/%(py2)s
{%(py2)s = %(py0)s.max_life
} > %(py5)srº  r»  Úboss_trophyrÈ  rÉ  rÌ  rÍ  )6r   rE   r   rI   r/   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r   r£   r¤   r   rR   r   rÎ   rµ   r   rç   rê   rí   rë   rì   r   r  rÏ   rÐ   r  rþ   r   r   rO  r4  rò   ró   r„  r…  Úupdate_timersr   r¡  r©  r¨  r
   rÀ  r	   rÁ  rÂ  rÄ  rÎ  ).rT   rà   rU   r;   rX   r[   r\   r]   r^   rÖ  r„   r¥   r…   r¦   rˆ   r×  r~   rZ   r   rä   rØ  rh   rý   rþ   r  r§   r  rÑ   r‚   r¨   r‰   r×   r  r  r*  rÙ  rW   rY   r‡   r©   rÚ  rž  r  rº  rÌ  rÍ  s.                                                 r`   Ú0test_t4_continuous_8_step_journey_state_chainingzYTestTier4ContinuousPlayerJourneySymphony.test_t4_continuous_8_step_journey_state_chaining
  sH  € å Ñ"Ô"ˆØ×!Ò!Ð":¸IÀzÕS`ÔSgÑhÔhˆØŒzÐ1�]Ô1Ð1ˆzÐ1Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆzÐ1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Ð1Õ1Ô1ˆzÑ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�]Ñ1Ô1Ð1Õ1Ô1�]Ñ1Ô1Ð1Ð1Õ1Ô1Ð1Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1õ ,¨AÔ.ˆ	ÝÔ*ÐGÐ*Ô0ÐGÐ0Ð0°Ñ;Ô;ÐGÀ4ÐGÐ;À4ÐGÐGÐGÑGÕGÔGÐGÐGÐGÐGÐ;À4ÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGÕÑGÔGÐGÕGÔGÕÑGÔGÐGÐGÕGÔGÐ*ÑGÔGÕGÔGÐ0ÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG°ÑGÔGÐGÕGÔG°ÑGÔGÐGÐGÕGÔGÐ;ÑGÔGÕGÔGÀ4ÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÝÐ1 ¤Ð1Ð1°3´>À9ÍnÔNiÑjÔjˆØŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐõ ‰\Œ\ˆØ—K’KÐ :Ñ;Ô;ˆ	ØÔ,ÐH¨YÔ->ÐHÐ,Ð,Ð->Ñ?Ô?ÐHÀ5ÐHÐ?À5ÐHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ?À5ÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆrÑHÔHÐHÕHÔHˆrÑHÔHÐHÐHÕHÔHÐ,ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH¨YÑHÔHÐHÕHÔH¨YÑHÔHÐHÐHÕHÔHÐ->ÑHÔHÕHÔHÐ?ÑHÔHÕHÔHÀ5ÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHØ3<Ñ0ÐÔÐ-Ô0Ý Ñ"Ô"ˆØ×=Ò=¸dÀCÈÑMÔM‰ˆ��BØ1Ð1ˆvÐ1ˆvÐ1 Ð1˜" š)Ð1Ð1Ð1Ð1Ð1¨cÐ1¨¨cª	Ð1Ð1Ð1Ð1Ñ1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Ð1Ð1Ñ1Ð1Ð1×1Ò1Ð1Ñ1Ô1Ð1ˆvÑ1Õ1Ô1Ð1Ð1Ð1Ð1˜" Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1˜"Ñ1Ô1Ð1Õ1Ô1˜"Ñ1Ô1Ð1Ð1Õ1Ô1 Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Ð1×1Ò1Ð1Ñ1Ô1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1¨¨cÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨Ñ1Ô1Ð1Õ1Ô1¨Ñ1Ô1Ð1Ð1Õ1Ô1¨cÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Ð1×1Ò1Ð1Ñ1Ô1Ð1Õ1Ô1Ð1Ð1Ñ1Ô1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø×$Ò$ S¨#¨uÑ5Ô5Ð5ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)õ ‘[”[ˆ
Ý 
Ñ+Ô+Ð+Ø×$Ò$Ð%9Ñ:Ô:ˆØ"Ð"ˆw˜dÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆw˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Ð"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÔ7ÐVÀÄÐVÈGÌIÐVÐ7Ð7¸ÀÈIÑVÔVÐVÐVÑVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔVˆzÑVÔVÐVÕVÔVˆzÑVÔVÐVÐVÕVÔVÐ7ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV¸ÑVÔVÐVÕVÔV¸ÑVÔVÐVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔVÀÑVÔVÐVÕVÔVÀÑVÔVÐVÐVÕVÔVÀÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔVÈGÑVÔVÐVÕVÔVÈGÑVÔVÐVÐVÕVÔVÈIÑVÔVÕVÔVÐVÑVÔVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVð 	×&Ò&Ñ(Ô(Ð(ØÔ)Ð)Ð)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð)Ñ)Ô)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ø×&Ò& tÑ,Ô,Ð,Ø#Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Ð-Õ-Ô-Ð-Ñ-Ô-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-ð —+’+Ð3Ñ4Ô4ˆØÔ,Ð=¨W¬_Ð=Ð,Ð,¨_Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=ˆrÑ=Ô=Ð=Õ=Ô=ˆrÑ=Ô=Ð=Ð=Õ=Ô=Ð,Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=¨WÑ=Ô=Ð=Õ=Ô=¨WÑ=Ô=Ð=Ð=Õ=Ô=¨_Ñ=Ô=Õ=Ô=Ð=Ñ=Ô=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ØMTÌ_Ð^aÐcfÐJÐÔ Ð"2Ô"5Ð7GÔ7JØÔ'Ð@Ð+@Ð@Ð'Ð+@Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð'Ð+@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ÐÑ@Ô@Ð@Õ@Ô@ÐÑ@Ô@Ð@Ð@Õ@Ô@Ð'Ñ@Ô@Õ@Ô@Ð+@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@õ 'Ô>¸w¼ÐUXÐYÑYÔYˆØ_Ð_Õ"Ñ$Ô$Ð_Ð$Ô5Ð_Ð5Ð5°hÑ?Ô?Ð_Ð?Ð_Ð?Ð_ÀHÔD_Ð_ÐD_Ð_Ð_Ñ_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_Õ"Ñ_Ô_Ð_Õ_Ô_Õ"Ñ_Ô_Ð_Ð_Õ_Ô_Ð$Ñ_Ô_Õ_Ô_Ð5Ñ_Ô_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_°hÑ_Ô_Ð_Õ_Ô_°hÑ_Ô_Ð_Ð_Õ_Ô_Ð?Ñ_Ô_Ð_Ð_Ñ_Ð_Ð_×_Ò_Ð_Ñ_Ô_Ð_Ð?Ð_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ÀHÑ_Ô_Ð_Õ_Ô_ÀHÑ_Ô_Ð_Ð_Õ_Ô_ÐD_Ñ_Ô_Ð_Ð_Ñ_Ð_Ð_×_Ò_Ð_Ñ_Ô_Ð_Õ_Ô_Ð_Ð_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_õ (Ñ)Ô)×@Ò@ÀrÕP]ÔPbÐ@ÑcÔcˆØÔ Ð( 5Ð(Ð  5Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  5Ð(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆxÑ(Ô(Ð(Õ(Ô(ˆxÑ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø #ˆÔØÔ$Ð+¨Ð+Ð$¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð$¨Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Ð+Õ+Ô+Ð$Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø,×=Ò=À]Ð^fÐ>gÐ>gÑhÔhÑˆ�Ø(Ð(ˆwÐ(ˆwÐ( qÐ(˜8 qš=Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Õ(Ô(ˆwÑ(Ô(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(ˆwÐ(Õ(Ô(Ð(Ð(Ð(Ð(˜8 qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜8Ñ(Ô(Ð(Õ(Ô(˜8Ñ(Ô(Ð(Ð(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(Õ(Ô(Ð(Ð(Ñ(Ô(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(rb   c                óZ  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j	        }t          |¦  «        }|t          k    }|�s?t          j        d|fd	|t          f¦  «        d
t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}d S )Nr   rù   )z1%(py2)s
{%(py2)s = %(py0)s.current_hp
} > %(py5)srà   ri   rj   rk   r8   )zO%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.inventory
})
} == %(py7)sr•   r   )r4   r–   r5   r7   rk   rŸ  ru   )r¶   rJ   rK   rL   rM   rN   rO   rP   rQ   rÏ  r•   r   )
rT   rà   rX   r~   r\   rZ   r   rW   r„   r¨   s
             r`   Ú=test_t4_continuous_journey_preserves_clean_state_and_no_leakszfTestTier4ContinuousPlayerJourneySymphony.test_t4_continuous_journey_preserves_clean_state_and_no_leaks@  sR  € ð  Ô*Ð.¨QÐ.Ð*¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð*¨QÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ÐÑ.Ô.Ð.Õ.Ô.ÐÑ.Ô.Ð.Ð.Õ.Ô.Ð*Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø#Ô-ÐC�sÐ-Ñ.Ô.ÐCÐ.Õ2CÒCÐCÐCÑCÕCÔCÐCÐCÐCÐCÐ.Õ2CÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC�sÑCÔCÐCÕCÔC�sÑCÔCÐCÐCÐCÕCÔCÑCÔCÐCÐCÕCÔCÐ#ÑCÔCÐCÕCÔCÐ#ÑCÔCÐCÐCÕCÔCÐ-ÑCÔCÕCÔCÐ.ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCÕ2CÑCÔCÐCÕCÔCÕ2CÑCÔCÐCÐCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCrb   Nr  )rŒ   r�   rŽ   r�   rÝ  rß  r�   rb   r`   rÒ  rÒ    sI   € € € € € Ø<Ð<ð4)ð 4)ð 4)ð 4)ðlDð Dð Dð Dð Dð Drb   rÒ  )Er�   Ú
__future__r   ÚbuiltinsrL   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterJ   ÚmathrC   rF   ÚpytestÚserver.auth.auth_servicer   Úserver.auth.character_servicer   r   r   Úserver.auth.modelsr   Úserver.combat.combat_typesr	   Úserver.combat.monster_scalingr
   Úserver.common.math_utilsr   r   Ú server.gateway.ws_gateway_bridger   r   r   r   r   r   Úserver.protor   r   Úserver.world.map_data_typesr   Úserver.world.movement_authorityr   r   Úserver.world.npc_catalogr   Úserver.world.npc_enginer   Úserver.world.npc_typesr   Ú"server.world.procedural_map_enginer   Úserver.world.zone_enginer   Úserver.world.zone_typesr   Útests.e2e_cocos.conftestr   r   r    r!   r#   r’   rß   r  rZ  r‰  rš  r´  rÒ  r�   rb   r`   ú<module>rø     s±  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø €€€Ø €€€Ø €€€à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø >Ð >Ð >Ð >Ð >Ð >Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ <Ð <Ð <Ð <Ð <Ð <Ø -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø BÐ BÐ BÐ BÐ BÐ BØ /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ðSð Sð Sð Sð Sñ Sô Sð Sð87ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð.5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ð> 7ð  7ð  7ð  7ð  7ñ  7ô  7ð  7ðF%]ð %]ð %]ð %]ð %]ñ %]ô %]ð %]ðP&ð &ð &ð &ð &ñ &ô &ð &ð.2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð*Cð Cð Cð Cð Cñ Cô Cð Cð$=Dð =Dð =Dð =Dð =Dñ =Dô =Dð =Dð =Dð =Drb   