§
    {ª½j  ã            
       óv  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
e	j                             dej                             ej                             ej                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZ ddlm Z   G d„ d	¦  «        Z!dS )
zÑ
Unit tests for Monster Pack Spawning, 15-Tier Affixes, Leader Auras, and Coordinated AI.
Verifies PoE2 encounter standards, procedural affix distribution,
proximity aura propagation/decay, and pack alerting.
é    Nz../../server)ÚMonsterGenusÚMonsterRankÚMonsterAIStateÚPackAuraTypeÚMonsterAffixCategoryÚMonsterRuntimeState)ÚMonsterProceduralEngine)Úget_tier_for_levelÚroll_monster_affixesÚapply_affixes_to_statsÚMONSTER_AFFIX_CATALOG)ÚMonsterAIEnginec                   ó.   — e Zd Zdd„Zdd„Zdd„Zdd„ZdS )ÚTestMonsterPackAndAffixesÚreturnNc           	      óÞ  — t          ¦   «         }|                     dddddd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}}|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        }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        |¦  «        dœz  }dd|iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}x}x}	}|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        |¦  «        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}	}|j        }|j        }t%          t&          ¦  «        }||v }	|	�sMt          j        d|	fd||f¦  «        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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}	}|j        }|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        |¦  «        t          j        |¦  «        d'œz  }d(d)|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}|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}}|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        }||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        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d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        }t          j        }	||	k    }|sòt          j        d	|fd0||	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        |	¦  «        d1œz  }d2d3|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}	�Œ¸dS )4z@Verifies MonsterPack creates a Rare leader and tethered minions.Úpack_test_alphaÚzone_tang_kiem_nhaié#   ç      Y@g      ^@é*   é   ©Úpack_idÚzone_idÚlevelÚcenter_xÚcenter_yÚseedÚminion_count©ú==)z/%(py2)s
{%(py2)s = %(py0)s.pack_id
} == %(py5)sÚpack©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7N)z/%(py2)s
{%(py2)s = %(py0)s.zone_id
} == %(py5)sT)Úis)zR%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.leader
}.is_pack_leader
} is %(py7)s©r%   r&   Úpy4r)   úassert %(py9)sÚpy9)zb%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.leader
}.rank
} == %(py8)s
{%(py8)s = %(py6)s.RARE
}r   )r%   r&   r,   Úpy6Úpy8úassert %(py10)sÚpy10©Úin)zm%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.leader
}.leader_aura
} in %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}Úlistr   )r%   r&   r,   r/   r)   r.   zassert %(py11)sÚpy11é   ©ú>=)zj%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.leader
}.affixes
})
} >= %(py10)sÚlen)r%   Úpy1Úpy3r'   r)   r2   zassert %(py12)sÚpy12)zM%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.minions
})
} == %(py8)s©r%   r;   r<   r'   r0   F)z6%(py2)s
{%(py2)s = %(py0)s.is_pack_leader
} is %(py5)sÚminion)zr%(py2)s
{%(py2)s = %(py0)s.pack_leader_id
} == %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.leader
}.monster_id
})zH%(py2)s
{%(py2)s = %(py0)s.rank
} == %(py6)s
{%(py6)s = %(py4)s.COMMON
})r%   r&   r,   r/   úassert %(py8)sr0   )r	   Úgenerate_packr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   ÚleaderÚis_pack_leaderÚrankr   ÚRAREÚleader_aurar5   r   Úaffixesr:   ÚminionsÚpack_leader_idÚ
monster_idÚCOMMON)ÚselfÚenginer#   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert6Ú@py_assert5Ú@py_format10Ú@py_assert7Ú@py_format9Ú@py_format11Ú@py_assert8Ú@py_format12Ú@py_assert2Ú@py_assert9Ú@py_format13r?   Ú@py_format7s                        úAC:\Projects\FreeExile\tests\unit\test_monster_pack_and_affixes.pyÚ,test_pack_composition_and_leader_designationzFTestMonsterPackAndAffixes.test_pack_composition_and_leader_designation!   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ˆtÑ0Ô0Ð0Õ0Ô0ˆtÑ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ØŒ|Ð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ˆtÑ4Ô4Ð4Õ4Ô4ˆtÑ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Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØŒ{Ð1ˆ{Ô)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆtÑ1Ô1Ð1Õ1Ô1ˆtÑ1Ô1Ð1Ð1Õ1Ô1ˆ{Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ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ØŒ{Ð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ˆ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Ð3Ð3Ð3Ð3Ð3Ð3ØŒ{Ð<ˆ{Ô&Ð<­$­|Ñ*<Ô*<Ð<Ð&Ð*<Ð<Ð<Ð<Ñ<Õ<Ô<Ð<Ð<Ð<Ð<Ð&Ð*<Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆtÑ<Ô<Ð<Õ<Ô<ˆtÑ<Ô<Ð<Ð<Õ<Ô<ˆ{Ñ<Ô<Õ<Ô<Ð&Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<­$Ñ<Ô<Ð<Õ<Ô<­$Ñ<Ô<Ð<Ð<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<­|Ñ<Ô<Ð<Õ<Ô<­|Ñ<Ô<Ð<Ð<Õ<Ô<Ð*<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø”;Ð,�;Ô&Ð,�sÐ&Ñ'Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ñ,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,�sÑ,Ô,Ð,Õ,Ô,�sÑ,Ô,Ð,Ð,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,�4Ñ,Ô,Ð,Õ,Ô,�4Ñ,Ô,Ð,Ð,Õ,Ô,�;Ñ,Ô,Õ,Ô,Ð&Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø”<Ð%�s�<Ñ Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ñ%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�4Ñ%Ô%Ð%Õ%Ô%�4Ñ%Ô%Ð%Ð%Õ%Ô%�<Ñ%Ô%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à”lð 	5ñ 	5ˆFØÔ(Ð1¨EÐ1Ð(¨EÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð(¨EÐ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¨EÑ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ØÔ(ÐB¨D¬KÐB¨KÔ,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�6ÑBÔBÐBÕBÔB�6ÑBÔBÐBÐBÕBÔBÐ(ÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔB¨DÑBÔBÐBÕBÔB¨DÑBÔBÐBÐBÕBÔB¨KÑ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ÐBÐBØ”>Ð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Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø”;Ð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�6Ñ4Ô4Ð4Õ4Ô4�6Ñ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Ð"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Ñ4ð		5ð 	5ó    c                 ó\  — 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}}d
}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}d}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}d}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}d}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}d}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}d}t          |¦  «        }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        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d	x}x}x}}t          dt          j        d¬¦  «        }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        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}|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  }t          j        d#|j        › �¦  «        d$z   d%|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d	x}x}}Œát          d&t          j        d¬¦  «        }|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  }t          j        d)|j        › �¦  «        d$z   d%|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d	x}x}}Œád*\  }}}t!          ||||¦  «        \  }}}||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-d.œz  }d/d0|iz  }t          t          j	        |¦  «        ¦  «        ‚d	}||k    }|sÂt          j        d|fd+||f¦  «        d1t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd1d2t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd2d.œz  }d/d0|iz  }t          t          j	        |¦  «        ¦  «        ‚d	}||k    }|sÂt          j        d|fd+||f¦  «        d3t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd3d4t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd4d.œz  }d/d0|iz  }t          t          j	        |¦  «        ¦  «        ‚d	}d	S )5z:Verifies the 15-tier affix hierarchy and stat multipliers.é   r!   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr:   r   )r%   r;   r<   r/   r@   r0   Né_   é   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr
   r+   r-   r.   éU   éP   é   é2   é   é
   é   éX   é{   )r   rL   r   r7   r8   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚapex_affixes)ú<=)z,%(py2)s
{%(py2)s = %(py0)s.tier
} <= %(py5)sÚaffr$   zExpected Apex tier 1-3, got z
>assert %(py7)sr)   é   é   )z,%(py2)s
{%(py2)s = %(py0)s.tier
} >= %(py5)sz Expected Novice tier 13-15, got )g     @�@r   ç      I@)z%(py0)s >= %(py2)sÚmod_hpÚbase_hp)r%   r&   zassert %(py4)sr,   Úmod_dmgÚbase_dmgÚmod_armÚbase_arm)r:   r   rB   rC   rD   rE   rF   rG   rH   rI   r
   r   r   rM   ÚtierÚ_format_assertmsgr   )rT   rc   r\   rW   rf   r_   rV   rX   r[   rZ   r]   rw   ry   rY   Úlow_affixesr~   r€   r‚   r}   r   r�   Ú@py_format3Ú@py_format5s                          rg   Ú$test_fifteen_tier_affix_distributionz>TestMonsterPackAndAffixes.test_fifteen_tier_affix_distribution<   sw  € åÕ(Ñ)Ô)Ð/¨RÐ/Ð)¨RÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð)¨RÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Õ/Ô/Õ(Ñ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/¨RÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð #%Ð*Õ! "Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Ð*Õ*Ô* "Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø"$Ð*Õ! "Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Ð*Õ*Ô* "Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø"$Ð*Õ! "Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Ð*Õ*Ô* "Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø"$Ð*Õ! "Ñ%Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Ð*Õ*Ô* "Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø"$Ð+Õ! "Ñ%Ô%Ð+¨Ð+Ð%¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð%¨Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+Õ!Ñ+Ô+Ð+Õ+Ô+Õ!Ñ+Ô+Ð+Ð+Õ+Ô+ "Ñ+Ô+Õ+Ô+Ð%Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø"#Ð*Õ! !Ñ$Ô$Ð*¨Ð*Ð$¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð$¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Õ*Ô*Õ!Ñ*Ô*Ð*Ð*Õ*Ô* !Ñ*Ô*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*õ ,°"½;Ô;KÐRUÐVÑVÔVˆÝ�<Ñ Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�<Ñ%Ô%Ð%Õ%Ô%�<Ñ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Øð 	Lð 	LˆCØ”8ÐK˜qÐK�8˜q’=ÐKÐKÐKÕKÔKÐKÐKÐKÐK�8˜qÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK�3ÑKÔKÐKÕKÔK�3ÑKÔKÐKÐKÕKÔK�8ÑKÔKÕKÔK˜qÑ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õ +°½Ô9IÐPSÐTÑTÔTˆØð 	Qð 	QˆCØ”8ÐP˜rÐP�8˜r’>ÐPÐPÐPÕPÔPÐPÐPÐPÐP�8˜rÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔP�3ÑPÔPÐPÕPÔP�3ÑPÔPÐPÐPÕPÔP�8ÑPÔPÕPÔP˜rÑPÔPÐPÐPÑPÐPÕPÔPÐ#PÀcÄhÐ#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ð ':Ñ#ˆ�˜8Ý#9¸'À8ÈXÐWcÑ#dÔ#dÑ ˆ�˜Ø˜Ò Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆv˜Ð Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆvÑ Ô Ð Õ Ô ˆvÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˜Ñ Ô Ð Õ Ô ˜Ñ Ô Ð Ð Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ø˜(Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆw˜(Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ø˜(Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆw˜(Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Õ"Ô"ˆwÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ri   c           	      óô  — t          ¦   «         }t          ¦   «         }|                     ddddddd¬¦  «        }|                     |¦  «        }|d         }|d	         }|                     |d
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}
}	d|_        t           j        |_        |                     |d
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}
}	|j        j        |_        t           j        |_        d|_        d|_        |                     |d
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}
}	dS )zYVerifies minions receive buffs within 14.0m, and buffs decay if leader dies or separates.Úpack_aura_testr   é   r|   i	  r7   r   r   rm   )ç      i@rŒ   çL7‰A`å ?©Ú
player_posÚdt)ú>)zQ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.active_buffs
})
} > %(py8)sr:   Ú	minion_str>   r1   r2   Ng        r!   )zR%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.active_buffs
})
} == %(py8)sr   )r	   r   rA   Úcreate_pack_runtime_statesÚupdate_packÚactive_buffsr:   rB   rC   rD   rE   rF   rG   rH   rI   Ú
current_hpr   ÚDEADÚai_stateÚmonsterÚmax_hpÚIDLEÚ	current_xÚ	current_y)rT   rU   Úair#   ÚstatesÚ	leader_str’   rc   rW   r^   r[   r_   r`   s                rg   Ú+test_leader_aura_buff_application_and_decayzETestMonsterPackAndAffixes.test_leader_aura_buff_application_and_decayZ   s¸  € å(Ñ*Ô*ˆÝÑÔˆà×#Ò#Ø$Ø)ØØØØØð $ñ 
ô 
ˆð ×2Ò2°4Ñ8Ô8ˆØ˜1”Iˆ	Ø˜1”Iˆ	ð 	�Š�v¨.¸UˆÑCÔCÐCØÔ)Ð.�sÐ)Ñ*Ô*Ð.¨QÐ.Ð*¨QÒ.Ð.Ð.Ñ.Õ.Ô.Ð.Ð.Ð.Ð.Ð*¨QÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�sÑ.Ô.Ð.Õ.Ô.�sÑ.Ô.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�9Ñ.Ô.Ð.Õ.Ô.�9Ñ.Ô.Ð.Ð.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.Ð*Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð  #ˆ	ÔÝ+Ô0ˆ	ÔØ
�Š�v¨.¸UˆÑCÔCÐCØÔ)Ð/�sÐ)Ñ*Ô*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ñ/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�9Ñ/Ô/Ð/Õ/Ô/�9Ñ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð  )Ô0Ô7ˆ	ÔÝ+Ô0ˆ	ÔØ#ˆ	ÔØ#ˆ	ÔØ
�Š�v¨.¸UˆÑCÔCÐCØÔ)Ð/�sÐ)Ñ*Ô*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ñ/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�9Ñ/Ô/Ð/Õ/Ô/�9Ñ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ri   c           	      ó¶  — t          ¦   «         }t          ¦   «         }|                     ddddddd¬¦  «        }|                     |¦  «        }|d         }|j        d	z   |j        f}|                     ||d
¬¦  «         |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}
}	ŒØdS )zPVerifies that when one minion detects the player, all pack members join pursuit.Úpack_aggro_testr   é   g      >@ix  r7   r   rm   g      ð?r�   rŽ   r3   )z0%(py2)s
{%(py2)s = %(py0)s.ai_state
} in %(py5)sÚsr$   r(   r)   N)r	   r   rA   r“   rœ   r�   r”   r˜   r   ÚPURSUITÚATTACKrB   rC   rD   rE   rF   rG   rH   rI   )rT   rU   rž   r#   rŸ   Úminion_targetÚplayer_nearr¥   rV   rW   rX   rY   rZ   s                rg   Ú%test_pack_coordinated_aggro_broadcastz?TestMonsterPackAndAffixes.test_pack_coordinated_aggro_broadcast   s¡  € å(Ñ*Ô*ˆÝÑÔˆà×#Ò#Ø%Ø)ØØØØØð $ñ 
ô 
ˆð ×2Ò2°4Ñ8Ô8ˆà˜qœ	ˆØ$Ô.°Ñ4°mÔ6MÐNˆð 	�Š�v¨+¸%ˆÑ@Ô@Ð@ð ð 	Qð 	QˆAØ”:ÐP¥.Ô"8½.Ô:OÐ!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�1ÑPÔPÐPÕPÔP�1Ñ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ð	Qð 	Qri   )r   N)Ú__name__Ú
__module__Ú__qualname__rh   rˆ   r¡   rª   © ri   rg   r   r       sk   € € € € € ð5ð 5ð 5ð 5ð6#ð #ð #ð #ð<#0ð #0ð #0ð #0ðJQð Qð Qð Qð Qð Qri   r   )"Ú__doc__ÚbuiltinsrD   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterB   ÚmathÚosÚsysÚpytestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.monster_typesr   r   r   r   r   r   Úworld.monster_procedural_enginer	   Úworld.monster_affix_catalogr
   r   r   r   Úworld.monster_ai_enginer   r   r®   ri   rg   ú<module>rÂ      sŒ  ððð ð € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð DÐ CÐ CÐ CÐ CÐ Cðð ð ð ð ð ð ð ð ð ð ð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3ðxQð xQð xQð xQð xQñ xQô xQð xQð xQð xQri   