§
    ú@ºjøŠ  ã                   ó@  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZ dZdZdZd	Z G d
„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Zdedefd„Z G d„ d¦  «        ZeZdS )u…   
Cáº§u Ná»‘i IPC Ä�á»�c Telemetry tá»« AutoPOE2 Core Engine qua Shared Memory
(Windows Seqlock Double-Buffer + Low HP Passive Alert)
é    N)Ú	dataclassÚfield)ÚIntEnum)ÚCallableÚListÚOptionalzLocal\POE2_Auto_SharedMem_v1i  @ l   OTªÉz i  c                   óV   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdS )ÚMacroOpCoder   é   é   é   é   é   é   é   é   é	   é
   é   é   é_   é`   éa   éb   éc   N)Ú__name__Ú
__module__Ú__qualname__ÚIDLEÚNAVIGATE_TO_COORDÚENGAGE_TARGETÚPICKUP_ITEMÚCAST_EMERGENCY_PORTALÚEXECUTE_STASH_ROUTINEÚEXECUTE_VENDOR_ROUTINEÚEXECUTE_MAP_DEVICE_ROUTINEÚEXECUTE_NPC_INTERACT_ROUTINEÚSELECT_ATLAS_NODEÚVERIFY_MAP_DEVICE_UIÚFORCE_PORTAL_RETURNÚSET_COMBAT_PROFILEÚSET_MAP_SCENARIOÚTRIGGER_WORLD_MAP_TRAVELÚTRIGGER_AUTO_LOGINÚRECALIBRATE_XYZÚ
PANIC_STOP© ó    ú:C:\Projects\AutoPOE2\src\assistant_tool\core_shm_bridge.pyr
   r
      su   € € € € € Ø€DØÐØ€MØ€KØÐØÐØÐØ!"ÐØ#$Ð ØÐØÐØÐØÐØÐØ!ÐØÐØ€OØ€J€J€Jr2   r
   c                   ó   — e Zd ZdZdZdZdZdS )ÚCombatProfileuW   Há»“ sÆ¡ chiáº¿n thuáº­t giao chiáº¿n (Combat Profile) tÆ°Æ¡ng thÃ­ch C++ protocol.hpp.r   r   r   N)r   r   r   Ú__doc__ÚMOB_CLEARINGÚ
BOSS_BURSTÚSURVIVAL_KITINGr1   r2   r3   r5   r5   '   s#   € € € € € ØaÐaØ€LØ€JØ€O€O€Or2   r5   c                   ó>   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdS )ÚCharacterLifecycleStateuX   MÃ¡y tráº¡ng thÃ¡i quáº£n lÃ½ vÃ²ng Ä‘á»�i nhÃ¢n váº­t chuáº©n Doc 58 (BotLifecycleFSM).r   r   r   r   r   r   r   r   r   r   r   N)r   r   r   r6   ÚUNINITIALIZED_OR_LOADINGÚHIDEOUT_IDLEÚHIDEOUT_STASHINGÚHIDEOUT_PREPARE_MAPÚHIDEOUT_MAP_DEVICE_APPROACHÚHIDEOUT_MAP_DEVICE_ACTIVATEÚHIDEOUT_ENTER_PORTALÚMAP_LOADING_GRACEÚMAP_FARMING_COMBATÚMAP_COMPLETED_PORTAL_OUTÚEMERGENCY_RECOVERYr1   r2   r3   r;   r;   -   sW   € € € € € ØbÐbØ ÐØ€LØÐØÐØ"#ÐØ"#ÐØÐØÐØÐØ ÐØÐÐÐr2   r;   c                   ó  — e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dS )ÚPlayerTelemetryr   Úplayer_addrÚ
current_hpÚmax_hpÚcurrent_manaÚmax_manaÚ
current_esÚmax_esÚcurrent_wardÚmax_wardÚcurrent_spiritÚ
max_spiritç      Y@Úhp_percentageç        Úpos_xÚpos_yÚpos_zr   Úactive_weapon_setÚmovement_flagsÚdebuff_maskN)r   r   r   rI   ÚintÚ__annotations__rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rU   ÚfloatrW   rX   rY   rZ   r[   r\   r1   r2   r3   rH   rH   ;   s-  € € € € € € à€K�ÐÐÑØ€J�ÐÐÑØ€FˆC€O€O�OØ€L�#ÐÐÑØ€HˆcÐÐÑØ€J�ÐÐÑØ€FˆC€O€O�OØ€L�#ÐÐÑØ€HˆcÐÐÑØ€N�CÐÐÑØ€J�ÐÐÑØ €M�5Ð Ð Ñ Ø€Eˆ5ÐÐÑØ€Eˆ5ÐÐÑØ€Eˆ5ÐÐÑØÐ�sÐÐÑØ€N�CÐÐÑØ€K�ÐÐÑÐÐr2   rH   c                   ó<  — e Zd ZU dZeed<   dZeed<   dZeed<    e	e
¬¦  «        Ze
ed<   dZeed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<    e	e¬¦  «        Zee         ed<   ej        Zeed<   dS )ÚCoreTelemetrySnapshotFÚ	is_onliner   Úsnapshot_idÚtimestamp_ms)Údefault_factoryÚplayerÚentity_countÚmonsters_countÚitems_countÚportals_countÚ
npcs_countÚ Ú	area_nameÚ
area_levelÚmonsters_alive_totalÚentities_monster_countÚ	area_codeÚ	area_seedÚentitiesÚlifecycle_stateN)r   r   r   rb   Úboolr^   rc   r]   rd   r   rH   rf   rg   rh   ri   rj   rk   rm   Ústrrn   ro   rp   rq   rr   Úlistrs   r   Údictr;   r<   rt   r1   r2   r3   ra   ra   P   sF  € € € € € € à€IˆtÐÐÑØ€K�ÐÐÑØ€L�#ÐÐÑØ#˜e°OÐDÑDÔD€FˆOÐDÐDÑDØ€L�#ÐÐÑØ€N�CÐÐÑØ€K�ÐÐÑØ€M�3ÐÐÑØ€J�ÐÐÑØ€IˆsÐÐÑØ€J�ÐÐÑØ !Ð˜#Ð!Ð!Ñ!Ø"#Ð˜CÐ#Ð#Ñ#Ø€IˆsÐÐÑØ€IˆsÐÐÑØ ˜5°Ð6Ñ6Ô6€Hˆd�4ŒjÐ6Ð6Ñ6Ø/FÔ/_€OÐ,Ð_Ð_Ñ_Ð_Ð_r2   ra   Úslot_bufÚreturnc                 ó   ‡6— t          j        d| d¦  «        \  }}}}}}}}}	}
}}}}}}}}}}}t          j        d| d¦  «        \  }}}}}|                     d¦  «        d                              dd¬¦  «        }|                     d¦  «        d                              dd¬¦  «        Š6|
dk    r|	|
z  d	z  nd	}t          j        d
| d¦  «        d         }g }d}d} d}!d}"d|cxk     rdk    rÔn nÑt	          |d¦  «        }#t          |#¦  «        D ]±}$d|$dz  z   }%t          j        d| |%¦  «        \  }&}'}(})}*}+},}-}.}/}0}1}2|2                     d¦  «        d                              dd¬¦  «        }3|'dk    r|dz  }n#|'dk    r| dz  } n|'dk    r|!dz  }!n|'dk    r|"dz  }"|                     |&|'|(|)|*|+|,|-|.|/|0|1|1|3dœ¦  «         Œ²|dz	  dz  }4|4dv rt          j        }5nû|4dk    rt          j	        }5nè|4dk    rt          j
        }5nÕ|4dk    rt          j        }5nÂ|4dk    rt          j        }5n¯|4dv r|dz  rt          j        nt          j        }5n�|4dk    rt          j        }5nz|4dk    rt          j        }5ng|4dk    rt          j        }5nT‰6st          j        }5nEt%          ˆ6fd„d D ¦   «         ¦  «        rt          j        }5n|dz  rt          j        nt          j        }5t'          dEi d!d"“d#|“d$|“d%t)          dEi d&|“d'|	“d(|
“d)|“d*|“d+|“d,|“d-|“d.|“d/|“d0|“d1|“d2|“d3|“d4|“d5|“d6|“d7|“Ž“d8|“d9|“d:| “d;|!“d<|"“d=‰6“d>|“d?|“d@|“dA|“dB|“dC|“dD|5“ŽS )FuÒ   Giáº£i mÃ£ nhá»‹ phÃ¢n TelemetryPacket khá»›p 100% vá»›i C++ protocol.hpp (39,112 bytes).
    Single Source of Truth (SSoT) cho viá»‡c unpack telemetry á»Ÿ cáº£ luá»“ng Ä‘á»�c tá»©c thá»�i vÃ  worker loop.
    z<QQQfffffIIIIIIIIIIIIQr   z
<QII32s48sih˜  ó    zutf-8Úignore)ÚerrorsrT   z<Iéd   é   éh   éX   z<IHHffffIIHHI48sr   r   r   r   )ÚidÚtypeÚrarityrW   rX   rY   ÚdistÚhprK   ÚstaggerÚanimÚflagsÚextra_flagsÚnameé   éÿ   )r   r   r   r   r   r   )r   r   r   r   r   é   c              3   óD   •K  — | ]}|‰                      ¦   «         v V — Œd S ©N)Úlower)Ú.0Úhrm   s     €r3   ú	<genexpr>z*unpack_telemetry_packet.<locals>.<genexpr>¼   s2   øè è € Ð^Ð^¨A��i—o’oÑ'Ô'Ð'Ð^Ð^Ð^Ð^Ð^Ð^r2   )ÚhideoutÚtownÚ
encampmentÚcaravanrb   Trc   rd   rf   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rU   rW   rX   rY   rZ   r[   r\   rg   rh   ri   rj   rk   rm   rn   ro   rp   rq   rr   rs   rt   r1   )ÚstructÚunpack_fromÚsplitÚdecodeÚminÚrangeÚappendr;   r=   r>   r@   rA   rB   rC   rD   rE   rF   r<   Úanyra   rH   )7ry   Úsnap_idÚtsÚpaddrÚpxÚpyÚpzÚyawÚpitchÚcur_hprK   Úcur_manarM   Úcur_esrO   Úcur_wardrQ   Úcur_spÚmax_spÚ
weapon_setÚ	mov_flagsr\   Úarea_tsrn   rr   Úarea_code_bytesÚarea_name_bytesrq   Úpctrg   Úparsed_entitiesÚmonsters_cntÚ	items_cntÚportals_cntÚnpcs_cntÚ
read_limitÚiÚent_offÚeidÚetypeÚerarityÚexÚeyÚezÚedistÚehpÚemax_hpÚestaggerÚeanimÚeflagsÚename_bÚenameÚ	sub_statert   rm   s7                                                         @r3   Úunpack_telemetry_packetrÍ   e   s‚  ø€ õ 	ÔÐ3°X¸qÑAÔAñ	Ø��U˜B  B¨¨UØ�˜ (¨F°FØ�(˜F F¨J¸	À;õ HNÔGYØ�h ñHô HÑD€GˆZ˜ O°_ð  ×%Ò% gÑ.Ô.¨qÔ1×8Ò8¸ÈÐ8ÑRÔR€IØ×%Ò% gÑ.Ô.¨qÔ1×8Ò8¸ÈÐ8ÑRÔR€IØ'-°¢z zˆ6�F‰?˜UÑ"Ð"°u€CåÔ% d¨H°cÑ:Ô:¸1Ô=€LØ"$€OØ€LØ€IØ€KØ€Hàˆ<ÐÐÒÐ˜3ÒÐÐÐÐÝ˜ sÑ+Ô+ˆ
Ý�zÑ"Ô"ð  	ð  	ˆAØ˜A ™F‘lˆGõ Ô"Ð#5°xÀÑIÔIñØ�U˜G R¨¨R°Ø�W˜h¨¨v°wð —M’M 'Ñ*Ô*¨1Ô-×4Ò4°WÀXÐ4ÑNÔNˆEØ˜ŠzˆzØ Ñ!��Ø˜!’�Ø˜Q‘�	�	Ø˜!’�Ø˜qÑ ��Ø˜!’�Ø˜A‘�à×"Ò"ØØØ!ØØØØØØ!Ø#ØØØ%Øð$ð $ñ ô ð ð ð$ ˜b‘ DÑ(€IØ�IÐÐÝ1Ô>ˆˆØ	�aŠˆÝ1ÔBˆˆØ	�aŠˆÝ1ÔMˆˆØ	�aŠˆÝ1ÔMˆˆØ	�aŠˆÝ1ÔFˆˆØ	�jÐ	 Ð	 à:CÀb¹.ð <Õ#Ô5Ð5Ý(Ô;ð 	ˆð 
�bŠˆÝ1ÔJˆˆØ	�bŠˆÝ1ÔDˆˆØ	�bŠˆÝ1ÔJˆˆð ð 	Ý5ÔNˆOˆOÝÐ^Ð^Ð^Ð^Ð1]Ð^Ñ^Ô^Ñ^Ô^ð 	Ý5ÔBˆOˆOð ?HÈ"¹nð @Õ'Ô9Ð9Ý,Ô?ð õ
 !ð %ð %ð %Ø�$ð%à�Gð%ð �Rð%õ ð 
ð 
ð 
Ø˜ð
à�vð
ð �6ð
ð "˜ð	
ð
 �Xð
ð �vð
ð �6ð
ð "˜ð
ð �Xð
ð "˜6ð
ð �vð
ð ˜#ð
ð �"ð
ð �"ð
ð �"ð
ð  )˜jð!
ð" %˜9ð#
ð$ $˜ð%
ð 
ð	%ð0 "�\ð1%ð2 $�|ð3%ð4 �Ið5%ð6 "�kð7%ð8 �8ð9%ð: �)ð;%ð< �:ð=%ð> *˜\ð?%ð@  ,˜|ðA%ðB �)ðC%ðD �)ðE%ðF !�ðG%ðH (˜ðI%ð %r2   c                   ó  — e Zd ZdZdFdedefd„Zdeegdf         fd	„Zdee	e	egdf         fd
„Z
defd„Zdefd„Zdefd„ZdGde	defd„Zdefd„Zdefd„Zd„ Zdefd„Zd„ Zdefd„Zd„ Zdefd„Zde	de	defd„Zdefd„ZdHd!e	defd"„ZdHd!e	defd#„ZdId%ed!e	defd&„Zdefd'„ZdJde	d)e	d*e	defd+„Z defd,„Z!dKd.e	d/e	defd0„Z"dLd2e	d3edefd4„Z#dMd6e	d7e	d8e	d!e	def
d9„Z$dNd<e	d=e	d>ed!e	def
d?„Z%dOd@edAedBe	dCe	d!e	defdD„Z&dHd!e	defdE„Z'dS )PÚCoreShmBridgeu½   
    Káº¿t ná»‘i vÃ o khá»‘i nhá»› chia sáº» IPC cá»§a AutoPOE2 Core Engine.
    Ä�á»�c dá»¯ liá»‡u Telemetry thá»�i gian thá»±c (30Hz) vÃ  phÃ¡t tÃ­n hiá»‡u cáº£nh bÃ¡o thá»¥ Ä‘á»™ng.
    ç     €A@çL7‰A`å ?Úlow_hp_thresholdÚpoll_intervalc                 óÚ   — || _         || _        d | _        d| _        d | _        t          j        ¦   «         | _        g | _        g | _	        t          ¦   «         | _        d| _        d| _        d S )NFrV   r   )rÒ   rÓ   Ú_shmÚ_runningÚ_threadÚ	threadingÚLockÚ	_cmd_lockÚ
_listenersÚ_alert_listenersra   Úlast_snapshotÚ_last_alert_timeÚ	_last_seq)ÚselfrÒ   rÓ   s      r3   Ú__init__zCoreShmBridge.__init__ñ   sf   € Ø 0ˆÔØ*ˆÔà)-ˆŒ	ØˆŒØ37ˆŒÝ"œÑ)Ô)ˆŒØIKˆŒØIKˆÔå2Ñ4Ô4ˆÔØ #ˆÔØˆŒˆˆr2   ÚcbNc                 ó:   — | j                              |¦  «         dS )uF   Ä�Äƒng kÃ½ nháº­n snapshot telemetry má»›i (má»—i láº§n cáº­p nháº­t).N)rÛ   r    ©rà   râ   s     r3   Úregister_listenerzCoreShmBridge.register_listener   s   € àŒ×Ò˜rÑ"Ô"Ð"Ð"Ð"r2   c                 ó:   — | j                              |¦  «         dS )uh   Ä�Äƒng kÃ½ nháº­n cáº£nh bÃ¡o kháº©n cáº¥p khi HP tá»¥t dÆ°á»›i ngÆ°á»¡ng (current_hp, max_hp, percent).N)rÜ   r    rä   s     r3   Úregister_low_hp_alertz#CoreShmBridge.register_low_hp_alert  s   € àÔ×$Ò$ RÑ(Ô(Ð(Ð(Ð(r2   rz   c                 ó*   — |                       ¦   «         S )uX   Káº¿t ná»‘i vÃ o khá»‘i nhá»› chia sáº» IPC (Backward compatibility cho Playbook/Agent).)Ú	_open_shm©rà   s    r3   ÚconnectzCoreShmBridge.connect  s   € à�~Š~ÑÔÐr2   c                 ó.   — t          | j        du¦  «        S )uI   Kiá»ƒm tra xem cáº§u ná»‘i SHM Ä‘Ã£ má»Ÿ vÃ  Ä‘ang káº¿t ná»‘i hay chÆ°a.N)ru   rÕ   rê   s    r3   Úis_connectedzCoreShmBridge.is_connected  s   € å�D”I TÐ)Ñ*Ô*Ð*r2   c                 ó|   — | j         s|                      ¦   «         s| j        S |                      ¦   «          | j        S )u6   Ä�á»�c vÃ  tráº£ vá»� snapshot telemetry tá»©c thá»�i.)rÕ   ré   rÝ   Ú_read_telemetry_oncerê   s    r3   Úread_telemetry_snapshotz%CoreShmBridge.read_telemetry_snapshot  sB   € àŒyð 	*Ø—>’>Ñ#Ô#ð *ØÔ)Ð)Ø×!Ò!Ñ#Ô#Ð#ØÔ!Ð!r2   é   Ú
max_age_msc                 ó:  — | j         s|                      ¦   «         sdS 	 t          j        d| j         d¦  «        \  }}}}}}}t	          t          j        ¦   «         dz  ¦  «        }	t          |t          k    o|dk    o|	|z
  |k     ¦  «        S # t          $ r Y dS w xY w)uP   Kiá»ƒm tra xem C++ Core cÃ³ Ä‘ang phÃ¡t heartbeat thá»�i gian thá»±c hay khÃ´ng.Fz<QIIQQQQr   éè  r   )	rÕ   ré   rš   r›   r]   Útimeru   ÚSHARED_MEM_MAGICÚ	Exception)
rà   rò   ÚmagicÚprotoÚ
is_runningÚ	telem_seqÚcmd_seqÚcmd_readÚcore_hbÚnow_mss
             r3   Úis_heartbeat_alivez CoreShmBridge.is_heartbeat_alive  s¹   € àŒyð 	Ø—>’>Ñ#Ô#ð Ø�uð	ÝNTÔN`ÐakÐmqÔmvÐxyÑNzÔNzÑKˆE�5˜* i°¸(ÀGÝ�œ™œ tÑ+Ñ,Ô,ˆFÝ˜Õ"2Ò2Ðm¸ÀqºÐmÈvÐX_ÑO_ÐblÒOlÑnÔnÐnøÝð 	ð 	ð 	Ø�5�5ð	øøøs   ŸA,B Â
BÂBc                 ó  — |                       ¦   «         }|r|                      ¦   «         n| j        }|                      ¦   «         ||j        |j        |j        |j        |j        t          |j
        ¦  «        |j
        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        dœ
|j        |j        dœS )uM   Tráº£ vá»� tá»« Ä‘iá»ƒn tráº¡ng thÃ¡i tá»•ng há»£p phá»¥c vá»¥ API/Telemetry.)
r‡   rK   Úhp_pctÚesrO   ÚmanarM   rW   rX   rY   )Úshm_connectedÚheartbeat_aliverb   rc   rd   rm   rn   rt   Úlifecycle_state_namerf   rh   ri   )r   rð   rÝ   rí   rb   rc   rd   rm   rn   r]   rt   rŒ   rf   rJ   rK   rU   rN   rO   rL   rM   rW   rX   rY   rh   ri   )rà   ÚaliveÚsnaps      r3   Úget_status_dictzCoreShmBridge.get_status_dict$  sì   € à×'Ò'Ñ)Ô)ˆØ16ÐNˆt×+Ò+Ñ-Ô-Ð-¸DÔ<Nˆà!×.Ò.Ñ0Ô0Ø$ØœØÔ+Ø Ô-ØœØœ/Ý" 4Ô#7Ñ8Ô8Ø$(Ô$8Ô$=à”kÔ,Øœ+Ô,Øœ+Ô3Ø”kÔ,Øœ+Ô,ØœÔ0Ø œKÔ0ØœÔ*ØœÔ*ØœÔ*ðð ð #Ô1ØÔ+ð/
ð 
ð 	
r2   c                 óš   — | j         rdS d| _         t          j        | j        dd¬¦  «        | _        | j                             ¦   «          dS )u0   Khá»Ÿi Ä‘á»™ng luá»“ng Ä‘á»�c dá»¯ liá»‡u ná»�n.TÚCoreShmBridgeWorker)ÚtargetÚdaemonrŒ   )rÖ   rØ   ÚThreadÚ_worker_loopr×   Ústartrê   s    r3   r  zCoreShmBridge.startB  sN   € àŒ=ð 	Ø�4àˆŒÝ Ô'¨tÔ/@ÈÐTiÐjÑjÔjˆŒØŒ×ÒÑÔÐØˆtr2   c                 ó²   — d| _         | j        r4| j                             ¦   «         r| j                             d¬¦  «         |                      ¦   «          dS )u"   Dá»«ng luá»“ng Ä‘á»�c dá»¯ liá»‡u.Fç      ð?)ÚtimeoutN)rÖ   r×   Úis_aliveÚjoinÚ
_close_shmrê   s    r3   ÚstopzCoreShmBridge.stopL  sW   € àˆŒØŒ<ð 	+˜DœL×1Ò1Ñ3Ô3ð 	+ØŒL×Ò cÐÑ*Ô*Ð*Ø�ŠÑÔÐÐÐr2   c                 óZ  — | j         rdS 	 t          j        dt          t          ¬¦  «        | _         | j         d d…         }t	          j        d|d d…         ¦  «        \  }}|t          k    s|t          k    r|                      ¦   «          dS d| _	        dS # t          $ r d | _         Y dS w xY w)	NTéÿÿÿÿ)Útagnamer�   z<QIr   Fr   )rÕ   ÚmmapÚSHM_SIZEÚSHM_NAMErš   Úunpackrö   ÚPROTOCOL_VERSIONr  rß   r÷   )rà   Úheaderrø   rù   s       r3   ré   zCoreShmBridge._open_shmS  s»   € ØŒ9ð 	Ø�4ð	Ýœ	 "¥h½ÐAÑAÔAˆDŒIà”Y˜s ˜s”^ˆFÝ!œ=¨°°s¸°s´Ñ<Ô<‰LˆE�5ØÕ(Ò(Ð(¨EÕ5EÒ,EÐ,EØ—’Ñ!Ô!Ð!Ø�uØˆDŒNØ�4øÝð 	ð 	ð 	ØˆDŒIØ�5�5ð	øøøs   ‹A?B ÂB ÂB*Â)B*c                 ó|   — | j         r4	 | j                              ¦   «          n# t          $ r Y nw xY wd | _         d S d S r‘   )rÕ   Úcloser÷   rê   s    r3   r  zCoreShmBridge._close_shmd  s[   € ØŒ9ð 	ðØ”	—’Ñ!Ô!Ð!Ð!øÝð ð ð Ø�ðøøøàˆDŒIˆIˆIð	ð 	s   ‰# £
0¯0c           	      ó  — | j         sdS 	 t          t          j        ¦   «         dz  ¦  «        }	 t          j        d|¦  «        | j         dd…<   n%# t
          $ r |                      ¦   «          Y dS w xY wt          j        d| j         d¦  «        \	  }}}}}}}}	}
|dk    o||z
  d	k     }|s| j        j	        rd| j        _	        dS d }t          d
¦  «        D ]‹}
t          j        d| j         d
¦  «        d         }|dk    r na|dz  }|dk    rdnd}t          | j         ||dz   …         ¦  «        }t          j        d| j         d
¦  «        d         }||k    r|}|| _         nŒŒ|sdS t          |¦  «        }|| _        dS # t
          $ r Y dS w xY w)NFrô   ú<Qé0   é8   ú
<QIIQQQQQQr   r   rñ   r�   é   é  éÈ˜  T)rÕ   r]   rõ   rš   Úpackr÷   r  r›   rÝ   rb   rŸ   Úbytesrß   rÍ   )rà   rÿ   rø   rù   rú   rû   rü   rý   rþ   Úagent_hbÚ_Ú
core_alivery   Ús1ÚslotÚslot_offsetÚdataÚs2Úsnapshots                      r3   rï   z"CoreShmBridge._read_telemetry_oncel  s  € ØŒyð 	Ø�5ð$	Ý�œ™œ tÑ+Ñ,Ô,ˆFðÝ#)¤;¨t°VÑ#<Ô#<�”	˜"˜R˜%Ñ Ð øÝð ð ð Ø—’Ñ!Ô!Ð!Ø�u�uðøøøõ \bÔ[mÐnzð  }Aô  }Fð  HIñ  \Jô  \JÑXˆE�5˜* i°¸(ÀGÈXÐWXØ$¨š/ÐH°¸Ñ0@À4Ò0GˆJØð ØÔ%Ô/ð 9Ø38�DÔ&Ô0Ø�uàˆHÝ˜2‘Y”Yð ð �ÝÔ'¨¨d¬i¸Ñ<Ô<¸QÔ?�Ø˜’7�7Ø�EØ˜A‘v�Ø(,°ª	¨	˜f˜f°w�Ý˜TœY {°;ÀÑ3FÐ'FÔGÑHÔH�ÝÔ'¨¨d¬i¸Ñ<Ô<¸QÔ?�Ø˜’8�8Ø#�HØ%'�D”NØ�Eð ð
 ð Ø�uå.¨xÑ8Ô8ˆHØ!)ˆDÔØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøsB   ‹#E= ¯A ÁE= ÁA1Á-E= Á0A1Á1AE= ÃBE= Å%E= Å=
FÆ
Fc           	      óF  — | j         �r	 | j        €[|                      ¦   «         sG| j        j        r&d| j        _        |                      | j        ¦  «         t          j        d¦  «         Œk| j        }|€Œut          t          j        ¦   «         dz  ¦  «        }	 t          j
        d|¦  «        |dd…<   n$# t          $ r |                      ¦   «          Y ŒÔw xY wt          j        d|d¦  «        \	  }}}}}}}	}
}|d	k    o||	z
  d
k     }|sH| j        j        r&d| j        _        |                      | j        ¦  «         t          j        d¦  «         �ŒQ|dk    s|| j        k    rt          j        | j        ¦  «         �Œ}d }t!          d¦  «        D ]‡}t          j        d|d¦  «        d         }|dk    s|| j        k    r nW|d	z  }|dk    rdnd}t#          |||dz   …         ¦  «        }t          j        d|d¦  «        d         }||k    r|}|| _         nŒˆ|st          j        | j        ¦  «         �Œ3t%          |¦  «        }|j        j        }|j        j        }|j        j        }|| _        |                      |¦  «         |dk    rP|| j        k     rE|dk    r?t          j        ¦   «         }|| j        z
  dk    r|| _        |                      |||¦  «         n$# t          $ r |                      ¦   «          Y nw xY wt          j        | j        ¦  «         | j         �°d S d S )NFr  rô   r%  r&  r'  r(  r   r   rñ   g      à?r�   r)  r*  r+  gÍÌÌÌÌÌü?)rÖ   rÕ   ré   rÝ   rb   Ú_notify_snapshotrõ   Úsleepr]   rš   r,  r÷   r  r›   rß   rÓ   rŸ   r-  rÍ   rf   rU   rJ   rK   rÒ   rÞ   Ú_notify_low_hp)rà   Úshmrÿ   rø   rù   rú   rû   rü   rý   rþ   r.  r/  r0  ry   r1  r2  r3  r4  r5  r6  rµ   rª   rK   Únows                           r3   r  zCoreShmBridge._worker_loop•  s¦  € ØŒmñ N	+ðK"Ø”9Ð$ØŸ>š>Ñ+Ô+ð !ØÔ-Ô7ð FØ;@˜DÔ.Ô8Ø ×1Ò1°$Ô2DÑEÔEÐEÝœ
 3™œ˜Ø à”i�Ø�;Øõ �TœY™[œ[¨4Ñ/Ñ0Ô0�ðÝ!'¤¨T°6Ñ!:Ô!:�C˜˜2˜‘J�JøÝ ð ð ð Ø—O’OÑ%Ô%Ð%Ø�Hðøøøõ
 `fÔ_qÐr~ð  ADð  FGñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð )¨AšoÐL°F¸WÑ4DÀtÒ4K�
Ø!ð ØÔ)Ô3ð BØ7<˜Ô*Ô4Ø×-Ò-¨dÔ.@ÑAÔAÐAÝ”J˜s‘O”O�OÙð  ’>�> Y°$´.Ò%@Ð%@Ý”J˜tÔ1Ñ2Ô2Ð2Ùð  �Ý˜r™œð ð �AÝÔ+¨D°#°rÑ:Ô:¸1Ô=�BØ˜Q’w�w "¨¬Ò"6Ð"6Ø˜Ø ™6�DØ,0°AªI¨I & &¸7�Kå   [°¸uÑ1DÐ%DÔ!EÑFÔF�DÝÔ+¨D°#°rÑ:Ô:¸1Ô=�BØ˜R’x�xØ#'˜Ø)+˜œØ˜ð  ð
  ð Ý”J˜tÔ1Ñ2Ô2Ð2Ùå2°8Ñ<Ô<�Ø”oÔ3�Ø!œÔ3�Ø!œÔ/�à%-�Ô"Ø×%Ò% hÑ/Ô/Ð/ð ˜A’:�: #¨Ô(=Ò"=Ð"=À&È1Â*À*Ýœ)™+œ+�CØ˜TÔ2Ñ2°SÒ8Ð8Ø03˜Ô-Ø×+Ò+¨F°F¸CÑ@Ô@Ð@øøåð "ð "ð "à—’Ñ!Ô!Ð!Ð!Ð!ð"øøøõ ŒJ�tÔ)Ñ*Ô*Ð*ð] Œmñ N	+ð N	+ð N	+ð N	+ð N	+sW   ŠA!K Á,	K Á6#K ÂB5 Â4K Â5CÃK ÃCÃA:K Å*K Å>B4K È4B%K ËK;Ë:K;r6  c                 óR   — | j         D ]}	  ||¦  «         Œ# t          $ r Y Œw xY wd S r‘   )rÛ   r÷   )rà   r6  râ   s      r3   r8  zCoreShmBridge._notify_snapshotæ  sQ   € Ø”/ð 	ð 	ˆBðØ��8‘”��øÝð ð ð Ø�ðøøøð	ð 	s   ‹—
$£$rª   rK   rµ   c                 óV   — | j         D ] }	  ||||¦  «         Œ# t          $ r Y Œw xY wd S r‘   )rÜ   r÷   )rà   rª   rK   rµ   râ   s        r3   r:  zCoreShmBridge._notify_low_hpí  sZ   € ØÔ'ð 	ð 	ˆBðØ��6˜6 3Ñ'Ô'Ð'Ð'øÝð ð ð Ø�ðøøøð	ð 	s   ‹™
&¥&c                 ó,  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}}	}
||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        d	d	d	d
d
d
¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uA   Gá»­i lá»‡nh PANIC_STOP vÃ o Core Engine qua Command Ring Buffer.FNé@   r(  r�   é  0 ú	<QIfffIIIiç  rV   r   r|   r%  r   é   é    T)
rÕ   rÚ   rš   r  r,  r]   r
   r0   Úljustr÷   ©rà   Úheader_datarø   rù   rú   rû   rü   rý   rþ   r.  r/  Úslot_idxÚslot_offÚ	cmd_bytess                 r3   Úsend_panic_stopzCoreShmBridge.send_panic_stopô  sã  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>TÑ:UÔ:UÐWZÐ\_ÐadÐfgÐijÐlmÑnÔn�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó5   ‘D	“7C-ÁBC-Ã-
DÃ7D	ÄDÄD	Ä	DÄDéˆ  Ú
timeout_msc                 óL  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}	}
}||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        d|dz   t          t          j        ¦  «        d	d	d	d
dt          |¦  «        ¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uY   Gá»­i lá»‡nh CAST_EMERGENCY_PORTAL (opCode = 4) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  r   rV   r   r   r|   r%  rC  rD  T)
rÕ   rÚ   rš   r  r,  r]   r
   r#   rE  r÷   ©rà   rN  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                  r3   Úsend_cast_emergency_portalz(CoreShmBridge.send_cast_emergency_portal  s  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°W¸q±[Å#ÅkÔFgÑBhÔBhÐjmÐorÐtwÐyzÐ|}õ  @Cð  DNñ  @Oô  @Oñ  Pô  P�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ  ð ð ð Øð#	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð øøøð!	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó5   ‘D“7C=ÁBC=Ã=
DÄDÄDÄDÄDÄ Dc                 óL  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}	}
}||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        d|dz   t          t          j        ¦  «        d	d	d	d
dt          |¦  «        ¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uX   Gá»­i lá»‡nh FORCE_PORTAL_RETURN (opCode = 11) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  r   rV   r   r   r|   r%  rC  rD  T)
rÕ   rÚ   rš   r  r,  r]   r
   r*   rE  r÷   rP  s                  r3   Úsend_force_portal_returnz&CoreShmBridge.send_force_portal_return&  s   € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�Ý"œK¨°W¸q±[Å#ÅkÔFeÑBfÔBfÐhkÐmpÐruÐwxÐz{õ  ~Að  BLñ  ~Mô  ~Mñ  Nô  N�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ ð ð ð Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ðøøøð	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rR  rô   Úprofilec                 ó€  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}	}
}}||	z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        d|dz   t          t          j        ¦  «        t          t          |¦  «        ¦  «        d	d	d
dt          |¦  «        ¦	  «	        }| 	                    dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uW   Gá»­i lá»‡nh SET_COMBAT_PROFILE (opCode = 12) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  r   rV   r   r   r|   r%  rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r+   r_   rE  r÷   )rà   rU  rN  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                   r3   Úsend_set_combat_profilez%CoreShmBridge.send_set_combat_profile:  s  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�Ý"œK¨°W¸q±[Å#ÅkÔFdÑBeÔBeÕglÕmpÐqxÑmyÔmyÑgzÔgzÐ|ð  BEð  GHð  JKõ  MPð  Q[ñ  M\ô  M\ñ  ]ô  ]�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ ð ð ð Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ðøøøð	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘D3“7DÁB1DÄ
D0Ä!D3Ä/D0Ä0D3Ä3D7Ä:D7c                 ó,  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}}	}
||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        d	d	d	d
d
d
¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uT   Gá»­i lá»‡nh RECALIBRATE_XYZ (opCode = 98) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  iæ  rV   r   r|   r%  r   rC  rD  T)
rÕ   rÚ   rš   r  r,  r]   r
   r/   rE  r÷   rF  s                 r3   Úsend_recalibrate_xyzz"CoreShmBridge.send_recalibrate_xyzN  sã  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>YÑ:ZÔ:ZÐ\_ÐadÐfiÐklÐnoÐqrÑsÔs�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rL  r   rM   rO   c                 óz  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}	}
}}}|	|
z
  dk    r	 ddd¦  «         dS |	dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        t          |¦  «        t          |¦  «        t          |¦  «        d	d	d	¦	  «	        }| 	                    dd
¦  «        }|| j         ||dz   …<   t          j        d|	dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )u{   Gá»­i lá»‡nh hiá»‡u chuáº©n láº¡i Vitals (Max HP, Max Mana, Max ES) vÃ o Core Engine qua Command Ring Buffer (opCode = 98).FNr@  r(  r�   rA  rB  iã  r   r|   r%  r   rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r/   r_   rE  r÷   )rà   rK   rM   rO   rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                    r3   Úsend_recalibrate_vitalsz%CoreShmBridge.send_recalibrate_vitalsi  s   € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>YÑ:ZÔ:ZÕ\aÐbhÑ\iÔ\iÕkpÐqyÑkzÔkzõ  }Bð  CIñ  }Jô  }Jð  LMð  OPð  RSñ  Tô  T�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘D0“7DÁB.DÄ
D-ÄD0Ä,D-Ä-D0Ä0D4Ä7D4c                 ó,  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}}	}
||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        d	d	d	d
d
d
¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uW   Gá»­i lá»‡nh TRIGGER_AUTO_LOGIN (opCode = 97) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  iå  rV   r   r|   r%  r   rC  rD  T)
rÕ   rÚ   rš   r  r,  r]   r
   r.   rE  r÷   rF  s                 r3   Úsend_trigger_auto_loginz%CoreShmBridge.send_trigger_auto_login„  sã  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>\Ñ:]Ô:]Ð_bÐdgÐilÐnoÐqrÐtuÑvÔv�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rL  r   ÚactÚ
zone_indexc                 ó`  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}	}
}}||	z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        t          |¦  «        t          |¦  «        d	d
dd¦	  «	        }| 	                    dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )u]   Gá»­i lá»‡nh TRIGGER_WORLD_MAP_TRAVEL (opCode = 96) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  iä  rV   r   r   rM  r|   r%  rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r-   r_   rE  r÷   )rà   r^  r_  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                   r3   Úsend_trigger_world_map_travelz+CoreShmBridge.send_trigger_world_map_travelŸ  s  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>bÑ:cÔ:cÕejÐknÑeoÔeoÕqvð  xBñ  rCô  rCð  EHð  JKð  MNð  PTñ  Uô  U�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘D#“7DÁB!DÄ
D ÄD#ÄD Ä D#Ä#D'Ä*D'TÚscenarioÚauto_portalc                 óN  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}	}
}}||	z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        ddt          t          j        ¦  «        t          |¦  «        |rd	nd
d
ddd¦	  «	        }| 	                    dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uU   Gá»­i lá»‡nh SET_MAP_SCENARIO (opCode = 95) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  iâ  r  rV   r   r   rô   r|   r%  r   rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r,   r_   rE  r÷   )rà   rb  rc  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                   r3   Úsend_set_map_scenarioz#CoreShmBridge.send_set_map_scenarioº  s  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\ð ˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°S½#½kÔ>ZÑ:[Ô:[Õ]bÐckÑ]lÔ]lð  vAð  oJÐnqÐnqð  GJð  LOð  QRð  TUð  W[ñ  \ô  \�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1õ $*¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ( ð ð ð Øð+	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð(øøøð)	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘D“7C>ÁBC>Ã>
DÄDÄDÄDÄDÄ!Dé˜:  Únpc_idÚmodeÚ
option_idxc                 óš  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}	}
}}}}|
|z
  dk    r	 ddd¦  «         dS |
dz  }d|dz  z   }t          j        d|
dz   t          t          j        ¦  «        t          |¦  «        t          |¦  «        d	t          |¦  «        d
t          |¦  «        ¦	  «	        }| 	                    dd¦  «        }|| j         ||dz   …<   t          j        d|
dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )ui   Gá»­i lá»‡nh EXECUTE_NPC_INTERACT_ROUTINE (opCode = 8) vÃ o Core Engine (mode 1 = IdentifyAll, 0 = Skip).FNr@  r(  r�   rA  rB  r   rV   r   r|   r%  rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r'   r_   rE  r÷   )rà   rg  rh  ri  rN  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                     r3   Úsend_npc_interactzCoreShmBridge.send_npc_interactÕ  sE  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°W¸q±[Å#ÅkÔFnÑBoÔBoÕqvÐw{Ñq|Ôq|õ  Dð  EOñ  Pô  Pð  RUõ  WZð  [añ  Wbô  Wbð  deõ  gjð  kuñ  gvô  gvñ  wô  w�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ  ð ð ð Øð#	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð øøøð!	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘E “7D$ÁB>D$Ä$
D=Ä.E Ä<D=Ä=E Å EÅEFé N  Úwaystone_colÚwaystone_rowÚ
use_tabletc                 óˆ  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}	}
}}}}|
|z
  dk    r	 ddd¦  «         dS |
dz  }d|dz  z   }t          j        d|
dz   t          t          j        ¦  «        t          |¦  «        t          |¦  «        |rd	nd
ddt          |¦  «        ¦	  «	        }| 	                    dd¦  «        }|| j         ||dz   …<   t          j        d|
dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )u^   Gá»­i lá»‡nh EXECUTE_MAP_DEVICE_ROUTINE (opCode = 7) vÃ o Core Engine qua Command Ring Buffer.FNr@  r(  r�   rA  rB  r   r  rV   r   r   r|   r%  rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r&   r_   rE  r÷   )rà   rm  rn  ro  rN  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                     r3   Úsend_map_devicezCoreShmBridge.send_map_deviceì  sX  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°W¸q±[Å#ÅkÔFlÑBmÔBmÕotð  vBñ  pCô  pCõ  EJð  KWñ  EXô  EXð  akð  Ztð  Z]ð  Z]ð  qtð  vwð  yzõ  |ð  @Jñ  |Kô  |Kñ  Lô  L�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ  ð ð ð Øð#	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð øøøð!	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘D7“7DÁB5DÄ
D4Ä%D7Ä3D4Ä4D7Ä7D;Ä>D;Úscreen_xÚscreen_yrŠ   Únode_idc                 ó´  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}	}
}}}}}||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        d|dz   t          t          j        ¦  «        t          |¦  «        t          |¦  «        t          |¦  «        t          |¦  «        d	t          |¦  «        ¦	  «	        }| 	                    dd
¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )u^   Gá»­i lá»‡nh SELECT_ATLAS_NODE (opCode = 9) vÃ o Core Engine qua Command Ring Buffer (Doc 56).FNr@  r(  r�   rA  rB  r   é€  r|   r%  rC  rD  T)rÕ   rÚ   rš   r  r,  r]   r
   r(   r_   rE  r÷   )rà   rr  rs  rŠ   rt  rN  rG  rø   rù   rú   rû   rü   rý   rþ   r.  r/  rH  rI  rJ  s                      r3   Úsend_select_atlas_nodez$CoreShmBridge.send_select_atlas_node  sV  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°W¸q±[Å#ÅkÔFcÑBdÔBdÕfkÐltÑfuÔfuÕw|ð  ~Fñ  xGô  xGõ  INð  OTñ  IUô  IUõ  WZð  [bñ  Wcô  Wcð  eiõ  knð  oyñ  kzô  kzñ  {ô  {�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ  ð ð ð Øð#	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð øøøð!	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ‘E“7D1ÁCD1Ä1
E
Ä;EÅ	E
Å
EÅEÅEc                 óL  — | j         sdS | j        5  	 | j         dd…         }t          j        d|¦  «        \	  }}}}}}}	}
}||z
  dk    r	 ddd¦  «         dS |dz  }d|dz  z   }t          j        d|dz   t          t          j        ¦  «        d	d	d	d
dt          |¦  «        ¦	  «	        }|                     dd¦  «        }|| j         ||dz   …<   t          j        d|dz   ¦  «        | j         dd…<   	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )us   Gá»­i lá»‡nh VERIFY_MAP_DEVICE_UI (opCode = 10) vÃ o Core Engine qua Command Ring Buffer (INV-MAPDEVICE-VERIFY-UI).FNr@  r(  r�   rA  rB  r   rV   r   rv  r|   r%  rC  rD  T)
rÕ   rÚ   rš   r  r,  r]   r
   r)   rE  r÷   rP  s                  r3   Úsend_verify_map_device_uiz'CoreShmBridge.send_verify_map_device_ui  s  € àŒyð 	Ø�5ØŒ^ð 	ð 	ðØ"œi¨¨¨œn�Ý_eÔ_lÐmyð  |Gñ  `Hô  `HÑ\��u˜j¨)°W¸hÈÐQYÐ[\Ø˜XÑ%¨Ò+Ð+Ø ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð # R™<�Ø# h°¡mÑ3�õ #œK¨°W¸q±[Å#ÅkÔFfÑBgÔBgÐilÐnqÐsvÐxyÐ{õ  BEð  FPñ  BQô  BQñ  Rô  R�	Ø%ŸOšO¨B°Ñ8Ô8�	Ø4=�”	˜( 8¨b¡=Ð0Ñ1Ý#)¤;¨t°W¸q±[Ñ#AÔ#A�”	˜"˜R˜%Ñ Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ  ð ð ð Øð#	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð øøøð!	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	rR  )rÐ   rÑ   )rñ   )rM  )rô   )r   r   )r   r   )r   T)r   r   r   rf  )r   r   Frl  )r   r   rM  )(r   r   r   r6   r_   rá   r   ra   rå   r]   rç   ru   rë   rí   rð   r   rx   r
  r  r  ré   r  rï   r  r8  r:  rK  rQ  rT  r5   rW  rY  r[  r]  ra  re  rk  rq  rw  ry  r1   r2   r3   rÏ   rÏ   ì   sJ  € € € € € ðð ðð ¨ð Àeð ð ð ð ð# HÐ.CÐ-DÀdÐ-JÔ$Kð #ð #ð #ð #ð)¨°#°s¸EÐ1BÀDÐ1HÔ(Ið )ð )ð )ð )ð ˜ð  ð  ð  ð  ð+˜dð +ð +ð +ð +ð"Ð)>ð "ð "ð "ð "ð
ð 
¨Sð 
¸Dð 
ð 
ð 
ð 
ð
 ð 
ð 
ð 
ð 
ð<�tð ð ð ð ðð ð ð˜4ð ð ð ð ð"ð ð ð' dð 'ð 'ð 'ð 'ðRO+ð O+ð O+ðbÐ)>ð ð ð ð ð Sð °#ð ¸Eð ð ð ð ð ð ð ð ð ð6ð °Sð ÀDð ð ð ð ð.ð °3ð À$ð ð ð ð ð(ð ¨}ð È#ð ÐY]ð ð ð ð ð( dð ð ð ð ð6ð ¨cð ¸Sð Ècð ÐZ^ð ð ð ð ð6¨ð ð ð ð ð6ð °ð Àcð ÐRVð ð ð ð ð6ð ¨cð ÀDð ÐTXð ð ð ð ð6ð ¨ð °sð ÈCð Ðadð Ðquð ð ð ð ð.ð ¨Cð À3ð ÐX\ð Ðruð ð  CGð ð ð ð ð.ð ¨uð Àð Ècð Ð`cð Ðuxð ð  EIð ð ð ð ð.ð °Cð À4ð ð ð ð ð ð r2   rÏ   )r6   r  rš   rØ   rõ   Údataclassesr   r   Úenumr   Útypingr   r   r   r  r  rö   r   r
   r5   r;   rH   ra   r-  rÍ   rÏ   ÚCoreSharedMemoryBridger1   r2   r3   ú<module>r~     sí  ððð ð
 €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à*€Ø€Ø%Ð ØÐ ðð ð ð ð �'ñ ô ð ð(ð ð ð ð �Gñ ô ð ðð ð ð ð ˜gñ ô ð ð ðð ð ð ð ñ ô ñ „ðð( ð`ð `ð `ð `ð `ñ `ô `ñ „ð`ð(D eð DÐ0Eð Dð Dð Dð DðNC	ð C	ð C	ð C	ð C	ñ C	ô C	ð C	ðL 'Ð Ð Ð r2   