@betorigami/games 2.3.4 → 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7029,6 +7029,7 @@ export declare class BlackjackGame extends GameComponent {
|
|
|
7029
7029
|
private finishRound;
|
|
7030
7030
|
private waitForAllCardsToBeIdle;
|
|
7031
7031
|
private accumulateBetActions;
|
|
7032
|
+
private executeNextAction;
|
|
7032
7033
|
private onBuyInsurance;
|
|
7033
7034
|
private onDeclineInsurance;
|
|
7034
7035
|
private afterInsuranceDecision;
|
package/dist/index.mjs
CHANGED
|
@@ -15737,7 +15737,7 @@ var V8=Object.create;var{getPrototypeOf:W8,defineProperty:$4,getOwnPropertyNames
|
|
|
15737
15737
|
:host {
|
|
15738
15738
|
height: 100%;
|
|
15739
15739
|
}
|
|
15740
|
-
`;var os={Spades:"spade",Hearts:"heart",Diamonds:"diamond",Clubs:"club"},ss=["Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"],A8=(a)=>({rank:ss.indexOf(a.rank)+1,suit:os[a.suit]??"spade"}),hs={rank:1,suit:"spade",faceDown:!0},us=(a)=>("playerHand"in a)&&("dealerHand"in a),J8=(a)=>[...a.cards].map(A8),ds=(a)=>{for(let e=a.betActions.length-1;e>=0;e--){let r=a.betActions[e].data.BLACKJACK;if(r&&us(r.state))return r.state}return null},$2=(a)=>{let e=ds(a);if(!e)return null;let i=J8(e.playerHand),r=e.playerHand.value;if(e.isFinished){let l=J8(e.dealerHand);return{playerCards:i,dealerCards:l,playerValue:r,dealerValue:e.dealerHand.value,isFinished:!0,multiplier:e.multiplier}}let t=[A8(e.dealerHand.cards[0]),hs];return{playerCards:i,dealerCards:t,playerValue:r,dealerValue:e.dealerHand.value,isFinished:!1,multiplier:e.multiplier}},d3=(a)=>a.betActions.some((e)=>e.type==="END_BET");class c3 extends K1{static styles=[...K1.styles,L8];betData=null;actionBusy=!1;insuranceBetAmount="0";isSplitRound=!1;currentBetAmount="0";get isToggleDisabled(){return this.isManualPlaying||this.autobetInProgress||this.autobetStopping||this.stage!=="idle"&&this.stage!=="settled"}get areInputsDisabled(){return this.isManualPlaying||this.autobetInProgress||this.autobetStopping||this.controlsLocked}get blackjackApi(){return this.isDemoMode?new M1:new A4(this.gameData.authToken,this.gameData.baseUrl??"")}addToHistory(a,e,i){let r=[...this.history,{multiplier:a,won:e,id:i}];this.history=r.slice(-5)}async firstUpdated(a){super.firstUpdated(a),await this.checkForActiveSession()}async checkForActiveSession(){try{let a=await this.blackjackApi.getActiveBet();if(!a.success)return;this.betData=a.data;let e=$2(a.data);if(!e)return;this.suppressNextContentAnimations=!0,this.playerHands=[{cards:e.playerCards}],this.dealerCards=e.dealerCards,this.activeHandIndex=0,this.stage=e.isFinished?"settled":"player",await this.forceUIUpdate(),this.suppressNextContentAnimations=!1}catch{}}addPlayerCard(a){let e=this.playerHands[0];if(!e)return"";return e.cards=[...e.cards,a],this.playerHands=[...this.playerHands],this.playDealSound(),`p-0-${e.cards.length-1}`}addDealerCard(a){return this.dealerCards=[...this.dealerCards,a],this.playDealSound(),`d-${this.dealerCards.length-1}`}async handleBetExecution(a){if(!this.gameData?.currency)throw new Error(R("alerts.gameError",this.gameData?.language||$));let e=this.sideBetMode?S(this.perfectPairsAmount).plus(this.twentyOnePlusThreeAmount):S(0),i;if(this.isDemoMode&&S(this.gameData.balance).lt(S(a).plus(e)))i={success:!1,error:R("alerts.insufficientBalance",this.gameData?.language||"en")};else i=await this.blackjackApi.startBet({amount:a,currency:this.gameData.currency});if(!i.success)return this.showError(i.error),i;if(this.betData=i.data,this.currentBetAmount=a,this.insuranceBetAmount="0",this.isSplitRound=!1,this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(S(a).plus(e)));let r=$2(i.data);if(!r)return i;if(this.stage="dealing",this.hasPendingBet=!0,this.resultMultiplier=null,this.dealerCards=[],this.playerHands=[{cards:[]}],this.activeHandIndex=0,await this.forceUIUpdate(),await this.executeInstantOrAnimated(()=>{this.playerHands=[{cards:[...r.playerCards]}],this.dealerCards=[...r.dealerCards]},async()=>{let t=this.addPlayerCard(r.playerCards[0]);await this.waitForCardDealComplete(t);let l=this.addDealerCard(r.dealerCards[0]);await this.waitForCardDealComplete(l);let o=this.addPlayerCard(r.playerCards[1]);await this.waitForCardDealComplete(o);let s=this.addDealerCard(r.dealerCards[1]);await this.waitForCardDealComplete(s)}),this.sideBetMode&&r.playerCards.length>=2)this.settleSideBets(r.playerCards,r.dealerCards[0]);if(r.playerCards.length===2&&this.handBestValue(r.playerCards)===21)this.revealDealerHole(),await this.finishRound();else if(this.dealerCards[0]?.rank===1)this.stage="insurance";else if(d3(i.data))this.revealDealerHole(),await this.finishRound();else this.stage="player";return i}async blackjackPlay(){this.isManualPlaying=!0,this.gameData?.soundEffects?.play(u1.buttonPress(0.5));try{if(this.stage!=="idle"&&this.stage!=="settled")return;let a=await this.handleBetExecution(this.gameData?.betAmount??"0");if(!a?.success)console.error(a?.error)}catch(a){console.error("Error in blackjackPlay:",a),this.showError(R("alerts.gameError",this.gameData?.language||$))}finally{this.isManualPlaying=!1}}async executeAutobet(a,e){return{pnl:S(0),gameOutcome:"Draw",hasError:!0,errorMessage:R("alerts.gameError",this.gameData?.language||$)}}playDealSound(){this.gameData?.soundEffects?.play(u1.cardSlide())}playFlipSound(){this.gameData?.soundEffects?.play(u1.cardFlip())}revealDealerHole(){this.dealerCards=this.dealerCards.map((a,e)=>e===1&&a.faceDown?{...a,faceDown:!1}:a)}async revealDealerCards(a){if(!a)return;if(this.stage="dealer",a.dealerCards.length>=2){this.dealerCards=this.dealerCards.map((e,i)=>{if(i===1)return{...a.dealerCards[1],faceDown:!1};return e}),this.playFlipSound();try{await this.waitForCardDealComplete("d-1")}catch{}}for(let e=2;e<a.dealerCards.length;e++){let i=this.addDealerCard(a.dealerCards[e]);await this.waitForCardDealComplete(i)}}async finishRound(){if(!this.betData)return;let a=this.betData.payout??"0",e=Number(this.betData.multiplier??"0");if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).plus(a));let i=e>1;if(this.addToHistory(e,i,this.betData.id),this.updateHistoryWithBet(this.betData),i)this.playWinFeedback();await this.waitForAllCardsToBeIdle(),this.resultMultiplier=e,await this.ensureMinimumDisplayTime(i,300,300),this.stage="settled",this.hasPendingBet=!1,this.insuranceBetAmount="0",this.isSplitRound=!1}async waitForAllCardsToBeIdle(){if(this.gameData.instantBetEnabled)return;await this.forceUIUpdate(),await b1(50)}accumulateBetActions(a){if(!this.betData)return;let e=new Set(this.betData.betActions.map((r)=>r.id)),i=a.betActions.filter((r)=>!e.has(r.id));this.betData={...a,betActions:[...this.betData.betActions,...i]}}onBuyInsurance=async()=>{if(this.stage!=="insurance")return;if(this.insuranceBetAmount=S(this.currentBetAmount).div(2).toString(),this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(this.insuranceBetAmount));await this.afterInsuranceDecision()};onDeclineInsurance=async()=>{if(this.stage!=="insurance")return;this.insuranceBetAmount="0",await this.afterInsuranceDecision()};afterInsuranceDecision=async()=>{if(this.betData&&d3(this.betData)){if(this.isDemoMode&&S(this.insuranceBetAmount).gt(0))this.gameData.updateBalance(S(this.gameData.balance).plus(S(this.insuranceBetAmount).mul(3)));this.revealDealerHole(),await this.finishRound()}else this.stage="player"};onHit=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.isSplitRound){this.actionBusy=!0,this.controlsLocked=!0;try{let a=this.playerHands[this.activeHandIndex];if(!a)return;let e=this.randomUICard();a.cards=[...a.cards,e],this.playerHands=[...this.playerHands],this.playDealSound();let i=`p-${this.activeHandIndex}-${a.cards.length-1}`;if(await this.waitForCardDealComplete(i),this.handBestValue(a.cards)>=21)await this.advanceSplitHand()}finally{this.controlsLocked=!1,this.actionBusy=!1}return}if(!this.betData)return;this.actionBusy=!0,this.controlsLocked=!0;try{let a=await this.blackjackApi.next({betId:this.betData.id,type:"BLACKJACK_HIT"});if(!a.success){this.showError(a.error);return}this.accumulateBetActions(a.data);let e=$2(a.data);if(!e)return;let i=e.playerCards[e.playerCards.length-1],r=this.addPlayerCard(i);if(await this.waitForCardDealComplete(r),d3(a.data))await this.revealDealerCards(e),await this.finishRound()}finally{this.controlsLocked=!1,this.actionBusy=!1}};onStand=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.isSplitRound){this.actionBusy=!0,this.controlsLocked=!0;try{await this.advanceSplitHand()}finally{this.controlsLocked=!1,this.actionBusy=!1}return}if(!this.betData)return;this.actionBusy=!0,this.controlsLocked=!0;try{let a=await this.blackjackApi.next({betId:this.betData.id,type:"BLACKJACK_STAND"});if(!a.success){this.showError(a.error);return}this.accumulateBetActions(a.data);let e=$2(a.data);if(!e)return;await this.revealDealerCards(e),await this.finishRound()}finally{this.controlsLocked=!1,this.actionBusy=!1}};onSplit=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.playerHands.length>1)return;let a=this.playerHands[this.activeHandIndex];if(!a||a.cards.length!==2)return;if(this.cardValueForSplit(a.cards[0].rank)!==this.cardValueForSplit(a.cards[1].rank))return;this.actionBusy=!0,this.controlsLocked=!0;try{if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(this.currentBetAmount));let[e,i]=a.cards;this.playerHands=[{cards:[e]},{cards:[i]}],this.activeHandIndex=1,this.isSplitRound=!0,this.suppressNextContentAnimations=!0,await this.forceUIUpdate(),this.suppressNextContentAnimations=!1}finally{this.controlsLocked=!1,this.actionBusy=!1}};advanceSplitHand=async()=>{if(this.activeHandIndex>0){this.activeHandIndex=this.activeHandIndex-1;return}await this.dealerPlaySplitRound(),await this.finishSplitRound()};dealerPlaySplitRound=async()=>{this.stage="dealer";let a=this.randomUICard();this.dealerCards=this.dealerCards.map((e,i)=>i===1?{...a,faceDown:!1}:e),this.playFlipSound();try{await this.waitForCardDealComplete("d-1")}catch{}while(this.handBestValue(this.dealerCards)<17){let e=this.randomUICard(),i=this.addDealerCard(e);await this.waitForCardDealComplete(i)}};finishSplitRound=async()=>{let a=S(this.currentBetAmount),e=this.handBestValue(this.dealerCards),i=e>21,r=S(0),n=!1;for(let d of this.playerHands){let c=this.handBestValue(d.cards);if(c>21)continue;if(i||c>e)r=r.plus(a.mul(2)),n=!0;else if(c===e)r=r.plus(a)}if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).plus(r));let t=a.mul(this.playerHands.length),l=t.gt(0)?r.div(t).toNumber():0,o=r.gt(t),s=this.betData?.id??crypto.randomUUID();if(this.addToHistory(l,o,s),this.betData)this.updateHistoryWithBet(this.betData);if(n)this.playWinFeedback();await this.waitForAllCardsToBeIdle(),this.resultMultiplier=l,await this.ensureMinimumDisplayTime(o,300,300),this.stage="settled",this.hasPendingBet=!1,this.isSplitRound=!1,this.insuranceBetAmount="0"};handBestValue=(a)=>{let e=0,i=0;for(let r of a)if(r.rank===1)i++,e+=1;else if(r.rank>=10)e+=10;else e+=r.rank;while(i>0&&e+10<=21)e+=10,i--;return e};randomUICard=()=>{let a=Math.floor(Math.random()*13)+1,i=["diamond","spade","club","heart"][Math.floor(Math.random()*4)]??"spade";return{rank:a,suit:i}};cardValueForSplit=(a)=>a>=10?10:a;settleSideBets=(a,e)=>{if(!this.isDemoMode)return;let i=S(0),r=S(this.perfectPairsAmount),n=S(this.twentyOnePlusThreeAmount);if(r.gt(0)){let t=this.evaluatePerfectPairs(a[0],a[1]);if(t>0)i=i.plus(r.mul(t))}if(n.gt(0)){let t=this.evaluateTwentyOnePlusThree(a[0],a[1],e);if(t>0)i=i.plus(n.mul(t))}if(i.gt(0))this.gameData.updateBalance(S(this.gameData.balance).plus(i))};evaluatePerfectPairs=(a,e)=>{if(a.rank!==e.rank)return 0;if(a.suit===e.suit)return 26;let i=(r)=>r==="diamond"||r==="heart";if(i(a.suit)===i(e.suit))return 13;return 6};evaluateTwentyOnePlusThree=(a,e,i)=>{let r=[a.rank,e.rank,i.rank],n=[a.suit,e.suit,i.suit],t=n[0]===n[1]&&n[1]===n[2];if(r[0]===r[1]&&r[1]===r[2])return t?101:31;let o=[...r].sort((m,h)=>m-h),s=o[2]-o[1]===1&&o[1]-o[0]===1,d=o[0]===1&&o[1]===12&&o[2]===13,c=s||d;if(c&&t)return 41;if(c)return 11;if(t)return 6;return 0};onBetModeChange=(a)=>{this.sideBetMode=a.detail.tab==="Auto"};onPerfectPairsAmountChange=(a)=>{this.perfectPairsAmount=a.detail.value};onTwentyOnePlusThreeAmountChange=(a)=>{this.twentyOnePlusThreeAmount=a.detail.value};onCardFlip=()=>{this.playFlipSound()};waitForCardDealComplete(a){if(this.gameData.instantBetEnabled)return Promise.resolve();return new Promise((e)=>{let i=(r)=>{let n=r.detail;if(!n||n.cardId!==a)return;this.removeEventListener("blackjack-card-dealt",i),e()};this.addEventListener("blackjack-card-dealt",i),b1(2000).then(()=>{this.removeEventListener("blackjack-card-dealt",i),e()})})}get canInteract(){return this.stage==="player"&&!this.controlsLocked&&!!this.betData}get canHit(){if(!this.canInteract)return!1;if(this.isSplitRound){let a=this.playerHands[this.activeHandIndex];return!!a&&this.handBestValue(a.cards)<21}return!0}get canStand(){return this.canInteract}get canDouble(){return!1}get canSplit(){if(!this.canInteract||this.playerHands.length>1)return!1;let a=this.playerHands[this.activeHandIndex];if(!a||a.cards.length!==2)return!1;return this.cardValueForSplit(a.cards[0].rank)===this.cardValueForSplit(a.cards[1].rank)}isSpacebarDisabled=()=>{if(!this.gameData?.hotkeysOpenEnabled)return!0;return this._blackjackManualEl?.shadowRoot?.querySelector("origami-button")?.disabled??!0};handleSpacebar=()=>{if(this.isSpacebarDisabled())return;this.blackjackPlay()};isHitDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canHit||this.stage!=="player"||this.actionBusy};handleHit=()=>{if(this.isHitDisabled())return;this.onHit()};isStandDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canStand||this.stage!=="player"||this.actionBusy};handleStand=()=>{if(this.isStandDisabled())return;this.onStand()};isSplitDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canSplit||this.stage!=="player"||this.actionBusy};handleSplit=()=>{if(this.isSplitDisabled())return;this.onSplit()};isDoubleDisabled=()=>!0;isAcceptInsuranceDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||this.stage!=="insurance"};handleAcceptInsurance=()=>{if(this.isAcceptInsuranceDisabled())return;this.onBuyInsurance()};isNoInsuranceDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||this.stage!=="insurance"};handleNoInsurance=()=>{if(this.isNoInsuranceDisabled())return;this.onDeclineInsurance()};constructor(){super();this.isManualPlaying=!1;this.resultMultiplier=null;this.history=[];this.stage="idle";this.dealerCards=[];this.playerHands=[];this.activeHandIndex=0;this.controlsLocked=!1;this.suppressNextContentAnimations=!1;this.sideBetMode=!1;this.perfectPairsAmount="0";this.twentyOnePlusThreeAmount="0";new E1(this,[{key:" ",callback:this.handleSpacebar.bind(this),options:{repeat:!0,repeatInterval:200,disabled:this.isSpacebarDisabled}},{key:"q",callback:this.handleHit.bind(this),options:{disabled:this.isHitDisabled}},{key:"w",callback:this.handleStand.bind(this),options:{disabled:this.isStandDisabled}},{key:"e",callback:this.handleSplit.bind(this),options:{disabled:this.isSplitDisabled}},{key:"r",callback:()=>{},options:{disabled:this.isDoubleDisabled}},{key:"t",callback:this.handleAcceptInsurance.bind(this),options:{disabled:this.isAcceptInsuranceDisabled}},{key:"y",callback:this.handleNoInsurance.bind(this),options:{disabled:this.isNoInsuranceDisabled}}])}render(){let a=this.gameData?.mainWidth>=768,e=this.stage!=="idle"&&this.stage!=="settled",i=this.areInputsDisabled||e,r=A1(this.gameData);return Z`
|
|
15740
|
+
`;var os={Spades:"spade",Hearts:"heart",Diamonds:"diamond",Clubs:"club"},ss=["Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"],A8=(a)=>({rank:ss.indexOf(a.rank)+1,suit:os[a.suit]??"spade"}),hs={rank:1,suit:"spade",faceDown:!0},us=(a)=>("playerHand"in a)&&("dealerHand"in a),J8=(a)=>[...a.cards].map(A8),ds=(a)=>{for(let e=a.betActions.length-1;e>=0;e--){let r=a.betActions[e].data.BLACKJACK;if(r&&us(r.state))return r.state}return null},$2=(a)=>{let e=ds(a);if(!e)return null;let i=J8(e.playerHand),r=e.playerHand.value;if(e.isFinished){let l=J8(e.dealerHand);return{playerCards:i,dealerCards:l,playerValue:r,dealerValue:e.dealerHand.value,isFinished:!0,multiplier:e.multiplier}}let t=[A8(e.dealerHand.cards[0]),hs];return{playerCards:i,dealerCards:t,playerValue:r,dealerValue:e.dealerHand.value,isFinished:!1,multiplier:e.multiplier}},d3=(a)=>a.betActions.some((e)=>e.type==="END_BET");class c3 extends K1{static styles=[...K1.styles,L8];betData=null;actionBusy=!1;insuranceBetAmount="0";isSplitRound=!1;currentBetAmount="0";get isToggleDisabled(){return this.isManualPlaying||this.autobetInProgress||this.autobetStopping||this.stage!=="idle"&&this.stage!=="settled"}get areInputsDisabled(){return this.isManualPlaying||this.autobetInProgress||this.autobetStopping||this.controlsLocked}get blackjackApi(){return this.isDemoMode?new M1:new A4(this.gameData.authToken,this.gameData.baseUrl??"")}addToHistory(a,e,i){let r=[...this.history,{multiplier:a,won:e,id:i}];this.history=r.slice(-5)}async firstUpdated(a){super.firstUpdated(a),await this.checkForActiveSession()}async checkForActiveSession(){try{let a=await this.blackjackApi.getActiveBet();if(!a.success)return;this.betData=a.data;let e=$2(a.data);if(!e)return;this.suppressNextContentAnimations=!0,this.playerHands=[{cards:e.playerCards}],this.dealerCards=e.dealerCards,this.activeHandIndex=0,this.stage=e.isFinished?"settled":"player",await this.forceUIUpdate(),this.suppressNextContentAnimations=!1}catch{}}addPlayerCard(a){let e=this.playerHands[0];if(!e)return"";return e.cards=[...e.cards,a],this.playerHands=[...this.playerHands],this.playDealSound(),`p-0-${e.cards.length-1}`}addDealerCard(a){return this.dealerCards=[...this.dealerCards,a],this.playDealSound(),`d-${this.dealerCards.length-1}`}async handleBetExecution(a){if(!this.gameData?.currency)throw new Error(R("alerts.gameError",this.gameData?.language||$));let e=this.sideBetMode?S(this.perfectPairsAmount).plus(this.twentyOnePlusThreeAmount):S(0),i;if(this.isDemoMode&&S(this.gameData.balance).lt(S(a).plus(e)))i={success:!1,error:R("alerts.insufficientBalance",this.gameData?.language||"en")};else i=await this.blackjackApi.startBet({amount:a,currency:this.gameData.currency});if(!i.success)return this.showError(i.error),i;if(this.betData=i.data,this.currentBetAmount=a,this.insuranceBetAmount="0",this.isSplitRound=!1,this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(S(a).plus(e)));else if(i.data.afterBalance)this.gameData.updateBalance(S(i.data.afterBalance));let r=$2(i.data);if(!r)return i;if(this.stage="dealing",this.hasPendingBet=!0,this.resultMultiplier=null,this.dealerCards=[],this.playerHands=[{cards:[]}],this.activeHandIndex=0,await this.forceUIUpdate(),await this.executeInstantOrAnimated(()=>{this.playerHands=[{cards:[...r.playerCards]}],this.dealerCards=[...r.dealerCards]},async()=>{let t=this.addPlayerCard(r.playerCards[0]);await this.waitForCardDealComplete(t);let l=this.addDealerCard(r.dealerCards[0]);await this.waitForCardDealComplete(l);let o=this.addPlayerCard(r.playerCards[1]);await this.waitForCardDealComplete(o);let s=this.addDealerCard(r.dealerCards[1]);await this.waitForCardDealComplete(s)}),this.sideBetMode&&r.playerCards.length>=2)this.settleSideBets(r.playerCards,r.dealerCards[0]);if(r.playerCards.length===2&&this.handBestValue(r.playerCards)===21)this.revealDealerHole(),await this.finishRound();else if(this.dealerCards[0]?.rank===1)this.stage="insurance";else if(d3(i.data))this.revealDealerHole(),await this.finishRound();else this.stage="player";return i}async blackjackPlay(){this.isManualPlaying=!0,this.gameData?.soundEffects?.play(u1.buttonPress(0.5));try{if(this.stage!=="idle"&&this.stage!=="settled")return;let a=await this.handleBetExecution(this.gameData?.betAmount??"0");if(!a?.success)console.error(a?.error)}catch(a){console.error("Error in blackjackPlay:",a),this.showError(R("alerts.gameError",this.gameData?.language||$))}finally{this.isManualPlaying=!1}}async executeAutobet(a,e){return{pnl:S(0),gameOutcome:"Draw",hasError:!0,errorMessage:R("alerts.gameError",this.gameData?.language||$)}}playDealSound(){this.gameData?.soundEffects?.play(u1.cardSlide())}playFlipSound(){this.gameData?.soundEffects?.play(u1.cardFlip())}revealDealerHole(){this.dealerCards=this.dealerCards.map((a,e)=>e===1&&a.faceDown?{...a,faceDown:!1}:a)}async revealDealerCards(a){if(!a)return;if(this.stage="dealer",a.dealerCards.length>=2){this.dealerCards=this.dealerCards.map((e,i)=>{if(i===1)return{...a.dealerCards[1],faceDown:!1};return e}),this.playFlipSound();try{await this.waitForCardDealComplete("d-1")}catch{}}for(let e=2;e<a.dealerCards.length;e++){let i=this.addDealerCard(a.dealerCards[e]);await this.waitForCardDealComplete(i)}}async finishRound(){if(!this.betData)return;let a=this.betData.payout??"0",e=Number(this.betData.multiplier??"0");if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).plus(a));else if(this.betData.afterBalance)this.gameData.updateBalance(S(this.betData.afterBalance));let i=e>1;if(this.addToHistory(e,i,this.betData.id),this.updateHistoryWithBet(this.betData),i)this.playWinFeedback();await this.waitForAllCardsToBeIdle(),this.resultMultiplier=e,await this.ensureMinimumDisplayTime(i,300,300),this.stage="settled",this.hasPendingBet=!1,this.insuranceBetAmount="0",this.isSplitRound=!1}async waitForAllCardsToBeIdle(){if(this.gameData.instantBetEnabled)return;await this.forceUIUpdate(),await b1(50)}accumulateBetActions(a){if(!this.betData)return;let e=new Set(this.betData.betActions.map((r)=>r.id)),i=a.betActions.filter((r)=>!e.has(r.id));this.betData={...a,betActions:[...this.betData.betActions,...i]}}async executeNextAction(a){if(!this.betData)return null;let e=await this.blackjackApi.next({betId:this.betData.id,type:a});if(!e.success)return this.showError(e.error),null;if(!this.isDemoMode&&e.data.afterBalance)this.gameData.updateBalance(S(e.data.afterBalance));return this.accumulateBetActions(e.data),e.data}onBuyInsurance=async()=>{if(this.stage!=="insurance")return;if(this.insuranceBetAmount=S(this.currentBetAmount).div(2).toString(),this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(this.insuranceBetAmount));await this.afterInsuranceDecision()};onDeclineInsurance=async()=>{if(this.stage!=="insurance")return;this.insuranceBetAmount="0",await this.afterInsuranceDecision()};afterInsuranceDecision=async()=>{if(this.betData&&d3(this.betData)){if(this.isDemoMode&&S(this.insuranceBetAmount).gt(0))this.gameData.updateBalance(S(this.gameData.balance).plus(S(this.insuranceBetAmount).mul(3)));this.revealDealerHole(),await this.finishRound()}else this.stage="player"};onHit=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.isSplitRound){this.actionBusy=!0,this.controlsLocked=!0;try{let a=this.playerHands[this.activeHandIndex];if(!a)return;let e=this.randomUICard();a.cards=[...a.cards,e],this.playerHands=[...this.playerHands],this.playDealSound();let i=`p-${this.activeHandIndex}-${a.cards.length-1}`;if(await this.waitForCardDealComplete(i),this.handBestValue(a.cards)>=21)await this.advanceSplitHand()}finally{this.controlsLocked=!1,this.actionBusy=!1}return}if(!this.betData)return;this.actionBusy=!0,this.controlsLocked=!0;try{let a=await this.executeNextAction("BLACKJACK_HIT");if(!a)return;let e=$2(a);if(!e)return;let i=e.playerCards[e.playerCards.length-1],r=this.addPlayerCard(i);if(await this.waitForCardDealComplete(r),d3(a))await this.revealDealerCards(e),await this.finishRound()}finally{this.controlsLocked=!1,this.actionBusy=!1}};onStand=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.isSplitRound){this.actionBusy=!0,this.controlsLocked=!0;try{await this.advanceSplitHand()}finally{this.controlsLocked=!1,this.actionBusy=!1}return}if(!this.betData)return;this.actionBusy=!0,this.controlsLocked=!0;try{let a=await this.executeNextAction("BLACKJACK_STAND");if(!a)return;let e=$2(a);if(!e)return;await this.revealDealerCards(e),await this.finishRound()}finally{this.controlsLocked=!1,this.actionBusy=!1}};onSplit=async()=>{if(this.stage!=="player"||this.actionBusy)return;if(this.playerHands.length>1)return;let a=this.playerHands[this.activeHandIndex];if(!a||a.cards.length!==2)return;if(this.cardValueForSplit(a.cards[0].rank)!==this.cardValueForSplit(a.cards[1].rank))return;this.actionBusy=!0,this.controlsLocked=!0;try{if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).minus(this.currentBetAmount));let[e,i]=a.cards;this.playerHands=[{cards:[e]},{cards:[i]}],this.activeHandIndex=1,this.isSplitRound=!0,this.suppressNextContentAnimations=!0,await this.forceUIUpdate(),this.suppressNextContentAnimations=!1}finally{this.controlsLocked=!1,this.actionBusy=!1}};advanceSplitHand=async()=>{if(this.activeHandIndex>0){this.activeHandIndex=this.activeHandIndex-1;return}await this.dealerPlaySplitRound(),await this.finishSplitRound()};dealerPlaySplitRound=async()=>{this.stage="dealer";let a=this.randomUICard();this.dealerCards=this.dealerCards.map((e,i)=>i===1?{...a,faceDown:!1}:e),this.playFlipSound();try{await this.waitForCardDealComplete("d-1")}catch{}while(this.handBestValue(this.dealerCards)<17){let e=this.randomUICard(),i=this.addDealerCard(e);await this.waitForCardDealComplete(i)}};finishSplitRound=async()=>{let a=S(this.currentBetAmount),e=this.handBestValue(this.dealerCards),i=e>21,r=S(0),n=!1;for(let d of this.playerHands){let c=this.handBestValue(d.cards);if(c>21)continue;if(i||c>e)r=r.plus(a.mul(2)),n=!0;else if(c===e)r=r.plus(a)}if(this.isDemoMode)this.gameData.updateBalance(S(this.gameData.balance).plus(r));let t=a.mul(this.playerHands.length),l=t.gt(0)?r.div(t).toNumber():0,o=r.gt(t),s=this.betData?.id??crypto.randomUUID();if(this.addToHistory(l,o,s),this.betData)this.updateHistoryWithBet(this.betData);if(n)this.playWinFeedback();await this.waitForAllCardsToBeIdle(),this.resultMultiplier=l,await this.ensureMinimumDisplayTime(o,300,300),this.stage="settled",this.hasPendingBet=!1,this.isSplitRound=!1,this.insuranceBetAmount="0"};handBestValue=(a)=>{let e=0,i=0;for(let r of a)if(r.rank===1)i++,e+=1;else if(r.rank>=10)e+=10;else e+=r.rank;while(i>0&&e+10<=21)e+=10,i--;return e};randomUICard=()=>{let a=Math.floor(Math.random()*13)+1,i=["diamond","spade","club","heart"][Math.floor(Math.random()*4)]??"spade";return{rank:a,suit:i}};cardValueForSplit=(a)=>a>=10?10:a;settleSideBets=(a,e)=>{if(!this.isDemoMode)return;let i=S(0),r=S(this.perfectPairsAmount),n=S(this.twentyOnePlusThreeAmount);if(r.gt(0)){let t=this.evaluatePerfectPairs(a[0],a[1]);if(t>0)i=i.plus(r.mul(t))}if(n.gt(0)){let t=this.evaluateTwentyOnePlusThree(a[0],a[1],e);if(t>0)i=i.plus(n.mul(t))}if(i.gt(0))this.gameData.updateBalance(S(this.gameData.balance).plus(i))};evaluatePerfectPairs=(a,e)=>{if(a.rank!==e.rank)return 0;if(a.suit===e.suit)return 26;let i=(r)=>r==="diamond"||r==="heart";if(i(a.suit)===i(e.suit))return 13;return 6};evaluateTwentyOnePlusThree=(a,e,i)=>{let r=[a.rank,e.rank,i.rank],n=[a.suit,e.suit,i.suit],t=n[0]===n[1]&&n[1]===n[2];if(r[0]===r[1]&&r[1]===r[2])return t?101:31;let o=[...r].sort((m,h)=>m-h),s=o[2]-o[1]===1&&o[1]-o[0]===1,d=o[0]===1&&o[1]===12&&o[2]===13,c=s||d;if(c&&t)return 41;if(c)return 11;if(t)return 6;return 0};onBetModeChange=(a)=>{this.sideBetMode=a.detail.tab==="Auto"};onPerfectPairsAmountChange=(a)=>{this.perfectPairsAmount=a.detail.value};onTwentyOnePlusThreeAmountChange=(a)=>{this.twentyOnePlusThreeAmount=a.detail.value};onCardFlip=()=>{this.playFlipSound()};waitForCardDealComplete(a){if(this.gameData.instantBetEnabled)return Promise.resolve();return new Promise((e)=>{let i=(r)=>{let n=r.detail;if(!n||n.cardId!==a)return;this.removeEventListener("blackjack-card-dealt",i),e()};this.addEventListener("blackjack-card-dealt",i),b1(2000).then(()=>{this.removeEventListener("blackjack-card-dealt",i),e()})})}get canInteract(){return this.stage==="player"&&!this.controlsLocked&&!!this.betData}get canHit(){if(!this.canInteract)return!1;if(this.isSplitRound){let a=this.playerHands[this.activeHandIndex];return!!a&&this.handBestValue(a.cards)<21}return!0}get canStand(){return this.canInteract}get canDouble(){return!1}get canSplit(){if(!this.canInteract||this.playerHands.length>1)return!1;let a=this.playerHands[this.activeHandIndex];if(!a||a.cards.length!==2)return!1;return this.cardValueForSplit(a.cards[0].rank)===this.cardValueForSplit(a.cards[1].rank)}isSpacebarDisabled=()=>{if(!this.gameData?.hotkeysOpenEnabled)return!0;return this._blackjackManualEl?.shadowRoot?.querySelector("origami-button")?.disabled??!0};handleSpacebar=()=>{if(this.isSpacebarDisabled())return;this.blackjackPlay()};isHitDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canHit||this.stage!=="player"||this.actionBusy};handleHit=()=>{if(this.isHitDisabled())return;this.onHit()};isStandDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canStand||this.stage!=="player"||this.actionBusy};handleStand=()=>{if(this.isStandDisabled())return;this.onStand()};isSplitDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||!this.canSplit||this.stage!=="player"||this.actionBusy};handleSplit=()=>{if(this.isSplitDisabled())return;this.onSplit()};isDoubleDisabled=()=>!0;isAcceptInsuranceDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||this.stage!=="insurance"};handleAcceptInsurance=()=>{if(this.isAcceptInsuranceDisabled())return;this.onBuyInsurance()};isNoInsuranceDisabled=()=>{return!this.gameData?.hotkeysOpenEnabled||this.stage!=="insurance"};handleNoInsurance=()=>{if(this.isNoInsuranceDisabled())return;this.onDeclineInsurance()};constructor(){super();this.isManualPlaying=!1;this.resultMultiplier=null;this.history=[];this.stage="idle";this.dealerCards=[];this.playerHands=[];this.activeHandIndex=0;this.controlsLocked=!1;this.suppressNextContentAnimations=!1;this.sideBetMode=!1;this.perfectPairsAmount="0";this.twentyOnePlusThreeAmount="0";new E1(this,[{key:" ",callback:this.handleSpacebar.bind(this),options:{repeat:!0,repeatInterval:200,disabled:this.isSpacebarDisabled}},{key:"q",callback:this.handleHit.bind(this),options:{disabled:this.isHitDisabled}},{key:"w",callback:this.handleStand.bind(this),options:{disabled:this.isStandDisabled}},{key:"e",callback:this.handleSplit.bind(this),options:{disabled:this.isSplitDisabled}},{key:"r",callback:()=>{},options:{disabled:this.isDoubleDisabled}},{key:"t",callback:this.handleAcceptInsurance.bind(this),options:{disabled:this.isAcceptInsuranceDisabled}},{key:"y",callback:this.handleNoInsurance.bind(this),options:{disabled:this.isNoInsuranceDisabled}}])}render(){let a=this.gameData?.mainWidth>=768,e=this.stage!=="idle"&&this.stage!=="settled",i=this.areInputsDisabled||e,r=A1(this.gameData);return Z`
|
|
15741
15741
|
<origami-game-layout style=${r} .gameType=${"BLACKJACK"} data-is-desktop=${a}>
|
|
15742
15742
|
<origami-game-sidebar
|
|
15743
15743
|
slot="control-panel"
|