§
    ÀŽÁjÊ  ã            	       óÊ   — d Z ddlmZmZmZ ddlmZ dedee         fd„Zdedede	fd„Z
d	edefd
„Zdededeeeef                  fd„Zdededeeeef                  fd„ZdS )z�
Helper utilities for Server-Authoritative Combat Engine (Sprint 2).
Handles weapon matching, element parsing, skill metadata, and support sigil resolution.
é    )ÚAnyÚDictÚOptional)ÚFiveElementsÚweaponÚreturnc                 óê   — | €dS t          | d¦  «        r-| j        }t          |d¦  «        r|j        nt          |¦  «        S t          | d¦  «        rt          | j        ¦  «        S t          | ¦  «        S )z6Extracts string category from a weapon representation.NÚcategoryÚvalue)Úhasattrr
   r   Ústr)r   Úcats     ú:C:\Projects\FreeExile\server\world\combat_skill_helpers.pyÚextract_weapon_categoryr   
   su   € à€~ØˆtÝˆv�zÑ"Ô"ð @ØŒoˆÝ# C¨Ñ1Ô1Ð?ˆsŒyˆyµs¸3±x´xÐ?Ýˆv�wÑÔð !Ý�6”<Ñ Ô Ð Ýˆv‰;Œ;Ðó    Úrequirementc                 ó�   — |€dS t          |d¦  «        r|j        nt          |¦  «        }|dk    rdS t          | ¦  «        }||k    S )z:Checks if a weapon satisfies the skill weapon requirement.NTr   ÚANY)r   r   r   r   )r   r   Úreq_strÚcat_strs       r   Úweapon_matchesr      sY   € àÐØˆtÝ#*¨;¸Ñ#@Ô#@ÐVˆkÔÐÅcÈ+ÑFVÔFV€GØ�%ÒÐØˆtÝ% fÑ-Ô-€GØ�gÒÐr   Úelemc                 óâ   — t          | t          ¦  «        r| S 	 t          | ¦  «        S # t          $ r< 	 t          t          | ¦  «                 cY S # t          $ r t          j        cY cY S w xY ww xY w)z;Parses any elemental representation into FiveElements enum.)Ú
isinstancer   Ú	Exceptionr   ÚKIM)r   s    r   Úparse_elementr   !   s“   € å�$�Ñ%Ô%ð Øˆð$Ý˜DÑ!Ô!Ð!øÝð $ð $ð $ð	$Ý¥ D¡	¤	Ô*Ð*Ð*Ð*øÝð 	$ð 	$ð 	$ÝÔ#Ð#Ð#Ð#Ð#Ð#ð	$øøøð$øøøs,   ™( ¨
A.³AÁA.ÁA*Á%A.Á)A*Á*A.Úskill_idÚskill_dbc           
      ó>  — |�)t          |d¦  «        r|                     | ¦  «        }|r|S 	 ddlm}  |¦   «         }| |v rK||          }|j        |j        |j        |j        |j        |j	        |j
        |j        d„ |j        D ¦   «         dœ	S n# t          $ r Y nw xY wdS )zJRetrieves skill definition from SkillDatabaseService or canonical catalog.NÚ	get_skillr   )Úcreate_standard_active_skillsc                 óZ   — g | ](}t          |d ¦  «        r|j        nt          |¦  «        ‘Œ)S )r   )r   r   r   )Ú.0Úts     r   ú
<listcomp>z&resolve_skill_data.<locals>.<listcomp>B   s3   € ÐTÐTÐTÈ¥G¨A¨wÑ$7Ô$7ÐC˜œ˜½SÀ¹V¼VÐTÐTÐTr   )	Ú
skill_nameÚelementÚbase_damageÚenergy_costÚcooldown_msÚanimation_lock_msÚbase_projectile_countÚweapon_requirementÚtags)r   r!   Úserver.world.martial_catalogr"   r'   r(   r)   r*   r+   r,   r-   r.   r/   r   )r   r   Údatar"   ÚcatalogÚss         r   Úresolve_skill_datar4   .   sê   € àÐ¥¨°+Ñ >Ô >ÐØ×!Ò! (Ñ+Ô+ˆØð 	ØˆKðØNÐNÐNÐNÐNÐNØ/Ð/Ñ1Ô1ˆØ�wÐÐØ˜Ô!ˆAàœlØœ9Ø œ}Ø œ}Ø œ}Ø%&Ô%8Ø)*Ô)@Ø&'Ô&:ØTÐTÈQÌVÐTÑTÔTð
ð 
ð 
ð øõ ð ð ð Øˆðøøøàˆ4s   ­AB Â
BÂBÚsigil_idc                 óÆ  — |�•t          |d¦  «        r…	 |                     ¦   «         5 }|                     d| f¦  «                             ¦   «         }|rt	          |¦  «        cddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   n# t
          $ r Y nw xY w	 ddlm}  |¦   «         }| |v r#||          }|j        |j	        |j
        |j        dœS n# t
          $ r Y nw xY wdS )zGRetrieves support sigil definition from SQLite DB or canonical catalog.NÚ_get_connectionz-SELECT * FROM support_gems WHERE sigil_id = ?r   )Úcreate_standard_augment_sigils)Ú
sigil_nameÚdamage_multiplierÚprojectile_bonusÚenergy_cost_multiplier)r   r7   ÚexecuteÚfetchoneÚdictr   r0   r8   r9   r:   r;   r<   )r5   r   ÚconnÚrowr8   r2   Úsigs          r   Úresolve_sigil_datarC   I   s’  € àÐ¥¨Ð2CÑ DÔ DÐð	Ø×)Ò)Ñ+Ô+ð %¨tØ—l’lÐ#RÐU]ÐT_Ñ`Ô`×iÒiÑkÔk�Øð %Ý ™9œ9ð%ð %ð %ð %ñ %ô %ð %ð %ð%ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %øøõ ð 	ð 	ð 	ØˆDð	øøøðØOÐOÐOÐOÐOÐOØ0Ð0Ñ2Ô2ˆØ�wÐÐØ˜(Ô#ˆCà!œnØ%(Ô%:Ø$'Ô$8Ø*-Ô*Dð	ð ð ð øõ ð ð ð Øˆðøøøàˆ4sL   ”B ¨:A<Á"B Á0B Á<B Â B ÂB ÂB Â
BÂBÂ6C Ã
CÃCN)Ú__doc__Útypingr   r   r   Úserver.world.martial_typesr   r   r   Úboolr   r   Úintr4   rC   © r   r   ú<module>rJ      s(  ððð ð
 'Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð	 Cð 	¨H°S¬Mð 	ð 	ð 	ð 	ð˜3ð ¨Sð °Tð ð ð ð ð
$˜ð 
$ ð 
$ð 
$ð 
$ð 
$ð ð °ð ¸ÀÀcÈ3ÀhÄÔ8Pð ð ð ð ð6 ð °ð ¸ÀÀcÈ3ÀhÄÔ8Pð ð ð ð ð ð r   