
    Iig                      % S SK Jr  S SKJrJr  S SKJr  S SK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Jr  S	SKJr  S	SKJrJrJrJrJr  S	SKJrJr  S	SKJ r 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Qr,SSSSSSSSSS.	r-/ SQr.SS S!S.r// S"Qr0S#S$S%S".r1/ S&Qr2S'S(S)S&.r3S*S+/r4S,S-S..r5S/S/S/S/S0S1S/S+SS/S2S3.S2S2S/S2S0S4S2S+SS/S2S3.S2S/S/S/S0S1S/S*SS2S/S3.S.r6S5\7S6'   S7r8S8r9S9r:S:r;/ S;Qr</ S<Qr=/ S=Qr>/ S>Qr?S?r@S@rASArBSBrCSCrDSDrESErFSFrG\ " SG SH\5      5       rH\ " SI SJ\5      5       rI\\ " SK SL\
5      5       5       rJg)M    )annotations)	dataclassfield)datetimeN)Callable   )GameGameOptionsPlayer)register_game   )Action	ActionSetEditboxInput
Visibility)	BotHelper)CardDeckDeckFactory	card_name
read_cards)
GameResultPlayerResult)
BoolOption	IntOption
MenuOptionoption_field)PokerTurnTimer)Localization)KeybindState   	bot_think)	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-unlimited)vegaseuropeanfriendlyblackjack-rules-profile-vegasz blackjack-rules-profile-europeanz blackjack-rules-profile-friendly)3_to_26_to_51_to_1blackjack-payout-3-to-2zblackjack-payout-6-to-5zblackjack-payout-1-to-1)any_two9_to_1110_to_11blackjack-double-rule-any-twozblackjack-double-rule-9-to-11zblackjack-double-rule-10-to-11
same_value	same_rankzblackjack-split-rule-same-valueblackjack-split-rule-same-rank)r9   r:   Tr1   r5   F)dealer_hits_soft_17dealer_peeks_blackjackallow_insuranceallow_late_surrenderblackjack_payoutdouble_down_ruleallow_double_after_split
split_rulemax_split_handssplit_aces_one_card_onlysplit_aces_count_as_blackjackr6   z&dict[str, dict[str, str | bool | int]]RULE_PROFILE_PRESETSzgame_blackjack/hit.oggzgame_blackjack/stand.oggzgame_blackjack/doubledown.oggzgame_blackjack/blackjack.ogg)zgame_blackjack/bust1.oggzgame_blackjack/bust2.ogggame_blackjack/bust3.ogg)zgame_cards/draw1.oggzgame_cards/draw2.oggzgame_cards/draw4.ogg)zgame_cards/discard1.oggzgame_cards/discard2.oggzgame_cards/discard3.ogg)zgame_cards/shuffle1.oggzgame_cards/shuffle2.oggzgame_cards/shuffle3.oggzgame_cards/small_shuffle.oggzgame_3cardpoker/bet.oggzgame_3cardpoker/roundstart.oggzgame_cards/play1.oggzgame_cards/play2.oggzgame_3cardpoker/winbet.oggzgame_3cardpoker/win.oggzgame_3cardpoker/wingame.oggrH   c                     \ rS rSr% \" \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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
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 g#)$BlackjackPlayer   default_factory
list[Card]handr   intchipsbetnext_betFbool	hand_donestoodbustedhas_blackjack
split_hand	split_betTsplit_hand_donesplit_stoodsplit_bustedsplit_has_blackjackactive_hand_indexdoubled_maindoubled_splitsurrendered_mainsurrendered_splitmain_from_split_acessplit_from_split_acesinsurance_betinsurance_decision_donetook_even_moneynext_bet_entered N)!__name__
__module____qualname____firstlineno__r   listrO   __annotations__rQ   rR   rS   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   __static_attributes__rj       :c:\Users\dbart\PlayPalace11\server\games\blackjack\game.pyrJ   rJ      s   T2D*2E3NCLHcItE4FDM4"48J
8Is OT KL$ %%sL$M4"d"#t#!&$&"'4'M3$)T)!OT!"d"rr   rJ   c                  N   \ rS rSr% \" \" \\SSSSSS95      rS\	S	'   \" \
" S
SSSSSSS95      rS\	S'   \" \
" SSSSSSSS95      rS\	S'   \" \
" SSSSSSSS95      rS\	S'   \" \
" S SSSS!S"S#S95      rS\	S$'   \" \
" S%SS&SS'S(S)S95      rS\	S*'   \" \" S+S,S-S.S/95      rS0\	S1'   \" \" S+S,S2S3S/95      rS0\	S4'   \" \" S+S,S5S6S/95      rS0\	S7'   \" \" S+S,S8S9S/95      rS0\	S:'   \" \" S+S,S;S<S/95      rS0\	S='   \" \" \\S>S?S@SASBS95      rS\	SC'   \" \" \\SDS?SESFSGS95      rS\	SH'   \" \" S+S,SISJS/95      rS0\	SK'   \" \" \\SLS?SMSNSOS95      rS\	SP'   \" \
" SQSSQSSRSSSTS95      r S\	SU'   \" \" S+S,SVSWS/95      r!S0\	SX'   \" \" SYS,SZS[S/95      r"S0\	S\'   \" \" \#\$S]S^S_S`Sa95      r%S\	Sb'   Scr&gd)eBlackjackOptions   r-   profilezblackjack-set-rules-profilezblackjack-select-rules-profilez&blackjack-option-changed-rules-profile)choiceschoice_labelsdefault	value_keylabelprompt
change_msgstrrules_profilei  2   i@B countzblackjack-set-starting-chipszblackjack-enter-starting-chipsz'blackjack-option-changed-starting-chips)rz   min_valmax_valr{   r|   r}   r~   rP   starting_chips
   r!   i zblackjack-set-base-betzblackjack-enter-base-betz!blackjack-option-changed-base-betbase_bet   zblackjack-set-table-min-betzblackjack-enter-table-min-betz&blackjack-option-changed-table-min-bettable_min_betd   zblackjack-set-table-max-betzblackjack-enter-table-max-betz&blackjack-option-changed-table-max-bettable_max_bet      zblackjack-set-deck-countzblackjack-enter-deck-countz#blackjack-option-changed-deck-count
deck_countTenabledzblackjack-set-dealer-soft-17z'blackjack-option-changed-dealer-soft-17)rz   r{   r|   r~   rT   r<   z#blackjack-set-dealer-peek-blackjackz.blackjack-option-changed-dealer-peek-blackjackr=   z#blackjack-set-players-cards-face-upz.blackjack-option-changed-players-cards-face-upplayers_cards_face_upzblackjack-set-allow-insurancez(blackjack-option-changed-allow-insurancer>   z"blackjack-set-allow-late-surrenderz-blackjack-option-changed-allow-late-surrenderr?   r1   modezblackjack-set-blackjack-payoutz!blackjack-select-blackjack-payoutz)blackjack-option-changed-blackjack-payoutr@   r5   zblackjack-set-double-down-rulez!blackjack-select-double-down-rulez)blackjack-option-changed-double-down-rulerA   z&blackjack-set-allow-double-after-splitz1blackjack-option-changed-allow-double-after-splitrB   r:   zblackjack-set-split-rulezblackjack-select-split-rulez#blackjack-option-changed-split-rulerC   r   zblackjack-set-max-split-handszblackjack-enter-max-split-handsz(blackjack-option-changed-max-split-handsrD   z!blackjack-set-split-aces-one-cardz,blackjack-option-changed-split-aces-one-cardrE   Fz"blackjack-set-split-aces-blackjackz-blackjack-option-changed-split-aces-blackjackrF   r,   zblackjack-set-turn-timerzblackjack-select-turn-timerz#blackjack-option-changed-turn-timer)rx   ry   rz   r|   r}   r~   
turn_timerrj   N)'rk   rl   rm   rn   r   r   RULES_PROFILE_CHOICESRULES_PROFILE_LABELSr   rp   r   r   r   r   r   r   r   r<   r=   r   r>   r?   BLACKJACK_PAYOUT_CHOICESBLACKJACK_PAYOUT_LABELSr@   DOUBLE_DOWN_RULE_CHOICESDOUBLE_DOWN_RULE_LABELSrA   rB   SPLIT_RULE_CHOICESSPLIT_RULE_LABELSrC   rD   rE   rF   TURN_TIMER_CHOICESTURN_TIMER_LABELSr   rq   rj   rr   rs   ru   ru      sN   %)./3?	

M3 
 '03@	

NC 
 !*-:	

Hc 
 &/2?	

M3 
 &/2?	

M3 
 #,/<	

J 
 !-0@		
!  $07G		
$D  #/7G		
#4  )1A		
OT  ".6F		
"$  ),126B	

c 
 ),126B	

c 
 &2:J		
&d  #&+,0<	

J 
 (14A	

OS 
 &25E		
&d  +76F		
+!4  #&+,0<	
	J 	rr   ru   c                    ^  \ rS rSr% \" \S9rS\S'   \" \S9r	S\S'   Sr
S\S	'   \" \S9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'   \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SU 4S  jjrSS! jrSS" jrSS# jrSS$ jrSS% jr SS& jr!SS' jr"SS( jr#SS) jr$SS* jr%SS+ jr&SS, jr'SS- jr(SS. jr)SS/ jr*SS0 jr+SS1 jr,SS2 jr-SU 4S3 jjr.SU 4S4 jjr/SS5 jr0SS6 jr1SU 4S7 jjr2SS8 jr3SU 4S9 jjr4SS: jr5SS; jr6SS< jr7SS= jr8SS> jr9SS? jr:SS@ jr;SSA jr<SSB jr=SSC jr>SSD jr?SSE jr@SSF jrASSG jrBSSH jrCSSI jrDSSJ jrESSK jrFSSL jrGSSM jrHSSN jrISSO jrJSSP jrKSSQ jrLSSR jrMSSS jrNSU 4ST jjrOSSU jrPSU 4SV jjrQSU 4SW jjrRSSX jrSSSY jrT\USSZ j5       rV\USS[ j5       rWSS\ jrXSS] jrYSS^ jrZSS_ jr[SS` jr\SSa jr]SbSSc.         SSd jjr^SbSe.           SSf j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rlSSt jrmSSSSu.           SSv jjrnSSw jroSSx jrpSSy jrqSSz jrrSS{ jrsSS| jrtSS} jruSS~ jrvSS jrwSS jrxSS jrySS jrzSSS jjr{SS jr|SS jr}SS jr~SS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr  S           SS jjrSS jrSS jrSS jrSS jrSrU =r$ )BlackjackGameic  rL   list[BlackjackPlayer]playersru   optionsNzDeck | NonedeckrN   dealer_handr   rP   hand_numberlobbyr   phaser   timerFrT   dealer_hole_revealednext_hand_wait_ticksawaiting_next_betsc                    g)N	Blackjackrj   clss    rs   get_nameBlackjackGame.get_nameq      rr   c                    g)N	blackjackrj   r   s    rs   get_typeBlackjackGame.get_typeu  r   rr   c                    g)Nzcategory-card-gamesrj   r   s    rs   get_categoryBlackjackGame.get_categoryy  s    $rr   c                    gNr!   rj   r   s    rs   get_min_playersBlackjackGame.get_min_players}      rr   c                    g)N   rj   r   s    rs   get_max_playersBlackjackGame.get_max_players  r   rr   c                    [        XUS9$ )N)idnameis_bot)rJ   )self	player_idr   r   s       rs   create_playerBlackjackGame.create_player  s    )vFFrr   c                <  > [         TU ]  5       nU R                  5         U R                  R                  U R                  R
                  :  a  UR                  S5        U R                  R                  U R                  R                  :  a  UR                  S5        U R                  R                  U R                  R                  :  a  UR                  S5        U R                  R                  U R                  R                  :  a  UR                  S5        U$ )Nzblackjack-error-bet-too-highz$blackjack-error-table-limits-invalidblackjack-error-bet-below-minblackjack-error-bet-above-max)	superprestart_validate_resolve_rules_profiler   r   r   appendr   r   )r   errors	__class__s     rs   r   BlackjackGame.prestart_validate  s    *,##%<<  4<<#>#>>MM89<<%%(B(BBMM@A<<  4<<#=#==MM9:<<  4<<#=#==MM9:rr   c                  > [         TU ]  X5        US:w  a  g U R                  U R                  R                  5        [        U R                  S5      (       a  U R                  R                  U 5        U R                  5         g )Nr   update_options_labels)r   _handle_option_change_apply_rules_profiler   r   hasattrr   rebuild_all_menus)r   option_namevaluer   s      rs   r   #BlackjackGame._handle_option_change  sc    %k9/)!!$,,"<"<=4<<!899LL..t4 rr   c                j    U R                   R                  nU[        ;  a  SnXR                   l        U$ )Nr-   )r   r   rG   )r   rw   s     rs   r   $BlackjackGame._resolve_rules_profile  s.    ,,,,..G)0LL&rr   c                   U[         ;   a  UOSn[         U   nX R                  l        [        US   5      U R                  l        [        US   5      U R                  l        [        US   5      U R                  l        [        US   5      U R                  l        [        US   5      U R                  l	        [        US   5      U R                  l
        [        US   5      U R                  l        [        US	   5      U R                  l        [        US
   5      U R                  l        [        US   5      U R                  l        [        US   5      U R                  l        g )Nr-   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   )rG   r   r   rT   r<   r=   r>   r?   r   r@   rA   rB   rC   rP   rD   rE   rF   )r   rw   resolvedpresets       rs   r   "BlackjackGame._apply_rules_profile  s!   %)==77%h/%-"+/7L0M+N(.26:R3S.T+'+F3D,E'F$,08N1O,P)(+F3E,F(G%(+F3E,F(G%04V<V5W0X-"%f\&:";'*62C+D'E$04V<V5W0X-59&A`:a5b2rr   c                    U R                   S:w  a  gU R                  S:w  a  gUR                  (       a  gU R                  U:w  a  g[	        U[
        5      (       a  UOS nU(       a  U R                  U5      (       a  gg )Nplayingaction-not-playingr   zblackjack-not-player-phaseaction-spectatoraction-not-your-turnzblackjack-hand-complete)statusr   is_spectatorcurrent_player
isinstancerJ   _current_hand_doner   playerps      rs   _is_turn_action_enabled%BlackjackGame._is_turn_action_enabled  si    ;;)#'::"/%&() 99FtD++A..,rr   c                   U R                   S:w  d  U R                  S:w  a  [        R                  $ UR                  (       a  [        R                  $ U R
                  U:w  a  [        R                  $ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  [        R                  $ [        R                  $ )Nr   r   )
r   r   r   HIDDENr   r   r   rJ   r   VISIBLEr   s      rs   _is_turn_action_hidden$BlackjackGame._is_turn_action_hidden  s    ;;)#tzzY'>$$$$$$&($$$ 99FtD++A..$$$!!!rr   c                    U R                  U5      nU(       a  U$ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nzblackjack-cannot-split)r   r   rJ   
_can_splitr   r   errorr   s       rs   _is_split_enabledBlackjackGame._is_split_enabled  sD    ,,V4L 99Ft**+rr   c                    U R                  U5      nU(       a  U$ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nzblackjack-cannot-double-down)r   r   rJ   _can_double_downr   s       rs   _is_double_down_enabled%BlackjackGame._is_double_down_enabled  sF    ,,V4L 99Ft--a001rr   c                    U R                  U5      nU(       a  U$ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nzblackjack-cannot-surrender)r   r   rJ   _can_surrenderr   s       rs   _is_surrender_enabled#BlackjackGame._is_surrender_enabled  sF    ,,V4L 99Ft++A../rr   c                    U R                   S:w  a  gU R                  S:w  a  gUR                  (       a  gU R                  U:w  a  g[	        U[
        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nr   r   	insurancezblackjack-not-insurance-phaser   r   zblackjack-insurance-closed)r   r   r   r   r   rJ    _player_needs_insurance_decisionr   s      rs   _is_insurance_turn_enabled(BlackjackGame._is_insurance_turn_enabled  si    ;;)#'::$2%&() 99Ft==a@@/rr   c                   U R                   S:w  d  U R                  S:w  a  [        R                  $ UR                  (       a  [        R                  $ U R
                  U:w  a  [        R                  $ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  [        R                  $ [        R                  $ )Nr   r  )
r   r   r   r   r   r   r   rJ   r  r   r   s      rs   _is_insurance_action_hidden)BlackjackGame._is_insurance_action_hidden  s    ;;)#tzz['@$$$$$$&($$$ 99Ft==a@@$$$!!!rr   c                    U R                  U5      nU(       a  U$ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nzblackjack-cannot-insure)r  r   rJ   _can_take_insurancer   s       rs   _is_take_insurance_enabled(BlackjackGame._is_take_insurance_enabled  sF    //7L 99Ft0033,rr   c                    U R                  U5      nU(       a  U$ [        U[        5      (       a  UOS nU(       a  U R                  U5      (       d  gg )Nzblackjack-cannot-even-money)r  r   rJ   _can_take_even_moneyr   s       rs   _is_even_money_enabled$BlackjackGame._is_even_money_enabled  sF    //7L 99Ft11!440rr   c                $    U R                  U5      $ N)r  r   r   s     rs   _is_decline_insurance_enabled+BlackjackGame._is_decline_insurance_enabled  s    ..v66rr   c                &    U R                   S:w  a  gg )Nr   r   )r   r  s     rs   _is_check_enabledBlackjackGame._is_check_enabled  s    ;;)#'rr   c                    U R                   S:w  a  gUR                  (       a  g[        U[        5      (       d  gU R	                  5       (       d  gg Nr   r   r   zaction-not-availabler   r   r   rJ   _is_between_handsr  s     rs   _is_set_next_bet_enabled&BlackjackGame._is_set_next_bet_enabled"  sB    ;;)#'%&/22)%%'')rr   c                f    U R                  U5      c  [        R                  $ [        R                  $ r  )r!  r   r   r   r  s     rs   _is_set_next_bet_hidden%BlackjackGame._is_set_next_bet_hidden-  s+    ((08%%%   rr   c                    U R                   S:w  a  gUR                  (       a  g[        U[        5      (       d  gU R	                  5       (       a  gg r  r  r  s     rs   _is_read_bets_enabled#BlackjackGame._is_read_bets_enabled2  sB    ;;)#'%&/22)!!##)rr   c                "    [         R                  $ r  )r   r   r  s     rs   _is_check_hiddenBlackjackGame._is_check_hidden=  s       rr   c           
     t   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	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	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	95        UR                  [	        S"[
        R                  " US#5      S$S%SS	95        U$ )&Nenturn)r   hitzblackjack-hit_action_hitr   r   r   r|   handler
is_enabled	is_hiddenstandzblackjack-stand_action_standdouble_downzblackjack-double-down_action_double_downr   splitzblackjack-split_action_splitr   	surrenderzblackjack-surrender_action_surrenderr  take_insurancezblackjack-take-insurance_action_take_insurancer  r  
even_moneyzblackjack-even-money_action_even_moneyr  decline_insurancezblackjack-decline-insurance_action_decline_insurancer  )get_userlocaler   addr   r   get)r   r   userrD  
action_sets        rs   create_turn_action_set$BlackjackGame.create_turn_action_setD  s   }}V$ $$F+
"&&v?%42	
 	"&&v/@A'42	
 	 "&&v/FG-42	
 	"&&v/@A'.2	
 	"&&v/DE+22	
 	#"&&v/IJ077	
 	"&&v/EF,37	
 	&"&&v/LM3:7	
 rr   c                  > [         TU ]  U5      nU R                  U5      nU(       a  UR                  OSn[	        SSU R
                  R                   3SSSSSS	9[	        S
SSSS[        SSSS9S9[	        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[	        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-  bet_previousBet _action_bet_previousr!  r$  _get_bet_previous_labelF)r   r|   r2  r3  r4  	get_labelshow_in_actions_menu
change_betz
Change bet_action_set_next_betzblackjack-enter-bet _bot_input_set_next_bet)r}   rz   	bot_input)r   r|   r2  r3  r4  input_request	read_handzblackjack-read-hand_action_read_handr  r*  r1  	read_betszblackjack-table-status_action_read_betsr'  read_dealerzblackjack-read-dealer_action_read_dealertable_status_action_table_status
read_ruleszblackjack-read-rules_action_read_rulescheck_turn_timerzpoker-check-turn-timer_action_check_turn_timerr   )r   create_standard_action_setrC  rD  r   r   r   r   r   rF  reversedrE  r   _orderremoveinsert)r   r   rH  rG  rD  local_actionsactionr   s          rs   rd  (BlackjackGame.create_standard_action_set  s   W7?
}}V$ $$ !T\\2234.533%* ".53*07 "&&v/DE+., "&&v/GH+2,  "&&v/FG-., !"&&v/GH.., "&&v/EF,., %"&&v/GH2.,s@
D }-FNN6"yyJ---!!((3$$Q		2	 .
 rr   c                  > [         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9  U R                  SSS/[        R                  S9  U R                  SSS/[        R                  S9  U R                  S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  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!S"9  U R                  S,S-S./[        R                  S!S"9  g )/NspaceHitr/  )statexStandr5  dzDouble downr7  r   Splitr9  u	Surrenderr;  bzChange bet / Read betsrR  rZ  i	Insurancer=  nzDecline insurancerA  mz
Even moneyr?  rz	Read handrX  T)ro  include_spectatorsczRead dealerr\  ezTable statusr^  shift+rz
Read rulesr`  shift+tz
Turn timerrb  )r   setup_keybindsdefine_keybindr    ACTIVEr   r   s    rs   r  BlackjackGame.setup_keybinds  s    GUUG<;N;NOC7)<;N;NOC|GZGZ[C7)<;N;NOC{m<CVCVW)L++FlNaNa 	 	
 	C/?.@H[H[\$':&;<CVCV 	 	
 	C~\EXEXY{m<3F3F[_ 	 	
 	|7J7J_c 	 	
 	%%# 	 	
 	N%%# 	 	
 	 %%# 	 	
rr   c                n   U R                  U5      nUR                  S5      nUR                  S5      nU R                  R                  U5      nUc  gU R                  U5      nSSKJn  U" UUSS9n	U R                  XXtU	5      n
1 SknX;;   a  gU R                  X5      (       a  U R                  5         gg)	zDHandle keybinds with blackjack-specific no-rebuild read/status keys.menu_item_id
menu_indexNr   )ActionContextT)r  r  from_keybind>   rv  r}  r~  r{  stctrl+rctrl+wr  shift+sr  )	_normalize_keybindrF  	_keybinds_is_player_spectatorbaser  _execute_keybinds_should_rebuild_after_keybindr   )r   r   eventkeyr  r  keybindsr   r  contextexecuted_anyno_rebuild_keyss               rs   _handle_keybind_event#BlackjackGame._handle_keybind_event  s    %%e,yy0YY|,
>>%%c*008(%!
 --f\cd
 !--fCC""$ Drr   c                H   SU l         SU l        SU l        SU l        SU l        SU l        U R                  5       nSU R                  l        U R                  R                  U Vs/ s H  o"R                  PM     sn5        U Hf  n[        U[        5      (       d  M  U R                  R                  Ul        U R!                  U R                  R"                  5      Ul        SUl        Mh     U R)                  5         U R+                  S5        U R-                  5         g s  snf )Nr   Tsettler   F
individualzgame_3cardpoker/mus.ogg)r   game_activer   r   r   r   get_active_players_team_manager	team_modesetup_teamsr   r   rJ   r   r   rQ   _clamp_table_betr   rS   ri   _sync_team_scores
play_music_start_between_hands)r   activer   r   s       rs   on_startBlackjackGame.on_start9  s    
$%!"'((*'3$&&'?1'?@F&/22#||::"&"7"78M8M"N*/'	  	 12!!# (@s   %Dc                   > [        U SS5      nU(       a,  UR                  U;   a  UR                  UR                  5        g[        TU ]  X5      $ )z=Skip keybind-driven menu rebuild for read-only check actions.$_suppress_keybind_rebuild_player_idsNF)getattrr   discardr   r  )r   r   r  pendingr   s       rs   r  +BlackjackGame._should_rebuild_after_keybindO  sC    $ FMvyyG+OOFII&w4VJJrr   c                    U R                  U5      nUR                  (       d  g[        U S[        5       5      nUR	                  UR
                  5        X0l        g)zDSuppress post-keybind menu rebuild for this player when appropriate.Nr  )get_action_contextr  r  setrE  r   r  )r   r   r  suppresss       rs   _suppress_keybind_rebuild'BlackjackGame._suppress_keybind_rebuildW  sE    ))&1##4!GOVYY4<1rr   c                  > [         TU ]  5         U R                  (       d  g U R                  5       (       a  U R	                  5       (       a  U R                  5         g U R                  R                  5       (       a!  U R                  5         U R                  5         g U R                  R                  U l
        g U R                  S;   a/  U R                  R                  5       (       a  U R                  5         [        R                  " U 5        g )N>   r   r  )r   on_tickr  r   _all_between_hand_bets_entered_start_new_handr   tick)_apply_default_bets_for_unentered_playersticks_remainingr   r   _handle_turn_timeoutr   r  s    rs   r  BlackjackGame.on_tick`  s    !!##2244$$&zz  >>@$$&(,

(B(BD%::11djjoo6G6G%%'$rr   c                    [        X5      $ r  r"   r  s     rs   r#   BlackjackGame.bot_thinkv  s    &&rr   c                   SU l         U =R                  S-  sl        U R                  R                  5         SU l        SU l        U R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     nnU R                  5        Vs/ s H.  n[        U[        5      (       d  M  UR                  S:  d  M,  UPM0     nn[        U5      S:X  a  U R                  S 5        g [        U5      S:  a-  [        U5      S::  a  U R                  U(       a  US   OS 5        g U H  n/ Ul        SUl        SUl        SUl        SUl        SUl        / 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        SUl        SUl        SUl        SUl        SUl        SUl         SUl!        SUl"        M     / U l#        SU l$        U RK                  [        U5      S-  S9  U RM                  U5        U RO                  U5        U RQ                  U5      (       a  U RS                  U5        g U RU                  U RF                  5      nU(       ab  U RV                  RX                  (       aG  U R[                  5         U R]                  [^        5        U Ra                  S5        U Rc                  5         g U Re                  U5        g s  snf s  snf )	Nr   r!   r   FT   	min_cardsblackjack-dealer-blackjack)3r   r   r   clearr   r   r  r   rJ   rQ   len	_end_gamerO   rR   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   r   r   _ensure_deck
_post_bets_deal_initial_cards_should_offer_insurance_start_insurance_phaseis_blackjackr   r=   _reveal_dealer_hand
play_soundSOUND_BLACKJACKbroadcast_l_settle_hand_start_player_phase)r   r   total_competitorsactive_playersr   dealer_blackjacks         rs   r  BlackjackGame._start_new_handy  s   
A

$%!"'(,(?(?(Ad(A1ZPQSbEcQ(Ad..0
0!Jq/4RAWXW^W^abWbA0 	 
 ~!#NN4   !A%#n*=*BNN>!,DI$FFKFJ$F FL!FM#(F  "F F%)F"!&F"'F).F&'(F$"'F#(F &+F#',F$*/F'+0F(#$F -2F*%*F"&+F#/ %2 $)!C$7!$;<'  0''77''7,,T-=-=> C C$$&OOO,9:  0s e
s   K4KK+K=Kc                   U R                   n[        U[        5      (       d  U R                  5         g U R	                  U5        U R                  U5      (       a  U R                  5         g U R                  SS9  U R                  U5        UR                  (       a*  [        R                  " U[        R                  " SS5      S9  U R                  5         U R                  5         U R!                  USS9  g )Ngame_3cardpoker/turn.ogg
turn_sound   #   ticksr!   position)r   r   rJ   _play_dealer_turn_select_first_pending_handr   _advance_to_next_playerannounce_turn_announce_player_totalr   r   jolt_botrandomrandint_start_turn_timerr   rebuild_player_menur  s     rs   _start_turnBlackjackGame._start_turn  s    $$&/22""$''/""6**((*&@A##F+==vV^^B-CD    ! 4rr   c                    SU l         U Vs/ s H  o R                  U5      (       d  M  UPM     nnU R                  USS9  U R                  (       d  U R	                  5         g U R                  5         g s  snf )Nr   Treset_index)r   _player_has_pending_handset_turn_playersturn_player_idsr  r  )r   r   r   action_orders       rs   r  !BlackjackGame._start_player_phase  se    
#*O7a.K.KA.N7Ol=## Ps
   A4A4c                   ^  T R                   R                  (       d  gT R                  5       (       d  g[        U 4S jU 5       5      $ )NFc              3  v   >#    U  H.  nTR                  U5      =(       d    TR                  U5      v   M0     g 7fr  )r  r  ).0r   r   s     rs   	<genexpr>8BlackjackGame._should_offer_insurance.<locals>.<genexpr>  s6      
! $$V,Q0I0I&0QQ!s   69)r   r>   _dealer_upcard_is_aceanyr   r   s   ` rs   r  %BlackjackGame._should_offer_insurance  s?    ||++))++ 
!
 
 	
rr   c                   SU l         U R                  R                  5         U R                  S5        U H  nU R	                  U5      (       + Ul        M      U Vs/ s H  o0R	                  U5      (       d  M  UPM     nnU R                  USS9  U R                  (       d  U R                  U5        g U R                  5         g s  snf )Nr  zblackjack-insurance-offerTr  )
r   r   r  r  r  rg   r  r  _finish_insurance_phase_start_insurance_turn)r   r   r   r   r  s        rs   r  $BlackjackGame._start_insurance_phase  s     


45F151V1VW]1^-^F*  $+W7a.S.STU.V7Wl=##((1""$ Xs   C8Cc           	        U R                   n[        U[        5      (       dH  U R                  U R	                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     sn5        g U R                  U5      (       d  U R                  5         g U R                  U5      (       a  U R                  USS5        O7U R                  U5      (       a!  U R                  USSU R                  U5      S9  U R                  SS9  UR                  (       a*  [        R                  " U[        R                   " SS	5      S
9  U R#                  5         U R%                  5         U R'                  USS9  g s  snf )Nz%blackjack-insurance-prompt-even-moneyz,blackjack-insurance-prompt-even-money-playerzblackjack-insurance-promptz!blackjack-insurance-prompt-playeramountr  r  r  r  r  r!   r  )r   r   rJ   r  r  r  !_advance_insurance_to_next_playerr  broadcast_personal_lr  _insurance_bet_amountr  r   r   r  r  r  r  r   r  r   s      rs   r  #BlackjackGame._start_insurance_turn  s?   $$&/22(( 335X5qA9W5X 44V<<224$$V,,%%7>
 %%f--%%,311&9	 &  	&@A==vV^^B-CD    ! 47 Ys   E-E-c           	     V   U R                   (       dH  U R                  U R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     sn5        g [        [        U R                   5      5       H]  nU R                  SS9  U R                  n[        U[        5      (       d  M5  U R                  U5      (       d  MM  U R                  5           g    U R                  U R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     sn5        g s  snf s  snf NF)announce)r  r  r  r   rJ   ranger  advance_turnr   r  r  )r   r   _nxts       rs   r
  /BlackjackGame._advance_insurance_to_next_player  s    ##(( 335X5qA9W5X s4//01Au-%%Cc?3344S99**, 2 	$$//1T11Z?5SQ1T	
 Y Us   D!D!6D&D&c                   U R                   R                  5         U H"  nU R                  U5      (       d  M  SUl        M$     U R	                  U R
                  5      nU(       ab  U R                  R                  (       aG  U R                  5         U R                  [        5        U R                  S5        U R                  5         g U R                  U5        g )NTr  )r   r  r  rg   r  r   r   r=   r  r  r  r  r  r  )r   r   r   r  s       rs   r  %BlackjackGame._finish_insurance_phase%  s    

F44V<<15.   ,,T-=-=> C C$$&OOO,9:  )rr   c                   U R                   n[        U[        5      (       a'  U R                  U5      (       a  U R	                  5         g U R
                  (       d  U R                  5         g [        [        U R
                  5      5       Hn  nU R                  SS9  U R                   n[        U[        5      (       d  M5  U R                  U5        U R                  U5      (       a  M^  U R	                  5           g    U R                  5         g r  )r   r   rJ   _switch_to_next_handr  r  r  r  r  r  r  r   )r   currentr  r  s       rs   r  %BlackjackGame._advance_to_next_player5  s    %%g//D4M4Mg4V4V##""$s4//01Au-%%Cc?33++C0&&s++ 2 	 rr   c                  ^ ^^^ ST l         T R                  R                  5         T R                  5          T R	                  T R
                  5      u  mmTS:  nTS:X  a$  T(       a  T R                  R                  (       a  SnU(       d  OaT R                  5       mT(       d  OIT R
                  R                  T5        T R                  [        5        T R                  SUU 4S j5        M  T R	                  T R
                  5      u  mmTS:  a)  T R                  5         T R                  SUU U4S j5        O-T R                  [        5        T R                  S	UU U4S
 j5        T R                  5         g )NdealerT   zblackjack-dealer-hitsc                v   > [        TU 5      TR                  " U /TR                  TR                  5      Q76 S.$ )N)cardtotal)r   _total_text
hand_valuer   )rD  r   r   s    rs   <lambda>1BlackjackGame._play_dealer_turn.<locals>.<lambda>a  s4    %dF3!--fYttGWGW7XY rr      zblackjack-dealer-bustc                .   > STR                  U TT5      0$ Nr!  r"  rD  is_softr   r!  s    rs   r$  r%  l      )9)9&%)QRrr   zblackjack-dealer-standsc                .   > STR                  U TT5      0$ r(  r)  r*  s    rs   r$  r%  r  r,  rr   )r   r   r  r  r#  r   r   r<   
_draw_cardr   r  	SOUND_HIT_broadcast_l_with_locale_args_play_bust_soundSOUND_STANDr  )r   
should_hitr   r+  r!  s   ` @@@rs   r  BlackjackGame._play_dealer_turnL  s(   


  "!__T-=-=>NE7J{w4<<+K+K!
??$D##D)OOI&..' , )9)9:w2:!!#..'R
 OOK(..)R 	rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      (       a  g U R	                  U5      nU R                  5       nU(       d  g UR                  U5        U R                  [        5        U R                  USS[        XPR                  U5      5      S9  U R                  U5        g )Nblackjack-you-hitblackjack-player-hitsr   )r   rJ   r   (_is_current_hand_locked_after_split_aces_current_handr.  r   r  r/  r  r   _player_locale!_evaluate_current_hand_after_draw)r   r   	action_idr   rO   r   s         rs   r0  BlackjackGame._action_hitz  s     99FtD003388;;!!!$ D	"!!#4!4!4Q!78	 	" 	
 	..q1rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  [        5        U R                  USSS9  U R                  USS5        U R                  5         g )NTdonerV   blackjack-you-standblackjack-player-stands)r   rJ   r   r  r2  _set_current_hand_doner  r  r   r   r=  r   s       rs   r6  BlackjackGame._action_stand  sl     99FtD0033$##AD#=!!!%:<UV$$&rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      nUS::  a  g US-  nXE-
  nU=R                  U-  sl        U R                  5         U R                  US5        U R                  USSS9  U R                  5         U R                  USSUS9  U R                  5         g )Nr   r   Tr@  zblackjack-you-surrenderzblackjack-player-surrendersr  )r   rJ   r  _current_betrQ   _play_discard_sound_set_current_surrenderedrD  r  r  r  )r   r   r=  r   rR   refundlosss          rs   r<  BlackjackGame._action_surrender  s     99FtD..q11"!8|	6  "%%a.##AD#= !!%)	 	" 	
 	$$&rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      nUS::  a  g U=R                  U-  sl        U R                  X4S-  5        U R                  US5        U R                  5         U R                  [        5        U R                  USSUS9  U R                  U5      nU R                  5       nU(       aP  UR                  U5        U R                  [        5        U R                  USS[        X`R!                  U5      5      S	9  U R#                  U5      u  pxUS
:  aS  U R%                  5         U R'                  USSS9  U R                  USSU R)                  U R!                  U5      Xx5      S9  O9U R                  [*        5        U R'                  USSS9  U R                  USS5        U R-                  5         g )Nr   r   Tzblackjack-you-double-downzblackjack-player-double-downsr  r6  r7  r8  r&  rA  rW   blackjack-you-bustblackjack-player-bustr!  r@  rB  rC  )r   rJ   r   rH  rQ   _set_current_bet_set_current_doubledr  r  SOUND_DOUBLE_DOWNr  r:  r.  r   r/  r   r;  r#  r1  rD  r"  r2  r  )	r   r   r=  r   rR   rO   r   r!  r+  s	            rs   r8  !BlackjackGame._action_double_down  s    99FtD0033"!8	3aq)!!!T* )*!!'+	 	" 	
 !!!$ KKOOI&%%#'t%8%8%;<	 &  .2:!!#''T'B%%$'&&t':':1'=uN	 &  OOK(''D'A%%a)>@YZ$$&rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g UR                  S   R                  S:H  =(       a    UR                  S   R                  S:H  nUR                  R                  5       nU/Ul        UR                  Ul        SUl	        SUl
        SUl        SUl        XCl        U=R                  UR                  -  sl        SUl        SUl        SUl        SUl        SUl        SUl        SUl        XCl        U R/                  5       nU(       a  UR                  R1                  U5        U R/                  5       nU(       a  UR                  R1                  U5        U R3                  5         U R5                  [6        5        U R9                  USSUR                  S9  U(       a  U R:                  R<                  (       a  U R?                  UR                  5      u  pU R?                  UR                  5      u  p[A        UR                  5      S:H  =(       a    US:H  Ul        [A        UR                  5      S:H  =(       a    U
S:H  Ul        U(       ap  U R:                  RB                  (       aU  S	Ul        S	Ul        S	Ul	        S	Ul
        U R5                  [D        5        U R9                  US
S5        U RG                  5         g U R?                  UR                  5      u  pUS:X  aJ  U R5                  [D        5        U RI                  US	S	S9  U R9                  USS5        U RG                  5         g U RK                  U5        U RM                  5         U RO                  5         g )Nr   r!   Fzblackjack-you-splitzblackjack-player-splitsr  r   r&  Tz#blackjack-you-split-aces-auto-standz'blackjack-player-splits-aces-auto-standr@  blackjack-you-stand-autoblackjack-player-stands-auto)(r   rJ   r   rO   rankpoprY   rR   rZ   r[   r\   r]   r^   re   rQ   r_   rX   rU   rV   rW   rb   rc   rd   r.  r   r  r  	SOUND_BETr  r   rF   r#  r  rE   r2  r  rD  r  r  r   )r   r   r=  r   split_is_aces
split_card	main_draw
split_draw
main_total
_main_softsplit_total_split_softr!  _is_softs                 rs   r:  BlackjackGame._action_split  s    99FtD**1--q	!+Cq	!0CVVZZ\
"|ee! %"/	155"#!.OO%	FFMM)$__&
LL
+ 	"!!!%55	 	" 	
 T\\GG%)__QVV%<"J'+q||'D$K!!&&kQ.C:3CAO$'$5$:$P{b?PA!T\\BBAKAG $A AMOOK(%%59
 ((*//!&&1B;OOK(''D'A%%*.
 ((*##A&  rr   c                   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      nUS::  d  UR                  U:  a  g U=R                  U-  sl        XCl        SUl        U R                  5         U R                  [        5        U R                  USSUS9  U R                  5         g )Nr   Tzblackjack-you-take-insurancez blackjack-player-takes-insurancer  )r   rJ   r  r  rQ   rf   rg   r  r  r\  r  r
  r   r   r=  r   r	  s        rs   r>  $BlackjackGame._action_take_insurance1  s     99FtD33A66++A.Q;!''F*	6 $(! 	"!!*.	 	" 	
 	..0rr   c                    [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g SUl        SUl        U R                  [        5        U R                  USS5        U R                  5         g )NTzblackjack-you-take-even-moneyz!blackjack-player-takes-even-money)	r   rJ   r  rh   rg   r  r\  r  r
  rE  s       rs   r@   BlackjackGame._action_even_moneyG  sl     99FtD//22 $(!	"!!+/	

 	..0rr   c                    [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g SUl        U R	                  [
        5        U R                  USS5        U R                  5         g )NTzblackjack-you-decline-insurancez#blackjack-player-declines-insurance)r   rJ   r  rg   r  r2  r  r
  rE  s       rs   rB  'BlackjackGame._action_decline_insuranceV  sd     99FtD66q99$(!$!!-1	

 	..0rr   c                    [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      nXCl        SUl        U R                  [        5        U R                  5         g NT)	r   rJ   r!  _effective_next_betrS   ri   r  r\  _start_next_hand_if_readyrh  s        rs   rN  "BlackjackGame._action_bet_previousc  s`     99FtD11!44))!,
!	"&&(rr   c                &   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g  [        U5      nU R                  U5      nXPR                  R                  :  a  U(       a  UR                  S5        g XPR                  R                  :  a  U(       a  UR                  S5        g XTl
        SUl        U R                  [        5        U(       a  UR                  SUS9  U R                  5         g ! [         a     g f = f)Nr   r   Tzblackjack-option-changed-bet)r   )r   rJ   r!  rP   
ValueErrorrC  r   r   speak_lr   rS   ri   r  r\  rq  )r   r   
amount_strr=  r   r	  rG  s          rs   rS  "BlackjackGame._action_set_next_betn  s     99FtD11!44	_F }}QLL...<=LL...<=
!	"LL7vLF&&(%  		s   D 
DDc                >   [        U[        5      (       a  UOS nU R                  U5      nU(       a  U(       d  g U R                  U5        UR                  S:  a  UR
                  (       a  U R                  UR                  5      u  pVU R                  UR
                  5      u  pxUR                  S[        UR                  UR                  5      U R                  UR                  XV5      [        UR
                  UR                  5      U R                  UR                  Xx5      UR                  S-   S9  g U R                  UR                  5      u  pUR                  S[        UR                  UR                  5      U R                  UR                  X5      S9  g )Nr   z"blackjack-read-hand-response-splitr!   )hand1total1hand2total2r  zblackjack-read-hand-responsecardsr!  )r   rJ   rC  r  rZ   rY   r#  rO   ru  r   rD  r"  r_   )r   r   r=  r   rG  rz  soft1r|  soft2r!  r+  s              rs   rY  BlackjackGame._action_read_hand  s3    99Ft}}V$&&v.;;?q|| OOAFF3MF OOALL9MFLL4 5''VC t{{;''VC**Q.   0*QVVT[[1""4;;? 	 	
rr   c                t   [        U[        5      (       a  UOS nU(       a  U R                  U5      (       a  g U R                  U5      nU(       d  g / nU R	                  5        H  n[        U[        5      (       d  M  UR
                  UR                  -   UR                  -   nUR                  [        R                  " UR                  SUR                  UR                  US95        M     UR                  U(       a  SR                  U5      5        g [        R                  " UR                  S5      5        g )Nblackjack-status-line-betr   rQ   rR   . blackjack-no-active-players)r   rJ   r'  rC  r  rR   rZ   rf   r   r   rF  rD  r   rQ   speakjoin)r   r   r=  r   rG  linesother	total_bets           rs   r[  BlackjackGame._action_read_bets  s     99FtD..q11}}V$,,.Ee_55		EOO3e6I6IIILL  KK/ ::++!	 / 	

 IIe	
 !!$++/LM	
rr   c           	        U R                  U5      nU(       d  g U R                  U5        U R                  (       d  UR                  S5        g U R                  (       d2  UR                  S[        U R                  S   UR                  5      S9  g U R                  U R                  5      u  pEUR                  S[        U R                  UR                  5      U R                  UR                  XE5      S9  g )Nzblackjack-no-dealer-cardszblackjack-read-dealer-upr   r8  zblackjack-read-dealer-fullr}  )
rC  r  r   ru  r   r   rD  r#  r   r"  )r   r   r=  rG  r!  r+  s         rs   r]  !BlackjackGame._action_read_dealer  s    }}V$&&v.LL45((LL*t//2DKK@   )9)9:(T--t{{;""4;;? 	 	
rr   c                "	   U R                  U5      nU(       d  g U R                  U5        / nU R                  5        GH	  n[        U[        5      (       d  M  U R                  X5      nU(       a  UR                  S:  a  UR                  (       a  UR                  (       a  U R                  UR                  5      u  pxU R                  UR                  5      u  pUR                  [        R                  " UR                  SUR                  UR                  UR                   U R#                  UR                  Xx5      UR                  U R#                  UR                  X5      S95        GM2  U(       a  U R$                  S:X  a  UR                   S:  a  UR                  (       a  U R                  UR                  5      u  pUR                  [        R                  " UR                  SUR                  UR                  UR                   U R#                  UR                  X5      S95        GM  UR                  S:  a_  UR                  [        R                  " UR                  SUR                  UR                  UR                   UR                  -   S95        GMc  UR                   S:  aR  UR                  [        R                  " UR                  SUR                  UR                  UR                   S95        GM  UR                  [        R                  " UR                  S	UR                  UR                  S
95        GM     U R&                  (       a  U R(                  (       a  U R                  U R&                  5      u  pUR                  [        R                  " UR                  S[+        U R&                  UR                  5      U R#                  UR                  X5      S95        OPUR                  [        R                  " UR                  S[-        U R&                  S   UR                  5      S95        UR/                  U(       a  SR1                  U5      5        g [        R                  " UR                  S5      5        g )Nr   zblackjack-status-line-hands)r   rQ   bet1rz  bet2r|  r   zblackjack-status-line-hand)r   rQ   rR   r!  r  r  zblackjack-status-line)r   rQ   zblackjack-status-dealerr}  zblackjack-status-dealer-upr8  r  r  )rC  r  r  r   rJ   _can_view_player_cardsrZ   rO   rY   r#  r   r   rF  rD  r   rQ   rR   r"  r   r   r   r   r   r  r  )r   r   r=  rG  r  r   can_view_cardsrz  r  r|  r  r!  r+  s                rs   r_  "BlackjackGame._action_table_status  sA   }}V$&&v.((*Aa11!88CN!++/aff $ 7 $ = $$5 vvggUU#//VK[[#//VK	  DJJ)$;	aff!%!8 $$4 vvggEE"..t{{EK	 q $$3 vvggEEAKK/  $$3 vvggEE  $$/ vvgg	i +z ((!%1A1A!B $$1()9)94;;G"..t{{EK	  $$4&t'7'7':DKKH 	

 IIe	
 !!$++/LM	
rr   c                    U R                  U5      nU(       d  g U R                  U5        UR                  U R                  UR                  5      5        g r  )rC  r  r  _rules_readout_textrD  )r   r   r=  rG  s       rs   ra   BlackjackGame._action_read_rules<  s?    }}V$&&v.

4++DKK89rr   c                  > U R                  U5      nU(       d  g U R                  U5        U R                  5       (       au  U R                  5        Vs/ s H!  oDR                  (       a  M  UR
                  PM#     nnU(       a2  [        R                  " UR                  U5      nUR                  SUS9  g [        TU ]-  X5        g s  snf )Nzblackjack-waiting-for-bets)r   )rC  r  r   _between_hands_playersri   r   r   format_list_andrD  ru  r   _action_whose_turn)r   r   r=  rG  r   waitingwaiting_namesr   s          rs   r   BlackjackGame._action_whose_turnC  s    }}V$&&v.!!##'+'B'B'D_'D!L^L^vqvv'DG_ , < <T[[' R0)   "65 `s   C+Cc                    U R                  U5      nU(       d  g U R                  U5        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)seconds)rC  r  r   seconds_remainingru  )r   r   r=  rG  	remainings        rs   rc  &BlackjackGame._action_check_turn_timerU  s[    }}V$&&v.JJ002	>LL/0LL0)LDrr   c                F   > U R                  U5        [        TU ]	  X5        g r  )r  r   _action_whos_at_tabler   r   r=  r   s      rs   r  #BlackjackGame._action_whos_at_table`  s    &&v.%f8rr   c                F   > U R                  U5        [        TU ]	  X5        g r  )r  r   _action_check_scoresr  s      rs   r  "BlackjackGame._action_check_scoresd  s    &&v.$V7rr   c                    [        U[        5      (       a  UOS nU(       d.  [        U R                  U R                  R
                  5      5      $ [        U R                  U5      5      $ r  )r   rJ   r   r  r   r   rp  r   s      rs   rU  %BlackjackGame._bot_input_set_next_beth  sN     99Ftt,,T\\-B-BCDD4++A.//rr   c                    [        U[        5      (       a  U R                  U5      nO%U R                  U R                  R
                  5      nSU 3$ )NrM  )r   rJ   rp  r  r   r   )r   r   r=  r	  s       rs   rO  %BlackjackGame._get_bet_previous_labeln  sE    fo..--f5F**4<<+@+@AFfXrr   c                `    U (       d  gU R                   S:X  a  g[        U R                   S5      $ )Nr   r!      r   rZ  minr8  s    rs   card_blackjack_value"BlackjackGame.card_blackjack_valuey  s'    99>499b!!rr   c                    SnSnU  H8  nUR                   S:X  a  US-  nUS-  nM  U[        UR                   S5      -  nM:     US:  a  US:  a  US-  nUS-  nUS:  a  US:  a  M  XS:  4$ )Nr   r!   r  r   r&  r  )r~  r!  	ace_countr   s       rs   r#  BlackjackGame.hand_value  s    	DyyA~Q	TYY++  bjY]RKENI bjY] !m##rr   c                R    [        U5      S:w  a  gU R                  U5      u  p#US:H  $ )Nr   Fr&  )r  r#  )r   r~  r!  re  s       rs   r  BlackjackGame.is_blackjack  s*    u:?//%0{rr   c                h    U(       a  [         R                  " USUS9$ [         R                  " USUS9$ )Nzblackjack-total-softrR  zblackjack-total-hardr   rF  )r   rD  r!  r+  s       rs   r"  BlackjackGame._total_text  s1    ##F,B%PP(>eLLrr   c                H    [         R                  " X(       a  S5      $ S5      $ )Nzblackjack-rule-yeszblackjack-rule-nor  )r   rD  r   s      rs   _bool_rule_textBlackjackGame._bool_rule_text  s!    (<aaM`aarr   c                F   [         R                  " US40 S[         R                  " U[        R                  U R                  R                  S5      5      _SU R                  R
                  _SU R                  R                  _SU R                  R                  _SU R                  XR                  R                  5      _SU R                  XR                  R                  5      _S	U R                  XR                  R                  5      _S
U R                  XR                  R                  5      _S[         R                  " U[        R                  U R                  R                  S5      5      _S[         R                  " U[        R                  U R                  R                   S5      5      _SU R                  XR                  R"                  5      _S[         R                  " U[$        R                  U R                  R&                  S5      5      _SU R                  R(                  _SU R                  XR                  R*                  5      _SU R                  XR                  R,                  5      _SU R                  XR                  R.                  5      _6$ )Nzblackjack-rules-readoutrw   r0   min_betmax_betr   soft_17peekr  r;  payoutr4   double_ruler8   dasrC   r;   split_handssplit_aces_onesplit_aces_blackjackr   )r   rF  r   r   r   r   r   r   r  r<   r=   r>   r?   r   r@   r   rA   rB   r   rC   rD   rE   rF   r   )r   rD  s     rs   r  !BlackjackGame._rules_readout_text  sC   %'
 !$$$((LL..0O'
 LL..'
 LL..'
 \\**'
 ((1Q1QR'
 %%fll.Q.QR'
 **6<<3O3OP'
 **6<<3T3TU'
   ##'++LL113L!'
, %(('++LL113R-'
8 $$V\\-R-RS9'
: $''!%%dll&=&=?_`;'
B 44C'
D  //8]8]^E'
F "&!5!5BB"G'
L #'"6"6v||?a?a"bM'
 '	
rr   c                r    [        U R                  5      =(       a    U R                  S   R                  S:H  $ Nr   r!   )rT   r   rZ  r   s    rs   r  #BlackjackGame._dealer_upcard_is_ace  s.    D$$%G$*:*:1*=*B*Ba*GGrr   c                N    U R                  U5      nU(       a  UR                  $ S$ )Nr-  )rC  rD  )r   r   rG  s      rs   r;  BlackjackGame._player_locale  s!    }}V$"t{{,,rr   table)bufferexcludec               6   U R                    H  nXTL a  M	  U R                  U5      nU" U5      n[        R                  " Xa40 UD6n[	        U S5      (       a  U R                  XXU5        U R                  U5      n	U	(       d  Mv  U	R                  " X40 UD6  M     g)z.Broadcast with per-recipient localized kwargs.record_transcript_eventN)r   r;  r   rF  r   r  rC  ru  )
r   
message_idargs_for_localer  r  r   rD  kwargs	localizedrG  s
             rs   r0  +BlackjackGame._broadcast_l_with_locale_args  s     llF ((0F$V,F$((FvFIt677,,VG==(DtZ:6: #rr   )r  c               b   U R                  U5      nU" U5      n[        R                  " Xb40 UD6n[        U S5      (       a  U R	                  XU5        U R                  U5      n	U	(       a  U	R                  " X%40 UD6  U R                   H  n
XL a  M	  U R                  U
5      nU" U5      n[        R                  " X4SUR                  0UD6n[        U S5      (       a  U R	                  XU5        U R                  U
5      nU(       d  M  UR                  " X54SUR                  0UD6  M     g)z;Personalized broadcast with per-recipient localized kwargs.r  r   N)	r;  r   rF  r   r  rC  ru  r   r   )r   actorpersonal_message_idothers_message_idr  r  actor_localeactor_kwargs
actor_text
actor_userr   rD  r  r  rG  s                  rs   &_broadcast_personal_l_with_locale_args4BlackjackGame._broadcast_personal_l_with_locale_args  s    **51&|4!%%lX<X
4233((FC]]5)
2KlKllF((0F$V,F$((`5::`Y_`It677,,VG==(Dt.TuzzTVT #rr   c                |    U R                   R                  (       a  gU(       d  gUR                  UR                  :H  $ )NTF)r   r   r   )r   viewertargets      rs   r  $BlackjackGame._can_view_player_cards  s+    <<--yyFII%%rr   c                R    UR                   S:X  a  UR                  $ UR                  $ Nr   )r_   rO   rY   r  s     rs   r:  BlackjackGame._current_hand  s$    $66!;v{{RARARRrr   c                R    UR                   S:X  a  UR                  $ UR                  $ r  r_   rR   rZ   r  s     rs   rH  BlackjackGame._current_bet  s$    #55:vzzP@P@PPrr   c                >    UR                   S:X  a  X!l        g X!l        g r  r  r   r   r	  s      rs   rS  BlackjackGame._set_current_bet  s    ##q(J%rr   c                R    UR                   S:X  a  UR                  $ UR                  $ r  )r_   rU   r[   r  s     rs   r    BlackjackGame._current_hand_done  s&    #)#;#;q#@v\fF\F\\rr   c                R    UR                   S:X  a  UR                  $ UR                  $ r  r_   rb   rc   r  s     rs   _current_hand_surrendered'BlackjackGame._current_hand_surrendered  s+    '-'?'?1'DF##	
JPJbJb	
rr   c                >    UR                   S:X  a  X!l        g X!l        g r  r  )r   r   surrendereds      rs   rJ  &BlackjackGame._set_current_surrendered   s    ##q(&1#'2$rr   c                R    UR                   S:X  a  UR                  $ UR                  $ r  )r_   rd   re   r  s     rs   _current_hand_from_split_aces+BlackjackGame._current_hand_from_split_aces&  s2     ''1, ''	
 --	
rr   c                ^    U R                   R                  =(       a    U R                  U5      $ r  )r   rE   r  r  s     rs   r9  6BlackjackGame._is_current_hand_locked_after_split_aces-  s#    ||44c9[9[\b9ccrr   c                V    U R                  [        R                  " [        5      5        g r  )r  r  choiceSOUND_BUST_VARIANTSr  s    rs   r1  BlackjackGame._play_bust_sound0      &9:;rr   c                V    U R                  [        R                  " [        5      5        g r  )r  r  r  SOUND_DEAL_VARIANTSr  s    rs   _play_deal_soundBlackjackGame._play_deal_sound3  r  rr   c                V    U R                  [        R                  " [        5      5        g r  )r  r  r  SOUND_DISCARD_VARIANTSr  s    rs   rI  !BlackjackGame._play_discard_sound6      &<=>rr   c                V    U R                  [        R                  " [        5      5        g r  )r  r  r  SOUND_SHUFFLE_VARIANTSr  s    rs   _play_shuffle_sound!BlackjackGame._play_shuffle_sound9  r  rr   c               h    U(       a  U R                  [        5        g U R                  [        5        g r  )r  SOUND_WIN_BLACKJACKSOUND_WIN_STANDARD)r   is_blackjack_wins     rs   _play_hand_win_sound"BlackjackGame._play_hand_win_sound<  s"    OO/0*+rr   )rV   rW   r   c                   UR                   S:X  a#  X!l        Ub  X1l        Ub  XAl        Ub  XQl        g g X!l        Ub  X1l        Ub  XAl        Ub  XQl        g g r  )	r_   rU   rV   rW   rX   r[   r\   r]   r^   )r   r   rA  rV   rW   r   s         rs   rD  $BlackjackGame._set_current_hand_doneB  sp     ##q(# $! &$'0$ % &*" %*"!&,#$-6* %rr   c                >    UR                   S:X  a  X!l        g X!l        g r  )r_   r`   ra   )r   r   doubleds      rs   rT  "BlackjackGame._set_current_doubled\  s    ##q(")#* rr   c                     UR                   S-  $ )Nr   )rR   r  s     rs   r  #BlackjackGame._insurance_bet_amountb  s    zzQrr   c                   U R                   R                  (       d  gU R                  5       (       d  gUR                  S::  d  UR                  (       a  gUR
                  (       a  gU R                  U5      nUS::  a  gUR                  U:  $ NFr   )r   r>   r  rR   rX   rg   r  rQ   r  s      rs   r  !BlackjackGame._can_take_insurancee  so    ||++))++::?f22))++F3Q;||v%%rr   c                    U R                   R                  (       d  gU R                  5       (       d  gUR                  S::  d  UR                  (       d  gUR
                  (       + $ r   )r   r>   r  rR   rX   rg   r  s     rs   r  "BlackjackGame._can_take_even_moneys  sI    ||++))++::?&"6"61111rr   c                    UR                   S::  a  gUR                  (       a  gU R                  U5      =(       d    U R                  U5      $ )Nr   F)rR   rg   r  r  r  s     rs   r  .BlackjackGame._player_needs_insurance_decision|  s=    ::?))''/T43L3LV3TTrr   c                    UR                   S:  a  UR                  (       d  gUR                  S:  a  UR                  (       d  gg)Nr   TF)rR   rU   rZ   r[   r  s     rs   r  &BlackjackGame._player_has_pending_hand  s4    ::>&"2"2a(>(>rr   c                    UR                   S:  a  UR                  (       d  SUl        g UR                  S:  a  UR                  (       d  SUl        g g g r  )rR   rU   r_   rZ   r[   r  s     rs   r  (BlackjackGame._select_first_pending_hand  sF    ::>&"2"2'(F$a(>(>'(F$ )?rr   c                v    UR                   S:X  a)  UR                  S:  a  UR                  (       d  SUl         gg)Nr   r!   TF)r_   rZ   r[   r  s     rs   r  "BlackjackGame._switch_to_next_hand  s3    ##q(V-=-=-A&J`J`'(F$rr   c                   UR                   S:w  a  gU R                  R                  S::  a  gUR                  S:  a  g[	        UR
                  5      S:w  a  gUR                  S::  a  gUR                  UR                  :  a  gU R                  R                  S:X  a3  UR
                  S   R                  UR
                  S   R                  :H  $ U R                  UR
                  S   5      U R                  UR
                  S   5      :H  $ )Nr   Fr!   r   r:   )r_   r   rD   rZ   r  rO   rR   rQ   rC   rZ  r  r  s     rs   r   BlackjackGame._can_split  s    ##q(<<''1,av{{q ::?<<&**$<<""k1;;q>&&&++a.*=*===((Q8D<U<UKKN=
 
 	
rr   c                   U R                  U5      nU R                  U5      n[        U5      S:w  a  gUR                  S:X  a  U R                  R
                  (       d  gU R                  U5      (       a  gUS::  a  gUR                  U:  a  gU R                  U5      u  pEU R                  R                  S:X  a  US;   $ U R                  R                  S:X  a  US;   $ g	)
Nr   Fr!   r   r6   )	   r   r  r7   )r   r  T)
r:  rH  r  r_   r   rB   r9  rQ   r#  rA   )r   r   rO   rR   r!  re  s         rs   r   BlackjackGame._can_double_down  s    !!&)'t9>##q(1V1V88@@!8<<#//$/<<((I5K''<<((J6H$$rr   c                >   U R                   R                  (       d  gUR                  S:w  a  gUR                  S:  a  g[	        UR
                  5      S:w  a  gUR                  (       a  gUR                  (       a  gUR                  S::  a  gUR                  (       + $ )NFr   r   )
r   r?   r_   rZ   r  rO   rX   rb   rR   rU   r  s     rs   r  BlackjackGame._can_surrender  s}    ||00##q(av{{q ""::?####rr   c                    U R                   R                  S:X  a
  XS-  S-  -   $ U R                   R                  S:X  a  US-  $ XS-  S-  -   $ )Nr2   r  r   r3   r   r   )r   r@   )r   rR   s     rs   _blackjack_total_payout%BlackjackGame._blackjack_total_payout  sQ    <<((H47q.))<<((H47NQw1n%%rr   c                   U R                   (       a  U R                   R                  5       U:  a  g [        R                  " U R                  R
                  S9u  U l         nU R                   R                  5         U R                  5         g )N)	num_decks)r   sizer   standard_deckr   r   shuffler  )r   r  r  s      rs   r  BlackjackGame._ensure_deck  sZ    99)Y6"004<<;R;RS	1		  "rr   c                z    U R                  SS9  U R                  (       a  U R                  R                  5       $ S $ )Nr!   r  )r  r   draw_oner  s    rs   r.  BlackjackGame._draw_card  s1    A&'+yytyy!!#:d:rr   c                F    U R                   S:H  =(       a    U R                  $ )Nr  )r   r   r  s    rs   r   BlackjackGame._is_between_hands  s    zzX%A$*A*AArr   c                    U R                  5        Vs/ s H.  n[        U[        5      (       d  M  UR                  S:  d  M,  UPM0     sn$ s  snf r  )r  r   rJ   rQ   )r   r   s     rs   r  $BlackjackGame._between_hands_players  sG    ..0
0!Jq/4RAWXW^W^abWbA0
 	
 
s   AAAc                V    U R                  5       nU(       d  g[        S U 5       5      $ )NTc              3  8   #    U  H  oR                   v   M     g 7fr  )ri   )r  r   s     rs   r  ?BlackjackGame._all_between_hand_bets_entered.<locals>.<genexpr>  s     7w!%%ws   )r  allr  s     rs   r  ,BlackjackGame._all_between_hand_bets_entered  s'    --/7w777rr   c                    U R                  U R                  R                  5      nU R                  5        H#  nUR                  (       a  M  Xl        SUl        M%     g ro  )r  r   r   r  ri   rS   r   default_betr   s      rs   r  7BlackjackGame._apply_default_bets_for_unentered_players  sH    ++DLL,A,AB113F&&)O&*F#	 4rr   c                |    U R                  5       (       d  g U R                  5       (       d  g U R                  5         g r  )r   r  r  r  s    rs   rq  'BlackjackGame._start_next_hand_if_ready  s2    %%''2244rr   c                |    [        U R                  R                  [        XR                  R                  5      5      $ r  )maxr   r   r  r   )r   r	  s     rs   r  BlackjackGame._clamp_table_bet  s(    4<<--s6<<;U;U/VWWrr   c                    UR                   S:  a  UR                   OU R                  R                  nU R                  U5      $ r  )rS   r   r   r  )r   r   
chosen_bets      rs   rp  !BlackjackGame._effective_next_bet  s3    (.!(;V__AVAV
$$Z00rr   c                   U R                  U5      n[        UR                  U5      nUR                  U R                  R                  :  a/  X0R                  R                  :  a  U R                  R                  n[        SU5      $ r  )rp  r  rQ   r   r   rO  )r   r   desired_betrR   s       rs   _posted_bet_for_player$BlackjackGame._posted_bet_for_player  sb    ..v6&,,,<<4<<555#@Z@Z:Z,,,,C1c{rr   c                ^   SnU Hy  nUR                   S::  a  SUl        SUl        M#  U R                  U5      nUS::  a  SUl        SUl        MJ  U=R                   U-  sl         XCl        SnU R	                  USSUS9  M{     U(       a  U R                  [        5        U R                  5         g )NFr   Tzblackjack-you-betzblackjack-player-betsr  )rQ   rR   rU   rV  r  r  r\  r  )r   r   
bet_postedr   rR   s        rs   r  BlackjackGame._post_bets  s    
F||q 
#' --f5Cax
#' LLCLJJ%%#'	 &  * OOI& rr   c                    SU l         SU l        U R                  SU R                  S-   S9  U R	                  [
        5        U R                  U R                  R                  5      nU R                  5        H*  nSUl
        UR                  (       d  M  Xl        SUl
        M,     U R                  5       (       a  U R                  R                  5         g U R!                  5         U R                  R"                  U l        U R%                  5         g )NTr   zblackjack-hand-startr!   rO   F)r   r   r  r   r  SOUND_ROUND_STARTr  r   r   r  ri   r   rS   r  r   r  r  r  r   rI  s      rs   r  "BlackjackGame._start_between_hands(  s    "&$%!/d6F6F6JK)*++DLL,A,AB113F&+F#}}}"-*.'	 4 ..00JJ $(JJ$>$>! rr   c           
       ^ ^^^ T R                  5         [        S5       Ht  nU H7  mT R                  5       nU(       d  M  TR                  R	                  U5        M9     T R                  5       nU(       d  MY  T R
                  R	                  U5        Mv     T R
                  (       a  T R                  SU 4S j5        U GH  mT R                  TR                  5      u  mmT R                  R                  (       a  T R                  TSSUUU U4S j5        ObT R                  T5      nU(       aJ  UR                  S[        TR                  UR                  5      T R                  UR                  TT5      S9  T R!                  TR                  5      (       d  M  STl        STl        STl        T R)                  [*        5        T R-                  TS	S
5        GM     g )Nr   zblackjack-dealer-showsc                :   > S[        TR                  S   U 5      0$ )Nr   r   )r   r   )rD  r   s    rs   r$  3BlackjackGame._deal_initial_cards.<locals>.<lambda>K  s    	$2B2B12Ev(NOrr   zblackjack-you-havezblackjack-player-hasc                X   > [        TR                  U 5      TR                  U TT5      S.$ )Nr}  )r   rO   r"  rD  r+  r   r   r!  s    rs   r$  ra  U  s(    !+FKK!@!%!1!1&%!I$rr   r}  Tzblackjack-you-blackjackzblackjack-player-blackjack)r  r  r.  rO   r   r   r0  r#  r   r   r  rC  ru  r   rD  r"  r  rX   rU   rV   r  r  r  )	r   r   r  r   dealer_cardrG  r+  r   r!  s	   `     @@@rs   r  !BlackjackGame._deal_initial_cards=  s{   qA!(4KK&&t, " //+K{  ''4  ..(O
 F!__V[[9NE7||11;;(*	 }}V,LL,(dkkB"..t{{E7K ! 
   --'+$#' #0))57S3 rr   c                  ^ ^^ T R                   (       a  g ST l         [        T R                  5      S:  aL  T R                  [        5        T R                  T R                  5      u  mmT R                  SUU U4S j5        g g )NTr   zblackjack-dealer-revealsc                   > [        TR                  S   U 5      [        TR                  U 5      TR                  U TT5      S.$ )Nr!   )r   r~  r!  )r   r   r   r"  r*  s    rs   r$  3BlackjackGame._reveal_dealer_hand.<locals>.<lambda>u  s?    %d&6&6q&96B'(8(8&A!--feWE rr   )r   r  r   r  SOUND_REVEALr#  r0  )r   r+  r!  s   `@@rs   r  !BlackjackGame._reveal_dealer_handk  si    $$$(!t A%OOL)!__T-=-=>NE7..* &rr   c           	     x  ^ ^^^ T R                  T R                  T5      5      u  mmTR                  S:  a  T R                  R                  (       a  T R                  TSSUUU U4S j5        g T R                  T5      nU(       a9  UR                  STR                  S-   T R                  UR                  TT5      S9  g T R                  R                  (       a  T R                  TSSUU U4S	 j5        g T R                  T5      nU(       a,  UR                  ST R                  UR                  TT5      S
9  g g )Nr   zblackjack-your-total-handzblackjack-player-total-handc                J   > TR                   S-   TR                  U TT5      S.$ )Nr!   rO   r!  )r_   r"  rc  s    rs   r$  6BlackjackGame._announce_player_total.<locals>.<lambda>  s(     & 8 81 <!%!1!1&%!I$rr   r!   rm  zblackjack-your-totalzblackjack-player-totalc                .   > STR                  U TT5      0$ r(  r)  r*  s    rs   r$  rn    r,  rr   rR  )r#  r:  rZ   r   r   r  rC  ru  r_   r"  rD  )r   r   rG  r+  r!  s   `` @@rs   r  $BlackjackGame._announce_player_total|  s   ););F)CDwa||11;;/1	"  }}V,LL3#559"..t{{E7K ! 
 <<--77&(R	 ==(D***4;;wG   rr   c                     [        U R                  R                  5      nUS::  a  U R                  R                  5         g U R                  R                  U5        g ! [         a    Sn NKf = fr  )rP   r   r   rt  r   r  start)r   r  s     rs   r  BlackjackGame._start_turn_timer  s_    	$,,112G a<JJ

!  	G	s   A A-,A-c                    U R                   n[        U[        5      (       d  g U R                  S:X  a  [	        X5      =(       d    SnO[	        X5      =(       d    SnU R                  X5        g )Nr  rA  r5  )r   r   rJ   r   r#   execute_action)r   r  r=  s      rs   r  "BlackjackGame._handle_turn_timeout  sV    %%'?33::$!$0G4GI!$0;GIG/rr   c           
         U R                  U5      nU R                  U5      u  p4US:  ac  U R                  5         U R                  USSS9  U R	                  USSU R                  U R                  U5      X45      S9  U R                  5         g US:X  aJ  U R                  [        5        U R                  USSS9  U R	                  USS	5        U R                  5         g U R                  U5        U R                  5         U R                  5         g )
Nr&  TrO  rP  rQ  rR  r@  rX  rY  )r:  r#  r1  rD  r  r"  r;  r  r  r2  r  r  r   )r   r   rO   r!  r+  s        rs   r<  /BlackjackGame._evaluate_current_hand_after_draw  s   !!&).2:!!#''T$'G%%$'&&t':':6'BES	 &  ((*B;OOK(''T'F%%*.
 ((*##F+  rr   c           
     (	   SU l         U R                  R                  5         U R                  U R                  5      u  pU R                  U R                  5      nUS:  nU R                  5        GH  n[        U[        5      (       d  M  UR                  S:  a  U(       aY  UR                  S-  nU=R                  UR                  S-  -  sl
        U R                  [        5        U R                  USSUS9  O,U R                  5         U R                  US	S
UR                  S9  / nUR                  S:  aI  UR!                  SUR"                  UR                  UR$                  UR&                  UR(                  45        UR*                  S:  aI  UR!                  SUR,                  UR*                  UR.                  UR0                  UR2                  45        U(       d  GMu  U GHf  u  pppU(       a  M  US:X  a<  UR4                  (       a+  U=R                  U
S-  -  sl
        U R7                  XXSU
S9  MS  U(       a  U R7                  XXSU
S9  Mm  U R                  U	5      u  pU(       aE  U(       d>  U R9                  U
5      nU=R                  U-  sl
        U R7                  UUSUU
-
  SS9  M  U(       a  U(       d  U R7                  XXSU
S9  M  U(       d  X:  a-  U=R                  U
S-  -  sl
        U R7                  XXSU
SS9  GM&  X:X  a*  U=R                  U
-  sl
        U R7                  XXS5        GMU  U R7                  XXSU
S9  GMi     UR                  S:X  d  GM  U R;                  5         U R                  USS5        GM     U R=                  5         U R                  5        Vs/ s H.  n[        U[        5      (       d  M  UR                  S:  d  M,  UPM0     nnU R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     nn[?        U5      S:X  a  U RA                  S 5        g [?        U5      S:  a-  [?        U5      S::  a  U RA                  U(       a  US   OS 5        g U RC                  5         g s  snf s  snf )Nr  r&  r   r   r   zblackjack-you-insurance-winszblackjack-player-insurance-winsr  zblackjack-you-insurance-losesz blackjack-player-insurance-losesr!   r?  losewinT)r	  r  Fpushzblackjack-you-brokezblackjack-player-broke)"r   r   r  r#  r   r  r  r   rJ   rf   rQ   r  r  r  rI  rR   r   rO   rW   rX   rb   rZ   rY   r]   r^   rc   rh   _broadcast_settle_resultr4  r1  r  r  r  r  )r   dealer_total_dealer_softr  dealer_bustr   insurance_profithands
hand_indexr~  rR   rW   r  r  player_total_player_softr  r   r  r  s                       rs   r  BlackjackGame._settle_hand  s$   


%)__T5E5E%F",,T-=-=>"R'--/Ffo66##a'#'-';';a'?$LLF$8$81$<<LOO$67--69/	 .  ,,.--7:%33	 .  JLEzzA~

,,//	 !#))((++2200	 MRI
3?v'='=LLC!G+L11&l[^1_11&fUX1Y-1__U-C*(8!99#>FLLF*L11"%|)- 2  &l11&fUX1Y L$?LLC!G+L11E#PU 2  "1LLC'L11&fM11&fUX1YI NSL ||q %%'))),u 0@ 	  ..0
0!Jq/4RAWXW^W^abWbA0 	 
 )-(?(?(Ad(A1ZPQSbEcQ(Ady>QNN4  !A%#i.A*=NN99Q<$?!!#
 es   .R
R
R
7RRc                P   UR                   S:  nUS:X  a+  U R                  SS9  U R                  USSU=(       d    SS9  g US:X  aR  U R                  US9  U(       a   U R                  US	S
US-   U=(       d    SS9  g U R                  USSU=(       d    SS9  g US:X  aC  U(       a   U R                  USSUS-   U=(       d    SS9  g U R                  USSU=(       d    SS9  g U R                  [        5        U(       a  U R                  USSUS-   S9  g U R                  USS5        g )Nr   r?  F)r  zblackjack-you-even-money-winzblackjack-player-even-money-winr  r{  zblackjack-you-win-handzblackjack-player-wins-handr!   )rO   r	  zblackjack-you-winzblackjack-player-winsrz  zblackjack-you-lose-handzblackjack-player-loses-handzblackjack-you-losezblackjack-player-loseszblackjack-you-push-handzblackjack-player-push-handr\  zblackjack-you-pushzblackjack-player-push)rZ   r  r  r  
SOUND_PUSH)r   r   r  resultr	  r  is_splits          rs   r}  &BlackjackGame._broadcast_settle_resultL	  sy    ##a'\!%%u%=%%.1{	 &  U?%%7G%H)),0#a!;Q *   ))'+!;Q	 *  V))-1#a!;Q *   ))(,!;Q	 *  
#%%),!^	 &  %%$'rr   c                @   U R                   R                   H
  nSUl        M     U R                   Hj  n[	        U[
        5      (       a  UR                  (       a  M+  U R                   R                  UR                  5      nU(       d  MY  UR                  Ul        Ml     g r  )
r  teamstotal_scorer   r   rJ   r   get_teamr   rQ   )r   teamr   s      rs   r  BlackjackGame._sync_team_scores	  sq    &&,,D D -llFfo66&:M:M%%..v{{;Dt#)<<  #rr   c                   SU l         U R                  R                  5         U(       a2  U R                  [        5        U R                  USSUR                  S9  OU R                  [        5        U R                  5         g )Nfinishedzblackjack-you-win-gamezblackjack-player-wins-gamerQ   )	r   r   r  r  SOUND_WIN_GAMEr  rQ   SOUND_NO_WINNERfinish_game)r   winners     rs   r  BlackjackGame._end_game	  se    


OON+%%(,ll	 &  OOO,rr   c                Z   U R                  5        Vs/ s H  n[        U[        5      (       d  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                   $ r  r  )r   s    rs   r$  1BlackjackGame.build_game_result.<locals>.<lambda>	  s    177rr   )r  rz   is_virtual_botF)r   player_namer   r  r   )winner_namewinner_chipsfinal_chips)	game_type	timestampduration_ticksplayer_resultscustom_data)r  r   rJ   rO  r   rQ   r   r   r   now	isoformatsound_scheduler_tickr   r   r   r  )r   r   r  r  r  s        rs   build_game_resultBlackjackGame.build_game_result	  s    !446Y6*Q:X!6YV!2DA0671vvqww7mmolln..044    A dd !88#*1.>#F	   /5v{{$06A*
 	
	 Z7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 S	35        M$     U$ )
Nzgame-final-scoresr  c                    U S   $ r   rj   )items    rs   r$  1BlackjackGame.format_end_screen.<locals>.<lambda>	  s    T!Wrr   T)r  reverser!   r  z: z chips)r   rF  r  sorteditems	enumerater   )	r   r  rD  r  r  sorted_scoresindexr   rQ   s	            rs   format_end_screenBlackjackGame.format_end_screen	  s    !!&*=>?((,,]B?{0028LVZ[$-mQ$? E=DLLE7"TF"UG6:; %@rr   )
r  r   r   r   r   r  r   r   r   r   )returnr   )r  rP   )F)r   r   r   r   r   rT   r  rJ   )r  	list[str])r   r   r   r   r  None)rw   r   r  r  )r   r   r  
str | None)r   r   r  r   )r   rJ   r  r   )r   r   r  r   )r  r  )r   r   r  dictr  r  )r   r   r  rT   r  rT   )r   r   r  r  )r   rJ   r  r  )r   r   r  r  )r   r   r  rT   )r   r   r=  r   r  r  )r   r   rv  r   r=  r   r  r  )r   r   r  r   )r   r   r=  r   r  r   )r   Card | Noner  rP   )r~  rN   r  ztuple[int, bool])r~  rN   r  rT   )rD  r   r!  rP   r+  rT   r  r   )rD  r   r   rT   r  r   )rD  r   r  r   )r  rT   )
r  r   r  "Callable[[str], dict[str, object]]r  r   r  Player | Noner  r  )r  rJ   r  r   r  r   r  r  r  r   r  r  )r  r  r  rJ   r  rT   )r   rJ   r  rN   )r   rJ   r  rP   )r   rJ   r	  rP   r  r  )r   rJ   r  rT   )r   rJ   r  rT   r  r  )r  rT   r  r  )r   rJ   rA  rT   rV   bool | NonerW   r  r   r  r  r  )r   rJ   r  rT   r  r  )r   rJ   r  r  )rR   rP   r  rP   )r!   )r  rP   r  r  )r  r  )r  r   )r	  rP   r  rP   )NF)r   rJ   r  rP   r  r   r	  z
int | Noner  rT   r  r  )r  zBlackjackPlayer | Noner  r  )r  r   )r  r   rD  r   r  r  )rk   rl   rm   rn   r   ro   r   rp   ru   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r!  r$  r'  r*  rI  rd  r  r  r  r  r  r  r#   r  r  r  r  r  r  r
  r  r  r  r0  r6  r<  r8  r:  r>  r@  rB  rN  rS  rY  r[  r]  r_  ra  r  rc  r  r  rU  rO  staticmethodr  r#  r  r"  r  r  r  r;  r0  r  r  r:  rH  rS  r   r  rJ  r  r9  r1  r  rI  r  r  rD  rT  r  r  r  r  r  r  r  r   r   r  r4  r  r.  r   r  r  r  rq  r  rp  rV  r  r  r  r  r  r  r  r<  r  r}  r  r  r  r  rq   __classcell__)r   s   @rs   r   r   c  s    &+4%@G"@ %6F GGGD+#D9K9KE3!.AE>A!&$& !#!$$    % %    G!c(
"
"7
	!
	!M^L\)
V'%Z$,K= ,'@1D5(
%5B
(* !.(\2,''00'dK!Z1,11	))>
6
<
0\
|:6$	E980 " " $ $ M
b(
TH- !%;; <;
 ; ; 
;8 UU !U 	U
 <U U 
U>&SQ&]

3
d<<??, ""!%77 	7
 7 7 7 
74+&2U)
&($"&#;B

8+X1!8!*,\"#J
"0!<u$x "!&BB B 	B
 B B 
BH0&
2 rr   r   )K
__future__r   dataclassesr   r   r   r  collections.abcr   r  r	   r
   r   registryr   game_utils.actionsr   r   r   r   game_utils.bot_helperr   game_utils.cardsr   r   r   r   r   game_utils.game_resultr   r   game_utils.optionsr   r   r   r   game_utils.poker_timerr   messages.localizationr   server.core.ui.keybindsr    botr#   r   r   r   r   r   r   r   r   r   r   rG   rp   r/  r2  rU  r  r  r  r  r  r\  r]  ri  r  r  r  r  r  rJ   ru   r   rj   rr   rs   <module>r     s!   " (   $ , , $ M M . N N > Q Q 4 1 0  J 	






	 
  : ,22  : '''  > ..0  #K0 31   $"& $$%$(!$().  %"' %$%$)!$().  %"& $$%$("$))-7(@ < (T %	(3 0 
 
 
  &	4 %#
1 / ., #f # #8 x{ x xv g!D g!  g!rr   