Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;########################################################
- ;########################################################
- ; SETTINGS (for YOU.... yes YOU!!!)
- ;########################################################
- ;########################################################
- ;# THE DEALER HAS AN EDGE. If you win as much as you lose, all player balances will gradually decrease making the 'finish' impossible to reach.
- ;# to compensate, you can award points for draws, and reward more money for a win than you take away for a loss. The same applies for doubles.
- ;# for faster games: 200 40 20 30 0 -10 5 10 -3
- ;# more realistic game values: 150 40 20 30 -10 -25 0 0 -5
- alias -l finish return 150
- alias -l winDouble return 40
- alias -l winSingle return 20
- alias -l winBlackjack return 30
- alias -l loseSingle return -10
- alias -l loseDouble return -25
- alias -l drawSingle return 0
- alias -l drawDouble return 0
- alias -l surrender return -5
- ;# theEdge - Set to 0 to disable. Kicks players from the game after falling below -N
- alias -l theEdge return -100
- ;# Bonus payouts. N card tricks represent an auto-payout if a player's hand consists of N cards. set to 0 to disable, otherwise set to the amount which should be paid out.
- alias -l var5CardTrickPayout return 5
- alias -l var6CardTrickPayout return 10
- alias -l var7CardTrickPayout return 15
- alias -l var5Card21Payout return 20
- alias -l var6Card21Payout return 40
- alias -l var7Card21Payout return 100
- ;# House rules. 'decks' can be from 2-8. The other lines respresent rules which can be used in the game. To "activate" a rule, change the 0 to a 1.
- alias -l decks return 2
- alias -l dealerHitsOnSoft17 return 0
- alias -l doubleWith3orMoreCards return 0
- alias -l noResplitWithAces return 0
- alias -l splitAcesOneCardOnly return 0
- ;# Colors. 3 are used, each represented below. Use 2 digits, from 00-15
- alias -l color1 return 07
- alias -l color2 return 03
- alias -l color3 return 06
- ;# AI opponents. Just seperate the names by spaces, if you want to add more.
- ;# the intelligence levels correlate to the names, so Jess matches 6 and Kyle matches the last 1.
- alias -l ai return Jess Trump DeathKnight AIMaster Jerry Lacey Jonorama Degausser NotTheSun Kyle
- alias -l aiIntel return 6 9 8 10 3 5 4 7 2 1
- ;# 'statEnable' signifies whether the statistics will be recorded. 1 represents on, and 0 off
- ;# 'statDirectory' is your path to stats. there should be no slashes at the beginning or end of the path. use \ if you want to go deeper into folders
- ;# the other two aliases represent the minimum needed hands/games for a user to be displayed in the top5 lists
- alias -l statEnable return 1
- alias -l statDirectory return stats\blackjack
- alias -l statMinHands return 10
- alias -l statMinGames return 2
- ;########################################################
- ;########################################################
- ; TEXT EVENTS
- ;########################################################
- ;########################################################
- on *:TEXT:*:#:{
- if ($hget($g($chan,1))) {
- if ($hget($g($chan,1), $nick)) && ($hget($g($chan,1), $nick) != check) && (!$isAI($chan, $nick)) {
- if ($timer($+(BlackJack,$chan,DrawTimer))) {
- if ($1 == !hit) || ($1 == !card) drawCardAction $chan $nick
- elseif ($1 == !double) drawCardAction $chan $nick -d
- elseif ($1 == !stand) standAction $chan $nick
- elseif ($1 == !split) splitAction $chan $nick
- elseif ($1 == !surrender) surrenderAction $chan $nick
- }
- if ($1 == !replace) || ($1 == !drop) replaceAction $chan $nick
- }
- elseif ($istok(!join.join,$1,46)) && ($timer($+(BlackJack,$chan,JoinTimer))) addPlayer $chan $nick
- if ($1-2 == !blackjack stop) || ($1 == !stop) triggerBlackjackStop $chan -m $nick
- elseif ($1 == !abort) && ($hget($s($chan), stop)) triggerAbort $1-
- elseif ($1 == !repair) && ($nick isop $chan) triggerRepair $chan
- }
- elseif ($1 == !blackjack) triggerBlackjack $1-
- if ($1 == !stat) triggerStats stat $1-
- elseif ($1 == !coins) triggerStats coins $1-
- elseif ($1 == !commands) triggerCommands $1-
- elseif ($1 == !top5) triggerTop5 $1-
- elseif ($1 == !compare) triggerCompare $1-
- elseif ($1 == !ai) .notice $nick List of computer opponents: $listAI
- }
- ;########################################################
- ;########################################################
- ; LITTLE ALIASES
- ;########################################################
- ;########################################################
- alias -l suits return ♣♠♥♦
- alias -l cardify return $replace($1-,10,E,11,J,12,Q,13,K,1,A,E,10)
- alias -l bracks return $+($chr(40),$1-,$chr(41))
- alias -l cb1 return $+(,$color1,,$1-,)
- alias -l cb2 return $+(,$color2,,$1-,)
- alias -l cb3 return $+(,$color3,,$1-,)
- alias -l c1 return $+(,$color1,$1-,,)
- alias -l c2 return $+(,$color2,$1-,,)
- alias -l c3 return $+(,$color3,$1-,,)
- alias -l f { verif | return $+(",$mircdir,$statDirectory,\,$1,.ini,") }
- alias -l l { verif | return $+(",$mircdir,$statDirectory,\,$1,.txt,") }
- alias -l getStat return $iif($readini($1,$2,$3),$ifmatch,0)
- alias -l fs filter -ffctue 1 32 $1- $1-
- alias -l top5 return cph.wr.cpg.gr.h2h
- alias -l g return $+(bj_game,_,$1,_,$2)
- alias -l a return $+(bj_action,_,$1,_,$2)
- alias -l d return $+(bj_deck,_,$1)
- alias -l w return $+(bj_score,_,$1)
- alias -l s return $+(bj_settings,_,$1)
- alias -l hfreedom {
- if ($hget($g($1,1))) hfree $g($1,1)
- if ($hget($a($1,1))) hfree $a($1,1)
- if ($hget($d($1))) hfree $d($1)
- if ($hget($w($1))) hfree $w($1)
- if ($hget($s($1))) hfree $s($1)
- hfreedomMirror $1
- }
- alias -l hfreedomMirror {
- var %x = 2
- while ($hget($g($1,%x))) {
- hfree $hget($g($1,%x))
- hfree $hget($a($1,%x))
- inc %x
- }
- }
- alias -l verif {
- if (!isdir($+(",$mircdir,$statDirectory,\,"))) {
- var %x = 1
- while (%x <= $numtok($statDirectory,92)) {
- if (!isdir($+(",$mircdir,$gettok($statDirectory,$+(1-,%x),92),\,"))) .mkdir $+(",$mircdir,$gettok($statDirectory,$+(1-,%x),92),\,")
- inc %x
- }
- }
- }
- ;########################################################
- ;########################################################
- ; GAME TRIGGERS
- ;########################################################
- ;########################################################
- alias triggerBlackjack {
- if (!$2) blackjackStart $chan $nick
- elseif ($istok(1.2.3.4.5.6.7,$2,46)) blackjackStart $chan $nick $2
- elseif ($filterAI($2-)) blackjackStart $chan $nick $ifmatch
- else {
- .notice $nick Invalid parameter. To start a game with AI opponents ready to join, type !blackjack N. N can be a number from 1-7
- .notice $nick You can also specify certain AI opponents you want in the game, for example: !blackjack AIMaster Degausser Trump
- }
- }
- alias triggerBlackjackStop {
- if ($3 !isop $1) .notice $3 You must be an operator to stop a game!
- else {
- if ($cardsRemaining($1)) {
- if (!$hget($s($1), stop)) stopAction $1 $3
- else .notice $3 The game will end after the current round!
- }
- elseif ($timer($+(BlackJack,$1,JoinTimer))) {
- $+(.timerBlackJack,$chan,*) off
- if ($2 == -m) msg $chan $cb3(Blackjack Race) has been stopped by $c3($3)
- hfreedom $1
- }
- else .notice $3 You can't perform this action now!
- }
- }
- alias -l triggerAbort {
- if ($timer($+(BlackJack,$chan,DrawTimer))) && ($nick isop $chan) abortAction $chan $nick
- elseif ($nick !isop $chan) .notice $nick You must be an operator to abort the games termination!
- else .notice $nick You can't perform that action now
- }
- alias -l triggerStats {
- if (!$3) .notice $nick Invalid parameters. Specify a name. The -a flag can be used to specify an AI character like: $+(!,$1) -a Degausser
- elseif (((!$4) && (!$userStats($3))) || (($4) && (!$userStats($4)))) || (($1 == coins) && ((!$userStats($4).user) && (!$userStats($3).user))) .notice $nick Sorry, I haven't heard that name before
- else {
- var %s
- if (!$4) %s = $chan -u $3
- elseif ($3 == -a) && ($userStats($4).ai) && ($1 != coins) %s = $chan -a $4
- else %s = $chan -u $4
- if ($1 == stat) displayStats %s
- elseif ($1 == coins) displayCoins %s
- }
- }
- alias -l triggerCommands {
- if ($istok(!ai.ai,$2,46)) .notice $nick This will send you a notice with a list of AI opponents you're able to play against
- elseif ($istok(!stat.stat,$2,46)) .notice $nick These will send a message with user statistics for the specified name. You can specify the -a flag to define AI opponents, such as: !stat -a Degausser
- elseif ($istok(!coins.coins,$2,46)) .notice $nick These will send a message with total user coins. Define a user (not AI) by simply specifying a username.
- elseif ($istok(!commands.commands,$2,46)) .notice $nick This will notice you a list of commands.... silly!
- elseif ($istok(!compare.compare,$2,46)) {
- .notice $nick Compare two players based on their stats in comparison to all other players. You can specify two names, and optionally a -a or -u before the names to specify AI or user
- .notice $nick For example, !compare Anne -a Degausser. Example 2: !compare -a Kyle -u Sarah
- }
- elseif ($istok(!blackjack.blackjack,$2,46)) {
- .notice $nick This command will start a game. You can specify the number of AI opponents ready to join by typing !blackjack N, where N is a number from 1-7
- .notice $nick You can also specify specific players by using their names (type !ai for a list) like so: !blackjack Degausser NotTheSun
- .notice $nick If a game is active, channel operators can end the game by typing: !blackjack stop
- }
- elseif ($istok(!replace.replace,$2,46)) .notice $nick Specifically an in-game command to be used if you don't want to play anymore. The game will be counted as a loss
- elseif ($istok(!top5.top5,$2,46)) {
- .notice $nick Displays lists of top 5 players. You can specify a -a or -u flag to view distinct AI or user lists. You can also specify the type of list from: $replace($top5,$chr(46),$chr(32))
- .notice $nick Example 1: !top5 -u wr :: Example 2: !top5 cph
- }
- elseif ($istok(!abort.abort,$2,46)) {
- .notice $nick Allows you to abort the !blackjack stop operation, before a hand finishes
- }
- elseif ($istok(!stop.stop,$2,46)) {
- .notice $nick Stops the entire round. Does not apply game based statistics
- }
- elseif ($istok(!repair.repair,$2,46)) {
- .notice $nick Repairs the game if you're having trouble starting a new game
- }
- else {
- .notice $nick Helpful commands - IN GAME: !hit !stand !double !split !surrender !replace !stop !abort !repair - OUTSIDE: !blackjack !commands !ai !stat !coins !top5 !compare
- .notice $nick Type !commands command for more information on some commands, for example: !commands ai
- }
- }
- alias -l triggerTop5 {
- var %t = $gettok($top5,1,46)
- if (!$3) {
- if ($istok(-a.-u,$2,46)) displayTop5 $chan $2 %t
- else displayTop5 $chan -n $iif($istok($top5,$2,46),$2,%t)
- }
- elseif ($left($2,1) == $chr(45) && $len($2) == 2) displayTop5 $chan $iif($istok(-a.-u,$2,46),$2,-n) $iif($istok($top5,$3,46),$3,%t)
- elseif ($2) displayTop5 $chan -n $iif($istok($top5,$2,46),$2,%t)
- else displayTop5 $chan -n %t
- }
- alias -l triggerCompare {
- if ($0 == 3) {
- if ($userStats($2)) && ($userStats($3)) displayCompare -u $2 -u $3 $chan
- else .notice $nick One of more of the specified users could not be found
- }
- elseif ($0 == 5) {
- if ($userStats($3)) && ($userStats($5)) displayCompare $iif($2 == -a,-a,-u) $3 $iif($4 == -a,-a,-u) $5 $chan
- else .notice $nick One of more of the specified users could not be found
- }
- elseif ($0 < 3) .notice $nick You have to specify two users to compare them. Type !compare player1 player2
- elseif ($0 > 5) .notice $nick You've specified to many parameters! To specify users or AI, type: !compare -u user -a AIname
- else {
- if ($userStats($3)) {
- if ($userStats($4)) displayCompare $iif($2 == -a,-a,-u) $3 -u $4 $chan
- elseif ($userStats($2)) displayCompare -u $2 $iif($4` == -a,-a,-u) $3 $chan
- }
- elseif ($userStats($2)) && ($userStats($4)) displayCompare -u $2 $iif($3 == -a,-a,-u) $4 $chan
- else .notice $nick One or more of the specified users are not recognized
- }
- }
- alias -l triggerRepair {
- if (!$timerCheck($1)) {
- msg $1 $cb3(Blackjack Race) was found in a $c2(broken state) $+ , and has been $c3(repaired)
- hfreedom $1
- }
- }
- alias -l timerCheck {
- if ($timer($+(blackjack,$1,DrawTimer)).secs isnum) return $true
- if ($timer($+(blackjack,$1,JoinTimer)).secs isnum) return $true
- if ($timer($+(blackjack,$1,AutoTimer)).secs isnum) return $true
- if ($timer($+(blackjack,$1,RepeatGame)).secs isnum) return $true
- if ($timer($+(blackjack,$1,NextRound)).secs isnum) return $true
- if ($timer($+(blackjack,$1,AnnounceWinner)).secs isnum) return $true
- if ($timer($+(blackjack,$1,EndGame)).secs isnum) return $true
- return $false
- }
- ;########################################################
- ;########################################################
- ; ACTIONS
- ;########################################################
- ;########################################################
- alias -l drawCardAction {
- if ($numerifyTotal($cardTotal($1,-u,$2).hard) < 21) && (!$istok(double.stand, $hget($a($1,1), $2), 46)) {
- var %d = $iif(d isin $3,$true,$false)
- if ((%d) && ($numtok($hget($g($1,1), $2), 32) > 2)) && (!$doubleWith3orMoreCards) .notice $nick You can only double with the first two cards!
- else {
- var %card = $drawCard($1), %z
- hadd $g($1,1) $2 $hget($g($1,1), $2) %card
- %z = $numerifyTotal($cardTotal($1,-u,$2).hard)
- if (%z > 20) && (!%d) hadd $a($1,1) $2 stand
- else hadd $a($1,1) $2 $iif(%d,double,hit)
- msg $1 $c2($2) $iif(%d,doubled,hit) and drew: $cardflair(%card) :: Current hand: $cardflair($hget($g($1,1), $2)) $bracks($cardTotal($1,-u,$2))
- if (%z == 21) && ($($+($chr(36),var,$numtok($hget($g($1,1),$2),32),Card21Payout),2)) {
- hinc $w($1) $2 $ifmatch
- msg $1 $c1($2) has hit a $cb3($numtok($hget($g($1,1),$2),32) Card 21) and is rewarded $c2($ifmatch coins)
- }
- elseif (%z < 21) && ($($+($chr(36),var,$numtok($hget($g($1,1),$2),32),CardTrickPayout),2)) {
- hinc $w($1) $2 $ifmatch
- msg $1 $c1($2) has hit a $cb3($numtok($hget($g($1,1),$2),32) Card Trick) and is rewarded $c2($ifmatch coins)
- }
- if ((%d) || (%z > 20)) {
- hinc $s($1) completed 1
- if ($splitHand($1,$2)) createSplits $1 $2 $ifmatch
- elseif ($actionsComplete($1)) checkWinner $1 -f
- }
- }
- }
- else .notice $2 You can't draw anymore cards!
- }
- alias -l standAction {
- if ($numerifyTotal($cardTotal($1,-u,$2).hard) < 21) && (!$istok(double.stand, $hget($a($1,1), $2), 46)) {
- hadd $a($1,1) $2 stand
- hinc $s($1) completed 1
- msg $1 $c2($2) stands with the hand: $cardflair($hget($g($1,1), $2)) $bracks($cardTotal($1,-u,$2))
- if ($splitHand($1,$2)) createSplits $1 $2 $ifmatch
- elseif ($actionsComplete($1)) checkWinner $1 -f
- }
- else .notice $2 You can't perform this action!
- }
- alias -l splitAction {
- var %hand = $hget($g($1,1),$2)
- if ($cardPair(%hand)) && (!$istok(double.stand,$hget($a($1,1),$2),46)) {
- if ($noResplitWithAces) && ($gettok($gettok(%hand,1,32),2,95) == A) && ($hget($g($1,2),$2)) .notice $2 You can't split Aces more than once!
- else {
- msg $1 $c2($2) splits the hand: $cardflair($hget($g($1,1),$2)) $bracks($cardTotal($1,-u,$2))
- hadd $newSplitTable($1,$2) $2 $gettok($hget($g($1,1),$2),2,32)
- hadd $g($1,1) $2 $gettok($hget($g($1,1), $2),1,32)
- hinc $s($1) actions 1
- createSplits $1 $2
- }
- }
- else .notice $2 You can't perform this action!
- }
- alias -l surrenderAction {
- if ($numtok($hget($g($1,1), $2), 32) == 2) && ($numerifyTotal($cardTotal($1,-u,$2).hard) < 21) && (!$hget($m($1,1),$2)) && (!$istok(double.stand, $hget($a($1,1), $2), 46)) {
- msg $1 $c2($2) surrenders their hand: $cardflair($hget($g($1,1), $2)) $bracks($cardTotal($1,-u,$2)) and $c1($iif($surrender > 0,wins,loses) $abs($surrender) $iif($abs($surrender) == 1,coin,coins))
- hdel $a($1,1) $2
- hadd $g($1,1) $2 check
- hinc $w($1) $2 $surrender
- hinc $s($1) completed 1
- processHandStats $1 $2 total 1
- processHandStats $1 $2 lose 1
- processHandStats $1 $2 coins $surrender
- if ($actionsComplete($1)) checkWinner $1 -f
- }
- else .notice $2 You can't perform this action!
- }
- alias -l replaceAction {
- if (!$istok($hget($s($1),replace),$nick,32)) {
- hadd $s($1) replace $hget($s($1), replace) $2
- msg $1 $cb3($2) $c3(will be replaced after the next round!)
- }
- }
- alias -l stopAction {
- hadd $s($1) stop $2
- msg $1 $cb3(Blackjack Race) $c3(will be stopped after the next round!)
- }
- alias -l abortAction {
- if ($hget($s($1),stop)) hdel $s($1) stop
- msg $1 $cb3(Blackjack Race) $c3(will no longer be stopped after this round!)
- }
- alias -l actionsComplete {
- if ($hget($s($1), completed) == $hget($s($1), actions)) return $true
- return $false
- }
- ;########################################################
- ;########################################################
- ; SPLIT TABLES
- ;########################################################
- ;########################################################
- alias -l newSplitTable {
- var %x = 2
- while (%x) {
- if (!$hget($g($1, %x))) {
- hmake $g($1, %x) 1
- hmake $a($1, %x) 1
- $+(.timerBlackJack,$1,DrawTimer) -o 1 $calc($timer($+(BlackJack,$1,DrawTimer)).secs + 10) checkWinner $1
- }
- if (!$hget($g($1, %x), $2)) return $g($1,%x)
- inc %x
- }
- }
- alias -l splitHand {
- var %x = 2
- while ($hget($g($1,%x),$2)) {
- if ($numtok($ifmatch,32) == 1) return %x
- inc %x
- }
- return $false
- }
- ;########################################################
- ;########################################################
- ; THE EDGE
- ;########################################################
- ;########################################################
- alias -l offTheEdge {
- if ($theEdge < 0) {
- var %x = 1, %n = $hget($w($1),0).item, %p, %s, %e = $v1, %count = 1, %countvar, %minimum, %a
- while (%x <= %n) {
- %s = $hget($w($1),%x).data
- if (!$len(%countvar)) %countvar = %s
- elseif (%countvar == %s) inc %count
- if (%s > %minimum) || (!$len(%minimum)) %minimum = %s
- inc %x
- }
- if (%count != %n) {
- if (%minimum > %e) %minimum = %e
- %x = 1
- while ($len($hget($w($1),%x).item)) {
- %p = $hget($w($1),%x).item
- %s = $hget($w($1),%p)
- if (%s < %minimum) {
- %a = $iif($isAI($1,%p),-a,-u)
- msg $1 $cb2(%p) has tipped over $c3(The Edge) and fallen into obscurity! $cb3(Goodbye %p $+ !)
- preProcessHandStats $1 %p %a lose
- if (%a == -u) coinSave $1 %p
- hdel $g($1,1) %p
- hdel $w($1) %p
- top5PreWrite $1 %p %a
- }
- else {
- if (%s == %minimum) msg $1 $c2(%p) is on $cb3(The Edge) with $+(04,%s,) coins!
- inc %x
- }
- }
- }
- }
- }
- ;########################################################
- ;########################################################
- ; ARTIFICIAL INTELLIGENCE
- ;########################################################
- ;########################################################
- alias -l getIntel return $iif($findtok($ai,$1,1,32) <= $numtok($aiIntel,32),$iif($gettok($aiIntel,$findtok($ai,$1,1,32),32) isnum 1-10, $v1, 5),5)
- alias -l isAI return $istok($hget($s($1), ai),$2,32)
- alias -l listAI {
- var %x = 1, %y = $numtok($ai,32), %r, %u
- while (%x <= %y) {
- %u = $gettok($ai,%x,32)
- %r = %r $c2(%u) $c1($bracks($getIntel(%u))) /
- inc %x
- }
- return $left(%r,-1)
- }
- alias -l filterAI {
- var %x = 1, %y = $numtok($1-,32), %return, %a
- while (%x <= %y) {
- %a = $gettok($1-,%x,32)
- if ($istok($ai,%a,32)) && (!$istok(%return,%a,32)) %return = $addtok(%return,%a,32)
- inc %x
- }
- return %return
- }
- alias -l generateAI {
- var %x = 1, %y = $numtok($ai,32), %s, %u, %n = $iif($2- isnum 1-7,$iif($2- <= $numtok($ai,32),$2-,$numtok($ai,32)),$numtok($2-,32))
- while (%x <= %n) {
- if ($2- isnum 1-7) {
- while ($istok(%s,%u,32) || !%u) {
- %u = $gettok($ai,$rand(1,$numtok($ai,32)),32)
- }
- %s = %s %u
- }
- elseif ($istok($ai,$gettok($2-,%x,32),32)) %u = $gettok($2-,%x,32)
- else %u = $null
- if (%u) $+(.timerBlackJack,$1,JoinTimer,%u) -o 1 $rand(2,28) addPlayer $1 %u -a
- inc %x
- }
- }
- alias -l rollAI {
- var %x = 1, %ai = $hget($s($1), ai), %y = $numtok(%ai, 32), %player
- while (%x <= %y) {
- %player = $gettok(%ai,%x,32)
- if (!$istok(double.stand, $hget($a($1,1), %player), 46)) timeAI $1 %player
- inc %x
- }
- }
- alias -l performAIAction {
- if ($timer($+(BlackJack,$1,DrawTimer))) {
- var %action = stand, %intel = $getIntel($2), %dealer = $cardTotal($1, -d).hard, %hard = $cardTotal($1,-u,$2).hard, %soft = $cardTotal($1,-u,$2).soft, %d = $iif($numtok($hget($g($1,1), $2), 32) == 2 || $doubleWith3orMoreCards,1,0), %s = $iif($cardPair($hget($g($1,1),$2)),$ifmatch,0)
- if (%s == A) && ($hget($g($1,2),$2)) && ($noResplitWithAces) %s = 0
- if (%hard < 12) || (%soft < 8) %action = hit
- if (%intel > 1) && (%hard < 17) %action = hit
- if (%intel > 1) && (%s) && (%soft == 2) %action = split
- if (%intel > 2) && (%dealer < 11) && (%hard isnum 10-11) %action = double
- if (%intel > 2) && (%dealer > 6) && ((%soft > 7) && (%hard > 13)) %action = stand
- if (%intel > 3) && (%dealer isnum 2-6) && (%hard > 11) && (%soft > 7) %action = stand
- if (%intel > 3) && (%s) && (%hard == 16) && (%dealer < 11) %action = split
- if (%intel > 4) && (%dealer isnum 2-3) && (%hard < 14) && (!$istok(double.split,%action,46)) %action = hit
- if (%intel > 4) && (%dealer > 6) && ((%hard < 15) || (%soft < 8) && (!$istok(double.split,%action,46))) %action = hit
- if (%intel > 5) && (%dealer == 9) && (%soft < 9) && (%action != %split) %action = hit
- if (%intel > 5) && (%dealer isnum 10-11) && (%soft == 8) %action = hit
- if (%intel > 5) && (%s) && (%dealer isnum 3-6) && ($istok(4.6.12.14.18,%hard,46)) %action = split
- if (%intel > 6) && (%dealer == 10) && (%hard isnum 10-11) %action = hit
- if (%intel > 6) && (%dealer == 9) && (%hard isnum 10-11) %action = double
- if (%intel > 6) && (%dealer == 11) && (%hard < 17) && (%soft > 2) %action = hit
- if (%intel > 7) && (%dealer == 3) && (%hard == 13) && (%soft == 13) %action = stand
- if (%intel > 7) && (%dealer > 7) && (%hard isnum 12-16) && (!$istok(double.split,%action,46)) %action = hit
- if (%intel > 7) && (%s) && (%dealer == 2) && (%hard isnum 4-6) %action = split
- if (%intel > 7) && (%s) && (%dealer == 7) && ($istok(4.6.14.16,%hard,46)) %action = split
- if (%intel > 8) && (%dealer isnum 3-6) && (%hard == 9) %action = double
- if (%intel > 8) && (%dealer isnum 5-6) && (%soft isnum 2-8) && (%hard > 11) %action = $iif(!%d && %soft == 8,stand,double)
- if (%intel > 8) && (%dealer == 7) && (%hard isnum 15-16) && (%action != %split) %action = hit
- if (%intel > 8) && (%s) && (%hard == 18) && ($istok(4.5.6.8.9,%dealer,46)) %action = split
- if (%intel > 9) && (%dealer == 4) && (%soft isnum 5-8) && (%hard > 11) && (%action != split) %action = $iif(!%d && %soft == 8,stand,double)
- if (%intel > 9) && (%dealer == 3) && (%soft isnum 7-8) && (%hard > 11) && (%action != split) %action = $iif(!%d && %soft == 8,stand,double)
- if (%action == hit) || ((%action == double) && (!%d)) drawCardAction $1 $2
- elseif (%action == double) drawCardAction $1 $2 -d
- elseif (%action == split) splitAction $1 $2
- else standAction $1 $2
- if (!$istok(double.stand, $hget($a($1,1), $2), 46)) timeAI $1 $2
- }
- }
- alias -l timeAI {
- $+(.timerBlackJack,$1,DrawTimer,$2) -o 1 $rand(2,7) performAIAction $1 $2
- }
- ;########################################################
- ;########################################################
- ; SHOE MANAGEMENT
- ;########################################################
- ;########################################################
- alias -l createDeck {
- var %i = 1, %d = $calc($hget($s($1), decks) * 52)
- while (%i <= %d) {
- hadd $d($1) %i 1
- inc %i
- }
- }
- alias -l cardsRemaining return $hget($d($1), 0).item
- alias -l drawCard {
- if (!$cardsRemaining($1)) checkShuffle $1
- var %r = $rand(1,$cardsremaining($1)), %t = $hget($d($1), %r).item
- hdel $d($1) %t
- return $+($mid($suits,$calc((%t % 4) + 1),1),_,$cardify($calc((%t % 13) + 1)))
- }
- ;########################################################
- ;########################################################
- ; GAME FLOW
- ;########################################################
- ;########################################################
- alias -l blackjackStart {
- hfreedom $1
- hmake $g($1,1) 1
- hmake $a($1,1) 1
- hmake $d($1) $floor($calc(($iif($decks isnum 1-8,$v1,2) * 52) / 10))
- hmake $w($1) 1
- hmake $s($1) 1
- hadd $s($1) decks $iif($decks isnum 1-8,$v1,2)
- hadd $s($1) stats $iif($statEnable,1,0)
- msg $1 $c2($2) has started a game of $cb3(Blackjack Race!) Type $c2(!join) to join the game, you have $c1(30 seconds!)
- $+(.timerBlackJack,$1,JoinTimer) -o 1 30 startGame $1
- if ($3) generateAI $1 $3-
- }
- alias -l addPlayer {
- if (!$hget($g($1,1), $2)) {
- hadd $g($1,1) $2 check
- hadd $w($1) $2 0
- if ($3) && (a isin $3) hadd $s($1) ai $iif($hget($s($1), ai),$ifmatch $2,$2)
- msg $1 $c2($2) $+ $iif(($3) && (a isin $3),$+($chr(32),$bracks(AI level $getIntel($2)))) has joined the game! $c1($players($1)) players joined! $iif($hget($g($1,1), 0).item < 7 && $timer($+(BlackJack,$1,JoinTimer)).secs > 1,You've $c1($timer($+(BlackJack,$1,JoinTimer)).secs) seconds left to join!)
- if ($hget($g($1,1), 0).item > 6) startGame $1 -f
- }
- }
- alias -l startGame {
- $+(.timerBlackJack,$1,JoinTimer*) off
- if (!$players($1)) {
- msg $1 Nobody has joined the game. $c2(1 player) is required! Turning off.
- blackjackStop $1 -f
- }
- else {
- if ($players($1) == 1) {
- while ($players($1) < 2) {
- if (($isAI($1, $hget($g($1,1), 1).item)) && ($numtok($ai,32) < 2)) || (!$ai) addPlayer $1 $+(Agent,$rand(11111,99999)) -a
- else addPlayer $1 $gettok($ai,$rand(1,$numtok($ai,32)),32) -a
- }
- }
- hadd $s($1) original_players $players($1)
- createDeck $1
- var %text = The aim is to win $cb1($finish coins) from the $c2(Dealer) before everyone else. Bet amounts are in units of $winSingle $+ , $cb3($iif($hget($s($1), decks) > 1,$v1 decks,1 deck)) in use. Get ready...
- if ($2) && (f isin $2) msg $1 There are a maximum of $c1($players($1) players!) %text
- else msg $1 $c1(Time is up!) There are $c1($players($1) players!) %text
- $+(.timerBlackJack,$1,RepeatGame) -o 1 10 startRound $1
- }
- }
- alias -l startRound {
- createDefaults $1
- if ($actionsComplete($1)) $+(.timerBlackJack,$1,AutoTimer) -o 1 2 checkWinner $1 -f
- else {
- $+(.timerBlackJack,$1,DrawTimer) -o 1 30 checkWinner $1
- if ($hget($s($1), ai)) rollAI $1
- }
- }
- alias -l createDefaults {
- var %x = 1, %p = $players($1), %player, %actions
- hadd $s($1) dealer $drawCard($1)
- hadd $s($1) actions $hget($g($1,1),0).item
- hadd $s($1) completed 0
- while (%x <= %p) {
- %player = $hget($g($1,1), %x).item
- hadd $g($1,1) %player $drawCard($1) $drawCard($1)
- %actions = $iif($numerifyTotal($cardTotal($1,-u,%player).hard) < 21,hit,stand)
- hadd $a($1,1) %player %actions
- if (%actions == stand) hinc $s($1) completed 1
- msg $1 $c2($+(%player,:)) Your cards are: $cardflair($hget($g($1,1), %player)) :: Total: $bracks($cardTotal($1,-u,%player)) $iif(%actions == hit,:: You can: !hit !stand !double $+ $iif($cardPair($hget($g($1,1), %player)),$+($chr(32),!split))) $+ $iif(%actions == hit,$+($chr(32),!surrender)))
- inc %x
- }
- msg $1 The $cb2(Dealer) is showing: $cardflair($hget($s($1), dealer))
- }
- alias -l createSplits {
- if ($3) {
- var %temp = $hget($g($1,1),$2)
- hadd $g($1,1) $2 $hget($g($1,$3),$2)
- hadd $g($1,$3) $2 %temp
- hadd $a($1,$3) $2 $hget($a($1,1),$2)
- }
- hadd $g($1,1) $2 $hget($g($1,1),$2) $drawCard($1)
- var %one = $iif(($splitAcesOneCardOnly) && ($gettok($gettok($hget($g($1,1),$2),1,32),2,95) == A),1,0), %actions = $iif($numerifyTotal($cardTotal($1,-u,$2).hard) < 21 && !%one,hit,stand)
- hadd $a($1,1) $2 %actions
- msg $1 $c2($+($2,:)) Your cards are: $cardflair($hget($g($1,1), $2)) :: Total: $bracks($cardTotal($1,-u,$2)) $iif(%actions == hit && !%one,:: You can: !hit !stand !double $+ $iif($cardPair($hget($g($1,1), $2)) && (($cardPair($hget($g($1,1), $2)) != A) || (!$noResplitWithAces)),$+($chr(32),!split)))
- if (%actions == stand) {
- hinc $s($1) completed 1
- if ($splitHand($1,$2)) forwardSplitter $1 $2 $splitHand($1,$2)
- elseif ($actionsComplete($1)) checkWinner $1 -f
- }
- }
- alias -l forwardSplitter {
- createSplits $1-
- }
- alias -l blackjackStop {
- if ($hget($s($1),stats)) {
- var %x = 1, %f, %u, %p = $players($1), %w, %winner = $3
- while ($hget($g($1,1), %x).item) {
- %u = $ifmatch
- %f = $iif($isAI($1,%u),-a,-u)
- %w = $iif(%winner && ($2 != -f),$iif(%winner == %u,win,lose),draw)
- preProcessHandStats $1 %u %f %w
- top5PreWrite $1 %u %f
- if (%f == -u) coinSave $1 %u
- inc %x
- }
- top5Sort
- }
- hfreedom $1
- }
- ;########################################################
- ;########################################################
- ; POST HAND
- ;########################################################
- ;########################################################
- alias -l checkWinner {
- $+(.timerBlackJack,$1,DrawTimer,*) off
- var %dealer = $dealerOption($1)
- dealerDraw $1 %dealer
- roundDisplay $1 %dealer $iif($2,$2)
- }
- alias -l roundDisplay {
- var %t = $hget($s($1), dealer), %win = $getWinner($1).win, %draw = $getWinner($1).draw, %lose = $getWinner($1).lose, %finished = $cb1($iif(f isin $3,All hands are finished!,Time is up!))
- var %displaywin = $formatPlayers($1, %win).win, %displaylose = $formatPlayers($1, %lose).lose, %displaydraw = $formatPlayers($1, %draw).draw
- if ($istok(1.2,$2,46)) msg $1 %finished The $cb2(Dealer) shows $cardflair($gettok(%t,1,32)) and $iif($2 = 2,draws the following cards:,drew the card:) $cardflair($gettok(%t,2-,32)) :: Total: $cb2($cardTotal($1, -d).hard)
- elseif ($2 == 0) msg $1 %finished Everyone went $c1(bust) so the $cb2(Dealer) wins
- elseif ($2 == 4) msg $1 %finished Everyone $c1(surrendered) so the $cb2(Dealer) doesn't draw cards
- else msg $1 %finished The $cb2(Dealer) can't make $c1(Blackjack) so doesn't draw cards
- if (%win) msg $1 $c1($iif($numtok(%win, 32) != 1,$v1 players,%win)) beat the dealer $+ $iif($numtok(%win, 32) != 1,: %displaywin,: $gettok(%displaywin,2-,32))
- if (%draw) msg $1 $c1($iif($numtok(%draw, 32) != 1,$v1 players,%draw)) managed to draw $+ $iif($numtok(%draw, 32) != 1,: %displaydraw,: $gettok(%displaydraw,2-,32))
- if (!%win) && (!%draw) && (%lose) && ($istok(1.2,$2,46)) msg $1 The $cb2(Dealer) beat everyone with: $cardflair(%t) :: Total: $cb2($cardTotal($1,-d).hard)
- $+(.timerBlackJack,$1,nextRound) -o 1 2 nextRound $1
- }
- alias -l checkShuffle {
- var %r = $cardsRemaining($1)
- if (%r < $calc(($players($1) + 1) * 7)) {
- msg $1 $cb3(The cards are getting shuffled and reloaded) $bracks($+($round($calc((%r / ($hget($s($1), decks) * 52)) * 100),2),$chr(37)) density)
- createDeck $1
- }
- else msg $1 $cb3(%r cards) remain in the shoe $bracks($+($round($calc((%r / ($hget($s($1), decks) * 52)) * 100),2),$chr(37)) density)
- }
- alias -l nextRound {
- msg $1 Current scores: $allScores($1)
- offTheEdge $1
- if ($overallWinner($1)) {
- var %winner = $ifmatch, %coins = $hget($w($1), %winner)
- $+(.timerBlackJack,$1,announceWinner) -o 1 2 msg $1 Okay we have an $cb3(overall winner.) $cb2(%winner) wins the game, finishing with $c1(%coins coins!)
- $+(.timerBlackJack,$1,endGame) -o 1 4 blackjackStop $1 -m %winner
- }
- elseif ($hget($s($1), stop)) {
- $+(.timerBlackJack,$1,announceStop) -o 1 2 msg $1 $cb3(Blackjack Race) was set to be stopped by $c2($hget($s($1), stop)) and has been terminated
- $+(.timerBlackJack,$1,endGame) -o 1 4 blackjackStop $1 -f
- }
- else {
- hdel -w $a($1,1) *
- hfreedomMirror $1
- $+(.timerBlackJack,$1,ShuffleTimer) -o 1 5 checkShuffle $1
- if ($hget($s($1),replace)) $+(.timerBlackJack,$1,ReplaceUser) -o 1 10 replaceUser $1
- $+(.timerBlackJack,$1,RepeatGame) -o 1 12 startRound $1
- }
- }
- alias -l replaceUser {
- var %x = 1, %u = $hget($s($1),replace), %y = $numtok(%u,32), %user, %a
- hdel $s($1) replace
- while (%x <= %y) {
- %user = $gettok(%u,%x,32)
- if ($hget($g($1,1), %user)) {
- while (!%a) || ($hget($g($1,1), %a)) {
- %a = $iif($rand(1,20) == 1,$+($chr(74),$chr(109),m,$chr(105),$chr($+(10,1))),$+(Agent,$rand(10000,99999)))
- }
- preProcessHandStats $1 %user -u lose
- top5PreWrite $1 %user -u
- coinSave $1 %user
- hadd $g($1,1) %a $hget($g($1,1),%user)
- hadd $w($1) %a $hget($w($1),%user)
- hdel $g($1,1) %user
- hdel $w($1) %user
- hadd $s($1) ai $iif($hget($s($1), ai),$ifmatch %a,%a)
- msg $1 $cb3(%a) replaces $c2(%user) and joins the game!
- }
- inc %x
- }
- }
- ;########################################################
- ;########################################################
- ; CARD FUNCTIONS
- ;########################################################
- ;########################################################
- alias -l numerifyTotal {
- if ($1- == TOO MANY) return 30
- if ($1- == BLACKJACK) return 22
- return $1-
- }
- alias -l cardflair {
- tokenize 32 $1-
- var %x = 1 ,%s ,%d
- while ($eval($+($,%x),2)) {
- %d = $remove($ifmatch,_)
- %s = %s $iif($left(%d,1) isin $left($suits,2),%d,$+(04,%d,))
- inc %x
- }
- return %s
- }
- alias -l cardPair {
- if ($gettok($gettok($1-,1,32),2,95) == $gettok($gettok($1-,2-,32),2-,95)) return $v1
- return $false
- }
- alias -l cardTotal {
- var %s = $iif($2 == -u,$hget($g($1,1), $3),$iif($2 == -d,$hget($s($1), dealer),$2-)), %x = 1, %c = $numtok(%s, 32), %return = 0, %n, %soft = 0
- while (%x <= %c) {
- %n = $replace($gettok($gettok(%s,%x,32),2,95),A,1,J,10,Q,10,K,10)
- inc %return %n
- if (%n == 1) && (!%soft) && (%return < 12) inc %soft
- elseif (%soft) && (%return > 11) dec %soft
- if (%return > 21) return TOO MANY
- inc %x
- }
- if (%soft) {
- if (%return == 11) return $iif(%x == 3,BLACKJACK,21)
- if (!$prop) return $+(%return,/,$calc(%return + 10))
- if ($prop == hard) return $calc(%return + 10)
- }
- return %return
- }
- alias -l formatPlayers {
- var %x = 1, %y = $numtok($2-,32), %u, %return, %split = 1, %hand, %i, %c, %d
- while (%x <= %y) {
- %u = $gettok($2-,%x,32)
- %hand = $hget($g($1,%split), %u)
- if ($dealerVS($1, %hand) == $prop) {
- if (!%i) { %return = %return %u $+ : $bracks($cardflair(%hand)) / | %i = 1 }
- else %return = $left(%return,-1) $bracks($cardflair(%hand)) /
- processHandStats $1 %u total 1 $iif($isAI($1, %u),-a)
- processHandStats $1 %u $prop 1 $iif($isAI($1, %u),-a)
- if ($prop == win) && ($numerifyTotal($cardTotal($1, %hand).hard) == 22) {
- hinc $w($1) %u $winBlackjack
- processHandStats $1 %u coins $winBlackjack $iif($isAI($1, %u),-a)
- }
- else {
- %d = $iif($hget($a($1,%split),%u) == Double,$v2,Single)
- %c = $eval($+($,$prop,%d),2)
- hinc $w($1) %u %c
- if (%d == Double) processHandStats $1 %u double 1 $iif($isAI($1, %u),-a)
- processHandStats $1 %u coins %c $iif($isAI($1, %u),-a)
- }
- }
- inc %split
- if ($hget($g($1,%split), %u)) continue
- %split = 1
- %i = 0
- inc %x
- }
- return $left(%return,-1)
- }
- ;########################################################
- ;########################################################
- ; DEALER FUNCTIONS
- ;########################################################
- ;########################################################
- alias -l dealerOption {
- var %x = 1, %y = $hget($g($1,1),0).item, %return = 0, %t, %m = 1, %p, %q = 1
- while (%x <= %y) {
- %p = $hget($g($1,1),%x).item
- if ($hget($g($1,%m),%p) == check) inc %q
- else {
- %t = $numerifyTotal($cardTotal($1, $hget($g($1,%m), %p)).hard)
- if (%t < 22) return 2
- elseif (%t == 22) %return = 1
- inc %m
- if ($hget($g($1,%m),%p)) continue
- }
- %m = 1
- inc %x
- }
- if (%return == 1) && (!$istok(10.11,$cardTotal($1,-d).hard,46)) return 3
- if (%q < %x) return %return
- return 4
- }
- alias -l dealerDraw {
- while ($cardTotal($1,-d).hard < 17) || (($dealerHitsOnSoft17) && ($cardTotal($1,-d).soft < 8)) {
- if ($istok(0.3.4,$2,46)) break
- hadd $s($1) dealer $hget($s($1), dealer) $drawCard($1)
- if ($2 == 1) break
- }
- }
- alias -l dealerVS {
- var %cards = $numerifyTotal($cardTotal($1,$2-).hard), %dealer = $numerifyTotal($cardTotal($1,-d).hard)
- if ((%cards < %dealer) && (%dealer < 30)) || (%cards == 30) return lose
- if (%cards == %dealer) return draw
- return win
- }
- ;########################################################
- ;########################################################
- ; OTHER FUNCTIONS
- ;########################################################
- ;########################################################
- alias -l players return $iif($hget($g($1,1), 0).item, $ifmatch, 0)
- alias -l getWinner {
- var %return , %x = 1, %p = $players($1), %player, %split = 1, %h
- while (%x <= %p) {
- %player = $hget($g($1,1), %x).item
- if ($hget($g($1,1),%player) != check) {
- %h = $hget($g($1, %split), %player)
- inc %split
- if ($prop == $dealerVS($1,%h)) %return = $addtok(%return,%player,32)
- elseif ($hget($g($1,%split), %player)) continue
- %split = 1
- }
- inc %x
- }
- return %return
- }
- alias -l allScores {
- var %return, %x = 1, %y = $hget($w($1), 0).item, %s
- while (%x <= %y) {
- %s = $hget($w($1), %x).data
- %return = %return $hget($w($1), %x).item $+ : $iif(%s == 0,0,$+(,$iif(%s < 0,04,$iif(%s >= 100,06,03)),%s,)) ::
- inc %x
- }
- return $left(%return, -2)
- }
- alias -l overallWinner {
- var %return, %x = 1, %y = $hget($w($1), 0).item, %score = $finish - 1, %data
- while (%x <= %y) {
- %data = $hget($w($1), %x).data
- if (%data >= %score) {
- if (%data > %score) %return = $hget($w($1), %x).item
- else %return = %return $hget($w($1), %x).item
- %score = %data
- }
- inc %x
- }
- if (%x == 2) return $hget($w($1), 1).item
- if ($numtok(%return, 32) == 1) return %return
- return $false
- }
- ;########################################################
- ;########################################################
- ; STATISTICS WRITE
- ;########################################################
- ;########################################################
- alias -l preProcessHandStats {
- if ($hget($s($1),stats)) {
- var %p = $hget($s($1),original_players)
- processHandStats $1 $2 total 1 $3 games
- processHandStats $1 $2 players %p $3 games
- processHandStats $1 $2 $4 1 $3 games
- processHandStats $1 $2 $+($4,_,single) $iif($4 == win,$calc(%p - 1),1) $3 games
- processHandStats $1 $2 coins $iif($hget($w($1),$2),$ifmatch,0) $3 games
- }
- }
- alias -l processHandStats {
- if ($hget($s($1),stats)) {
- var %a = $iif($5 && a isin $5,$true), %z = $iif($6,$6,hands), %f = $iif(%a,$+(%z,_ai),%z)
- if (!%a) || ($istok($ai,$2,32)) writeini -n $f(%f) $2 $3 $calc($getStat($f(%f),$2,$3) + $4)
- }
- }
- alias -l userStats {
- if (!$prop) {
- if ($getStat($f($iif($2,$2,hands)),$1,total)) return $true
- if ($getStat($f($iif($2,$2,hands_ai)),$1,total)) return $true
- return $false
- }
- if ($prop == ai) return $iif($getStat($f($+($iif($2,$2,hands),_ai)),$1,total),$true,$false)
- if ($prop == user) return $iif($getStat($f($+($iif($2,$2,hands))),$1,total),$true,$false)
- }
- alias -l coinSave {
- if ($hget($s($1),stats)) {
- var %new = $iif($hget($w($1),$2),$ifmatch,0)
- writeini -n $f(coins) $2 coins $calc($getStat($f(coins),$2,coins) + %new)
- blackjackCoinListener $2 %new $getStat($f(coins),$2,coins)
- }
- }
- alias -l top5Write {
- var %a = $iif(a isin $2,$true), %f = $iif($istok(cph.wr,$3,46),$f($iif(%a,hands_ai,hands)),$f($iif(%a,games_ai,games))), %data = $top5Data($1,%f,$3), %l
- if ($len(%data)) {
- %l = $read($l($3),w,$+(*,$chr(32),$1,$iif(%a,$+($chr(32),-a),$null)))
- %l = $iif($readn,$ifmatch,0)
- write $iif(%l,$+(-l,%l)) $l($3) %data $1 $iif(%a,-a,$null)
- writeini -n %f $1 $3 %data
- }
- }
- alias -l top5Data {
- if ($istok(cpg.cph,$3,46)) return $round($calc($getStat($2,$1,coins) / $getStat($2,$1,total)),2)
- if ($3 == h2h) return $+($round($calc(($getStat($2,$1,win_single) / ($getStat($2,$1,win_single) + $getStat($2,$1,lose_single))) * 100),2),$chr(37))
- if ($3 == wr) return $round($calc(($getStat($2,$1,win) / ($getStat($2,$1,win) + $getStat($2,$1,lose) + $getStat($2,$1,draw))) * 100),2)
- var %t = $getStat($2,$1,total)
- return $round($calc(((($getStat($2,$1,win) * ((%t * ($getStat($2,$1,players) / %t)) / %t)) / %t) / ($getStat($2,$1,players) / %t)) * 100),2)
- }
- alias -l top5PreWrite {
- var %x = 1
- if ($hget($s($1),stats)) {
- if ($istok($ai,$2,32) || (a !isin $3)) {
- while ($gettok($top5,%x,46)) {
- top5Write $2 $3 $ifmatch
- inc %x
- }
- }
- }
- }
- alias -l top5Sort {
- var %x = 1, %l
- while ($gettok($top5,%x,46)) {
- %l = $l($ifmatch)
- if ($exists(%l)) fs %l
- inc %x
- }
- }
- ;########################################################
- ;########################################################
- ; STATISTICS DISPLAY
- ;########################################################
- ;########################################################
- alias -l displayStats {
- var %a = $iif((($2 == -a) && $getStat($f(hands_ai),$3,total)) || !$getStat($f(hands),$3,total),$true), %f = $f($+(hands,$iif(%a,_ai))), %f2 = $f($+(games,$iif(%a,_ai))), %x = 1, %c, %g, %h
- var %t = $getStat(%f,$3,total), %w = $getStat(%f,$3,win), %d = $getStat(%f,$3,draw), %o = $round($calc(($getStat(%f,$3,double) / (%w + $getStat(%f,$3,lose) + %d)) * 100),2) $+ $chr(37)
- while ($gettok($top5,%x,46)) {
- %g = $ifmatch
- %h = $read($l(%g),w,$+(*,$chr(32),$3,$iif(%a,$+($chr(32),-a),$null)))
- %c = %c $+($upper(%g),:) $c3($ord($iif($readn,$ifmatch,$lines($l(%g))))) $c2(/)
- inc %x
- }
- msg $1 Play stats for $cb1($3 $+ :) Hands: $c3(%t) $c2(/) Wins: $c3(%w) $c2(/) Draws: $c3(%d) $c2(/) CPH: $c3($top5Data($3,%f,cph)) $c2(/) Win Rate: $c3($top5Data($3,%f,wr)) $c2(/) Double Rate: $c3(%o)
- msg $1 Game stats for $cb1($3 $+ :) Games: $c3($getStat(%f2,$3,total)) $c2(/) Wins: $c3($getStat(%f2,$3,win)) $c2(/) CPG: $c3($top5Data($3,%f2,cpg)) $c2(/) Game Rating: $c3($top5Data($3,%f2,gr)) $c2(/) H2H Tier: $c3($top5Data($3,%f2,h2h))
- msg $1 List stats for $cb1($3 $+ :) $gettok(%c,$+(1-,$calc($numtok(%c,32) - 1)),32)
- }
- alias -l displayCoins {
- %f = $f(coins)
- if ($ini(%f,$3)) msg $1 Total coins for $cb1($3 $+ :) $c3($getStat(%f,$3,coins))
- }
- alias -l displayTop5 {
- var %x = 1, %f = $l($3), %l = $lines(%f), %c = 0, %r, %f2, %a, %game = $iif($istok(cpg.gr.h2h,$3,46),games,hands), %y = $iif(%game == games,$statMinGames,$statMinHands), %p
- msg $1 $cb3(Top 5) $c3($iif(a isin $2,robots,$iif(u isin $2,users,players)) for:) $c2($iif($3 == cph,Coins Per Hand,$iif($3 == wr,Win Rate,$iif($3 == cpg,Coins Per Game,$iif($3 == gr,Game Rating,Head to Head Tier))))) $bracks(min %y %game)
- while (%x <= %l) && (%c < 5) {
- %r = $read(%f,%x)
- %p = $gettok(%r,2,32)
- %a = $iif($gettok(%r,3,32) == -a,$true,$false)
- %f2 = $f($iif(%a,$+(%game,_,ai),%game))
- if ($getStat(%f2,%p,total) >= %y) && ((($2 == -a) && (%a)) || (($2 == -u) && (!%a)) || ($2 == -n)) {
- inc %c
- msg $1 $cb1($+(%c,$chr(46))) $c2(%p) $iif(%a,$+($chr(32),$bracks(AI level $getIntel(%p)))) $cb3($bracks($gettok(%r,1,32)))
- }
- inc %x
- }
- }
- alias -l displayCompare {
- var %x = 1, %a1 = $iif((($1 == -a) && ($getStat($f(hands_ai),$2,total))) || (!$getStat($f(hands),$2,total)),$true,$false), %a2 = $iif((($3 == -a) && ($getStat($f(hands_ai),$4,total))) || (!$getStat($f(hands),$4,total)),$true,$false)
- var %f, %r1, %r2, %t1, %t2
- while (%x <= $numtok($top5,46)) {
- %f = $l($gettok($top5,%x,46))
- %r1 = $read(%f,w,$+(*,$chr(32),$2,$iif(%a1,$+($chr(32),-a),$null)))
- inc %t1 $iif($readn,$ifmatch,$lines(%f))
- %r2 = $read(%f,w,$+(*,$chr(32),$4,$iif(%a2,$+($chr(32),-a),$null)))
- inc %t2 $iif($readn,$ifmatch,$lines(%f))
- inc %x
- }
- %r2 = $round($calc((%t1 / (%t1 + %t2)) * 100),2)
- %r1 = $calc(100 - %r2)
- if (%r1 > %r2) msg $5 $cb1(>>>) $cb2($2) $cb1(<<<) $cb3($+(%r1,$chr(37))) $c1(vs) $+(%r2,$chr(37)) $c2($4)
- elseif (%r2 > %r1) msg $5 $c2($2) $+(%r1,$chr(37)) $c1(vs) $cb3($+(%r2,$chr(37))) $cb1(>>>) $cb2($4) $cb1(<<<)
- else msg $5 $cb2($2) $cb3($+(%r1,$chr(37))) $c1(vs) $cb3($+(%r2,$chr(37))) $cb2($4)
- }
- ;########################################################
- ;########################################################
- ; HELPER FUNCTIONS (use outside script)
- ;########################################################
- ;########################################################
- ; return coins in coins.ini
- alias blackjackGetCoins {
- return $getStat($f(coins),$1,coins)
- }
- ; remove coins from coins.ini
- alias blackjackDelCoins {
- var %u = $1, %f = $f(coins)
- writeini -n %f %u coins $calc($getStat(%f,%u,coins) - $iif($2 isnum,$ifmatch,0))
- if ($isid) return $getStat(%f,$1,coins)
- }
- ;########################################################
- ;########################################################
- ; ACCUMULATED COINS LISTENER
- ;########################################################
- ;########################################################
- ; listener, each time the user accumulates more coins (runs once per user per game played)
- ; you can 'transport' the coins accumulated to a separate script/file, and/or delete them
- ; these coins are displayed by the !coins command, removing them will be reflected.
- ; you can copy new points ($2) to a global/master file which works with your other scripts, if you want
- ; take note that $2 and $3 can both be negatives, make proper checks to keep things in accordance with the rest of your script
- alias -l blackjackCoinListener {
- ; $1 = the username
- ; $2 = coins added for user after current game
- ; $3 = new total coins for user
- ; your commands here:
- ; example echo after each time coins are added (uncomment to try)
- ; echo -a $1 finished the game, $iif($2 >= 0,winning,losing) $2 coins, and now has $3 total coins!
- ; example removing coins just earnt:
- ; blackjackDelCoins $1 $2
- ; example write to a separate file which holds stars collected by users. Each star is worth 20 coins
- ; also remove N stars worth of coins from the coin bank.
- ; if ($3 > 0) {
- ; var %file = stars.ini, %coinsPerStar = 20, %stars = $floor($calc($3 / %coinsPerStar))
- ; writeini %file $1 stars $calc($iif($readini(%file,$1,stars),$v1,0) + %stars)
- ; blackjackDelCoins $1 $calc($3 - ($3 % %coinsPerStar))
- ; }
- ; hint: removing the if statement surrounding the previous 3 commands will hold it's current functionality,
- ; but will also remove stars from the stars file if the user falls to -20 or less
- }
Add Comment
Please, Sign In to add comment