jeg har fundet et poker scrips
men har set lidt på det er ser slet ikke nogen comandoer til og starte det
og vis ikke kan det så laves
alias sortwithintok {
var %n = $remove($1,s,c,d,h)
var %s1 = $sorttok(%n,45,nr)
var %x = 1,%y = $numtok(%s1,45)
var %nl = $1
while ( %x <= %y ) {
if ( $istok(%nl,$gettok(%s1,%x,45) $+ s,45) && !$istok(%s1,$gettok(%s1,%x,45) $+ s,45) ) {
%s1 = $reptok(%s1,$gettok(%s1,%x,45),$gettok(%s1,%x,45) $+ s,1,45)
}
elseif ( $istok(%nl,$gettok(%s1,%x,45) $+ c,45) && !$istok(%s1,$gettok(%s1,%x,45) $+ c,45) ) {
%s1 = $reptok(%s1,$gettok(%s1,%x,45),$gettok(%s1,%x,45) $+ c,1,45)
}
elseif ( $istok(%nl,$gettok(%s1,%x,45) $+ h,45) && !$istok(%s1,$gettok(%s1,%x,45) $+ h,45) ) {
%s1 = $reptok(%s1,$gettok(%s1,%x,45),$gettok(%s1,%x,45) $+ h,1,45)
}
elseif ( $istok(%nl,$gettok(%s1,%x,45) $+ d,45) && !$istok(%s1,$gettok(%s1,%x,45) $+ d,45) ) {
%s1 = $reptok(%s1,$gettok(%s1,%x,45),$gettok(%s1,%x,45) $+ d,1,45)
}
inc %x 1
}
return %s1
}
alias handeval {
;SYNTAX: $handeval(board,hand1,..,handN)
;Returns a value of 1-N for the best poker hand
;If there is a split, it will separate the hands that split with spaces, ex 1 3 4 for a 3-way split between hands 1, 3, and 4.
;LEFTOFF- Problem with unnecessary report of a kicker with two pair.
;Unextensively tested
;Demo command- //echo f $handeval(AhTsJd7c9d,Ac7s,AdQh).debug
var %board = $1
tokenize 32 $replace($2-,t,10,j,11,q,12,k,13,a,14)
var %x = $0
set -l %tt
while ( %x ) {
set -l %hp [ $+ [ %x ] ] $replace(%board $+ $ [ $+ [ %x ] ],t,10,j,11,q,12,k,13,a,14)
.echo -q $regsub(%hp [ $+ [ %x ] ],/([a-z])/ig,\1 $+ -,%tt)
set -l %hp [ $+ [ %x ] ] $sortwithintok(%tt)
set -l %hv [ $+ [ %x ] ] $replace(%hp [ $+ [ %x ] ],s,-,c,-,d,-,h,-)
%hv [ $+ [ %x ] ] = $sorttok(%hv [ $+ [ %x ] ],45,nr)
set -l %hs [ $+ [ %x ] ] $replace(%hp [ $+ [ %x ] ],1,-,2,-,3,-,4,-,5,-,6,-,7,-,8,-,9,-,0,-)
%hs [ $+ [ %x ] ] = $sorttok(%hs [ $+ [ %x ] ],45)
dec %x
}
if ( $prop == debug ) {
echo hp1 %hp1
echo hp2 %hp2
echo hs1 %hs1
echo hs2 %hs2
echo hv1 %hv1
echo hv2 %hv2
echo --
}
var %x = 1,%b = 0,%v = 0,%s = 0
set -l %tv
set -l %slist
set -l %fhv
set -l %tfhv
set -l %fl1
set -l %fl2
set -l %fl3
set -l %fl4
;B values
;8 = Straight Flush
;7 = Quads
;6 = Boat
;5 = Flush
;4 = Straight
;3 = Trips
;2 = Two Pair
;1 = Pair
;0 = Highcard
while ( %x <= $0 ) {
if ( $issf(%hp [ $+ [ %x ] ]) ) {
%tv = $v1
if ( %b == 8 ) {
if ( %tv > %v ) {
%v = %tv
%s = 1
set -l %fhv
set -l %slist %x
inc %x
continue
}
elseif ( %tv == %v ) {
inc %s
%slist = $addtok(%slist,%x,32)
set -l %fhv
inc %x
continue
}
else {
%s = 1
set -l %slist %x
set -l %fhv
inc %x
continue
}
}
else {
%b = 8
%v = %tv
%s = 1
set -l %slist %x
}
inc %x
continue
}
if ( %b > 7 ) {
inc %x
continue
}
var %d = $dupfinder(%hv [ $+ [ %x ] ])
if ( $wildtok(%d,*:4,1,32) ) {
%tv = $gettok($wildtok(%d,*:4,1,32),1,58)
if ( %b == 7 ) {
if ( %tv > %v ) {
%v = %tv
%s = 1
set -l %fhv
set -l %slist %x
inc %x
continue
}
elseif ( %tv == %v ) {
inc %s
%slist = $addtok(%slist,%x,32)
}
}
else {
%b = 7
%s = 1
%v = %tv
set -l %slist %x
set -l %fhv
}
inc %x
continue
}
if ( %b > 6 ) {
inc %x
continue
}
if ( $numtok(%d,32) > 1 ) {
if ( $wildtok(%d,*:2,0,32) && $wildtok(%d,*:3,0,32) ) || ( $wildtok(%d,*:3,0,32) > 1 ) {
if ( $wildtok(%d,*:2,1,32) ) {
%tv = $gettok($wildtok(%d,*:3,1,32),1,58)
%tfhv = $gettok($wildtok(%d,*:2,1,32),1,58)
}
else {
if ( $gettok($wildtok(%d,*:3,1,32),1,58) > $gettok($wildtok(%d,*:3,2,32),1,58) ) {
%tv = $gettok($wildtok(%d,*:3,1,32),1,58)
%tfhv = $gettok($wildtok(%d,*:3,2,32),1,58)
}
else {
%tv = $gettok($wildtok(%d,*:3,2,32),1,58)
%tfhv = $gettok($wildtok(%d,*:3,1,32),1,58)
}
}
if ( %b == 6 ) {
if ( %tv > %v ) {
%v = %tv
%fhv = %tfhv
}
elseif ( %tv == %v ) {
if ( %fhv < $gettok($wildtok(%d,*:2,1,32),1,58) ) {
%v = %tv
%s = 1
set -l %slist %x
inc %x
continue
%fhv = %tfhv
}
elseif ( %fhv == $gettok($wildtok(%d,*:2,1,32),1,58) ) {
inc %s
%slist = $addtok(%slist,%x,32)
}
}
else {
inc %x
continue
}
}
else {
%b = 6
%v = %tv
%s = 1
set -l %slist %x
%fhv = %tfhv
inc %x
continue
}
}
}
if ( %b > 5 ) {
inc %x
continue
}
if ( $isflush(%hs [ $+ [ %x ] ]) ) {
set -l %asdf $v1
%tv = $hcs(%hp [ $+ [ %x ] ],%asdf)
var %z = 1
while ( %z <= 4 ) {
set -l %tfl [ $+ [ %z ] ] $hcs($deltok(%hp [ $+ [ %x ] ],1- %z,45),%asdf)
if ( %tfl [ $+ [ %z ] ] > %fl [ $+ [ %z ] ] ) {
var %iw = 1
}
elseif ( %tfl [ $+ [ %z ] ] < %fl [ $+ [ %z ] ] ) {
var %icl = 1
}
inc %z
}
if ( %b == 5 ) {
if ( %tv == %v ) {
if ( %iw ) {
%v = %tv
%fl1 = %tfl1
%fl2 = %tfl2
%fl3 = %tfl3
%fl4 = %tfl4
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %icl ) {
inc %x
continue
}
else {
inc %s
set -l %slist $addtok(%slist,%x,32)
inc %x
continue
}
}
elseif ( %tv > %v ) {
%v = %tv
%fl1 = %tfl1
%fl2 = %tfl2
%fl3 = %tfl3
%fl4 = %tfl4
%s = 1
set -l %slist %x
inc %x
continue
}
else {
inc %x
continue
}
}
else {
%b = 5
%v = %tv
%fl1 = %tfl1
%fl2 = %tfl2
%fl3 = %tfl3
%fl4 = %tfl4
%s = 1
set -l %slist %x
inc %x
continue
}
}
if ( %b > 4 ) {
inc %x
continue
}
if ( $isstraight(%hv [ $+ [ %x ] ]) ) {
%tv = $v1
if ( %b == 4 ) {
if ( %tv > %v ) {
%v = %tv
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %tv == %v ) {
inc %s
%slist = $addtok(%slist,%x,32)
inc %x
continue
}
else {
inc %x
continue
}
}
else {
%b = 4
%v = %tv
%s = 1
set -l %slist %x
inc %x
continue
}
}
if ( %b > 3 ) {
inc %x
continue
}
if ( $wildtok(%d,*:3,1,32) ) {
%tv = $gettok($v1,1,58)
if ( %b == 3 ) {
if ( %tv > %v ) {
%v = %tv
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %tv == %v ) {
inc %s
%slist = $addtok(%slist,%x,32)
inc %x
continue
}
else {
inc %x
continue
}
}
else {
%b = 3
%s = 1
%v = %tv
set -l %slist %x
inc %x
continue
}
}
if ( %b > 2 ) {
inc %x
continue
}
if ( $numtok(%d,32) > 1 ) {
if ( $wildtok(%d,*:2,0,32) == 2 ) {
%tv = $gettok($iif($wildtok(%d,*:2,1,32) < $wildtok(%d,*:2,2,32),$wildtok(%d,*:2,1,32),$wildtok(%d,*:2,2,32)),1,58)
%tfhv = $gettok($iif($wildtok(%d,*:2,1,32) > $wildtok(%d,*:2,2,32),$wildtok(%d,*:2,1,32),$wildtok(%d,*:2,2,32)),1,58)
if ( %b == 2 ) {
if ( %tv > %v ) {
%v = %tv
%fhv = %tfhv
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %tv == %v ) {
if ( %tfhv > %fhv ) {
%v = %tv
%fhv = %tfhv
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %tfhv == %fhv ) {
inc %s
%slist = $addtok(%slist,%x,32)
}
}
else {
inc %x
continue
}
}
else {
%b = 2
%v = %tv
%fhv = %tfhv
%s = 1
set -l %slist %x
inc %x
continue
}
}
}
if ( %b > 1 ) {
inc %x
continue
}
if ( $gettok(%d,1,58) >= %v && $gettok(%d,1,58) != 0 ) {
if ( %b == 1 ) {
if ( $gettok(%d,1,58) > %v ) {
%v = $gettok(%d,1,58)
%s = 1
set -l %slist %x
}
else {
inc %s
%slist = $addtok(%slist,%x,32)
}
inc %x
continue
}
%b = 1
%s = 1
set -l %slist %x
%v = $gettok(%d,1,58)
inc %x
continue
}
if ( %b > 0 ) {
inc %x
continue
}
%tv = $gettok(%hv [ $+ [ %x ] ],1,45)
var %z = 2
while ( %z <= 7 ) {
set -l %tfl [ $+ [ %z ] ] $gettok(%hv [ $+ [ %x ] ],%z,45)
if ( %tfl [ $+ [ %z ] ] > %fl [ $+ [ $calc(%z -1) ] ] ) && ( !%iw ) {
var %iw = %tfl [ $+ [ %z ] ]
}
elseif ( %tfl [ $+ [ %z ] ] < %fl [ $+ [ $calc(%z -1) ] ] ) && ( !%icl ) {
var %icl = %fl [ $+ [ $calc(%z -1) ] ]
}
inc %z
}
if ( %tv > %v ) {
%v = %tv
%fl1 = %tfl2
%fl2 = %tfl3
%fl3 = %tfl4
%fl4 = %tfl5
%s = 1
set -l %slist %x
inc %x 1
continue
}
elseif ( %tv == %v ) {
if ( %iw ) {
var %kicker = %iw
%v = %tv
%fl1 = %tfl1
%fl2 = %tfl2
%fl3 = %tfl3
%fl4 = %tfl4
%s = 1
set -l %slist %x
inc %x
continue
}
elseif ( %icl ) {
var %kicker = %icl
inc %x
continue
}
else {
inc %s
set -l %slist $addtok(%slist,%x,32)
inc %x
continue
}
inc %s
%slist = $addtok(%slist,%x,32)
inc %x 1
continue
}
inc %x 1
}
if ( %s > 1 ) {
var %x = %s,%upd = 0,%chgd = 0
var %fl1 = %v
set -l %fl2
set -l %fl3
set -l %fl4
set -l %fl5
while ( %x ) {
var %z = 1
while ( %z <= 5 ) {
set -l %tfl [ $+ [ %z ] ] $gettok(%hv [ $+ [ %x ] ],%z,45)
;Good debugging echo for problems with kicker determination and split pot evaluation
;echo x %x it %z fl %fl [ $+ [ %z ] ] tfl %tfl [ $+ [ %z ] ]
if ( %fl [ $+ [ %z ] ] < %tfl [ $+ [ %z ] ] ) || ( !%fl [ $+ [ %z ] ] ) {
if ( !%fl [ $+ [ %z ] ] ) {
%fl [ $+ [ %z ] ] = %tfl [ $+ [ %z ] ]
}
else {
var %slist = %x
var %chgd = 1
var %upd = %tfl [ $+ [ %z ] ]
%s = 1
}
}
elseif ( %fl [ $+ [ %z ] ] > %tfl [ $+ [ %z ] ] ) && ( !%chgd ) {
dec %s
var %slist = $deltok(%slist,%x,32)
var %kicker = %fl [ $+ [ %z ] ]
break
}
elseif ( %chgd ) {
inc %s
var %slist = $addtok(%slist,%x,32)
}
if ( %upd ) {
var %kicker = %upd
%fl1 = %tfl1
%fl2 = %tfl2
%fl3 = %tfl3
%fl4 = %tfl4
%fl5 = %tfl5
}
var %upd = 0
set -l %chgd
inc %z
}
dec %x
}
}
$iif($isid,return,echo -a) $iif(%s > 1,%s $+ -way split between hands numbers,Winner is hand number) $replace(%slist,$chr(32),$chr(44)) with $replace(%b,0,Highcard,1,Pair,2,TwoPair,3,Trips,4,Straight,5,Flush,6,FullHouse,7,Quads,8,StraightFlu sh) $replace(%v,10,Ten,11,Jack,12,Queen,13,King,14,Ace) $iif(%fhv,over $replace(%fhv,10,Tens,11,Jacks,12,Queens,13,Kings,14,Aces)) $iif(%kicker,- $replace(%kicker,10,Ten,11,Jack,12,Queen,13,King,14,Ace) kicker)
return
}
;Format- Winners WinnerList Hand Highcard NextHighCard Kicker
;Winners is the number of winners (more than 1 indicates a split pot)
;WinnerList is a comma separated list of the winners (there will only be one value unless there's a split)
;Hand will be in the format of %b - See above notes
;NextHighCard is only used for Full Houses and Two Pairs. It will be 0 if the winning hand was not a Full House or Two Pair.
;Kicker may or may not have a value
return %s %slist %b %v $iif(%fhv,%fhv,0) %kicker
}
alias dupfinder {
;SYNTAX: $dupfinder(text)
;text should be in %hvX format
;Returns sets of duplicates or 0 if there are no duplicates (used for finding pair, two pair, 3 of a kind, full house, 4 of a kind)
;Return format is value:duplicates where value is the "card" and duplicates is the number of duplicates found
;One or two sets of duplicates may be returned. If it's two, they are space separated
;Ex if it returns 9:3 5:2 this indicates a full house with 3 nines and 2 fives
var %x = 1,%h = 99
var %asdf = $calc($len($remove($1,1,2,3,4,5,6,7,8,9,0)) +1)
set -l %l
set -l %m
while ( %x <= %asdf ) {
if ( !$wildtok(%l,$gettok($1,%x,45) $+ :*,0,32) ) {
%l = $addtok(%l,$gettok($1,%x,45),32) $+ :1
}
else {
var %a = $wildtok(%l,$gettok($1,%x,45) $+ :*,1,32)
var %l = $reptok(%l,%a,$gettok(%a,1,58) $+ : $+ $calc($gettok(%a,2,58) +1),1,32)
var %m = $iif($istok(%m,%a,32),$reptok(%m,%a,$gettok(%a,1,58) $+ : $+ $calc($gettok(%a,2,58) +1),1,32),$addtok(%m,$gettok(%a,1,58) $+ : $+ $calc($gettok(%a,2,58) +1),32))
if ( $gettok(%a,1,58) < %h ) %h = $gettok(%a,1,58)
}
inc %x
}
if ( $numtok(%m,32) > 2 ) {
%m = $remtok(%m,$wildtok(%m,%h $+ :*,1,32),32)
}
return $iif(%m,%m,0)
}
alias isstraight {
;SYNTAX: $isstraight(text)
;Text should be in %hvX format
;NOTE- Text *MUST* be sorted descendingly!
;Returns highest card of the straight or 0 if there is no straight
var %x = 1
set -l %v
set -l %c
while ( %x <= $numtok($1,45) ) {
if ( $gettok($1,%x,45) == 14 ) set -l %ha 1
if ( $gettok($1,%x,45) == %v ) {
inc %x
continue
}
if ( $gettok($1,%x,45) == $calc(%v -1) ) {
if ( %ha ) && ( %c == 3 ) && ( $gettok($1,%x,45) == 2 ) {
%v = 2
%c = 5
break
}
inc %c
if ( %c == 5 ) break
dec %v
}
else {
%c = 1
%v = $gettok($1,%x,45)
}
inc %x
}
return $iif(%c == 5,$calc(%v +3),0)
}
alias isflush {
;Returns suit character (s,h,d,c) of a flush if there is one
;If there is no flush returns 0
;Should be formatted in %hsX
var %x = 1,%asdf = $calc($len($remove($1,s,c,d,h)) +1)
var %c = 0
var %h = 0
var %s = 0
var %d = 0
while ( %x <= %asdf ) {
inc % [ $+ [ $gettok($1,%x,45) ] ]
inc %x
}
if ( %c >= 5 ) return c
elseif ( %h >= 5 ) return h
elseif ( %s >= 5 ) return s
elseif ( %d >= 5 ) return d
else return 0
}
alias issf {
;Returns high card of a straight flush if there is one
;Returns 0 if there is no straight flush
;Should be formatted as %hpX
var %a = $isstraight($remove($1,s,c,d,h))
var %b = $isflush($remove($1,0,1,2,3,4,5,6,7,8,9))
if ( !%a ) || ( !%b ) {
return 0
}
var %x = 1,%s = 0
while ( %x > 5 ) {
if ( !$findtok($1,$calc(%a - %s) $+ %b,0,45) ) {
return 0
break
}
inc %s
dec %x
}
inc %s
return %a
}
alias hcs {
;Syntax: $hcs(text,suit)
;Returns the highest card of a particular suit in a hand
;Used to find a flush's high card.
;Text should be formatted as hpX
var %x = 1,%h = 0
while ( %x <= $numtok($1,45) ) {
if ( $2 !isin $gettok($1,%x,45) ) {
inc %x
continue
}
elseif ( $remove($gettok($1,%x,45),s,h,d,c) > %h ) {
%h = $remove($gettok($1,%x,45),s,h,d,c)
}
inc %x
}
return %h
}