§
    òc»jûP  ã                   ó†   — d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ ej        defd„¦   «         Z G d„ d¦  «        ZdS )aŽ  
Unit Test Suite for FreeExile Quest & Milestone Engine.
Validates:
- Normal quests registration, acceptance, progression, and completion.
- Hidden quests triggered by cryptic environmental & combat criteria.
- High-tier epic quests with demanding multi-objective prerequisites.
- Milestone tracking, unlock progression, and anti-double claim validation.
- Zero-trust server authority validations.
é    N)ÚQuestEngineÚ	QuestTypeÚQuestStatusÚObjectiveTypeÚHiddenTriggerTypeÚObjectiveStateÚ
RewardItemÚQuestRewardÚHiddenTriggerÚQuestDefinitionÚMilestoneTierÚreturnc                  óº  — t          ¦   «         } |                      t          dddt          j        dg t          ddt          j        dd¬	¦  «        gt          d
t          ddd¦  «        gd¬¦  «        ¬¦  «        ¦  «         |                      t          dddt          j        ddgt          ddt          j
        dd¬	¦  «        gt          dt          ddd¦  «        gd¬¦  «        ¬¦  «        ¦  «         |                      t          dddt          j        dg t          ddt          j        dd¬	¦  «        gt          d t          d!d"d¦  «        t          d#d$d¦  «        gdd%¬&¦  «        t          t          j        d'd(d)¬*¦  «        ¬+¦	  «	        ¦  «         |                      t          d,d-d.t          j        d/g t          d0d1t          j        d2d¬	¦  «        gt          d3t          d4d5d¦  «        t          d!d"d/¦  «        gd6d7¬&¦  «        t          t          j        d8dd9¬:¦  «        ¬+¦	  «	        ¦  «         |                      t          d;d<d=t          j        d>dgt          d?d@t          j        dAd¬	¦  «        t          dBdCt          j
        dDd¬	¦  «        gt          dEt          dFdGd¦  «        t          dHdId¦  «        t          d4d5d¦  «        gd/dJ¬&¦  «        ¬¦  «        ¦  «         |                      t)          dKdLdMddNdNt          dt          ddd¦  «        gd¬¦  «        ¬O¦  «        ¦  «         |                      t)          dPdQdRdddNt          d3t          d!d"d¦  «        t          dHdId¦  «        gddS¬&¦  «        ¬O¦  «        ¦  «         |                      t)          dTdUdVdddt          dWt          dFdGd¦  «        t          dHdId/¦  «        gdXdY¬&¦  «        ¬O¦  «        ¦  «         | S )ZNÚnorm_tang_kiem_nhaiu%   Tá»‰nh Giáº¥c Táº¡i TÃ¡ng Kiáº¿m Nhaiu@   TiÃªu diá»‡t Hoang Giá»›i Thi Cáº©u Ä‘ang vÃ¢y quanh tÃ n tÃ­ch.é   Úobj_kill_bone_houndsu#   TiÃªu diá»‡t Hoang Giá»›i Thi Cáº©uÚmob_trash_bone_houndé   )Úobjective_idÚdescriptionÚobj_typeÚ	target_idÚtarget_countéô  Úcurrency_awakening_pearlu   Khai Linh ChÃ¢ué   )ÚexpÚspirit_stonesÚmeridian_points)Úquest_idÚtitler   Ú
quest_typeÚrequired_levelÚprerequisite_quest_idsÚ
objectivesÚrewardÚnorm_khai_thong_dan_tianu   Thá»©c Tá»‰nh Ä�an Ä�iá»�nuM   Khai má»Ÿ huyá»‡t vá»‹ Ä�an Ä�iá»�n Ä‘áº§u tiÃªn trÃªn Ká»³ Kinh BÃ¡t Máº¡ch.é   Úobj_unlock_dantianu   Khai má»Ÿ Ä�an Ä�iá»�nÚmeridian_origin_dantianiè  Úcurrency_creation_stoneu   Táº¡o HÃ³a Tháº¡chÚhidden_huyen_anh_to_suu$   Ká»³ Ngá»™: BÃ­ Tháº¥t Huyá»…n áº¢nhuf   LÆ°á»›t Huyá»…n áº¢nh Bá»™ trong tráº¡ng thÃ¡i tháº­p tá»­ nháº¥t sinh táº¡i Cá»• Tráº­n Huyáº¿t LÃ¢n.Úobj_reach_secret_shrineu,   KhÃ¡m phÃ¡ máº­t Ä‘iá»‡n Huyá»…n áº¢nh TÃ´ngÚloc_secret_phantom_shrinei¬  Úcurrency_primal_chaos_stoneu   Há»—n NguyÃªn Tháº¡chÚcore_chan_vo_danu3   ChÃ¢n VÃµ Ä�an: Huyá»…n áº¢nh Bá»™ ThÆ°á»£ng Thá»«aõ   Huyá»…n áº¢nh áº¨n HÃ nh)r   r   r   r!   Úzone_blood_scale_ruinsgš™™™™™¹?uR   NÃ© trÃ¡nh hoÃ n háº£o khi sinh má»‡nh dÆ°á»›i 10% táº¡i Cá»• Tráº­n Huyáº¿t LÃ¢n.)Útrigger_typeÚrequired_zoneÚrequired_hp_percentr   )	r    r!   r   r"   r#   r$   r%   r&   Úhidden_triggerÚhidden_tan_bi_than_tuongu#   Ká»³ Ngá»™: TÃ n Bi Tháº§n TÆ°á»›ngu]   Hiáº¿n táº¿ Táº¡o HÃ³a Tháº¡ch trÆ°á»›c TÃ n Bi Tháº§n TÆ°á»›ng giá»¯a bÃ£o cÃ¡t hoang máº¡c.é
   Úobj_decipher_steleu"   Giáº£i mÃ£ Tháº§n TÆ°á»›ng Bi VÄƒnÚaction_decipher_ancient_steleiˆ  Úcurrency_sovereign_sigilu   Tháº§n TÆ°á»›ng PhÃ¹é   u   Tháº§n TÆ°á»›ng Thá»«a Káº¿Úzone_boundless_sandstormu?   Táº¿ Táº¡o HÃ³a Tháº¡ch lÃªn Bia Ä�Ã¡ VÃ´ Danh trong bÃ£o cÃ¡t.)r3   r4   Úrequired_item_idr   Úepic_phong_ma_co_tranu#   Ä�áº¡i Chiáº¿n Phong Ma Cá»• Tráº­nud   Thanh táº©y Cá»• Tráº­n, tráº£m HoÃ ng Kim YÃªu ThÃº vÃ  Ä‘á»™t phÃ¡ Nghá»‹ch Má»‡nh Ä�áº¡i Huyá»‡t.é   Úobj_kill_golden_bossu1   Tráº£m HoÃ ng Kim YÃªu ThÃº: Háº¯c Long Tháº§n MaÚboss_black_dragon_demonÚobj_breakthrough_keystoneuE   Ä�á»™t phÃ¡ Nghá»‹ch Má»‡nh Ä�áº¡i Huyá»‡t: Báº¥t Hoáº¡i Tháº§n Thá»ƒÚmeridian_keystone_unbreakableiPÃ  Úcurrency_void_mirror_relicu   ThÃ¡i HÆ° CÃ n KhÃ´n KÃ­nhÚcurrency_destiny_runeu   ThiÃªn Má»‡nh Ä�anõ   Nghá»‹ch Má»‡nh TiÃªn PhongÚms_tier_1_so_nhapu    Má»‘c I: SÆ¡ Nháº­p Hoang Giá»›iu*   HoÃ n thÃ nh tá»‘i thiá»ƒu 1 nhiá»‡m vá»¥.r   )Úmilestone_idr!   r   Úrequired_total_completedÚrequired_hidden_completedÚrequired_high_tier_completedr&   Úms_tier_2_thong_kinhu#   Má»‘c II: ThÃ´ng Suá»‘t Kinh Máº¡chu>   HoÃ n thÃ nh 2 nhiá»‡m vá»¥ thÆ°á»�ng vÃ  1 nhiá»‡m vá»¥ áº©n.õ   ThÃ´ng Máº¡ch TÃ´ng SÆ°Úms_tier_3_chi_tonu!   Má»‘c III: Váº¡n Giá»›i ChÃ­ TÃ´nu[   HoÃ n thÃ nh 3 nhiá»‡m vá»¥ tá»•ng thá»ƒ, 1 nhiá»‡m vá»¥ áº©n vÃ  1 nhiá»‡m vá»¥ cáº¥p cao.i † é   u   Váº¡n Giá»›i ChÃ­ TÃ´n)r   Úregister_questr   r   ÚNORMALr   r   ÚKILL_MONSTERr
   r	   ÚACTIVATE_MERIDIANÚHIDDENÚDISCOVER_LOCATIONr   r   ÚEVASION_NEAR_DEATHÚPERFORM_ACTIONÚRELIC_OFFERINGÚ	HIGH_TIERÚregister_milestoner   )Úengines    ú5C:\Projects\FreeExile\tests\unit\test_quest_engine.pyÚquest_enginer^      sT  € å‰]Œ]€Fð ×ÒÝØ*Ø9ØZÝ Ô'ØØ#%åØ!7Ø EÝ*Ô7Ø4Ø!"ðñ ô ðõ ØÝ)Ð*DÐFWÐYZÑ[Ô[Ð\Ø !ðñ ô ð!	
ñ 	
ô 	
ñô ð ð2 ×ÒÝØ/Ø.ØgÝ Ô'ØØ$9Ð#:åØ!5Ø 8Ý*Ô<Ø7Ø!"ðñ ô ðõ ØÝ)Ð*CÐEYÐ[\Ñ]Ô]Ð^Ø !ðñ ô ð!	
ñ 	
ô 	
ñô ð ð4 ×ÒÝØ-Ø8ð AÝ Ô'ØØ#%åØ!:Ø NÝ*Ô<Ø9Ø!"ðñ ô ðõ ØåÐ<Ð>UÐWXÑYÔYÝÐ1Ð3hÐjkÑlÔlðð !"Ø0ðñ ô õ )Ý.ÔAØ6Ø$(Øpð	ñ ô ð3	
ñ 	
ô 	
ñ!ô !ð !ðF ×ÒÝØ/Ø7ØwÝ Ô'ØØ#%åØ!5Ø DÝ*Ô9Ø=Ø!"ðñ ô ðõ ØåÐ9Ð;QÐSTÑUÔUÝÐ<Ð>UÐWYÑZÔZðð !"Ø3ðñ ô õ )Ý.Ô=Ø8Ø!:Ø]ð	ñ ô ð3	
ñ 	
ô 	
ñ!ô !ð !ðH ×ÒÝØ,Ø7Ø~Ý Ô*ØØ$>Ð#?åØ!7Ø SÝ*Ô7Ø7Ø!"ðñ ô õ Ø!<Ø gÝ*Ô<Ø=Ø!"ðñ ô ðõ  ØåÐ;Ð=YÐ[\Ñ]Ô]ÝÐ6Ð8LÈaÑPÔPÝÐ9Ð;QÐSTÑUÔUðð
 !#Ø3ð	ñ 	ô 	ð/!	
ñ !	
ô !	
ñ#ô #ð #ðL ×ÒÝØ,Ø4ØDØ%&Ø&'Ø)*ÝØÝ)Ð*DÐFWÐYZÑ[Ô[Ð\Ø !ðñ ô ð	
ñ 	
ô 	
ñô ð ð  ×ÒÝØ/Ø7ØXØ%&Ø&'Ø)*ÝØåÐ<Ð>UÐWXÑYÔYÝÐ6Ð8LÈaÑPÔPðð !"Ø/ðñ ô ð	
ñ 	
ô 	
ñô ð ð( ×ÒÝØ,Ø5ØuØ%&Ø&'Ø)*ÝØåÐ;Ð=YÐ[\Ñ]Ô]ÝÐ6Ð8LÈbÑQÔQðð !#Ø.ðñ ô ð	
ñ 	
ô 	
ñô ð ð( €Mó    c                   óP   — e Zd Zdefd„Zdefd„Zdefd„Zdefd„Zdefd„Zd„ Z	dS )	ÚTestQuestEnginer^   c                 óö  — d}|                      |d¬¦  «         |                     |d¬¦  «        }t          |¦  «        dk    sJ ‚|d         j        dk    sJ ‚|                     |dd¬¦  «        rJ ‚|                     |dd¬¦  «        sJ ‚|                     |d¦  «        }|€J ‚|j        t          j        k    sJ ‚| 	                    |dd¬	¦  «        }d|v sJ ‚|                     |d¦  «        }|j        t          j        k    sJ ‚| 	                    |dd
¬	¦  «        }d|v sJ ‚|                     |d¦  «        }|j        t          j
        k    sJ ‚|                     |d¦  «        \  }}}|du sJ ‚|€J ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        t          j        k    sJ ‚|                     |d¦  «        \  }	}
}|	du sJ ‚d|                     ¦   «         v sd|                     ¦   «         v sJ ‚d S d S )NÚplayer_exile_001r   ©Úplayer_levelr   r   r'   r   r   ©Úcountr(   Tr   Fõ   Ä‘Ã£ nháº­núalready claimed)Úinitialize_playerÚget_available_questsÚlenr    Úaccept_questÚget_player_questÚstatusr   ÚIN_PROGRESSÚrecord_killÚ	COMPLETEDÚclaim_quest_rewardr   r   ÚCLAIMEDÚlower)Úselfr^   Ú	player_idÚ	availableÚquestÚupdatedÚsuccessr&   ÚmsgÚsuccess2Ú_Úmsg2s               r]   Útest_normal_quest_lifecyclez+TestQuestEngine.test_normal_quest_lifecycleü   s  € Ø&ˆ	Ø×&Ò& y¸qÐ&ÑAÔAÐAð !×5Ò5°iÈaÐ5ÑPÔPˆ	Ý�9‰~Œ~ Ò"Ð"Ð"Ð"Ø˜Œ|Ô$Ð(=Ò=Ð=Ð=Ð=ð  ×,Ò,¨YÐ8RÐabÐ,ÑcÔcÐcÐcÐcð ×(Ò(¨Ð4IÐXYÐ(ÑZÔZÐZÐZÐZØ×-Ò-¨iÐ9NÑOÔOˆØÐ Ð Ð ØŒ|�{Ô6Ò6Ð6Ð6Ð6ð ×*Ò*¨9Ð6LÐTUÐ*ÑVÔVˆØ$¨Ð/Ð/Ð/Ð/Ø×-Ò-¨iÐ9NÑOÔOˆØŒ|�{Ô6Ò6Ð6Ð6Ð6ð ×*Ò*¨9Ð6LÐTUÐ*ÑVÔVˆØ$¨Ð/Ð/Ð/Ð/Ø×-Ò-¨iÐ9NÑOÔOˆØŒ|�{Ô4Ò4Ð4Ð4Ð4ð  ,×>Ò>¸yÐJ_Ñ`Ô`Ñˆ�˜Ø˜$ˆˆˆˆØÐ!Ð!Ð!ØŒz˜SÒ Ð Ð Ð ØÔ%¨Ò*Ð*Ð*Ð*ØŒ|�{Ô2Ò2Ð2Ð2Ð2ð )×;Ò;¸IÐG\Ñ]Ô]Ñˆ�!�TØ˜5Ð Ð Ð Ð Ø §
¢
¡¤Ð,Ð,Ð0AÀTÇZÂZÁ\Ä\Ð0QÐ0QÐ0QÐQÐ,Ð,Ð0QÐ0Qr_   c                 óÐ  — d}|                      |d¬¦  «         |                     |dd¬¦  «         |                     |dd¬¦  «         |                     |d¦  «         |                     |d¬¦  «        }d„ |D ¦   «         }d	|v sJ ‚|                     |d	d¬¦  «        sJ ‚|                     |d
¦  «         |                     |d	¦  «        }|j        t          j	        k    sJ ‚d S )NÚplayer_exile_002r(   rd   r   r   r   rf   c                 ó   — g | ]	}|j         ‘Œ
S © ©r    ©Ú.0Úqs     r]   ú
<listcomp>zETestQuestEngine.test_prerequisite_chain_unlocking.<locals>.<listcomp>2  s   € Ð3Ð3Ð3 A�Q”ZÐ3Ð3Ð3r_   r'   r*   )
rj   rm   rq   rs   rk   Úrecord_meridian_unlockrn   ro   r   rr   )rv   r^   rw   rx   Ú	avail_idsÚq2s         r]   Ú!test_prerequisite_chain_unlockingz1TestQuestEngine.test_prerequisite_chain_unlocking'  s  € Ø&ˆ	Ø×&Ò& y¸qÐ&ÑAÔAÐAð 	×!Ò! )Ð-BÐQRÐ!ÑSÔSÐSØ× Ò  Ð,BÈ!Ð ÑLÔLÐLØ×'Ò'¨	Ð3HÑIÔIÐIð !×5Ò5°iÈaÐ5ÑPÔPˆ	Ø3Ð3¨Ð3Ñ3Ô3ˆ	Ø)¨YÐ6Ð6Ð6Ð6ð ×(Ò(¨Ð4NÐ]^Ð(Ñ_Ô_Ð_Ð_Ð_Ø×+Ò+¨IÐ7PÑQÔQÐQØ×*Ò*¨9Ð6PÑQÔQˆØŒy�KÔ1Ò1Ð1Ð1Ð1Ð1Ð1r_   c                 ó²  — d}|                      |d¬¦  «         |                     |d¬¦  «        }d„ |D ¦   «         }d|vsJ ‚|                     |t          j        dddœ¦  «        }|�J ‚|                     |t          j        d	d
dœ¦  «        }|�J ‚|                     |t          j        dddœ¦  «        }|dk    sJ ‚|                     |d¦  «        }|€J ‚|j        t          j        k    sJ ‚| 	                    |d¦  «         |j        t          j
        k    sJ ‚|                     |d¦  «        \  }}}	|du sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d S )NÚplayer_exile_003r   rd   c                 ó   — g | ]	}|j         ‘Œ
S r„   r…   r†   s     r]   r‰   zHTestQuestEngine.test_hidden_quest_trigger_mechanisms.<locals>.<listcomp>A  s   € Ð/Ð/Ð/ A�Q”ZÐ/Ð/Ð/r_   r,   r2   g      à?©ÚzoneÚ
hp_percentÚzone_other_placeçš™™™™™©?g{®Gáz´?r.   Tr1   r   )rj   rk   Útrigger_hidden_questr   rW   rn   ro   r   rp   Úrecord_discoveryrr   rs   r!   r   )
rv   r^   rw   Úavailr‹   Ú	triggeredÚq_hiddenÚokr&   r~   s
             r]   Ú$test_hidden_quest_trigger_mechanismsz4TestQuestEngine.test_hidden_quest_trigger_mechanisms;  sÑ  € Ø&ˆ	Ø×&Ò& y¸qÐ&ÑAÔAÐAð ×1Ò1°)È!Ð1ÑLÔLˆØ/Ð/¨Ð/Ñ/Ô/ˆ	Ø'¨yÐ8Ð8Ð8Ð8ð !×5Ò5ØÝÔ0Ø-¸TÐBÐBñ
ô 
ˆ	ð
 Ð Ð Ð ð !×5Ò5ØÝÔ0Ø'°tÐ<Ð<ñ
ô 
ˆ	ð
 Ð Ð Ð ð !×5Ò5ØÝÔ0Ø-¸TÐBÐBñ
ô 
ˆ	ð
 Ð4Ò4Ð4Ð4Ð4ð  ×0Ò0°Ð<TÑUÔUˆØÐ#Ð#Ð#ØŒ¥+Ô"9Ò9Ð9Ð9Ð9ð 	×%Ò% iÐ1LÑMÔMÐMØŒ¥+Ô"7Ò7Ð7Ð7Ð7ð %×7Ò7¸	ÐC[Ñ\Ô\‰ˆˆF�AØ�TˆzˆzˆzˆzØŒ|Ð9Ò9Ð9Ð9Ð9ØÔ%¨Ò*Ð*Ð*Ð*Ð*Ð*r_   c                 óP  — d}|                      |d¬¦  «         |                     |dd¦  «         |                     |dd¦  «         |                     |d¦  «         |                     |dd¦  «         |                     |d¦  «         |                     |d¦  «         |                     |d	d¦  «        sJ ‚|                     |d	¦  «        }|j        t          j        k    sJ ‚|                     |d
¦  «         |j        t          j        k    sJ ‚|                     |d¦  «         |j        t          j	        k    sJ ‚|                     |d	¦  «        \  }}}|du sJ ‚|j
        dk    sJ ‚|j        dk    sJ ‚t          d„ |j        D ¦   «         ¦  «        }|j        dk    sJ ‚d S )NÚplayer_exile_004r@   rd   r   r   r   r'   r*   r?   rB   rD   Tr8   rG   c              3   ó0   K  — | ]}|j         d k    ¯|V — ŒdS )rE   N)Úitem_id)r‡   Úis     r]   ú	<genexpr>z<TestQuestEngine.test_high_tier_epic_quest.<locals>.<genexpr>‹  s/   è è € ÐcÐc˜A¸¼ÐFbÒ9bÐ9b�aÐ9bÐ9bÐ9bÐ9bÐcÐcr_   r   )rj   rm   rq   rs   rŠ   rn   ro   r   rp   rr   r   r!   Únextr   Úquantity)rv   r^   rw   Úepic_qr›   r&   r~   Úmirrors           r]   Útest_high_tier_epic_questz)TestQuestEngine.test_high_tier_epic_questk  sè  € Ø&ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBð 	×!Ò! )Ð-BÀBÑGÔGÐGØ× Ò  Ð,BÀAÑFÔFÐFØ×'Ò'¨	Ð3HÑIÔIÐIà×!Ò! )Ð-GÈÑLÔLÐLØ×+Ò+¨IÐ7PÑQÔQÐQØ×'Ò'¨	Ð3MÑNÔNÐNð ×(Ò(¨Ð4KÈRÑPÔPÐPÐPÐPØ×.Ò.¨yÐ:QÑRÔRˆØŒ}¥Ô 7Ò7Ð7Ð7Ð7ð 	× Ò  Ð,EÑFÔFÐFØŒ}¥Ô 7Ò7Ð7Ð7Ð7ð 	×+Ò+¨IÐ7VÑWÔWÐWØŒ}¥Ô 5Ò5Ð5Ð5Ð5ð %×7Ò7¸	ÐCZÑ[Ô[‰ˆˆF�AØ�TˆzˆzˆzˆzØÔ%¨Ò+Ð+Ð+Ð+ØŒ|Ð<Ò<Ð<Ð<Ð<åÐcÐc Ô!5ÐcÑcÔcÑcÔcˆØŒ !Ò#Ð#Ð#Ð#Ð#Ð#r_   c                 óÒ  — d}|                      |d¬¦  «         |                     |¦  «        }|d         dk    sJ ‚t          |d         ¦  «        dk    sJ ‚|                     |dd¦  «         |                     |dd	¦  «         |                     |d¦  «         |                     |¦  «        }|d         d
k    sJ ‚d|d         v sJ ‚|                     |d¦  «        \  }}}|du sJ ‚|€J ‚|j        d
k    sJ ‚|                     |d¦  «        \  }}}	|du sJ ‚d|	                     ¦   «         v sd|	                     ¦   «         v sJ ‚|                     |d¦  «        \  }
}}|
du sJ ‚| 	                    |t          j        dddœ¦  «         |                     |d¦  «         |                     |d¦  «         |                     |dd¦  «         |                     |d¦  «         |                     |d¦  «         |                     |¦  «        }|d         dk    sJ ‚|d         d
k    sJ ‚d|d         v sJ ‚|                     |d¦  «        \  }}}|du sJ ‚|j        dk    sJ ‚d S )NÚplayer_exile_005r@   rd   Útotal_completedr   Úeligible_milestonesr   r   r   r   rH   TFrh   ri   rM   r2   r•   r‘   r.   r,   r'   r*   r   Úhidden_completedrN   )rj   Úget_player_milestone_statusrl   rm   rq   rs   Úclaim_milestone_rewardr   ru   r–   r   rW   r—   rŠ   r!   )rv   r^   rw   Ú	ms_statusr›   r&   r|   Úok2r~   r   Úok3Ú
ms_status2Úok4Úreward4s                 r]   Ú#test_milestone_tracking_and_rewardsz3TestQuestEngine.test_milestone_tracking_and_rewardsŽ  s
  € Ø&ˆ	Ø×&Ò& y¸rÐ&ÑBÔBÐBð !×<Ò<¸YÑGÔGˆ	ØÐ*Ô+¨qÒ0Ð0Ð0Ð0Ý�9Ð2Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9ð 	×!Ò! )Ð-BÀBÑGÔGÐGØ× Ò  Ð,BÀAÑFÔFÐFØ×'Ò'¨	Ð3HÑIÔIÐIð !×<Ò<¸YÑGÔGˆ	ØÐ*Ô+¨qÒ0Ð0Ð0Ð0Ø" iÐ0EÔ&FÐFÐFÐFÐFð '×=Ò=¸iÐI\Ñ]Ô]‰ˆˆF�CØ�TˆzˆzˆzˆzØÐ!Ð!Ð!ØÔ%¨Ò*Ð*Ð*Ð*ð $×:Ò:¸9ÐFYÑZÔZ‰ˆˆQ�Ø�eˆ|ˆ|ˆ|ˆ|Ø §
¢
¡¤Ð,Ð,Ð0AÀTÇZÂZÁ\Ä\Ð0QÐ0QÐ0QÐQð !×7Ò7¸	ÐCYÑZÔZ‰	ˆˆQ�Ø�eˆ|ˆ|ˆ|ˆ|ð 	×)Ò)ØÝÔ0Ø-¸TÐBÐBñ	
ô 	
ð 	
ð
 	×%Ò% iÐ1LÑMÔMÐMØ×'Ò'¨	Ð3KÑLÔLÐLð 	×!Ò! )Ð-GÈÑLÔLÐLØ×+Ò+¨IÐ7PÑQÔQÐQØ×'Ò'¨	Ð3MÑNÔNÐNð "×=Ò=¸iÑHÔHˆ
ØÐ+Ô,°Ò1Ð1Ð1Ð1ØÐ,Ô-°Ò2Ð2Ð2Ð2Ø%¨Ð4IÔ)JÐJÐJÐJÐJà&×=Ò=¸iÐI_Ñ`Ô`‰ˆˆW�aØ�dˆ{ˆ{ˆ{ˆ{ØŒ}Ð 9Ò9Ð9Ð9Ð9Ð9Ð9r_   c                 óº  — ddl m}  |¦   «         }d}|                     |d¬¦  «         t          |j        ¦  «        dk    sJ ‚t          |j        ¦  «        dk    sJ ‚|                     |d¬¦  «        }t          d„ |D ¦   «         ¦  «        sJ ‚|                     |d	d¦  «        sJ ‚| 	                    |d
d¦  «         | 
                    |d	¦  «        \  }}}|du sJ ‚|j        dk    sJ ‚|                     |t          j        ddi¦  «        }|dk    sJ ‚|                     |d¦  «         | 
                    |d¦  «        \  }	}
}|	du sJ ‚|
j        dk    sJ ‚d S )Nr   )Úcreate_default_quest_engineÚcanonical_player_01é<   rd   é   r   c              3   ó,   K  — | ]}|j         d k    V — ŒdS )Ú!quest_norm_01_thuc_tinh_tang_kiemNr…   r†   s     r]   r¢   zFTestQuestEngine.test_canonical_default_quest_engine.<locals>.<genexpr>Õ  s*   è è € ÐTÐTÈ�1”:Ð!DÒDÐTÐTÐTÐTÐTÐTr_   r¼   r   Tu   Hoang Giá»›i Káº» Tá»‰nh Giáº¥cÚelement_streakÚ#quest_hidden_03_ngu_hanh_tuong_sinhÚloc_five_elements_altaru   NgÅ© HÃ nh HÃ³a Cáº£nh)Úserver.world.quest_enginer·   rj   rl   Ú_quest_registryÚ_milestone_registryrk   Úanyrm   rq   rs   r!   r–   r   ÚFIVE_ELEMENTS_STREAKr—   )rv   r·   r\   rw   r˜   r›   Úrewr~   r™   Úok_hÚrew_hs              r]   Ú#test_canonical_default_quest_enginez3TestQuestEngine.test_canonical_default_quest_engineÈ  sÇ  € ØIÐIÐIÐIÐIÐIà,Ð,Ñ.Ô.ˆØ)ˆ	Ø× Ò  ¸Ð Ñ<Ô<Ð<õ �6Ô)Ñ*Ô*¨bÒ0Ð0Ð0Ð0Ý�6Ô-Ñ.Ô.°!Ò3Ð3Ð3Ð3ð ×+Ò+¨IÀBÐ+ÑGÔGˆÝÐTÐTÈeÐTÑTÔTÑTÔTÐTÐTÐTð ×"Ò" 9Ð.QÐSUÑVÔVÐVÐVÐVØ×Ò˜9Ð&<¸aÑ@Ô@Ð@Ø×.Ò.¨yÐ:]Ñ^Ô^‰
ˆˆC�Ø�TˆzˆzˆzˆzØŒyÐ=Ò=Ð=Ð=Ð=ð ×/Ò/ØÝÔ2Ø˜tÐ$ñ
ô 
ˆ	ð
 ÐAÒAÐAÐAÐAð 	×Ò 	Ð+DÑEÔEÐEØ×2Ò2°9Ð>cÑdÔd‰ˆˆe�QØ�tˆ|ˆ|ˆ|ˆ|ØŒ{Ð6Ò6Ð6Ð6Ð6Ð6Ð6r_   N)
Ú__name__Ú
__module__Ú__qualname__r   r€   r�   rœ   r§   rµ   rÈ   r„   r_   r]   ra   ra   û   s³   € € € € € ð)R¸ð )Rð )Rð )Rð )RðV2¸kð 2ð 2ð 2ð 2ð(.+Àð .+ð .+ð .+ð .+ð`!$°kð !$ð !$ð !$ð !$ðF8:Àð 8:ð 8:ð 8:ð 8:ðt"7ð "7ð "7ð "7ð "7r_   ra   )Ú__doc__ÚpytestrÀ   r   r   r   r   r   r   r	   r
   r   r   r   Úfixturer^   ra   r„   r_   r]   ú<module>rÏ      s  ððð ð €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð „ð\�kð \ð \ð \ñ „ð\ð~o7ð o7ð o7ð o7ð o7ñ o7ô o7ð o7ð o7ð o7r_   