§
    ¡¿jï  ã                  ó  — U d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
mZmZ dZdZdZi d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&“dd'“d(d)“d*d+d,d-d.d/d0d1d2d3d4d5d6d7œ¥Zd8ed9<   i d
d	“dd“dd“dd“dd“dd“d:d“dd“dd“dd“d;d“dd“dd“d d“d"d!“d<d	“d$d#“i d&d%“d'd“d)d(“d=d“d*d>“d+d?“d,d@“d-dA“dBd“d.dC“d/dD“d0dE“d1dF“d2dG“d3dH“d4dI“d5dJ“¥d6dKi¥ZdLedM<    ed	dN¦  «        D ]Zee ee¦  «        <   ŒdVdS„ZdWdU„ZdS )Xz×
FreeExile Compact Binary Map Serializer and Deserializer.
Encodes MapGridData into high-performance Uint8Array binary format (1 byte/tile)
with a 16-byte fixed header, POI metadata table, and Encounter Zone table.
é    )ÚannotationsN)ÚListÚTupleÚDict)ÚTileTypeÚTileCellÚMapGridDataÚEncounterZones   FEz<2sBBHHBBBBBBHé   é   ÚBLEACHED_BONE_CANYONé   ÚSAVAGE_MANGROVE_SWAMPé   ÚCRIMSON_BLOOD_FORESTé   ÚOUTCAST_MINE_SHAFTSé   ÚCORRUPTED_FIEND_RUINSé   ÚSTY_01_HOANG_MANG_CO_LOé   ÚSTY_03_BO_DA_TAN_XUONGé   ÚSTY_04_HOANG_GIOI_CUONG_THUé	   ÚSTY_05_KHAI_XUONG_CO_CANé
   ÚSTY_07_DAM_LAY_THOI_RUAé   ÚSTY_08_VUC_DAM_BANG_DOCé   ÚSTY_09_HAC_THUY_MIEU_TRAPé   ÚSTY_10_DOC_CHIEU_MA_HOé   ÚSTY_12_SA_COT_HOANG_MACé   ÚSTY_13_CON_CAT_MA_QUYÚSTY_14_VUC_DOI_NUOT_CHUNGé   ÚSTY_15_QUY_PHONG_HAC_NHAIÚSTY_17_DIA_DAO_HUYET_THACHÚSTY_18_MIENG_LUA_NUNG_MAUÚSTY_19_HAM_LUA_LUYEN_NGUCÚSTY_20_VUC_THAM_XICH_THIETÚSTY_22_PHE_TICH_XE_THITÚSTY_23_TE_DAN_MAN_HOANGÚSTY_24_BE_THO_QUY_DOAT_MENHÚSTY_25_VAN_KIEP_MIEU_DIAÚSTY_26_COI_HU_KHONG_TUYET_DIAÚ STY_27_VET_NUT_VO_HAN_HUYET_GIOIÚSTY_28_THAO_THIET_XAM_THUCÚSTY_29_U_MINH_TA_CANHÚ$STY_30_TAN_TICH_THIEN_CUNG_HOANG_PHE)é   é   é   é   é   é   é   é   é   é   é   é   é   zDict[int, str]ÚCODE_TO_BIOMEÚSTY_02_HUYET_SAT_LAMÚSTY_06_BAI_THA_MA_NGAP_MANÚSTY_11_HEM_NUI_XUONG_TRANGÚSTY_16_MO_QUANG_LUU_DAYr:   r;   r<   r=   ÚSTY_21_PHE_TICH_MA_THANr>   r?   r@   rA   rB   rC   rD   rE   rF   zDict[str, int]ÚBIOME_TO_CODEé   Úmap_datar	   ÚreturnÚbytesc                óX  — | j         }t          |t          ¦  «        r|}nat          |t          ¦  «        r$|                     ¦   «         rt          |¦  «        }n(t
                               t          |¦  «        d¦  «        }| j        \  }}| j        r| j        nd\  }}| j	        dd…         }| j
        dd…         }t          j        t          t          d|| j        | j        t#          dt%          d|¦  «        ¦  «        t#          dt%          d|¦  «        ¦  «        t#          dt%          d|¦  «        ¦  «        t#          dt%          d|¦  «        ¦  «        t'          |¦  «        t'          |¦  «        d¦  «        }	t)          ¦   «         }
|D ]t\  }}}t*          j        j        }t          |t          ¦  «        r|}|
                     t          j        dt#          d|¦  «        t#          d|¦  «        |¦  «        ¦  «         Œut)          ¦   «         }|D ]�}|                     t          j        dt#          d|j        ¦  «        t#          d|j        ¦  «        t#          d|j        ¦  «        t#          d|j        ¦  «        t#          d|j        ¦  «        ¦  «        ¦  «         ŒŽt)          | j        | j        z  ¦  «        }t=          | j        ¦  «        D ]F}|| j        z  }t=          | j        ¦  «        D ]%}| j        |         |         j         j        |||z   <   Œ&ŒGtC          |	|
z   |z   |z   ¦  «        S )z1Serializes MapGridData into compact binary bytes.r   )éÿ   rS   NrS   r   ú<BBBú<BBBBB)"ÚbiomeÚ
isinstanceÚintÚstrÚisdigitrM   ÚgetÚspawn_pointÚ	boss_gateÚ
poi_pointsÚencounter_zonesÚstructÚpackÚHEADER_FORMATÚHEADER_MAGICÚwidthÚheightÚminÚmaxÚlenÚ	bytearrayr   ÚPOIÚvalueÚextendÚmin_xÚmin_yÚmax_xÚmax_yÚtierÚrangeÚtilesÚ	tile_typerQ   )rO   Ú	biome_valÚ
biome_codeÚsxÚsyÚbxÚbyÚpoisÚ
encountersÚheaderÚ	poi_bytesÚpxÚpyÚptypeÚt_valÚ	enc_bytesÚencÚ
tile_bytesÚyÚ
row_offsetÚxs                        ú;C:\Projects\FreeExile\server\world\map_binary_serializer.pyÚserialize_map_gridrŠ   c   sô  € à”€IÝ�)�SÑ!Ô!ð :Øˆ
ˆ
Ý	�I�sÑ	#Ô	#ð :¨	×(9Ò(9Ñ(;Ô(;ð :Ý˜‘^”^ˆ
ˆ
å"×&Ò&¥s¨9¡~¤~°qÑ9Ô9ˆ
ØÔ!�F€BˆØ#+Ô#5ÐEˆXÔÐ¸:�F€BˆØÔ˜t ˜tÔ$€DØÔ)¨$¨3¨$Ô/€JåŒ[ÝÝØ	ØØŒØŒÝˆC•�Q˜‘”ÑÔÝˆC•�Q˜‘”ÑÔÝˆC•�Q˜‘”ÑÔÝˆC•�Q˜‘”ÑÔÝˆD‰	Œ	ÝˆJ‰ŒØ	ñô €Fõ  ‘”€IØð Qð Q‰ˆˆB�Ý”Ô"ˆÝ�e�SÑ!Ô!ð 	ØˆEØ×Ò�œ V­S°°b©\¬\½3¸sÀB¹<¼<ÈÑOÔOÑPÔPÐPÐPå‘”€IØð 

ð 

ˆØ×ÒÝŒKØÝ�C˜œÑ#Ô#Ý�C˜œÑ#Ô#Ý�C˜œÑ#Ô#Ý�C˜œÑ#Ô#Ý�C˜œÑ"Ô"ñô ñ		
ô 		
ð 		
ð 		
õ ˜8œ>¨H¬OÑ;Ñ<Ô<€JÝ�8”?Ñ#Ô#ð Nð NˆØ˜œÑ'ˆ
Ý�x”~Ñ&Ô&ð 	Nð 	NˆAØ)1¬¸Ô):¸1Ô)=Ô)GÔ)MˆJ�z A‘~Ñ&Ð&ð	Nõ �˜)Ñ# iÑ/°*Ñ<Ñ=Ô=Ð=ó    Úbufferc                óh  — t          | ¦  «        t          k     r t          dt          | ¦  «        › d�¦  «        ‚t          j        t
          | d¦  «        \  }}}}}}}}}	}
}}|t          k    rt          d|›dt          ›�¦  «        ‚t          |
dz  z   |dz  z   ||z  z   }t          | ¦  «        |k     r"t          d|› d	t          | ¦  «        › �¦  «        ‚t          }g }t          |
¦  «        D ]<}t          j        d
| |¦  «        \  }}}|                     ||d|› �f¦  «         |dz  }Œ=g }t          |¦  «        D ]J}t          j        d| |¦  «        \  }}}}}|                     t          |||||¬¦  «        ¦  «         |dz  }ŒKg }t          |¦  «        D ]É}g }|||z  z   }t          |¦  «        D ]˜}| ||z            }	 t          |¦  «        }n# t          $ r t          j        }Y nw xY w|                     t          ||||                     ¦   «         |                     ¦   «         |                     ¦   «         ¬¦  «        ¦  «         Œ™|                     |¦  «         ŒÊ|dk    r
|	dk    r||	fnd} t                                |d¦  «        }!t%          ||d|!|||f| r| n	|dz
  |dz
  f||| ¬¦
  «
        S )z+Deserializes binary bytes into MapGridData.z!Buffer too short for map header: z bytesr   zInvalid map magic header: z, expected r   r   zBuffer truncated: expected z bytes, got rT   Úpoi_rU   )rm   rn   ro   rp   rq   )rˆ   r†   rt   ÚwalkableÚblocks_visionÚmovement_costrS   Nr   r   )
rd   re   ÚseedrV   rs   r\   Ú
boss_pointr^   r_   r]   )rh   ÚHEADER_SIZEÚ
ValueErrorr`   Úunpack_fromrb   rc   rr   Úappendr
   r   ÚWALLr   Úis_passabler�   r‘   rG   r[   r	   )"rŒ   ÚmagicÚversionrv   rd   re   rw   rx   ry   rz   Ú	poi_countÚ	enc_countÚ_Úexpected_lenÚoffsetr^   r   r€   Úptr_   Úx1Úy1Úx2Úy2rq   rs   r†   Úrowr‡   rˆ   r‚   Úttr]   rV   s"                                     r‰   Údeserialize_map_gridr¨   ž   sN  € å
ˆ6�{„{•[Ò Ð ÝÐP½SÀ¹[¼[ÐPÐPÐPÑQÔQÐQõ 	Ô�=¨&°!Ñ4Ô4ñØØØØØØ
Ø
Ø
Ø
ØØØ	ð •ÒÐÝÐZ°eÐZÐZÍ,ÐZÐZÑ[Ô[Ð[å ¨Q¡Ñ.°¸Q±Ñ>ÀÈÁÑO€LÝ
ˆ6�{„{�\Ò!Ð!ÝÐ^°|Ð^Ð^ÕQTÐU[ÑQ\ÔQ\Ð^Ð^Ñ_Ô_Ð_å€FØ-/€JÝ�9ÑÔð ð ˆÝÔ'¨°¸Ñ?Ô?‰
ˆˆB�Ø×Ò˜2˜r ;¨" ; ;Ð/Ñ0Ô0Ð0Ø�!‰ˆˆà+-€OÝ�9ÑÔð ð ˆÝ%Ô1°(¸FÀFÑKÔKÑˆˆB��B˜Ø×Ò�}°2¸RÀrÐQSÐZ^Ð_Ñ_Ô_Ñ`Ô`Ð`Ø�!‰ˆˆà"$€EÝ�6‰]Œ]ð ð ˆØ ˆØ˜a %™iÑ'ˆ
Ý�u‘”ð 	ð 	ˆAØ˜:¨™>Ô*ˆEð#Ý˜e‘_”_��øÝð #ð #ð #Ý”]���ð#øøøà�JŠJÝØØØ ØŸ^š^Ñ-Ô-Ø"$×"2Ò"2Ñ"4Ô"4Ø"$×"2Ò"2Ñ"4Ô"4ðñ ô ñ	ô 	ð 	ð 	ð 	�Š�SÑÔÐÐà 3šY˜Y¨2°ª9¨9��R��¸4€IÝ×Ò˜jÐ*@ÑAÔA€EåØØØØØØ˜�HØ )ÐF�9�9°¸±	¸6ÀA¹:Ð/FØØ'Øðñ ô ð s   Æ?GÇG(Ç'G()rO   r	   rP   rQ   )rŒ   rQ   rP   r	   )Ú__doc__Ú
__future__r   r`   Útypingr   r   r   Úserver.world.map_data_typesr   r   r	   r
   rc   rb   r”   rG   Ú__annotations__rM   rr   Ú_crY   rŠ   r¨   © r‹   r‰   ú<module>r°      s  ððð ð ð #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð €Ø €Ø€ð!ØÐð!àÐð!ð Ðð!ð Ðð	!ð
 Ðð!ð Ð ð!ð Ðð!ð Ð$ð!ð Ð!ð!ð Ð!ð!ð Ð!ð!ð Ð#ð!ð Ð ð!ð Ð!ð!ð Ðð!ð  Ð#ð!!ð" Ð#ð#!ð$ 	%Ø#Ø#Ø$Ø!Ø!Ø%Ø"Ø'Ø*Ø$ØØ.ð=!ð !ð !€ð ð ð ñ ðD&!à˜Að&!ð ˜Qð&!ð ˜Að	&!ð
 ˜1ð&!ð ˜Qð&!ð ˜qð&!ð ˜Að&!ð ˜að&!ð " 1ð&!ð  ð&!ð ! !ð&!ð ˜rð&!ð ˜rð&!ð    ð!&!ð" ˜bð#&!ð$ ! !ð%&!ð& ˜rð'&!ð &!ð( ˜Rð)&!ð*   ð+&!ð,   ð-&!ð. ˜qð/&!ð0 ! "ð1&!ð2   ð3&!ð4   ð5&!ð6 ! "ð7&!ð8 ˜qð9&!ð: ˜rð;&!ð< ˜rð=&!ð> " 2ð?&!ð@  ðA&!ðB $ RðC&!ðD '¨ðE&!ðF ! "ðG&!ðH ˜RðI&!ð &!ðJ +¨BðK&!ð &!€ð &ð &ð &ñ &ðN ˆ%��2‰,Œ,ð  ð  €BØ€M�#�#�b‘'”'ÑÐð8>ð 8>ð 8>ð 8>ðvLð Lð Lð Lð Lð Lr‹   