
    Iio                       S r SSKJr  SSKrSSKrSSKJrJr  \R                  " \	5      r
SSKJrJrJr  SSKJr  SS	KJrJrJr  SS
KJrJr  SSKJr  SSKJrJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,  SSK-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  SS/r7SSS.r8\ " S S\5      5       r9\ " S S\5      5       r:\\ " S S\5      5       5       r;g) zSenet game for PlayPalace.    )annotationsN)	dataclassfield   )GamePlayerGameOptions)register_game   )Action	ActionSet
Visibility)
MenuOptionoption_field)	BotHelper)
GameResultPlayerResult)Localization)KeybindState)Bot)UserMenuItemEscapeBehavior   	bot_think)generate_legal_moves
apply_movehas_any_legal_move)	SenetGameStatePIECES_PER_PLAYERSPECIAL_SQUARE_NAMESHOUSE_WATERHOUSE_HAPPINESSbuild_initial_stateopponent_numpieces_remainingthrow_sticksrandomsimplezsenet-difficulty-randomzsenet-difficulty-simple)r)   r*   c                  D    \ rS rSr% \" \" S\\SSSSS95      rS\	S'   S	r
g
)SenetOptions+   r*   bot_difficultyzsenet-option-bot-difficultyz"senet-option-select-bot-difficultyz#senet-option-changed-bot-difficulty)defaultchoiceschoice_labels	value_keylabelprompt
change_msgstr N)__name__
__module____qualname____firstlineno__r   r   BOT_DIFFICULTY_CHOICESBOT_DIFFICULTY_LABELSr.   __annotations____static_attributes__r7       6c:\Users\dbart\PlayPalace11\server\games\senet\game.pyr,   r,   +   s0    &*/&/7<	

NC 
r@   r,   c                  $    \ rS rSr% SrS\S'   Srg)SenetPlayer:   r   int
player_numr7   N)r8   r9   r:   r;   rF   r>   r?   r7   r@   rA   rC   rC   :   s    Jr@   rC   c                    ^  \ rS rSr% Sr\" \S9rS\S'   \" \	S9r
S\S'   \" \S9rS\S	'   S
rS\S'   SrS\S'   \S?S j5       r\S?S j5       r\S?S j5       r\S@S j5       r\S@S j5       rSASBS jjrSCS jrSDS jrSES jrSFS jrSGU 4S jjrSHS jrSIS jrSIS jrSJS jrSKS jrS
SS .       SLS! jjr   SM       SNS" jjr!    SOS# jr"SPU 4S$ jjr#SGS% jr$SGU 4S& jjr%SQS' jr&SIS( jr'SRS) jr(SGS* jr)SRS+ jr*SRS, jr+SGS- jr,SSS. jr-STS/ jr.SUS0 jr/SIS1 jr0SIS2 jr1SIS3 jr2SVS4 jr3SWS5 jr4SXS6 jr5SYS7 jr6SWS8 jr7SZS9 jr8SZS: jr9S[S; jr:S[S< jr;S[S= jr<S>r=U =r>$ )\	SenetGame?   u&   Senet — ancient Egyptian board game.)default_factoryzlist[SenetPlayer]playersr,   optionsr    
game_stateN
int | None_nav_cursorFbool_nav_skip_rebuildc                    g)NSenetr7   clss    rA   get_nameSenetGame.get_nameK       r@   c                    g)Nsenetr7   rT   s    rA   get_typeSenetGame.get_typeO   rX   r@   c                    g)Nzcategory-board-gamesr7   rT   s    rA   get_categorySenetGame.get_categoryS   s    %r@   c                    gNr   r7   rT   s    rA   get_min_playersSenetGame.get_min_playersW       r@   c                    gra   r7   rT   s    rA   get_max_playersSenetGame.get_max_players[   rd   r@   c                    [        XUS9$ )N)idnameis_bot)rC   )self	player_idrj   rk   s       rA   create_playerSenetGame.create_player_   s    i6BBr@   c                N    U R                  U5      nU(       a  UR                  $ S$ )Nen)get_userlocale)rl   playerusers      rA   _player_localeSenetGame._player_localeb   s!    }}V$"t{{,,r@   c                    U R                    H.  n[        U[        5      (       d  M  UR                  U:X  d  M,  Us  $    g N)rK   
isinstancerC   rF   )rl   numps      rA   _get_player_by_numSenetGame._get_player_by_numf   s2    A![))allc.A  r@   c                L    U R                  U R                  R                  5      $ ry   )r}   rM   current_player_numrl   s    rA   _current_senet_playerSenetGame._current_senet_playerl   s    &&t'I'IJJr@   c                P   [        SS9nU R                  U5      nU R                  5        H&  nUR                  [	        SU 3SSSSSS	S
S
S9	5        M(     UR                  [	        SSSSSS
S95        UR                  [	        SSSSSS
S95        [	        S[
        R                  " US5      SSSS9[	        S[
        R                  " US5      SSSS9[	        S[
        R                  " US5      SSSS9/n[        U5       Hy  nUR                  U5        UR                  UR                  ;   a%  UR                  R                  UR                  5        UR                  R                  S UR                  5        M{     S! H$  nUR                  U5      nU(       d  M  S
Ul        M&     U$ )"Nturn)rj   sq_ _action_square_click_is_square_enabled_is_square_hidden_get_square_label_get_square_soundF)	ri   r3   handler
is_enabled	is_hidden	get_label	get_soundshow_in_actions_menushow_disabled_labelnavigate_nextNext_action_navigate_next_is_navigate_enabled_is_always_hidden)ri   r3   r   r   r   r   navigate_prevPrevious_action_navigate_prevcheck_statuszsenet-check-status_action_check_status_is_info_enabled)ri   r3   r   r   r   check_stickszsenet-check-sticks_action_check_stickscheck_scorezsenet-check-score_action_check_scorer   )check_scorescheck_scores_detailed)r   rv   _grid_indicesaddr   r   getreversedri   _orderremoveinsert
get_actionr   )	rl   rt   
action_setrs   idxlocal_actionsaction	action_idexistings	            rA   create_turn_action_set SenetGame.create_turn_action_sets   s   F+
$$V,%%'CNNSE{23111).(-
 (  	"/1-%*		
 	" /1-%*		
 !"&&v/CD.-- !"&&v/CD.--  "&&v/BC---
. }-FNN6"yyJ---!!((3$$Q		2	 . CI!,,Y7Hx05- C
 r@   c                r  > [         TU ]  5         SU R                  ;   a  / U R                  S'   SU R                  ;   a  / U R                  S'   U R                  SSS/[        R
                  SS9  U R                  SS	S
/[        R
                  SS9  U R                  SSS/[        R
                  SS9  U R                  SSS/[        R
                  S9  U R                  SSS/[        R
                  S9  U R                  SSS/[        R
                  S9  U R                  SSS/[        R
                  S9  g )Nszshift+seStatusr   T)stateinclude_spectatorscSticksr   Scorer   z	ctrl+downz
Next piecer   )r   z
ctrl+rightzctrl+upzPrevious piecer   z	ctrl+left)supersetup_keybinds	_keybindsdefine_keybindr   ACTIVErl   	__class__s    rA   r   SenetGame.setup_keybinds   s[    $.. "$DNN3&(*DNN9%N+<3F3F[_ 	 	
 	N+<3F3F[_ 	 	
 	=/1D1DY] 	 	
 	'8@S@S 	 	
 	,(9ATAT 	 	
 	'/):,BUBU 	 	
 	)O+<LDWDW 	 	
r@   c                    [        [        SS5      5      n[        [        SSS5      5      n[        [        SS5      5      nX-   U-   $ )zReturn square indices in physical grid order (3 rows x 10 cols).

Row 1: squares 1-10  (indices 0-9, L to R)
Row 2: squares 20-11 (indices 19-10, L to R visually = R to L on path)
Row 3: squares 21-30 (indices 20-29, L to R)
r   
      	         )listrange)rl   row1row2row3s       rA   r   SenetGame._grid_indices   sD     E!RL!E"a$%E"bM"{T!!r@   c                P    [        U[        5      (       a  U R                  USS9  g g )Nr   	directionrz   rC   	_navigaterl   rt   r   s      rA   r   SenetGame._action_navigate_next   s$    fk**NN6QN/ +r@   c                P    [        U[        5      (       a  U R                  USS9  g g )Nr   r   r   r   s      rA   r   SenetGame._action_navigate_prev   s$    fk**NN6RN0 +r@   c                   U R                   nUR                  S:w  d  UR                  UR                  :w  a  gU R	                  UR                  5      nU(       d  gU R
                  b<  U R
                  U;   a,  UR                  U R
                  5      nXR-   [        U5      -  nOUS:X  a  SO[        U5      S-
  nXE   U l        SU l        U R                  USXE    3SS9  g)z*Cycle through squares with movable pieces.movingNr   r   Tr   selection_idplay_selection_sound)
rM   
turn_phaser   rF   _get_movable_squaresrO   indexlenrQ   update_player_menu)rl   rt   r   gstargetsr   s         rA   r   SenetGame._navigate   s    __==H$(=(=ARAR(R++F,=,=>'D,<,<,G-- 0 01C?c'l2C A~!3w<!+;C"<!%w|n-!% 	  	
r@   c                    U R                   n[        5       n[        X!UR                  5       H  nUR	                  UR
                  5        M      [        U5      $ ry   )rM   setr   current_rollr   sourcesorted)rl   rF   r   sourcesmoves        rA   r   SenetGame._get_movable_squares  sB    __E(IDKK$ Jgr@   )positionr   c               P   U R                   (       d  U R                  S:X  a  g UR                  U R                  ;   a  g U R	                  U5      nU(       d  g U R                  X5      u  pV[        U5      S:H  nUR                  SXV-   S[        R                  UUU(       a  SOSUS9  g )Nfinishedr   	turn_menuFr   r   )multiletterescape_behaviorr   grid_enabled
grid_widthr   )

_destroyedstatusri   _status_box_openrr   _build_menu_itemsr   	show_menur   KEYBIND)rl   rt   r   r   ru   
grid_itemsother_itemsuse_grids           rA   rebuild_player_menuSenetGame.rebuild_player_menu  s     ??dkkZ799---}}V$"&"8"8"F
z?b($*22!%r1!5 	 		
r@   c                    U R                   (       d  U R                  S:X  a  g UR                  U R                  ;   a  g U R	                  U5      nU(       d  g U R                  X5      u  pVUR                  SXV-   UUS9  g )Nr   r   r   )r   r   ri   r   rr   r   update_menu)rl   rt   r   r   ru   r   r   s          rA   r   SenetGame.update_player_menu<  sw     ??dkkZ799---}}V$"&"8"8"F
$%!5	 	 	
r@   c                   / n/ nU R                  U5       H  nUR                  nUR                  (       dC  UR                  R                  (       a(  [
        R                  " UR                  S5      nU SU 3n[        XeR                  R                  UR                  S9nUR                  R                  R                  S5      (       a  UR                  U5        M  UR                  U5        M     X44$ )Nzvisibility-unavailablez; )textri   soundr   )get_all_visible_actionsr3   enabledr   r   r   r   rs   r   ri   r	  
startswithappend)	rl   rt   ru   r   r   resolvedr3   unavailableitems	            rA   r   SenetGame._build_menu_itemsS  s     &(
&(44V<HNNE##(K(K*..t{{<TU 'K=1??+=+=X^^TD!!,,U33!!$'""4( = &&r@   c                T   > U R                   (       a  SU l         g[        TU ]	  X5      $ NF)rQ   r   _should_rebuild_after_keybind)rl   rt   executed_anyr   s      rA   r  'SenetGame._should_rebuild_after_keybindd  s'    !!%*D"w4VJJr@   c                l   SU l         SU l        SU l        U R                   Vs/ s H  oR                  (       a  M  UPM     nnU R                  USS9  SU R                  l        U R                  R                  U Vs/ s H  oR                  PM     sn5        [        R                  " 5       S:  a  SUS   l        SUS   l        OSUS   l        SUS   l        [        5       U l        U R                  S5      nU R                  S5      nUnXPl        U R!                  S	U(       a  UR                  OS
U(       a  UR                  OS
U(       a  UR                  OS
S9  U R#                  S5        [$        R&                  " U [        R(                  " SS5      S9  U R+                  5         g s  snf s  snf )NplayingTr   )reset_index
individualg      ?r   r   zsenet-game-started?)p1p2firstzgame_pig/mus.ogg      ticks)r   game_activeroundrK   is_spectatorset_turn_players_team_manager	team_modesetup_teamsrj   r)   rF   r%   rM   r}   current_playerbroadcast_l
play_musicr   	jolt_botsrandintrebuild_all_menus)rl   r|   active_playersr  r  r  s         rA   on_startSenetGame.on_startn  sl   
%)\\H\!\Hn$?'3$&&'G1'GH ==?S +,N1(+,N1(+,N1(+,N1(-/$$Q'$$Q'# rww#rww# %%**3	 	 	
 	*+Dq!(<= = I (Hs   F,F,>F1c                   > [         TU ]  5         U R                  5         U R                  (       d  g [        R                  " U 5        g ry   )r   on_tickprocess_scheduled_soundsr#  r   r   s    rA   r4  SenetGame.on_tick  s3    %%'$r@   c                    [        X5      $ ry   r   rl   rt   s     rA   r   SenetGame.bot_think  s    &&r@   c                   [        U[        5      (       d  g U R                  nUR                  UR                  :w  a  g UR
                  S:X  a  U R                  U5        g UR
                  S:w  a  g  [        UR                  S5      S   5      nUR                  nU R                  U5      nXT   S:X  a  U(       a  UR                  S5        g XT   UR                  :w  a  U(       a  UR                  S5        g [        X1R                  UR                  5       Vs/ s H  nUR                   U:X  d  M  UPM     nnU(       d  U(       a  UR                  S5        g U R#                  XS   5        g ! [        [        4 a     g f = fs  snf )	Nthrowingr   _r   r   zsenet-no-piece-therezsenet-not-your-piecezsenet-no-moves-from-here)rz   rC   rM   r   rF   r   	_do_throwrE   split
ValueError
IndexErrorboardrr   speak_lr   r   r   _apply_and_announce)	rl   rt   r   r   sq_idxrA  ru   mmovess	            rA   r   SenetGame._action_square_click  sZ   &+..__  F$5$55 ==J&NN6"==H$	-a01F }}V$=A34=F---34
 *".?.?Q
Qxx6! Q 	 
 78  q29 J' 		"
s   2E/ F2F/FFc                   U R                   n[        5       u  p4X2l        XBl        U=R                  S-  sl        U R                  5         U R                  SUR                  UU(       a  SOSS9  SUl        [        X!R                  U5      (       d%  U R                  USS5        U R                  U5        g U R                  5         g )	Nr   zsenet-throwyesno)rt   resultbonusr   zsenet-no-moves-youzsenet-no-moves-other)rM   r(   r   
bonus_turnthrows_this_turn_play_dice_soundr+  rj   r   r   rF   broadcast_personal_l_after_move_or_skipr/  )rl   rt   r   valuerL  s        rA   r=  SenetGame._do_throw  s    __#~
q ;; %d	 	 	
 !!"&7&7??%%,.D $$V, r@   c                X    U R                  S[        R                  " SS5       S35        g )Nzgame_squares/dicerollr   r   z.ogg)broadcast_soundr)   r.  r   s    rA   rO  SenetGame._play_dice_sound  s&    4V^^Aq5I4J$OPr@   c                f   U R                   nUR                  n[        U5      nU R                  U5      nU(       a  UR                  OSnUR
                  S-   n[        X2U5        UR                  (       a4  [        X45      n	U R                  " USS40 XS.D6  U R                  SSS9  GONUR                  (       ay  UR                  S-   n
U R                  " US	S
4SU0XS.D6  U R                  S5        UR                  b2  UR                  S-   nU R                  USSUS9  U R                  S5        OUR                  bY  UR                  S-   n
U R                  " USS40 XS.D6  UR                  S-   nU R                  USSUS9  U R                  S5        O^UR                  S-   n
U R                  " USS40 XS.D6  U R                  S5        UR                  [        :X  a  U R                  USS5        UR                  U   [         :  a  U R#                  U5        g U R%                  U5        g )Nr  r   zsenet-bearoff-youzsenet-bearoff-other)from	remainingzmention.ogg2   )volumezsenet-swap-youzsenet-swap-otheropponent)rX  tozgame_chess/capture1.oggzsenet-water-youzsenet-water-other)destzgame_squares/step1.oggzsenet-move-youzsenet-move-otherzsenet-happiness-youzsenet-happiness-other)rM   rF   r&   r}   rj   r   r   is_bear_offr'   rP  rU  is_swapdestination
water_destr$   offr!   _handle_winrQ  )rl   rt   r   r   pnumopp_num
opp_playeropp_namefrom_sqrY  to_sqdest_sqs               rA   rC  SenetGame._apply_and_announce  s[   __  t$,,W5
&0:??c ++/2T"(2I%%#% #;	   r :\\$$q(E%% " "	
 #0   !:;*//A-))-/B *  $$%=>__($$q(E%% " #0	 oo)G%%)+>W &    !9:$$q(E%% " #0	   !9: ?2))13J
 66$<,,V$  (r@   c                    U R                   nUR                  (       aP  SUl        SUl        SUl        [        R
                  " U [        R                  " SS5      S9  U R                  5         gU R                  5         g)z.Handle post-move: bonus throw or switch turns.r;  r   Fr      r!  N)
rM   rM  r   r   r   r-  r)   r.  r/  	_end_turnrl   rt   r   s      rA   rQ  SenetGame._after_move_or_skip>  sX    __==&BMBO!BMFNN1a,@A""$NNr@   c                Z   U R                   n[        UR                  5      nX!l        SUl        SUl        SUl        SUl        U R                  U5      nU(       a  X0l        U R                  5         [        R                  " U [        R                  " SS5      S9  U R                  5         g )Nr;  r   Fr   rn  r!  )rM   r&   r   r   r   rM  rN  r}   r*  announce_turnr   r-  r)   r.  r/  )rl   r   opprg  s       rA   ro  SenetGame._end_turnK  s    __2001 #",,S1
",Dq!(<= r@   c                    U R                  SUR                  S9  U R                  S5        Xl        U R	                  5         g )Nz
senet-winsrt   zgame_pig/win.ogg)r+  rj   rU  _winnerfinish_game)rl   winners     rA   rd  SenetGame._handle_win_  s9    fkk:/0r@   c                   SSK J n  U R                  n[        U SS 5      nU R                  S5      nU R                  S5      n[	        U R                  5       UR                  5       R                  5       U R                  U R                   Vs/ s HK  nUR                  (       a  M  [        UR                  UR                  UR                  [        USS5      S9PMM     snU(       a  UR                  OS U(       a  UR                  OS	U(       a  UR                  OS	UR                  S   UR                  S   S
.S9$ s  snf )Nr   )datetimerx  r   r   is_virtual_botF)rm   player_namerk   r~  r  )winner_namep1_namep2_namep1_offp2_off)	game_type	timestampduration_ticksplayer_resultscustom_data)r}  rM   getattrr}   r   r[   now	isoformatsound_scheduler_tickrK   r%  r   ri   rj   rk   rc  )rl   r}  r   rz  r  r  r|   s          rA   build_game_resultSenetGame.build_game_resulte  s   %__y$/$$Q'$$Q'mmolln..044 	 &A~~dd !88#*1.>#F	 &	 /5v{{$&(277c&(277c&&)&&)
 	
	s   D=%9D=c                    UR                   n[        R                  " USUR                  SS5      UR                  SS5      UR                  SS5      UR                  SS5      S9/$ )	Nsenet-scorer  r  r  r   r  r  r  off1r  off2)r  r   r   )rl   rK  rs   ds       rA   format_end_screenSenetGame.format_end_screen  sc    55C(UU8Q'55C(UU8Q'	
 		
r@   c           
     d   U R                  U5      nU(       d  g U R                  nU R                  S5      nU R                  S5      nUR                  SU(       a  UR                  OSUR
                  S   U(       a  UR                  OSUR
                  S   UR                  UR                  S9  g )Nr   r   zsenet-statusr  )r  r  r  r  phaseroll)rr   rM   r}   rB  rj   rc  r   r   rl   rt   r   ru   r   r  r  s          rA   r   SenetGame._action_check_status  s    }}V$__$$Q'$$Q'rww#rww#-- 	 	
r@   c                    U R                  U5      nU(       d  g U R                  nUR                  S:  a  UR                  SUR                  S9  g UR                  S5        g )Nr   zsenet-sticks)rK  zsenet-sticks-none)rr   rM   r   rB  )rl   rt   r   ru   r   s        rA   r   SenetGame._action_check_sticks  sL    }}V$__??QLLL@LL,-r@   c                8   U R                  U5      nU(       d  g U R                  nU R                  S5      nU R                  S5      nUR                  SU(       a  UR                  OSUR
                  S   U(       a  UR                  OSUR
                  S   S9  g )Nr   r   r  r  r  )rr   rM   r}   rB  rj   rc  r  s          rA   r   SenetGame._action_check_score  s    }}V$__$$Q'$$Q'rww#rww# 	 	
r@   c                   U R                   S:X  a  UR                  (       d  SUl        U R                  R                  UR                  S 5        [        UR                  UR                  S9nU R                  UR                  U5        U R                  SUR                  S9  [        S U R                   5       5      nU(       d  U R                  5         g U R                  5         g U R                   Vs/ s H   oDR                  UR                  :w  d  M  UPM"     snU l
        U R                  R                  UR                  S 5        U R                  R                  UR                  S 5        U R                  SUR                  S9  [        S U R                   5       5      nU(       d  U R                  5         g g s  snf )	Nr  T)uuidzplayer-replaced-by-botrw  c              3  B   #    U  H  oR                   (       + v   M     g 7fry   rk   .0r|   s     rA   	<genexpr>0SenetGame._perform_leave_game.<locals>.<genexpr>  s     @<a\\<   z
table-leftc              3  B   #    U  H  oR                   (       + v   M     g 7fry   r  r  s     rA   r  r    s     <|!XX|r  )r   rk   _userspopri   r   rj   attach_userr+  anyrK   destroyr/  player_action_sets)rl   rt   bot_user
has_humansr|   s        rA   _perform_leave_gameSenetGame._perform_leave_game  s?   ;;)#FMM FMKKOOFIIt,6;;VYY7HVYY15fkkJ@4<<@@J""$#'<<E<a446993D<E##FIIt4		4(fkk:<t||<<
LLN  Fs   6G G c                    U R                   S:w  a  g[        U[        5      (       d  gU R                  nUR                  UR
                  :w  a  gg )Nr  action-not-playingaction-not-availableaction-not-your-turn)r   rz   rC   rM   r   rF   )rl   rt   r   r   s       rA   r   SenetGame._is_square_enabled  sD    ;;)#'&+..)__  F$5$55)r@   c                b    U R                   S:w  a  [        R                  $ [        R                  $ )Nr  )r   r   HIDDENVISIBLEr   s      rA   r   SenetGame._is_square_hidden  s&    ;;)#$$$!!!r@   c                |    [        UR                  S5      S   5      nU R                  nU R                  U5      nUS-   nUR                  U   n[        R                  " U5      nU(       a  [        R                  " XX5      n	US:X  a  [        R                  " USXiS9$ [        U[        5      (       a%  XqR                  :X  a  [        R                  " USXiS9$ U R                  U5      n
[        R                  " USXiU
(       a  U
R                  S
9$ S	S
9$ US:X  a  [        R                  " USUS9$ [        U[        5      (       a%  XqR                  :X  a  [        R                  " USUS9$ U R                  U5      n
[        R                  " USXj(       a  U
R                  S9$ S	S9$ ! [        [        4 a     gf = f)Nr<  r   r   r   zsenet-sq-empty-special)sqrj   zsenet-sq-own-specialzsenet-sq-opponent-specialr  )r  rj   ownerzsenet-sq-empty)r  zsenet-sq-ownzsenet-sq-opponent)r  r  )rE   r>  r?  r@  rM   rv   rA  r"   r   r   rz   rC   rF   r}   rj   )rl   rt   r   rD  r   rs   sq_numoccupantspecial_keyspecial_namer  s              rA   r   SenetGame._get_square_label  s   	-a01F __$$V,!88F#*..v6'++F@L1}#''0HVggFK00XARAR5R#''0F6ee//9#''7e

 QT 
 1}#''0@VLLFK00XARAR5R#''6JJ//9#''/FPU%** [^ 9 J' 		s   F( (F;:F;c                    [        UR                  S5      S   5      nU R                  R
                  U   nUS:X  a  g [        U[        5      =(       a    XAR                  :H  nU(       a  gg! [        [        4 a     g f = f)Nr<  r   r   zgame_squares/token1.oggzgame_squares/token7.ogg)	rE   r>  r?  r@  rM   rA  rz   rC   rF   )rl   rt   r   rD  r  is_owns         rA   r   SenetGame._get_square_sound  s{    	-a01F ??((0q=FK0RXARAR5R,, J' 		s   A- -B ?B c                    U R                   S:w  a  g[        U[        5      (       d  gU R                  nUR                  S:w  d  UR
                  UR                  :w  a  gg )Nr  r  r  r   r  )r   rz   rC   rM   r   r   rF   rp  s      rA   r   SenetGame._is_navigate_enabled#  sO    ;;)#'&+..)__==H$(=(=ARAR(R)r@   c                &    U R                   S:w  a  gg )Nr  r  )r   r8  s     rA   r   SenetGame._is_info_enabled-  s    ;;)#'r@   c                "    [         R                  $ ry   r   r  r8  s     rA   _is_check_scores_hidden!SenetGame._is_check_scores_hidden2         r@   c                "    [         R                  $ ry   r  r8  s     rA    _is_check_scores_detailed_hidden*SenetGame._is_check_scores_detailed_hidden5  r  r@   c                "    [         R                  $ ry   r  r8  s     rA   r   SenetGame._is_always_hidden8  r  r@   )	rO   rQ   rx  r*  r#  rM   rK   r$  r   )returnr6   )r  rE   )F)rm   r6   rj   r6   rk   rP   r  rC   )rt   r   r  r6   )r{   rE   r  SenetPlayer | None)r  r  )rt   rC   r  r   )r  None)r  	list[int])rt   r   r   r6   r  r  )rt   rC   r   rE   r  r  )rF   rE   r  r  )rt   r   r   rN   r   rP   r  r  r  )rt   r   r   
str | Noner   rP   r  r  )rt   r   r  z%tuple[list[MenuItem], list[MenuItem]])r  rP   r  rP   )rt   rC   r  r  )rt   rC   r  r  )rz  rC   r  r  )r  r   )rK  r   rs   r6   r  z	list[str])rt   r   r  r  )rt   r   r   r6   r  r  )rt   r   r   r6   r  r   )rt   r   r   r6   r  r6   )rt   r   r  r  )rt   r   r  r   )?r8   r9   r:   r;   __doc__r   r   rK   r>   r,   rL   r    rM   rO   rQ   classmethodrV   r[   r^   rb   rf   rn   rv   r}   r   r   r   r   r   r   r   r   r  r   r   r  r1  r4  r   r   r=  rO  rC  rQ  ro  rd  r  r  r   r   r   r  r   r   r   r   r   r   r  r  r   r?   __classcell__)r   s   @rA   rH   rH   ?   s    1!&t!<G<!,?G\?!&~!FJF"K"#t#    & &    C-KM^
D
" 01
0  $%*

 	

 #
 

@ $(%*	

 !
 #	

 

.''	.'"K#!J '-3f!4QG)R!(
>
"
".
&<"
!F- 
!!! !r@   rH   )<r  
__future__r   loggingr)   dataclassesr   r   	getLoggerr8   logbaser   r   r	   registryr
   game_utils.actionsr   r   r   game_utils.optionsr   r   game_utils.bot_helperr   game_utils.game_resultr   r   messages.localizationr   server.core.ui.keybindsr   server.core.users.botr   server.core.users.baser   r   r   botr   rF  r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r<   r=   r,   rC   rH   r7   r@   rA   <module>r     s      "   (! , , $ ? ? : . > 1 0 % A A  G G
 
 
 #H- ''  ;   &   
x! x!  x!r@   