DOMINOS game — File Browser
DOMINOSgamev1.0 / DOMINOSgamev1.0 / dominos game.txt
dominos game.txt — 8.43 KB — Download this file
on *:text:*:#:{
if $regex(d,$1-,/^!(?i)domino\s(.+)/) {
if (%d.domino) { .notice $nick Game is already inplay | return }
if ($numtok($regml(d,1),32) != 4) { msg # $nick $+ : It's a four sides game. | return }
filter -glwf # nul /\b(?: $replace($regml(d,1),$chr(32),|) )\b/xiSg
if ($filtered != 4) { msg # select nicks that already on channel. }
unset %d.*
set %d.domino 1
set %d.chan #
set %d.players $strip($regml(d,1))
tokenize 32 %d.players
set %d.turn $1
set %d.pieces $regsubex($scrambtok($pieces),/(?:\[0-3]|\[0-5]|\[0-6]|\[1-0]|\[1-2]|\[1-3]|\[1-4]|\[1-6]|\[2-0]|\[2-4]|\[2-6]|\[3-2]|\[3-5]|\[3-6]|\[4-0]|\[4-3]|\[4-5]|\[4-6]|\[5-1]|\[5-2]|\[6-5])/g,$null)
set %d.player1 $1 | set %d.player2 $2 | set %d.player3 $3 | set %d.player4 $4
set %d.player1p $token(%d.pieces,1-7,32) | set %d.player2p $token(%d.pieces,8-14,32) | set %d.player3p $token(%d.pieces,15-21,32) | set %d.player4p $token(%d.pieces,22-28,32)
.notice %d.player1 DOMINOOS: %d.player1p | .notice %d.player2 DOMINOOS: %d.player2p | .notice %d.player3 DOMINOOS: %d.player3p | .notice %d.player4 DOMINOOS: %d.player4p
.notice %d.turn DOMINOOS: Your turn to play.
set %d.lpieces %d.pieces
msg %d.chan Time to play DOMINOOS!
}
elseif ($1 == !cards) && ($istok(%d.players,$nick,32)) {
.notice $nick DOMINOOS: $eval($+(%,d.player,$findtok(%d.players,$nick,1,32),p),2)
}
elseif ($1 == !left) && ($istok(%d.players,$nick,32)) {
.notice $nick DOMINOOS: $regsubex($scrambtok(%d.lpieces),$+(/,$chr(40),$replace($eval($+(%,d.player,$findtok(%d.players,$nick,1,32),p),2),[,\[,$chr(32),|),$chr(41),/g),\t)
}
elseif ($1 == !count) && ($istok(%d.players,$nick,32)) {
.notice $nick DOMINOOS: $+(%d.player1,:,$numtok(%d.player1p,32)) - $+(%d.player2,:,$numtok(%d.player2p,32)) - $+(%d.player3,:,$numtok(%d.player3p,32)) - $+(%d.player4,:,$numtok(%d.player4p,32))
}
elseif ($1 == !order) && ($istok(%d.players,$nick,32)) {
.notice $nick DOMINOOS: $replace($(%d.player1 - %d.player2 - %d.player3 - %d.player4),%d.turn,$+($chr(22),%d.turn,$chr(22)))
}
elseif ($1 == !table) && ($istok(%d.players,$nick,32)) {
.notice $nick DOMINOOS: $iif(%d.played,%d.played,No one played yet!)
}
elseif ($1 == !play) && ($2) && (%d.turn == $nick) && ($2 isin $eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2)) || ($2 isin $replace($reverse($eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2)),$+([,$chr(32),]),$+(],$chr(32),[))) {
if (!%d.played) {
set %d.played $2
set $+(%,d.player,$findtok(%d.players,$nick,1,32),p) $remove($eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2),$2)
msg %d.chan $+($chr(2),%d.turn,:,$chr(2)) %d.played
set %d.turn $gettok(%d.players,$iif($calc($findtok(%d.players,%d.turn,1,32) +1) > $numtok(%d.players,32),1,$v1),32)
:check
if ($dcheck(%d.turn) == no) {
.notice %d.turn DOMINOOS: You've been passed!
msg %d.chan $+($chr(2),%d.turn,$chr(2)) has been passed!
set %d.turn $gettok(%d.players,$iif($calc($findtok(%d.players,%d.turn,1,32) +1) > $numtok(%d.players,32),1,$v1),32)
goto check
}
.notice %d.turn DOMINOOS: Your turn to play.
.notice %d.turn DOMINOOS: $eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2)
msg %d.chan $+($chr(2),%d.turn,$chr(2),'s) turn.
}
}
elseif (%d.played) {
var %a = $remove($replace(%d.played,][,*),[,])
if ($remove($right($2,2),]) == $remove($left(%d.played,2),[)) || ($remove($left($2,2),[) == $remove($right(%d.played,2),])) || ($remove($right($reverse($2),2),]) == $remove($left(%d.played,2),[)) || ($remove($left($reverse($2),2),[) == $remove($right(%d.played,2),])) {
set %d.lastp $2
if ($3) { if ($istok(r l,$3,32)) && ($regex(%d.played,$remrpt($+(/[,$remove($remove($replace(%d.lastp,-,$chr(32)),[,]),$chr(32)),]/g))) == 2) { goto $3 } }
if ($istok($remove(%d.lastp,[,]),$left(%a,1),$asc(-))) { :l | set %d.sort 1 | set %d.side l | goto next }
elseif ($istok($remove(%d.lastp,[,]),$right(%a,1),$asc(-))) { :r | set %d.sort $len(%d.played) | set %d.side r | goto next }
:next
set %d.lastp $dsort(%d.lastp)
set $+(%,d.player,$findtok(%d.players,$nick,1,32),p) $remove($eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2),$iif(%d.lastp !isin $eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2),$reverse(%d.lastp),%d.lastp))
set %d.played $remove($instok(%d.played,%d.lastp,%d.sort,32),$chr(32))
msg %d.chan $+($chr(2),%d.turn,:,$chr(2)) $iif(%d.side == l,$regsubex(%d.played,/(\[\S+?])(.+)/,\1\2),$regsubex(%d.played,/(.+)(\[\S+?])/,\1\2))
if ($numtok($eval($+(%,d.player,$findtok(%d.players,$nick,1,32),p),2),32) == 0) { dend $nick | return }
set %d.lpieces $remove(%d.lpieces,$iif(%d.lastp !isin %d.lpieces,$reverse(%d.lastp),%d.lastp))
set %d.turn $gettok(%d.players,$iif($calc($findtok(%d.players,%d.turn,1,32) +1) > $numtok(%d.players,32),1,$v1),32)
if ($numtok($eval($+(%,d.player,$findtok(%d.players,$nick,1,32),p),2),32) == 1) { msg %d.chan $+($chr(2),$nick,$chr(2)) has 1 domino left! }
if ($dcheckb == yes) { msg %d.chan Block by $+($chr(2),$nick,$chr(2)) caused end of game. No one wins! | unset %d.* | return }
:check
if ($dcheck(%d.turn) == no) {
.notice %d.turn DOMINOOS: You've been passed!
msg %d.chan $+($chr(2),%d.turn,$chr(2)) has been passed!
set %d.turn $gettok(%d.players,$iif($calc($findtok(%d.players,%d.turn,1,32) +1) > $numtok(%d.players,32),1,$v1),32)
goto check
}
.notice %d.turn DOMINOOS: Your turn to play.
.notice %d.turn DOMINOOS: $eval($+(%,d.player,$findtok(%d.players,%d.turn,1,32),p),2)
msg %d.chan $+($chr(2),%d.turn,$chr(2),'s) turn.
}
}
}
on *:part:%d.chan:if ($istok(%d.players,$nick,32)) { tokenize 32 $remove(%d.players,$nick) | .notice $* DOMINOOS: $nick has part the channel. end of game | unset %d.* }
on *:kick:%d.chan:if ($istok(%d.players,$nick,32)) { tokenize 32 $remove(%d.players,$nick) | .notice $* DOMINOOS: $nick has been kicked the channel. end of game | unset %d.* }
on *:quit:if ($istok(%d.players,$nick,32)) { tokenize 32 $remove(%d.players,$nick) | .notice $* DOMINOOS: $nick has quit the channel. end of game | unset %d.* }
on *:nick:{
if ($istok(%d.players,$nick,32)) set %d.players $replace(%d.players,$nick,$newnick)
if (%d.turn == $nick) set %d.turn $newnick
}
alias dcheckb {
var %a = %d.lpieces, %b = $remove($left(%d.played,2),[), %c = $remove($right(%d.played,2),])
if (!$regex(%b,$remrpt($+([,$remove($remove($replace(%a,-,$chr(32)),[,]),$chr(32)),])))) && (!$regex(%c,$remrpt($+([,$remove($remove($replace(%a,-,$chr(32)),[,]),$chr(32)),])))) return yes
}
alias dcheck {
var %a = $1, %b = $eval($+(%,d.player,$findtok(%d.players,%a,1,32),p),2), %c = $remove($left(%d.played,2),[), %d = $remove($right(%d.played,2),])
if (!$regex(%c,$remrpt($+([,$remove($remove($replace(%b,-,$chr(32)),[,]),$chr(32)),])))) && (!$regex(%d,$remrpt($+([,$remove($remove($replace(%b,-,$chr(32)),[,]),$chr(32)),])))) return no
}
alias dsort {
var %a = $1
if (%d.side = l) && ($remove($right(%a,2),]) != $remove($left(%d.played,2),[)) { return $reverse(%a) }
elseif (%d.side = r) && ($remove($left(%a,2),[) != $remove($right(%d.played,2),])) { return $reverse(%a) }
return %a
}
alias dend {
var %a = 1
msg %d.chan $+($chr(2),$1,$chr(2)) wens!
msg %d.chan $+($chr(22),Runners up:)
window -h @dscore
while (%a <= 4) {
if (%a != $findtok(%d.players,$1,1,32)) aline @dscore $+($chr(2),$chr(40),$chr(2),$numtok($($+(%,d.player,%a,p),2),32),$chr(2),$chr(41),$chr(2)) $+($chr(2),$($+(%,d.player,%a),2),$chr(2)) $($+(%,d.player,%a,p),2)
inc %a
}
filter -cewwt 2 2 @dscore @dscore
%a = 3
while (%a) {
msg %d.chan $token($line(@dscore,%a),2-,32) $token($line(@dscore,%a),1,32)
dec %a
}
window -c @dscore
unset %d.*
}
alias pieces {
unset %d.bpieces
var %a = 0,%b = 0
:loop
set %d.bpieces $addtok(%d.bpieces,$+([,%a,-,%b,]),32)
inc %b
if (%b <= 6) goto loop
%b = 0
inc %a
if (%a <= 6) goto loop
return %d.bpieces
}
alias scrambtok {
var %a = $1, %b = $regex(x,%a,/(\S+)/g)
while %b { var %x = $iif($r(1,0),%x $regml(x,%b),$regml(x,%b) %x) | dec %b }
return %x
}
alias reverse return $replacex($regsubex($1,/(.)/g,$mid($1,\0,1)),[,],],[)
alias remrpt return $regsubex($1,/(?<=\[)(.)(?=.*\1\])/,)