§
    µi»jR1  ã                   óÒ  — d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
 ddlZddlZddl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mZmZmZ  G d
„ dee¦  «        Z e	dd¬¦  «         G d„ d¦  «        ¦   «         Z e	dd¬¦  «         G d„ d¦  «        ¦   «         Z e	dd¬¦  «         G d„ d¦  «        ¦   «         Z  e	dd¬¦  «         G d„ d¦  «        ¦   «         Z! G d„ d¦  «        Z"dS )zî
Autonomous Agent Decision Core for FreeExile.
Translates real-time ServerEngineLoop perception into authoritative game actions:
Movement, Skill Execution (with Five Elements counter), Phantom Evasion i-frame,
and Ground Loot Collection.
é    )ÚEnum)ÚDictÚListÚOptionalÚAny)Ú	dataclassÚfieldN)ÚServerEngineLoopÚClientMoveCommandÚClientSkillCommand)ÚCombatEngineÚCombatActor)ÚFiveElements)ÚAgentActionTypeÚLLMProviderTypeÚLLMProviderConfigÚTacticalActionDecisionÚLLMProviderClientRouterc                   ó   — e Zd ZdZdZdZdZdS )ÚTacticalStanceÚBALANCEDÚ
AGGRESSIVEÚ	DEFENSIVEÚTREASURE_HUNTERN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © ó    ú9C:\Projects\FreeExile\server\agent\agent_decision_core.pyr   r      s"   € € € € € Ø€HØ€JØ€IØ'€O€O€Or   r   T)ÚslotsÚfrozenc                   óV   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   dS )	ÚPerceivedEntityÚ	entity_idÚxÚyÚdistanceÚhpÚmax_hpÚelementN)r   r   r   ÚintÚ__annotations__Úfloatr   r   r   r    r$   r$   !   sT   € € € € € € à€N€N�NØ€H€H�HØ€H€H�HØ€O€O�OØ€I€I�IØ€M€M�MØÐÐÑÐÐr   r$   c                   óL   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   dS )ÚPerceivedDropÚdrop_idÚitem_idr&   r'   r(   ÚrarityN)r   r   r   Ústrr-   r.   r,   r   r   r    r0   r0   ,   sF   € € € € € € à€L€L�LØ€L€L�LØ€H€H�HØ€H€H�HØ€O€O�OØ€K€K�K€K€Kr   r0   c                   óŒ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   ee         ed	<   ee	         ed
<   dS )ÚAgentPerceptionSnapshotÚ	player_idÚplayer_xÚplayer_yÚplayer_zÚ
current_hpr*   Úhp_ratior+   Únearby_entitiesÚnearby_dropsN)
r   r   r   r,   r-   r.   r   r   r$   r0   r   r   r    r6   r6   6   s‚   € € € € € € à€N€N�NØ€O€O�OØ€O€O�OØ€O€O�OØÐÐÑØ€M€M�MØ€O€O�OØÐÐÑØ˜/Ô*Ð*Ð*Ñ*Ø�}Ô%Ð%Ð%Ñ%Ð%Ð%r   r6   c                   óª   — e Zd ZU eed<   dZee         ed<   dZee         ed<   dZ	ee
         ed<   dZee
         ed<   dZee         ed<   dZeed	<   dS )
ÚAgentActionPlanÚaction_typeNÚtarget_entity_idÚskill_idÚtarget_xÚtarget_yÚtarget_drop_idÚ Ú	reasoning)r   r   r   r   r-   rB   r   r,   rC   rD   r.   rE   rF   r4   rH   r   r   r    r@   r@   D   s“   € € € € € € à Ð Ð Ñ Ø&*Ð�h˜s”mÐ*Ð*Ñ*Ø"€Hˆh�sŒmÐ"Ð"Ñ"Ø $€Hˆh�uŒoÐ$Ð$Ñ$Ø $€Hˆh�uŒoÐ$Ð$Ñ$Ø$(€N�H˜S”MÐ(Ð(Ñ(Ø€IˆsÐÐÑÐÐr   r@   c                   ó0  — e Zd ZdZej        ej        ej        ej        ej        ej        ej	        ej        ej        ej	        iZ
dej        fdedee         deddfd„Zdd	ed
ededededdfd„Zd	eddfd„Zdedefd„Zdedefd„Z	 ddedededdfd„ZdS )ÚAgentDecisionCorezÑ
    Tactical Brain driving an autonomous character.
    Features dual-layer cognition:
    - Layer 1: High-level tactical evaluation & stance control.
    - Layer 2: 30Hz Authoritative reflex dispatcher.
    Nr7   Úprovider_configÚstanceÚreturnc                 ó´   — || _         |pt          t          j        ¬¦  «        | _        || _        i | _        d| _        t          ¦   «         | _	        d| _
        d S )N)Úproviderr   u4   Khá»Ÿi táº¡o tháº§n niá»‡m phÃ¢n thÃ¢n thÃ nh cÃ´ng.)r7   r   r   ÚLOCAL_TACTICALrK   rL   Úground_dropsÚsequence_counterr   Ú
llm_routerÚlast_thought)Úselfr7   rK   rL   s       r    Ú__init__zAgentDecisionCore.__init__`   sg   € ð (ˆŒØ2Að 3
ÕEVÝ$Ô3ðF
ñ F
ô F
ˆÔð '-ˆŒØ79ˆÔØ%&ˆÔÝ3JÑ3LÔ3LˆŒØ!WˆÔÐÐr   é   r1   r2   r&   r'   r3   c                 ó&   — |||||dœ| j         |<   d S )N)r1   r2   r&   r'   r3   )rQ   )rU   r1   r2   r&   r'   r3   s         r    Úregister_ground_dropz&AgentDecisionCore.register_ground_dropp   s+   € àØØØØð&
ð &
ˆÔ˜'Ñ"Ð"Ð"r   c                 ó<   — | j                              |d ¦  «         d S ©N)rQ   Úpop)rU   r1   s     r    Úremove_ground_dropz$AgentDecisionCore.remove_ground_dropy   s!   € ØÔ×Ò˜g tÑ,Ô,Ð,Ð,Ð,r   Úenginec                 óž  — |j                              | j        ¦  «        }|j        j                             | j        ¦  «        }|r|j        nd}|r|j        nd}|j                             | j        d¦  «        }|r|j        nd}|r|j	        nd}|dk    r||z  nd}	|r|j
        nt          j        }
g }|j                              ¦   «         D ]©\  }}|| j        k    rŒ|j        j                             |¦  «        }|r|j        dk    rŒ>|j        |z
  }|j        |z
  }t          j        ||¦  «        }|                     t#          ||j        |j        ||j        |j	        |j
        ¬¦  «        ¦  «         Œª|                     d„ ¬¦  «         g }| j                             ¦   «         D ]p\  }}|d         |z
  }|d         |z
  }t          j        ||¦  «        }|                     t)          ||d	         |d         |d         ||d
         ¬¦  «        ¦  «         Œq|                     d„ ¬¦  «         t+          | j        ||||||	|
||¬¦
  «
        S )zCExtracts spatial and tactical context from the authoritative world.g        g     @�@r   )r%   r&   r'   r(   r)   r*   r+   c                 ó   — | j         S r[   )r(   )Úes    r    ú<lambda>z4AgentDecisionCore.build_perception.<locals>.<lambda>    s   € ¨a¬j€ r   )Úkeyr&   r'   r2   r3   )r1   r2   r&   r'   r(   r3   c                 ó    — | j          | j        fS r[   )r3   r(   )Úds    r    rb   z4AgentDecisionCore.build_perception.<locals>.<lambda>²   s   € ¨Q¬X¨I°q´zÐ+B€ r   )
r7   r8   r9   r:   r;   r*   r<   r+   r=   r>   )Úactive_entitiesÚgetr7   Úcombat_engineÚactorsr&   r'   Úentity_z_levelsr;   r*   r+   r   ÚKIMÚitemsÚmathÚhypotÚappendr$   ÚsortrQ   r0   r6   )rU   r^   Úplayer_entityÚcombat_actorÚpxÚpyÚpzÚcur_hpr*   r<   ÚelemÚperceived_entitiesÚent_idÚentÚactorÚdxÚdyÚdistÚperceived_dropsÚd_idre   s                        r    Úbuild_perceptionz"AgentDecisionCore.build_perception|   s²  € àÔ.×2Ò2°4´>ÑBÔBˆØÔ+Ô2×6Ò6°t´~ÑFÔFˆà -Ð6ˆ]Œ_ˆ_°3ˆØ -Ð6ˆ]Œ_ˆ_°3ˆØÔ#×'Ò'¨¬¸Ñ<Ô<ˆà,8ÐD�Ô(Ð(¸fˆØ(4Ð@�Ô$Ð$¸&ˆØ&,¨q¢j j�6˜F‘?�?°cˆØ'3ÐIˆ|Ô#Ð#½Ô9Iˆð 57ÐØ!Ô1×7Ò7Ñ9Ô9ð 	ð 	‰KˆF�CØ˜œÒ'Ð'ØØÔ(Ô/×3Ò3°FÑ;Ô;ˆEØð ˜EÔ,°Ò1Ð1ØØ”˜‘ˆBØ”˜‘ˆBÝ”:˜b "Ñ%Ô%ˆDØ×%Ò%¥oØ Ø”%Ø”%ØØÔ#Ø”|Øœð'ñ 'ô 'ñ ô ð ð ð 	×ÒÐ$8Ð$8ÐÑ9Ô9Ð9ð 02ˆØÔ(×.Ò.Ñ0Ô0ð 	ð 	‰GˆD�!Ø�3”˜"‘ˆBØ�3”˜"‘ˆBÝ”:˜b "Ñ%Ô%ˆDØ×"Ò"¥=ØØ˜)œØ�C”&Ø�C”&ØØ˜”{ð$ñ $ô $ñ ô ð ð ð 	×ÒÐ!BÐ!BÐÑCÔCÐCå&Ø”nØØØØØØØØ.Ø(ð
ñ 
ô 
ð 	
r   Ú
perceptionc                 óZ  — |j         dk     re|j        r:|j        d         j        dk     r$d}|| _        t	          t
          j        |¬¦  «        S d}|| _        t	          t
          j        |¬¦  «        S | j        t          j
        k    rS|j        rL|j        d         }d|j        › d�}|| _        t	          t
          j        |j        |j        |j        |¬	¦  «        S |j        rÓ|j        d         }|j        d
k    rs| j                             |j        t(          j        ¦  «        }d|j        › d|j        j        › d|j        › d�}|| _        t	          t
          j        |j        d|¬¦  «        S d|j        › d|j        d›d�}|| _        t	          t
          j        |j        |j        |j        |¬¦  «        S |j        rL|j        d         }d|j        › d�}|| _        t	          t
          j        |j        |j        |j        |¬	¦  «        S d| _        t	          t
          j        | j        ¬¦  «        S )aM  
        Determines the immediate authoritative action for this tick.
        Follows priority:
        1. Emergency survival reflex (HP < 25%)
        2. Treasure Hunter stance high-value loot priority
        3. Combat engagement (approaching target or casting skill)
        4. Normal Loot pickup
        5. Idle / Patrol
        g      Ð?r   g      @ud   Sinh má»‡nh nguy ká»‹ch (<25%). KÃ­ch hoáº¡t Huyá»…n áº¢nh Bá»™ nÃ© trÃ¡nh sÃ¡t thÆ°Æ¡ng tá»©c thÃ¬!)rA   rH   uZ   Sinh má»‡nh tháº¥p. Tá»± Ä‘á»™ng phá»¥c dá»¥ng HoÃ n Há»“n Ä�an há»“i phá»¥c khÃ­ huyáº¿t.u   PhÃ¡t hiá»‡n tháº§n tháº¡ch u9   . Æ¯u tiÃªn tiáº¿n tá»›i thu tháº­p vÃ o Ká»³ TrÃ¢n CÃ¡c.)rA   rF   rD   rE   rH   g      @u   Má»¥c tiÃªu #u    thuá»™c tÃ­nh u   . Váº­n chuyá»ƒn tÃ¢m phÃ¡p u    xuáº¥t chiÃªu kháº¯c cháº¿.rW   )rA   rB   rC   rH   u   Tiáº¿p cáº­n quÃ¡i #u    (khoáº£ng cÃ¡ch z.1fzm).)rA   rB   rD   rE   rH   u   Nháº·t váº­t pháº©m rÆ¡i: ú.uD   Khu vá»±c an toÃ n. Tháº§n niá»‡m duy trÃ¬ tuáº§n tra cáº£nh giá»›i.)r<   r=   r(   rT   r@   r   ÚDODGEÚ
USE_POTIONrL   r   r   r>   r2   ÚLOOTr1   r&   r'   ÚELEMENT_COUNTERSrg   r+   r   rk   r%   ÚnameÚATTACK_SKILLÚMOVE_TOWARDSÚIDLE)rU   r‚   ÚreasonÚtop_dropÚtargetÚcounter_elems         r    Úevaluate_tick_actionz&AgentDecisionCore.evaluate_tick_actionÁ   s°  € ð Ô Ò%Ð%ØÔ)ð ¨jÔ.HÈÔ.KÔ.TÐWZÒ.ZÐ.ZØ�Ø$*�Ô!Ý&Ý /Ô 5Ø$ðñ ô ð ð rˆFØ &ˆDÔÝ"Ý+Ô6Ø ðñ ô ð ð Œ;�.Ô8Ò8Ð8¸ZÔ=TÐ8Ø!Ô.¨qÔ1ˆHØ°HÔ4DÐÐÐˆFØ &ˆDÔÝ"Ý+Ô0Ø'Ô/Ø!œØ!œØ ðñ ô ð ð Ô%ð 	ØÔ/°Ô2ˆFàŒ #Ò%Ð%Ø#Ô4×8Ò8¸¼ÍÔIYÑZÔZ�ða FÔ$4ð að aÀVÄ^ÔEXð að aØ1=Ô1Bðað að að ð %+�Ô!Ý&Ý /Ô <Ø%+Ô%5ØØ$ð	ñ ô ð ð l°Ô0@ÐkÐkÐSYÔSbÐkÐkÐkÐk�Ø$*�Ô!Ý&Ý /Ô <Ø%+Ô%5Ø#œXØ#œXØ$ðñ ô ð ð Ô"ð 
	Ø!Ô.¨qÔ1ˆHØE°(Ô2BÐEÐEÐEˆFØ &ˆDÔÝ"Ý+Ô0Ø'Ô/Ø!œØ!œØ ðñ ô ð ð cˆÔÝÝ'Ô,ØÔ'ð
ñ 
ô 
ð 	
r   ç±áé•²¡?ÚplanÚdtc           	      óh  — | xj         dz  c_         t          t          j        ¦   «         dz  ¦  «        }|j        t          j        t          j        fv rÊ|j                             | j	        ¦  «        }|r|j
        �|j        €dS |j
        |j        z
  }|j        |j        z
  }t          j        ||¦  «        }|dk    r^|j        t          j        k    rdnd}	||z  |	z  }
||z  |	z  }t!          | j	        |
|| j         |¬¦  «        }|                     |¦  «         dS dS |j        t          j        k    r“|j        �Š|j        j                             | j	        ¦  «        }|r|j        nt.          j        }|r|j        nd}t5          | j	        |j        |j        pd|d	z  || j         |¬
¦  «        }|                     |¦  «         dS dS |j        t          j        k    r|                     | j	        |¬¦  «         dS |j        t          j        k    r#|j         r|  !                    |j         ¦  «         dS dS dS )zHTransforms the high-level plan into authoritative server queue commands.rW   iè  Ngü©ñÒMbP?g      ð¿g      ð?)r%   Údir_xÚdir_yÚsequenceÚtimestamp_msg      I@g      ø?)Úattacker_idÚ	target_idrC   Ú
raw_damager+   r˜   r™   )r%   r™   )"rR   r,   ÚtimerA   r   r‹   Ú	MOVE_AWAYrf   rg   r7   rD   rE   r&   r'   rm   rn   r   Úqueue_move_commandrŠ   rB   rh   ri   r+   r   rk   Úbase_attackr   rC   Úqueue_skill_commandr…   Úqueue_evasionr‡   rF   r]   )rU   r“   r^   r”   Únow_msÚ
player_entr|   r}   r~   Ú
multiplierr–   r—   Úcmdrr   rw   Úbase_atkÚ	skill_cmds                    r    Údispatch_plan_to_serverz)AgentDecisionCore.dispatch_plan_to_server  sp  € ð 	ÐÔ Ñ"ÐÔÝ•T”Y‘[”[ 4Ñ'Ñ(Ô(ˆàÔ¥Ô <½oÔ>WÐXÐXÐXØÔ/×3Ò3°D´NÑCÔCˆJØð  ¤Ð!6¸$¼-Ð:OØ�à” ¤Ñ-ˆBØ” ¤Ñ-ˆBÝ”:˜b "Ñ%Ô%ˆDØ�eŠ|ˆ|Ø%)Ô%5½Ô9RÒ%RÐ%R˜T˜TÐX[�
Ø˜d™ jÑ0�Ø˜d™ jÑ0�å'Ø"œnØØØ!Ô2Ø!'ðñ ô �ð ×)Ò)¨#Ñ.Ô.Ð.Ð.Ð.ð ˆ|ð Ô¥Ô!=Ò=Ð=ØÔ$Ð0Ø%Ô3Ô:×>Ò>¸t¼~ÑNÔN�Ø/;ÐQ�|Ô+Ð+ÅÔAQ�Ø7CÐM˜<Ô3Ð3È�å.Ø $¤Ø"Ô3Ø!œ]Ð/¨aØ'¨#™~Ø Ø!Ô2Ø!'ðñ ô �	ð ×*Ò*¨9Ñ5Ô5Ð5Ð5Ð5ð 1Ð0ð  Ô¥Ô!6Ò6Ð6Ø× Ò ¨4¬>ÈÐ ÑOÔOÐOÐOÐOàÔ¥Ô!5Ò5Ð5ØÔ"ð =Ø×'Ò'¨Ô(;Ñ<Ô<Ð<Ð<Ð<ð 6Ð5ð=ð =r   )rW   )r’   )r   r   r   Ú__doc__r   ÚMOCrk   ÚTHOÚTHUYÚHOArˆ   r   r   r,   r   r   rV   r4   r.   rY   r]   r
   r6   r�   r@   r‘   r©   r   r   r    rJ   rJ   O   s¸  € € € € € ðð ð 	Ô˜,Ô*ØÔ˜,Ô*ØÔ˜<Ô+ØÔ˜,Ô+ØÔ˜,Ô*ðÐð 8<Ø!/Ô!8ð	Xð XàðXð "Ð"3Ô4ðXð ð	Xð
 
ðXð Xð Xð Xð 
ð 
¨Cð 
¸#ð 
À%ð 
ÈEð 
Ð[^ð 
Ðgkð 
ð 
ð 
ð 
ð-¨#ð -°$ð -ð -ð -ð -ðC
Ð'7ð C
Ð<Sð C
ð C
ð C
ð C
ðJU
Ð/Fð U
È?ð U
ð U
ð U
ð U
ðv ð	6=ð 6=àð6=ð !ð6=ð ð	6=ð
 
ð6=ð 6=ð 6=ð 6=ð 6=ð 6=r   rJ   )#rª   Úenumr   Útypingr   r   r   r   Údataclassesr   r	   rm   r�   Úworld.server_engine_loopr
   r   r   Úworld.combat_enginer   r   Úworld.martial_matrixr   Úagent.llm_provider_clientr   r   r   r   r   r4   r   r$   r0   r6   r@   rJ   r   r   r    ú<module>r¶      sw  ððð ð Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø €€€Ø €€€à \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð(ð (ð (ð (ð (�S˜$ñ (ô (ð (ð €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�˜dÐ#Ñ#Ô#ð
&ð 
&ð 
&ð 
&ð 
&ñ 
&ô 
&ñ $Ô#ð
&ð €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð=ð =ð =ð =ð =ñ =ô =ð =ð =ð =r   