
    Ii              
         S SK Jr  S SKJrJr  S SK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JrJr  SS
KJrJr  SSKJrJrJr  SSKJr  SSKJr  SSK J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'  S SK(J(r(  SSK)J*r*  S SSSS.r+/ SQr,SSSSSSSSSS.	r-\ " S  S!\	5      5       r.\ " S" S#\5      5       r/\\ " S$ S%\5      5       5       r0g)&    )annotations)	dataclassfieldN   )GamePlayerGameOptions)register_game   )Action	ActionSet
Visibility)CardDeckDeckFactory	card_name)
GameResultPlayerResult)	IntOption
MenuOptionoption_field)	BotHelper)PokerTurnTimer)Localization)KeybindState)Bot)User)datetime   	bot_thinkr   r   r      )	5101520304560900zpoker-timer-5zpoker-timer-10zpoker-timer-15zpoker-timer-20zpoker-timer-30zpoker-timer-45zpoker-timer-60zpoker-timer-90zpoker-timer-unlimitedc                  t    \ rS rSr% Sr\" \" SSSSSSS	S
95      rS\S'   \" \	" \
SSSS\S95      rS\S'   Srg)CrazyEightsOptions%   zOptions for Crazy Eights.r   i'  i  scorezcrazyeights-set-winning-scorezcrazyeights-enter-winning-scorez(crazyeights-option-changed-winning-score)min_valmax_valdefault	value_keylabelprompt
change_msgintwinning_scorer,   zcrazyeights-set-turn-timerzcrazyeights-select-turn-timerz%crazyeights-option-changed-turn-timer)choicesr3   r5   r6   r7   choice_labelsstr
turn_timer N)__name__
__module____qualname____firstlineno____doc__r   r   r9   __annotations__r   TURN_TIMER_CHOICESTURN_TIMER_LABELSr=   __static_attributes__r>       <c:\Users\dbart\PlayPalace11\server\games\crazyeights\game.pyr.   r.   %   s`    #%14A	

M3 
 #&.2>+	
	J 	rH   r.   c                  :    \ rS rSr% \" \S9rS\S'   SrS\S'   Sr	g	)
CrazyEightsPlayer@   default_factory
list[Card]handr   r8   r0   r>   N)
r?   r@   rA   rB   r   listrP   rD   r0   rG   r>   rH   rI   rK   rK   @   s    T2D*2E3NrH   rK   c                    ^  \ rS rSr% Sr\" \S9rS\S'   \" \	S9r
S\S'   \" \S9rS\S	'   \" \S9rS
\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   \" \S9rS\S'   SrS\S '   SrS\S!'   SrS\S"'   SrS\S#'   S$rS\S%'   U 4S& jr\SS' j5       r \SS( j5       r!\SS) j5       r"\SS* j5       r#\SS+ j5       r$SSS, jjr%SU 4S- jjr&SS. jr'SS/ jr(SS0 jr)SS1 jr*SU 4S2 jjr+SU 4S3 jjr,SU 4S4 jjr-SSU 4S5 jjjr.SU 4S6 jjr/SS7 jr0SS8 jr1SU 4S9 jjr2SS: jr3SS; jr4SS< jr5SS= jr6SS> jr7SS? jr8SS@ jr9SSA jr:SSB jr;SSC jr<SSD jr=SSE jr>SSF jr?SSG jr@SSH jrASSI jrBSSJ jrCSSK jrDSSL.SSM jjrESSL.SSN jjrFSSO jrGSSP jrHSSQ jrISSR jrJSSS jrKSST jrLSSU jrMSSV jrNSSW jrOSSX jrPSSY jrQSSZ jrRSS[ jrSSS\ jrTSS] jrUSS^ jrVSS_ jrWSS` jrX\YSSa j5       rZSSb jr[SSc jr\SSd jr]SSe jr^SSf jr_SSg jr`SSh jraSSi jrbSSj jrcSSk jrdSSl jreSSm jrfSSn jrgSSo jrhSSp jriSSq jrjSSr jrkSSs jrl        SSt jrmSSu jrnSSv jroSSw jrpSSx jrqSSy jrr        SSz jrsSS{ jrtSS| jruSS} jrvSS~ jrwSS jrxSS jrySS jrzSr{U =r|$ )CrazyEightsGameF   z!Crazy Eights game implementation.rM   zlist[CrazyEightsPlayer]playersr.   optionsr   deckrO   discard_pileN
int | Nonecurrent_suitFboolawaiting_wild_suit
str | Nonepending_round_winner_idr   r8   wild_wait_tickswild_wait_player_idwild_end_round_pendingdealer_indexturn_has_drawnCard | Noneturn_drawn_cardr   timertimer_warning_playedintro_wait_tickshand_wait_ticks_turn_sound_player_id   max_hand_sizec                "   > [         TU ]  5         g N)super__post_init__self	__class__s    rI   rq   CrazyEightsGame.__post_init__d   s    rH   c                    g)NzCrazy Eightsr>   clss    rI   get_nameCrazyEightsGame.get_namek   s    rH   c                    g)Ncrazyeightsr>   rw   s    rI   get_typeCrazyEightsGame.get_typeo   s    rH   c                    g)Nzcategory-card-gamesr>   rw   s    rI   get_categoryCrazyEightsGame.get_categorys   s    $rH   c                    g)Nr   r>   rw   s    rI   get_min_playersCrazyEightsGame.get_min_playersw       rH   c                    g)N   r>   rw   s    rI   get_max_playersCrazyEightsGame.get_max_players{   r   rH   c                    [        XUS9$ )N)idnameis_bot)rK   )rs   	player_idr   r   s       rI   create_playerCrazyEightsGame.create_player   s     IHHrH   c                r   > [         TU ]  X5      nUR                  (       a  SOSnU R                  U5        U$ )Nzgame_crazyeights/botsit.oggzgame_crazyeights/personsit.ogg)rp   
add_playerr   
play_sound)rs   r   userplayersoundrt   s        rI   r   CrazyEightsGame.add_player   s2    #D/17-DdrH   c                V  ^  UR                  5       (       dM  SSKJn  [        U 4S jU 5       S 5      nU(       d*  T R	                  U5      nU(       a  UR                  S5        g [        U5      nT R                  X&5      nT R                  SUR                  S9  T R                  5         g )Nr   )	BOT_NAMESc              3     >#    U  HN  oR                  5       TR                   Vs1 s H  o"R                  R                  5       iM     sn;  d  MJ  Uv   MP     g s  snf 7fro   )lowerrU   r   ).0nxrs   s      rI   	<genexpr>2CrazyEightsGame._action_add_bot.<locals>.<genexpr>   sA     aIqSWS_S_:`S_a66<<>S_:`)`I:`s   "A#AAAzno-bot-names-availableztable-joinedr   )stripgame_utils.lobby_actions_mixinr   nextget_userspeak_lr   r   broadcast_lr   rebuild_all_menus)rs   r   bot_name	action_idr   r   bot_user
bot_players   `       rI   _action_add_botCrazyEightsGame._action_add_bot   s    ~~CaIaH }}V,LL!9:x=__X8

@ rH   c                   [        [        U R                  5      S-
  SS5       H  nU R                  U   R                  (       d  M#  U R                  R	                  U5      nU R
                  R	                  UR                  S 5        U R                  R	                  UR                  S 5        U R                  SUR                  S9  U R                  S5          O   U R                  5         g )Nr   rb   
table-leftr   game_crazyeights/botleave.ogg)rangelenrU   r   popplayer_action_setsr   _usersr   r   r   r   )rs   r   r   ibots        rI   _action_remove_bot"CrazyEightsGame._action_remove_bot   s    s4<<(1,b"5A||A%%%ll&&q)''++CFFD9-  chh ? ?@ 6 	 rH   c                2   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  U R                  S5        [        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  UR                  (       a  S	OSnU R                  U5        [        S
 U R                   5       5      nU(       d  U R                  5         g U R                   S:X  a  UR                  U R                  :X  ab  U R                  (       aQ  U R                   HA  nUR                  (       a  M  UR                  U l        U R                  SUR                  S9    O   U R                  5         g g s  snf )NplayingT)uuidzplayer-replaced-by-botr   z game_crazyeights/personleave.oggc              3  B   #    U  H  oR                   (       + v   M     g 7fro   r   r   ps     rI   r   6CrazyEightsGame._perform_leave_game.<locals>.<genexpr>   s     @<a\\<   r   r   c              3  B   #    U  H  oR                   (       + v   M     g 7fro   r   r   s     rI   r   r      s     <|!XX|r   waitingznew-host)statusr   r   r   r   r   r   attach_userr   r   anyrU   destroyr   r   host)rs   r   r   
has_humansr   leave_sounds         rI   _perform_leave_game#CrazyEightsGame._perform_leave_game   s   ;;)#FMM FMKKOOFIIt,6;;VYY7HVYY15fkkJOO>?@4<<@@J""$#'<<E<a446993D<E##FIIt4		4(fkk:/5}}+Bd 	 	$<t||<<
LLN;;)#{{dii'DLLA888$%FF	((AFF(C	 & ""$ $ Fs   J(Jc                   U R                  U5      nU(       a  UR                  OSn[        SS9nUR                  [	        S[
        R                  " US5      SSSS	95        UR                  [	        S
[
        R                  " US5      SSSS	95        UR                  [	        S[
        R                  " US5      SSSSSS95        UR                  [	        S[
        R                  " US5      SSSSSS95        UR                  [	        S[
        R                  " US5      SSSSSS95        UR                  [	        S[
        R                  " US5      SSSSSS95        U$ )Nenturn)r   drawcrazyeights-draw_action_draw_is_draw_enabled_is_draw_hiddenr   r5   handler
is_enabled	is_hiddenpasscrazyeights-pass_action_pass_is_pass_enabled_is_pass_hidden
suit_clubs
suit-clubs_action_choose_suit_is_suit_choice_enabled_is_suit_choice_hidden_get_suit_choice_labelF)r   r5   r   r   r   	get_labelshow_in_actions_menusuit_diamondssuit-diamondssuit_heartssuit-heartssuit_spadessuit-spades)r   localer   addr   r   get)rs   r   r   r   
action_sets        rI   create_turn_action_set&CrazyEightsGame.create_turn_action_set   ss   }}V$ $$F+
"&&v/AB&-+	
 	"&&v/AB&-+	
 	"&&v|<-422%*
	
 	""&&v?-422%*
	
 	 "&&v}=-422%*
	
 	 "&&v}=-422%*
	
 rH   c           
     L  > [         TU ]  U5      nU R                  U5      nU(       a  UR                  OSn[	        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{     U$ )Nr   read_topzcrazyeights-read-top_action_read_top_is_read_top_enabled_is_check_hiddenr   read_countszcrazyeights-read-counts_action_read_counts_is_check_enabledcheck_turn_timerzpoker-check-turn-timer_action_check_turn_timerr   )rp   create_standard_action_setr   r   r   r   r   reversedr   r   _orderremoveinsert)rs   r   r   r   r   local_actionsactionrt   s          rI   r   *CrazyEightsGame.create_standard_action_set  s   W7?
}}V$ $$"&&v/EF*1,  "&&v/HI-., %"&&v/GH2.,
. }-FNN6"yyJ---!!((3$$Q		2	 .
 rH   c                z  > [         TU ]  5         U R                  SSS/[        R                  S9  U R                  SSS/[        R                  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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spaceDrawr   )stater   Passr   czRead top cardr   T)r	  include_spectatorsezRead countsr   zshift+tz
Turn timerr   zChoose clubsr   dzChoose diamondsr   hzChoose heartsr   szChoose spadesr   )rp   setup_keybindsdefine_keybindr   ACTIVErr   s    rI   r  CrazyEightsGame.setup_keybinds=  sI    GVfX\=P=PQC&9L9LM:,l6I6I^b 	 	
 	|7J7J_c 	 	
 	 %%# 	 	
 	C,|GZGZ[C!2_4E\M`M`aC=/I\I\]C=/I\I\]rH   c                F   > U R                  U5        [        TU ]	  U5        g ro   )_sync_turn_actionsrp   rebuild_player_menurs   r   rt   s     rI   r  #CrazyEightsGame.rebuild_player_menuX  s    '#F+rH   c                B   > U R                  U5        [        TU ]	  XS9  g )Nselection_id)r  rp   update_player_menu)rs   r   r  rt   s      rI   r  "CrazyEightsGame.update_player_menu\  s!    '"6"ErH   c                j   > U R                    H  nU R                  U5        M     [        TU ]  5         g ro   )rU   r  rp   r   r  s     rI   r   !CrazyEightsGame.rebuild_all_menus`  s*    llF##F+ #!#rH   c                >   [        U[        5      (       d  g U R                  US5      nU(       d  g UR                  S5        UR	                  S5        UR	                  S5        U R
                  S:w  d  UR                  (       a  g [        S UR                   5       S S9nUR                   Vs/ s H  oDR                  S	:X  d  M  UPM     nnX5-   nU H/  nUR                  [        SUR                   3S
SSSSSSS95        M1     U R                  U:X  a  UR                  [        S[        R                  " U R!                  U5      S5      SSSS95        UR                  [        S[        R                  " U R!                  U5      S5      SSSS95        g g s  snf )Nr   
play_card_r   r   r   c              3  H   #    U  H  oR                   S :w  d  M  Uv   M     g7f)r   Nrank)r   cards     rI   r   5CrazyEightsGame._sync_turn_actions.<locals>.<genexpr>q  s     <kdYY!^TTks   "	"c                r    [         R                  U R                  S5      U R                  * U R                  4$ )Nr#   )SUIT_SORT_ORDERr   suitr%  r   )r  s    rI   <lambda>4CrazyEightsGame._sync_turn_actions.<locals>.<lambda>r  s&    ?..qvvq9AFF7ADDIrH   )keyr    _action_play_card_is_play_card_enabled_is_play_card_hidden_get_card_label_get_card_soundF)r   r5   r   r   r   r   	get_soundr   r   r   r   r   r   r   r   r   r   )
isinstancerK   get_action_setremove_by_prefixr  r   is_spectatorsortedrP   r%  r   r   r   current_playerr   r   _player_locale)rs   r   turn_setnonwild_cardsr&  
wild_cardsordered_cardss          rI   r  "CrazyEightsGame._sync_turn_actionse  s   &"344&&vv6!!,/;;)#v':':<fkk<I
 (.{{E{tii1nd{
E%2!DLL#DGG9-/64//).	 " &(LL&**4+>+>v+FHZ[*1/ LL&**4+>+>v+FHZ[*1/ ) Fs   0FFc                   SU l         SU l        SU l        SU l        SU l        S U l        SU l        S U l        SU l        U R                  S5        SU R                  l        U R                  R                  U R                   Vs/ s H!  oR                  (       a  M  UR                  PM#     sn5        U R!                  5         U R#                  S5        S	U l        g s  snf )
Nr   Tr   r   Fzgame_crazyeights/mus.ogg
individualzgame_crazyeights/intro.ogg   )r   game_activeroundturn_directionr\   r^   r_   r`   ra   
play_music_team_manager	team_modesetup_teamsrU   r8  r   _sync_team_scoresr   ri   )rs   r   s     rI   on_startCrazyEightsGame.on_start  s    
"''+$ #' &+# 	23'3$&&'[1NN'[\ 45 &	 (\s   CCc                  > [         TU ]  5         U R                  (       d  g U R                  S:  a  U =R                  S-  sl        U R                  S:X  a  U R                  (       a`  U R
                  (       aO  U R                  U R
                  5      n[        U[        5      (       a  SU l        S U l        U R                  US S9  g S U l        U R                  5         g U R                  S:  a6  U =R                  S-  sl        U R                  S:X  a  U R                  5         g U R                  S:  a6  U =R                  S-  sl        U R                  S:X  a  U R                  5         g U R                  R                  5       (       a  U R!                  5         U R#                  5         [$        R                  " U 5        g )Nr   r   F	last_card)rp   on_tickrD  r_   ra   r`   get_player_by_idr5  rK   
_end_round_advance_turnrj   _start_new_handri   rg   tick_handle_turn_timeout_maybe_play_timer_warningr   r  s     rI   rQ  CrazyEightsGame.on_tick  sd   !#  A% ##q(..43K3K!2243K3KLF!&*;<<6;3370$?+/(""$!#  A% ##q($$&  1$!!Q&!$$)$$&::??%%'&&($rH   c                   U =R                   S-  sl         SU l        SU l        SU l        S U l        SU l        S U l        SU l        SU l        S U l	        U R                  SU R                   S9  U R                  S5        [        R                  " SS9u  U l        n/ 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  U H
  n/ Ul        M     [+        S
5       HJ  nU HA  nU R                  R-                  5       nU(       d  M&  UR(                  R/                  U5        MC     ML     U R0                  (       aU  U R2                  S-   [5        U R0                  5      -  U l        U R2                  S-   [5        U R0                  5      -  U l        OSU l        SU l        U R9                  5       nU(       a\  U R                  R/                  U5        UR:                  U l        U R=                  5         U R                  SS
S9  U R?                  5         U RA                  5         g s  snf )Nr   r   Fzcrazyeights-new-hand)rE  zgame_crazyeights/newhand.oggr   )	num_decks)reset_index   rb   zcrazyeights-dealt-cards)cards)!rE  rF  turn_skip_countr\   r^   r_   r`   ra   rd   rf   r   r   r   standard_deckrW   rX   rZ   rU   r8  set_turn_playersrP   r   draw_oneappendturn_player_idsrc   r   
turn_index_draw_start_cardr*  _broadcast_start_cardr   _start_turn)rs   _r   active_playersr&  
start_cards         rI   rU  CrazyEightsGame._start_new_hand  s   

a
 "''+$ #' &+###/tzzB67 #001=	1 %)\\H\!\Hn%@AAF   qA#yy))+4FFMM$' $  !%!2!2Q!6#d>R>R:S SD#0014D<P<P8QQDO "DDO **,
$$Z0 *D&&(6a@""$9 Is   8I	I	c                     U R                   R                  5       nU(       d  g U R                  U5      (       a  U$ U R                   R                  U/5        U R                   R	                  5         Mr  ro   )rW   rb  _is_number_cardr   shufflers   r&  s     rI   rf   CrazyEightsGame._draw_start_card  sZ    99%%'D##D))IIMM4&!II rH   c                   U R                   n[        U[        5      (       d  g SU l        S U l        SU l        U R                  5         U R                  U5        U R                  USS5        UR                  (       a*  [        R                  " U[        R                  " SS5      S9  U R                  5         U R                  U5        U R!                  5         g )NFzgame-your-turnzgame-turn-start   (   ticks)r:  r5  rK   rd   rf   rh   _stop_turn_loop_start_turn_loopbroadcast_personal_lr   r   jolt_botrandomrandint_start_turn_timerr  r   rs   r   s     rI   rh  CrazyEightsGame._start_turn  s    $$&"344##$)!f%!!&*:<MN==vV^^B-CD ' rH   c                b    U R                  5         U R                  SS9  U R                  5         g )NF)announce)rw  advance_turnrh  rs   s    rI   rT  CrazyEightsGame._advance_turn!  s+    5)rH   c                     [        U R                  R                  5      nUS::  a  U R                  R                  5         g U R                  R                  U5        SU l        g ! [         a    Sn NRf = f)Nr   F)r8   rV   r=   
ValueErrorrg   clearstartrh   rs   secondss     rI   r}  !CrazyEightsGame._start_turn_timer&  sg    	$,,112G a<JJ

!$)!  	G	s   A% %A43A4c                    [        U R                  R                  5      nUS:  a  g U R                  (       a  g U R
                  R                  5       S:X  a  SU l        U R                  S5        g g ! [         a    Sn N_f = f)Nr      r]  Tzgame_crazyeights/fivesec.ogg)r8   rV   r=   r  rh   rg   seconds_remainingr   r  s     rI   rX  )CrazyEightsGame._maybe_play_timer_warning1  sx    	$,,112G R<$$::'')Q.(,D%OO:; /  	G	s   A2 2B Bc                    U R                   n[        U[        5      (       d  g U R                  S5        [	        X5      nU(       a  U R                  X5        g g )Nzgame_crazyeights/expired.ogg)r:  r5  rK   r   r!   execute_actionrs   r   r   s      rI   rW  $CrazyEightsGame._handle_turn_timeout>  sK    $$&"34467d+	2 rH   c                    [        X5      $ ro   r    r~  s     rI   r!   CrazyEightsGame.bot_thinkG  s    &&rH   c                J  ^ U R                  U5      nU(       d  g U R                  (       a  g  [        UR                  S5      S   5      m[        U4S jUR                   5       S 5      nU(       d  g U R                  U5      (       d  g UR                  R                  U5        U R                  R                  U5        SU l        S U l        U R                  U5        U R                  X45        [        UR                  5      S:X  a  U R!                  S5        UR"                  S:X  a  [        UR                  5      S:X  a  U R%                  X4S	9  g S
U l        U R'                  U5        U R)                  5         U R+                  5         UR,                  (       a*  [.        R0                  " U[2        R4                  " SS5      S9  g UR6                  U l        U R)                  5         UR"                  S:X  aR  [        UR                  5      S:X  a9  U R;                  5       nU(       a  U R=                  US5        U R%                  X4S	9  g U R?                  U5        [        UR                  5      S:X  a  U R%                  X4S	9  g U RA                  5         g ! [         a     g f = f)Nri  rb   c              3  J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fro   r   r   r  card_ids     rI   r   4CrazyEightsGame._action_play_card.<locals>.<genexpr>X  s     :1$$'/QQ   #	#Fr   zgame_crazyeights/onecard.oggr   r   rO  Tr  rs  ru     r   )!_require_active_playerr\   r8   splitr  r   rP   _is_card_playabler  rX   rc  rd   rf   _play_card_sound_broadcast_playr   r   r%  rS  r  r   r}  r   r   rz  r{  r|  r*  rZ   _next_player_draw_for_player_apply_card_effectsrT  )rs   r   r   r   r&  next_playerr  s         @rI   r/  !CrazyEightsGame._action_play_cardN  s   ''/""	)//#.r23G ::DA%%d++	d  &##d#Q%qvv;!OO:;99>166{a2&*D###A&""$""$xx""1FNN2r,BC II 99?s166{a/++-K%%k15OOAO.  &qvv;!OOAO._  		s   J 
J"!J"c                V   U R                  U5      nU(       d  g U R                  U5      (       d  g U R                  5       nU(       d  U R                  5         g UR                  R                  U5        SU l        X@l        U R                  U5      nU(       a  U R                  U5      nU(       a  UR                  S5        U R                   HJ  nUR                  UR                  :X  a  M  U R                  U5      nU(       d  M9  UR                  S5        ML     OU R                  S5        U R                  5         U R                  US5        SUR                   3n	U R                  X9S9  UR                   (       a+  ["        R$                  " U[&        R(                  " SS5      S	9  g g )
NTz!game_crazyeights/drawPlayable.oggzgame_crazyeights/draw.oggr   r"  r  r  rs  ru  )r  	_can_draw
_draw_card_handle_empty_drawrP   rc  rd   rf   r  r   r   rU   r   r}  _broadcast_drawr  r   r   rz  r{  r|  )
rs   r   r   r   r&  playabler   other
other_userr  s
             rI   r   CrazyEightsGame._action_draw  sM   ''/~~a   ##%	d"#))$/==#D CD88qtt#!]]51
:))*EF & OO78 Q"#DGG9-=88qr2(>? rH   c                    U R                  U5      nU(       d  g U R                  (       d  g U R                  S5        U R                  U5        SU l        S U l        U R                  5         g )Nzgame_crazyeights/pass.oggF)r  rd   r   _broadcast_passrf   rT  )rs   r   r   r   s       rI   r   CrazyEightsGame._action_pass  s[    ''/""34Q##rH   c                \   U R                  U5      nU(       d  g U R                  (       d  g U R                  U5      nUc  g X@l        SU l        U R	                  S5        U R                  U R                  U5      SS9  U R                  U5        U R                  5         UR                  (       a*  [        R                  " U[        R                  " SS5      S9  U R                  R                  5         SU l        UR"                  U l        U R&                  UR"                  :X  a  SU l        g )	NFzgame_crazyeights/morf.oggrl   )delay_ticksr  rs  ru  T)r  r\   _suit_from_actionrZ   r   schedule_sound_suit_sound_broadcast_suit_chosenr   r   r   rz  r{  r|  rg   r  r_   r   r`   r^   ra   )rs   r   r   r   r*  s        rI   r   #CrazyEightsGame._action_choose_suit  s    ''/&&%%i0< "'34D,,T2C##D) 88qr2(>?

!#$44 ''144/*.D'rH   c                    U R                  U5      nU(       d  g UR                  U R                  UR                  5      5        g ro   )r   speakformat_top_cardr   )rs   r   r   r   s       rI   r    CrazyEightsGame._action_read_top  s1    }}V$

4''45rH   c                   U R                  U5      nU(       d  g UR                  n/ nU R                   H`  nUR                  (       a  M  [	        U[
        5      (       d  M-  UR                  UR                   S[        UR                  5       35        Mb     U R                  R                  5       nUS:  a%  UR                  [        R                  " USUS95        U(       a  SR                  U5      nO@U R                  (       a  [        R                  " US5      nO[        R                  " US5      nUR!                  U5        g )N r   zcrazyeights-deck-countcountz, zcrazyeights-no-handszcrazyeights-no-players)r   r   turn_playersr8  r5  rK   rc  r   r   rP   rW   sizer   r   joinrU   r  )	rs   r   r   r   r   partsr   
deck_counttexts	            rI   r   #CrazyEightsGame._action_read_counts  s    }}V$""A~~!.//xqQVV67	 #
 YY^^%
>LL))&2JR\]^99U#D\\##F,BCD##F,DED

4rH   c                    U R                  U5      nU(       d  g U R                  R                  5       nUS::  a  UR                  S5        g UR                  SUS9  g )Nr   zpoker-timer-disabledzpoker-timer-remaining)r  )r   rg   r  r   )rs   r   r   r   	remainings        rI   r   (CrazyEightsGame._action_check_turn_timer  sM    }}V$JJ002	>LL/0LL0)LDrH   c                x    [        U[        5      (       d  g UR                  (       a  g U R                  U:w  a  g U$ ro   )r5  rK   r8  r:  r~  s     rI   r  &CrazyEightsGame._require_active_player  s5    &"344&(rH   c                l    U R                   S:w  a  gUR                  (       a  gU R                  U:w  a  gg )Nr   action-not-playingzaction-spectatorzaction-not-your-turn)r   r8  r:  r~  s     rI   _is_turn_action_enabled'CrazyEightsGame._is_turn_action_enabled  s1    ;;)#'%&()rH   c                D   U R                   S:w  d  UR                  (       a  [        R                  $ U R                  U:w  a  [        R                  $ U R
                  S:  a  [        R                  $ U R                  S:  a  [        R                  $ [        R                  $ )Nr   r   )r   r8  r   HIDDENr:  r_   rj   VISIBLEr~  s     rI   _is_turn_action_hidden&CrazyEightsGame._is_turn_action_hidden  s|    ;;)#v':':$$$&($$$!#$$$!#$$$!!!rH   )r   c               F    U R                   (       a  XR                  :X  a  gg Naction-not-available)r\   r:  r  s      rI   r0  %CrazyEightsGame._is_play_card_enabled  s    ""v1D1D'D)rH   c                 ^ U R                   S:w  a  [        R                  $ UR                  (       a  [        R                  $ [	        U[
        5      (       d  [        R                  $ U(       d  [        R                  $  [        UR                  S5      S   5      m[        U4S jUR                   5       S 5      nU(       d  [        R                  $ [        R                  $ ! [         a    [        R                  s $ f = f)Nr   ri  rb   c              3  J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fro   r  r  s     rI   r   7CrazyEightsGame._is_play_card_hidden.<locals>.<genexpr>(       ?1ttwQQr  )r   r   r  r8  r5  rK   r8   r  r  r   rP   r  rs   r   r   r&  r  s       @rI   r1  $CrazyEightsGame._is_play_card_hidden  s    ;;)#$$$$$$&"344$$$$$$	%)//#.r23G ??F$$$!!!  	%$$$	%s    C$ $D Dc                    U R                   (       a  gU R                  U5      b  U R                  U5      $ [        U[        5      (       d  gU R                  (       a  gU R                  U5      (       a  gg r  )r\   r  r5  rK   rd   _has_playable_cardsr~  s     rI   r    CrazyEightsGame._is_draw_enabled-  sd    "")''/;//77&"344))##F++)rH   c                   U R                   (       a  [        R                  $ U R                  U5      [        R                  :X  a  [        R                  $ [	        U[
        5      (       d  [        R                  $ U R                  (       a  [        R                  $ U R                  U5      (       a  [        R                  $ [        R                  $ ro   )	r\   r   r  r  r5  rK   rd   r  r  r~  s     rI   r   CrazyEightsGame._is_draw_hidden:  s    ""$$$&&v.*2C2CC$$$&"344$$$$$$##F++$$$!!!rH   c                   U R                   (       a  gU R                  U5      b  U R                  U5      $ [        U[        5      (       a  U R	                  U5      (       a  gU R
                  (       a  g [        U[        5      (       a$  [        UR                  5      U R                  :  a  g U R                  [        U[        5      (       a  UOS 5      (       d  g gr  )
r\   r  r5  rK   r  rd   r   rP   rm   r  r~  s     rI   r    CrazyEightsGame._is_pass_enabledG  s    "")''/;//77f/00T5M5Mf5U5U)f/00S5EI[I[5[~~
6;L(M(MfSWXX%rH   c                   U R                   (       a  [        R                  $ U R                  U5      [        R                  :X  a  [        R                  $ [	        U[
        5      (       a&  U R                  U5      (       a  [        R                  $ U R                  (       a  [        R                  $ [	        U[
        5      (       a3  [        UR                  5      U R                  :  a  [        R                  $ U R                  [	        U[
        5      (       a  UOS 5      (       d  [        R                  $ [        R                  $ ro   )r\   r   r  r  r5  rK   r  rd   r  r   rP   rm   r  r~  s     rI   r   CrazyEightsGame._is_pass_hiddenV  s    ""$$$&&v.*2C2CC$$$f/00T5M5Mf5U5U$$$%%%f/00S5EI[I[5[%%%~~
6;L(M(MfSWXX%%%   rH   c                n    U R                   (       d  gU R                  U5      b  U R                  U5      $ g r  )r\   r  r~  s     rI   r   'CrazyEightsGame._is_suit_choice_enablede  s3    &&)''/;//77rH   c                   ^ U R                  U5      nU R                  U5      mTc  gU R                  TU5      n[        U[        5      (       d  U$ [        U4S jUR                   5       5      nU SU 3$ )Nr.  c              3  J   >#    U  H  oR                   T:X  d  M  S v   M     g7f)r   Nr*  )r   r&  r*  s     rI   r   9CrazyEightsGame._get_suit_choice_label.<locals>.<genexpr>t  s     H{tii46G{r  r  )r;  r  
_suit_namer5  rK   sumrP   )rs   r   r   r   	suit_name
suit_countr*  s         @rI   r   &CrazyEightsGame._get_suit_choice_labell  st    $$V,%%i0<OOD&1	&"344Hv{{HH
Aj\**rH   c                &    U R                   S:X  a  gg )Nr   r  )r   r~  s     rI   r   !CrazyEightsGame._is_check_enabledw  s    ;;)#'rH   c                "    [         R                  $ ro   r   r  r~  s     rI   r    CrazyEightsGame._is_check_hidden|         rH   c                f    U R                   (       a  XR                  :X  a  gU R                  U5      $ r  )r\   r:  r   r~  s     rI   r   $CrazyEightsGame._is_read_top_enabled  s*    ""v1D1D'D)%%f--rH   c                    U R                   (       a  XR                  :X  a  g[        U R                  R                  5      S:X  a  gg Nr  r   zaction-no-scoresr\   r:  r   rH  teamsr~  s     rI   _is_check_scores_enabled(CrazyEightsGame._is_check_scores_enabled  8    ""v1D1D'D)t!!''(A-%rH   c                    U R                   (       a  XR                  :X  a  g[        U R                  R                  5      S:X  a  gg r  r   r~  s     rI   !_is_check_scores_detailed_enabled1CrazyEightsGame._is_check_scores_detailed_enabled  r  rH   c                    U R                   (       d  [        R                  $ U R                  U5      [        R                  :X  a  [        R                  $ [        R                  $ ro   )r\   r   r  r  r  r~  s     rI   r   &CrazyEightsGame._is_suit_choice_hidden  sH    &&$$$&&v.*2C2CC$$$!!!rH   c                "    [         R                  $ ro   r  r~  s     rI   _is_always_hidden!CrazyEightsGame._is_always_hidden  r  rH   c                    U(       d  gU R                   (       a  gU R                  (       a  g[        UR                  5      U R                  :  a  gU R                  U5      (       a  gg)NFT)r\   rd   r   rP   rm   r  r~  s     rI   r  CrazyEightsGame._can_draw  sQ    ""v{{t111##F++rH   c                &    UR                   S;   a  gg)N)r         r  FTr$  rp  s     rI   rn  CrazyEightsGame._is_number_card  s    99'rH   c                    U R                   (       a  gUR                  S:X  a  gU R                  nU(       d  gU R                  (       a  UR                  U R                  :X  a  gUR                  S:w  a  UR                  UR                  :X  a  gg)NFr   T)r\   r%  top_cardrZ   r*  )rs   r&  tops      rI   r  !CrazyEightsGame._is_card_playable  sh    ""99>mmd.?.?!?88q=TYY#((2rH   c                B   ^  [        U 4S jUR                   5       5      $ )Nc              3  F   >#    U  H  nTR                  U5      v   M     g 7fro   )r  )r   r&  rs   s     rI   r   6CrazyEightsGame._has_playable_cards.<locals>.<genexpr>  s     HKD4))$//Ks   !)r   rP   r~  s   ` rI   r  #CrazyEightsGame._has_playable_cards  s    HFKKHHHrH   c                    [        UR                  5       VVs/ s H  u  p#U R                  U5      (       d  M  UPM!     snn$ s  snnf ro   )	enumeraterP   r  )rs   r   r   r&  s       rI   get_playable_indices$CrazyEightsGame.get_playable_indices  s5    !*6;;!7X!7ga4;Q;QRV;W!7XXXs
   AAc                F    U R                   (       a  U R                   S   $ S $ )Nrb   )rX   r  s    rI   r  CrazyEightsGame.top_card  s     (,(9(9t  $CtCrH   c                    U R                   R                  5       (       a  U R                  5         U R                   R                  5       $ ro   )rW   is_empty_reshuffle_discard_into_deckrb  r  s    rI   r  CrazyEightsGame._draw_card  s4    99--/yy!!##rH   c                D    U R                  5         U R                  5         g ro   )rw  rU  r  s    rI   r  "CrazyEightsGame._handle_empty_draw  s    rH   c                   [        U R                  5      S::  a  g U R                  S   nU R                  S S nU/U l        U R                  R                  U5        U R                  R	                  5         U R                  S5        g )Nr   rb   zgame_crazyeights/pileempty.ogg)r   rX   rW   r   ro  r   )rs   r  rests      rI   r#  ,CrazyEightsGame._reshuffle_discard_into_deck  sq    t  !Q&#  "% E		d		89rH   c                6   UR                   S:X  a  U R                  S5        g UR                   S:X  a  U R                  S5        g UR                   S:X  a  U R                  S5        g UR                   S:X  a  U R                  S5        g U R                  S	5        g )
Nr   zgame_crazyeights/discwild.oggr  zgame_crazyeights/discdraw.oggr  zgame_crazyeights/discskip.oggr  zgame_crazyeights/discrev.oggzgame_crazyeights/discarded.ogg)r%  r   rp  s     rI   r   CrazyEightsGame._play_card_sound  so    99>OO;<YY"_OO;<YY"_OO;<YY"_OO:;OO<=rH   c                v   UR                   S:X  a  U R                  S5        g UR                   S:X  a<  [        U R                  5      S:X  a  U R                  S5        g U R	                  5         g UR                   S:X  a;  U R                  5       nU(       a  U R                  US5        U R                  S5        g g )Nr  r   r  r   r  )r%  skip_next_playersr   rd  reverse_turn_directionr  r  )rs   r&  r  s      rI   r  #CrazyEightsGame._apply_card_effects  s    99?""1%YY"_4''(A-&&q)++-YY"_++-K%%k15""1%	 rH   c                    [        U5       H7  nU R                  5       nU(       d  M  UR                  R                  U5        M9     US:  a  U R	                  X5        g g Nr   )r   r  rP   rc  r  )rs   r   r  ri  r&  s        rI   r   CrazyEightsGame._draw_for_player  sO    uA??$Dt""4(  19  / rH   c                    U R                   (       d  g U R                  U R                  -   [        U R                   5      -  nU R                   U   nU R	                  U5      n[        U[        5      (       a  U$ S $ ro   )rd  re  rF  r   rR  r5  rK   )rs   idxr   r   s       rI   r  CrazyEightsGame._next_player   sj    ##!4!44D<P<P8QQ((-	!!),q"344q>$>rH   c                <    US:X  a  gUS:X  a  gUS:X  a  gUS:X  a  gg )	Nr   r   r   r   r   r   r   r#   r>   )rs   r   s     rI   r  !CrazyEightsGame._suit_from_action  s1    $'%%rH   c                0    SSSSS.R                  US5      $ )Nr   r   r   r   r"   )r   rs   r*  s     rI   suit_action_idCrazyEightsGame.suit_action_id  s&    	

 #dL
!	"rH   c                    SSSSS.U   $ )Nzgame_crazyeights/diamonds.oggzgame_crazyeights/clubs.oggzgame_crazyeights/hearts.oggzgame_crazyeights/spades.oggr"   r>   r9  s     rI   r  CrazyEightsGame._suit_sound  s"    .+,,	

  	rH   c                @    [         R                  " USSSSS.U   5      $ )Nr   r   r   r   r"   )r   r   )rs   r*  r   s      rI   r  CrazyEightsGame._suit_name#  s3    "  	
 
 	
rH   c                R  ^ [        U[        5      (       d  U$  [        UR                  S5      S   5      m[        U4S jUR                   5       S 5      nU(       d  U$ U R                  U5      nU(       a  UR                  OSnU R                  X55      $ ! [         a    Us $ f = f)Nri  rb   c              3  J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fro   r  r  s     rI   r   2CrazyEightsGame._get_card_label.<locals>.<genexpr>5  r  r  r   )
r5  rK   r8   r  r  r   rP   r   r   format_card)rs   r   r   r&  r   r   r  s         @rI   r2  CrazyEightsGame._get_card_label.  s    &"344	)//#.r23G ??F}}V$ $$--  		s   B B&%B&c                  ^ [        U[        5      (       d  g  [        UR                  S5      S   5      m[        U4S jUR                   5       S 5      nU(       d  g U R                  U5      (       a  gg ! [         a     g f = f)Nri  rb   c              3  J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fro   r  r  s     rI   r   2CrazyEightsGame._get_card_sound.<locals>.<genexpr>C  r  r  zgame_crazyeights/hlcard.ogg)r5  rK   r8   r  r  r   rP   r  r  s       @rI   r3  CrazyEightsGame._get_card_sound<  sz    &"344	)//#.r23G ??F!!$''0  		s   A6 6
BBc                   UR                   S:X  a  [        R                  " US5      $ UR                   S:X  a0  [        R                  " USU R                  UR                  U5      S9$ UR                   S:X  a0  [        R                  " USU R                  UR                  U5      S9$ UR                   S:X  a0  [        R                  " US	U R                  UR                  U5      S9$ [        X5      $ )
Nr   crazyeights-wildr  zcrazyeights-reverser  r  zcrazyeights-skipr  zcrazyeights-draw-two)r%  r   r   r  r*  r   )rs   r&  r   s      rI   rC  CrazyEightsGame.format_cardJ  s    99>##F,>??99?##-DOODIIv4V  99?##*F1S  99?##.T__TYYPV5W  &&rH   c                H   U R                   nU(       d  [        R                  " US5      $ UR                  S:X  aX  U R                  (       a0  [        R                  " USU R                  U R                  U5      S9$ [        R                  " US5      $ U R                  X!5      $ )Nzcrazyeights-no-topr   zcrazyeights-wild-suitr  rJ  )r  r   r   r%  rZ   r  rC  )rs   r   r  s      rI   r  CrazyEightsGame.format_top_card[  s    mm##F,@AA88q=  #''+):):FC 
  ##F,>??,,rH   c                N    U R                  U5      nU(       a  UR                  $ S$ )Nr   )r   r   rs   r   r   s      rI   r;  CrazyEightsGame._player_localei  s!    }}V$"t{{,,rH   c                   U R                  5         / nSnU R                   Hx  n[        U[        5      (       a  UR                  (       a  M+  UR
                  UR
                  :X  a  MG  U R                  UR                  5      nUR                  XV45        XF-  nMz     U=R                  U-  sl	        U R                  5         U R                  XU5        U R                  XU5        / U l        [        5       U l        / U l        U R                   H!  n[        U[        5      (       d  M  / Ul        M#     U R#                  5         UR                  U R$                  R&                  :  a  U R)                  U5        g SU l        g )Nr   d   )rw  rU   r5  rK   r8  r   _hand_pointsrP   rc  r0   rK  _announce_round_points_play_round_end_soundsrX   r   rW   rd  r   rV   r9   	_end_gamerj   )rs   winnerrP  points_fromtotalr   r0   s          rI   rS  CrazyEightsGame._end_roundq  s2    <>Aa!233q~~ttvyy %%aff-Ez*NE  	 ##F?##F? F	!A!.//  	 <<4<<555NN6"%rH   c                    SnU HV  nUR                   S:X  a  US-  nM  UR                   S;   a  US-  nM1  UR                   S:X  a  US-  nMH  X#R                   -  nMX     U$ )Nr   r   2   )r  r  r  r  r   r$  )rs   rP   rY  r&  s       rI   rS  CrazyEightsGame._hand_points  sa    DyyA~l*a
"  rH   c                   U R                    H  nU R                  U5      nU(       d  M  U VVs/ s H0  u  pg[        R                  " UR                  SUR
                  US9PM2     nnnU(       a!  [        R                  " UR                  U5      O [        R                  " UR                  S5      n	UR                  UR                  :X  a  UR                  SU	USS9  M  UR                  SUR
                  U	USS9  M     g s  snnf )	Nzcrazyeights-round-points-from)r   pointszcrazyeights-round-details-nonezcrazyeights-you-win-roundtable)detailsrY  bufferzcrazyeights-round-summary)r   ra  rY  rb  )	rU   r   r   r   r   r   format_list_andr   r   )
rs   rW  rX  rY  r   r   oppr0   points_partsra  s
             rI   rT  &CrazyEightsGame._announce_round_points  s     A==#D #. #.JC   KK388 	 #.     ,,T[[,G!%%dkk3ST 
 ttvyy /#"	   /!;;#"  5 s   7Dc                
   U R                   (       a8  U R                  S:  a(  U R                  U R                   U R                     5      OS nU(       a  UR                  O[        R
                  " SS5      nU R                   H~  nU R                  U5      nU(       d  M  U R                  UR                  5      nU(       a-  UR                  UR                  :X  a  UR                  SUSS9  Ml  UR                  SUUSS9  M     g )	Nr   r   zunknown-playerzcrazyeights-you-turn-upr`  )r&  rb  zcrazyeights-start-card)r   r&  rb  )rd  rc   rR  r   r   r   rU   r   r  r   r   r   )rs   dealerdealer_namer   r   	card_texts         rI   rg  %CrazyEightsGame._broadcast_start_card  s     ##(9(9Q(> !!$"6"6t7H7H"IJ 	
 &,fkk1A1A$HX1YA==#D,,T[[9I!$$&))+6YwW,&""	   rH   c                    U R                    HI  nU R                  U5      nU(       d  M  U R                  XR                  5      nUR	                  SUSS9  MK     g )Nzcrazyeights-suit-chosenr`  )r*  rb  )rU   r   r  r   r   )rs   r*  r   r   r  s        rI   r  &CrazyEightsGame._broadcast_suit_chosen  sI    A==#Dkk:ILL27LS rH   c                8   U R                    GH	  nU R                  U5      nU(       d  M  U R                  X$R                  5      n[	        UR
                  5      S:X  a!  [        R                  " UR                  S5      OSnUR                  UR                  :X  a!  [        R                  " UR                  SUS9nO+[        R                  " UR                  SUR                  US9nU(       a  UR                  U SU 3S	S
9  M  UR                  US	S
9  GM     g )Nr   zcrazyeights-one-cardr.  zcrazyeights-you-play)r&  zcrazyeights-player-plays)r   r&  r  r`  )rb  )rU   r   rC  r   r   rP   r   r   r   r   r  )rs   r   r&  r   r   rj  one_card_textmsgs           rI   r  CrazyEightsGame._broadcast_play  s    A==#D(({{;I v{{#q(   .DE  ttvyy "&&t{{4JQZ["&&KK!;FKKV_ 

cU!M?3G
D

3w
/+ rH   c                \    US:X  a  U R                  USS5        g U R                  USSUS9  g )Nr   zcrazyeights-you-draw-onezcrazyeights-player-draws-onezcrazyeights-you-draw-manyzcrazyeights-player-draws-manyr  ry  )rs   r   r  s      rI   r  CrazyEightsGame._broadcast_draw  sA    A:%%*. %%+/	 & rH   c                *    U R                  USS5        g )Nzcrazyeights-you-passzcrazyeights-player-passesrs  r~  s     rI   r  CrazyEightsGame._broadcast_pass  s    !!"'	
rH   c                   US:  a  SOSnSnSnU R                    H  nU R                  U5      nU(       a&  [        U[        5      (       a  UR                  (       a  MC  UR
                  UR
                  :X  a  UR                  U5        Mp  U R                  UR                  5      n	U	S:  a  UR                  U5        M  UR                  U5        M     g )NrR  zgame_crazyeights/bigwin.oggzgame_crazyeights/youwin.oggzgame_crazyeights/loser.oggzgame_crazyeights/youlose.oggr\  )	rU   r   r5  rK   r8  r   r   rS  rP   )
rs   rW  rX  rY  	win_sound
lose_sound
lose_smallr   r   r_  s
             rI   rU  &CrazyEightsGame._play_round_end_sounds  s     6;c\1Gd	1
3
A==#Dz!->??1>>ttvyy 	*&&qvv.F|
+
+ rH   c                   U R                  5         U R                  S5        U R                  USSUR                  S9  U R                   H.  nU R                  U5      nU(       d  M  UR                  S5        M0     U R                  5         g )Nzgame_crazyeights/hitmark.oggzcrazyeights-you-win-gamezcrazyeights-game-winnerr0   	turn_menu)rw  r   ry  r0   rU   r   remove_menufinish_game)rs   rW  r   r   s       rI   rV  CrazyEightsGame._end_game.  s}    67!!&%,,	 	" 	
 A==#Dt  -  	rH   c                H   U R                    Vs/ s H  oR                  (       a  M  UPM     nn[        US S S9nU Vs0 s H  oR                  UR                  _M     nn[        U R                  5       [        R                  " 5       R                  5       U R                  U Vs/ s H8  n[        UR                  UR                  UR                  [        USS5      S9PM:     snU(       a  UR                  OS U(       a  UR                  OSUS.S9$ s  snf s  snf s  snf )	Nc                    U R                   $ ro   r}  )r   s    rI   r+  3CrazyEightsGame.build_game_result.<locals>.<lambda>?  s    177rH   )r-  r3   is_virtual_botF)r   player_namer   r  r   )winner_namewinner_scorefinal_scores)	game_type	timestampduration_ticksplayer_resultscustom_data)rU   r8  maxr   r0   r   r}   r   now	isoformatsound_scheduler_tickr   r   r   getattr)rs   r   activerW  r  s        rI   build_game_result!CrazyEightsGame.build_game_result=  s    !\\@\!\@V!2DA178A8mmolln..044    A dd !88#*1.>#F	   /5v{{$06A ,
 	
 A8
s   DD D&?Dc                   [         R                  " US5      /nUR                  R                  S0 5      n[        UR	                  5       S SS9n[        US5       H!  u  nu  pxUR                  U SU SU 35        M#     U$ )	Nzgame-final-scoresr  c                    U S   $ )Nr   r>   )items    rI   r+  3CrazyEightsGame.format_end_screen.<locals>.<lambda>X  s    d1grH   T)r-  reverser   z. z: )r   r   r  r9  itemsr  rc  )	rs   resultr   linesr  sorted_scoresr   r   r0   s	            rI   format_end_screen!CrazyEightsGame.format_end_screenU  s    !!&*=>?))--nbA|1139MW[\ )- ;A}LLA3bb01 !<rH   c                D   U R                   R                   H
  nSUl        M     U R                   Hl  nUR                  (       a  M  U R                   R                  UR                  5      nU(       d  MD  [        U[        5      (       d  M[  UR                  Ul        Mn     g r1  )
rH  r  total_scorerU   r8  get_teamr   r5  rK   r0   )rs   teamr   s      rI   rK  !CrazyEightsGame._sync_team_scores]  sp    &&,,D D -A~~%%..qvv6Dt
1&788#$77  rH   c                z    U R                  U5      nU(       d  g UR                  U l        UR                  S5        g )Nzgame_crazyeights/yourturn.ogg)r   r   rk   play_ambiencerO  s      rI   rx   CrazyEightsGame._start_turn_loopk  s1    }}V$%+YY":;rH   c                    U R                   (       d  g U R                  U R                   5      nU(       a(  U R                  U5      nU(       a  UR                  5         S U l         g ro   )rk   rR  r   stop_ambiencerO  s      rI   rw  CrazyEightsGame._stop_turn_loopr  sL    ))&&t'A'AB==(D""$%)"rH   c                *    U R                  USS5        g )Nzcrazyeights-you-are-skippedzcrazyeights-player-skippedrs  r~  s     rI   on_player_skipped!CrazyEightsGame.on_player_skipped|  s    !!)(	
rH   )rk   r\   rZ   rc   rW   rX   rD  rj   r   ri   r^   rU   rE  r   rh   rF  rf   rd   re  rd  r_  ra   r`   r_   )returnr<   )r  r8   )F)r   r<   r   r<   r   r[   r  rK   )r   r<   r   r   r  rK   )r   r   r   r<   r   r<   r  None)r   r   r   r<   r  r  )r   r   r  r  )r   rK   r  r   )r   r   r  r   )r  r  ro   )r   r   r  r]   r  r  )r  re   )r   rK   r  r]   )r   r   r  CrazyEightsPlayer | None)r   r   r  r]   )r   r   r  r   )r   r   r   r]   r  r]   )r   r   r   r]   r  r   )r   r   r   r<   r  r<   )r   r  r  r[   )r&  r   r  r[   )r   rK   r  r[   )r   rK   r  z	list[int])r&  r   r  r  )r   rK   r  r8   r  r  )r  r  )r   r<   r  rY   )r*  r8   r  r<   )r*  r8   r   r<   r  r<   )r   r   r   r<   r  r]   )r&  r   r   r<   r  r<   )r   r<   r  r<   )r   r   r  r<   )rW  rK   rP  re   r  r  )rP   rO   r  r8   )rW  rK   rX  z#list[tuple[CrazyEightsPlayer, int]]rY  r8   r  r  )r*  r8   r  r  )r   rK   r&  r   r  r  )r   rK   r  r  )rW  rK   r  r  )r  r   )r  r   r   r<   r  z	list[str])}r?   r@   rA   rB   rC   r   rQ   rU   rD   r.   rV   r   rW   rX   rZ   r\   r^   r_   r`   ra   rc   rd   rf   r   rg   rh   ri   rj   rk   rm   rq   classmethodry   r}   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r  rL  rQ  rU  rf  rh  rT  r}  rX  rW  r!   r/  r   r   r   r   r   r   r  r  r  r0  r1  r   r   r   r   r   r   r   r   r   r  r  r   r  r  rn  r  r  r  propertyr  r  r  r#  r  r  r  r  r  r:  r  r  r2  r3  rC  r  r;  rS  rS  rT  rg  r  r  r  r  rU  rV  r  r  rK  rx  rw  r  rG   __classcell__)rt   s   @rI   rS   rS   F   s    ,',T'BG$B"'8J"KGKt,D$,$T:L*:#L*#$$*.Z.OS&**#(D(L# ND #'O['!.AE>A!&$&cOS(,:,M3      % %    I!&	!'%ZFP D^6,F F$
0l'* @0d	 !(
	*<3'7r@B
260E	" PT 
 OS "$"&!	+
!.
"!"
IY D D$

:
>&0?	"	
.'"--#&J&!& 9& 	&
 
&P,T00
,!, 9, 	,
 
,.
0+<*
 
rH   rS   )1
__future__r   dataclassesr   r   r{  baser   r   r	   registryr
   game_utils.actionsr   r   r   game_utils.cardsr   r   r   r   game_utils.game_resultr   r   game_utils.optionsr   r   r   game_utils.bot_helperr   game_utils.poker_timerr   messages.localizationr   server.core.ui.keybindsr   server.core.users.botr   server.core.users.baser   r   r   r!   r)  rE   rF   r.   rK   rS   r>   rH   rI   <module>r     s    " (  , , $ ? ? B B > E E . 4 1 0 % '  A!*I 	






	 
    4   
 
y
d y
  y
rH   