Jump to content
chain

IRC UNO

Recommended Posts

  • Administrators

A mimic of the uno card game. This game is alot of fun. I've been playing with a couple of my friends everyone loves it. If you don't know how to play its very easy to learn. There is also a top 10 list so everyone can compete to be the best.

Heres a list of commands:

!uno - This command is used to start an uno game. The player that types this becomes player 1.
!join - This allows you to join the game (at any time).
!deal - This command starts the game (as long as you have 2+ players). It can only be typed by player 1 (the person who typed !uno).
!unostop - This command ends the current uno game and can only be used by player 1.
!quit - This command removes you from the current game. If used by player 1, player 2 becomes player 1 and in charge of the game.
!kickplayer - This command allows player 1 to kick people from the current game for some reason like if they don't know how to play.
!cards - This command shows you your cards.
!count - This command shows all the players and the number of cards they have left. It also shows who's turn it is.
!topcard - This command shows the top card.
!draw - This command draws you a card from the deck.
!pass - This command passes to the next person (you must draw once to use this).
!play - This command allows you to play cards.
!score - This command shows you how many wins the given nick has.
!top10 - This command shows you the top 10 uno players and their wins.

 

on *:start:{
  hmake uno 50
  if ($isfile(uno.dat)) hload uno uno.dat
}
on *:exit: hsave uno uno.dat
on *:nick:{
  var %i = $hget(0), %c
  while (%i) {
    if ($newnick ison $hget(%i)) {
      %c = $v2
      break
    }
    dec %i
  }
  if ($hget(%c,$nick)) {
    hadd %c $newnick $v1
    hadd %c $hfind(%c,$nick).data $newnick
  }
}
on *:quit:{
  var %i = $hget(0), %c
  while (%i) {
    if ($me ison $hget(%i)) && ($hget($hget(%i),$nick)) remplayer %c $nick $nick has been removed from the current game.
    dec %i
  }
}
on *:part:#:{
  if (!$hget(#)) return
  if ($hget(#,$nick)) remplayer # $nick $nick was removed from the current game.
  elseif ($nick == $me) hfree #
}
on *:kick:#:{
  if (!$hget(#)) return
  if ($hget(#,$nick)) remplayer # $nick $nick was removed from the current game.
  elseif ($nick == $me) hfree #
}
on $*:text:/^[@!.](uno)?score/Si:#:{
  var %u = $iif($2,$2,$nick)
  $iif($left($1,1) == @,msg #,notice $nick) %u has $bytes($iif($hget(uno,%u),$v1,0),b) wins.
}
on $*:text:/^[@!.](uno)?top10$/Si:#:{
  var %x, %i = $hget(uno,0).item, %o
  while (%i) {
    %x = $instok(%x,$hget(uno,$hget(uno,%i).item),0,32)
    dec %i
  }
  %x = $sorttok(%x,32,nr)
  %i = 1
  while (%i <= 10) {
    if (!$hget(uno,%i).item) break
    %o = $addtok(%o,$ord(%i) $+ : $hfind(uno,$gettok(%x,%i,32),$calc($findtok(%o,$gettok(%x,%i,32),0,32) +1)).data - $bytes($gettok(%x,%i,32),b) |,32)
    inc %i
  }
  $iif($left($1,1) == @,msg #,notice $nick) $left(%o,-1)
}
on $*:text:/^[@!.]uno$/Si:#:{
  if ($hget(#,players)) notice $nick There is already an uno game in progress in # $+ .
  else {
    if ($hget(#)) hfree #
    hmake #
    hadd # p1 $nick
    hadd # $nick $cards(7)
    hinc # players
    msg # $nick has started 3U04N12O v2.0 by BrAndo. Type !join to join the game.
    notice $nick Type !deal to start the game.
  }
}
on $*:text:/^[@!.]?join$/Si:#:{
  if (!$hget(#,p1)) return
  elseif ($hget(#,$nick)) notice $nick You are already playing!
  else {
    hinc # players
    hadd # p $+ $hget(#,players) $nick
    hadd # $nick $cards(7)
    msg # $nick will be player $hget(#,players) $+ .
  }
}
on $*:text:/^[@!.](deal|start( ?game)?|play|begin)$/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  elseif ($hget(#,turn)) notice $nick The game has already started.
  elseif ($nick != $hget(#,p1)) msg # Only $v2 can start the game.
  elseif ($hget(#,players) !> 1) msg # You need atleast two people to play.
  else {
    var %c = 01
    while (01* iswm %c) %c = $cards(1)
    hadd # top %c
    hadd # turn 1
    hadd # rev $true
    msg # $hget(#,p1) $+ 's turn.
    msg # Top card: $hget(#,top)
    notice $nick Your cards: $hget(#,$nick)
  }
}
on $*:text:/^[@!.](endgame|uno(stop|end))$/Si:#:{
  if (!$hget(#,p1)) return
  elseif ($nick != $hget(#,p1)) msg # Only $v2 can end the game.
  else {
    hfree #
    msg # Game ended by $nick $+ .
  }
}
on $*:text:/^[@!.]quit$/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  else remplayer # $nick $nick has left the game.
}
on $*:text:/^[@!.]kickplayer (.+)$/Si:#:{
  if (!$hget(#,p1)) return
  elseif ($nick != $hget(#,p1)) msg # Only $v1 can kick people from the game.
  elseif (!$hget(#,$regml(1))) msg # $regml(1) is not in this game.
  else remplayer # $regml(1) $regml(1) has been kicked from the game by $nick $+ .
}
on $*:text:/^[@!.](show)?(hand|cards?)$/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  else notice $nick Your cards: $hget(#,$nick)
}
on $*:text:/^[@!.](uno)?count$/Si:#:{
  if (!$hget(#,p1)) return
  else {
    $iif($left($1,1) == @,msg #,notice $nick) Current score: $regsubex($str(.,$hget(#,players)),/./g,$+($hget(#,p\n),:,$chr(32),$numtok($hget(#,$hget(#,p\n)),32),$chr(32))) 
    $iif($left($1,1) == @,msg #,notice $nick) Its $hget(#,p $+ $hget(#,turn)) $+ 's turn.
  }
}
on $*:text:/^[@!.]topcard$/Si:#:{
  if (!$hget(#,p1)) return
  msg # Top card: $hget(#,top)
}
on $*:text:/^[@!.]draw ?(card)?$/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn.
  else {
    var %c = $cards(1)
    hadd # $nick $instok($hget(#,$nick),%c,0,32)
    notice $nick You drew: %c
    hadd # pass $nick
  }
}
on $*:text:/^[@!.]pass$/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn.
  elseif ($hget(#,pass) != $nick) notice $nick You have to draw once first.
  else {
    nextturn
    var %nnick = $hget(#,p $+ $hget(#,turn))
    msg # %nnick $+ 's turn
    msg # Top card: $hget(#,top)
    notice %nnick Your cards: $hget(#,%nnick)
    hdel # pass
  }
}
on $*:text:/^[@!.]play/Si:#:{
  if (!$hget(#,p1)) return
  elseif (!$hget(#,$nick)) notice $nick You aren't in this game.
  elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn.
  elseif (!$iscard($2-)) notice $nick Syntax: !play <color> <card> or !play WD4/W <color>
  elseif (!$hascard($2-,$nick)) notice $nick You don't have that card.
  else {
    noop $regex($iscard($2-),/^\x03(\d{2})(\[.+?\])$/)
    var %co = $regml(1), %c = $regml(2)
    if (%co isin $hget(#,top)) || (%c == $strip($hget(#,top))) || (%c == [*]) {
      delcard $nick $2-
      hadd # top $iscard($2-)
      if (%c == [D2]) {
        nextturn
        var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg
        hadd # %snick $instok($hget(#,%snick),$cards(2),0,32)
        nextturn
        %nnick = $hget(#,p $+ $hget(#,turn))
        %msg = %snick draws 2 cards and is skipped! %nnick $+ 's turn.        
      }
      elseif (%c == [S]) {
        nextturn
        var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg
        nextturn
        %nnick = $hget(#,p $+ $hget(#,turn))
        %msg = %snick is skipped, %nnick $+ 's turn.
      }
      elseif (%c == [R]) {
        hadd # rev $iif($hget(#,rev),$false,$true)
        nextturn
        var %nnick = $hget(#,p $+ $hget(#,turn)), %msg = $nick reversed it $+ $chr(44) %nnick $+ 's turn.
      }
      elseif (%c == [*]) && (4 isin $2-) {
        nextturn
        var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg
        hadd # %snick $instok($hget(#,%snick),$cards(4),0,32)
        nextturn
        %nnick = $hget(#,p $+ $hget(#,turn))
        %msg = %snick draws 4 and is skipped! %nnick $+ 's turn.
      }
      elseif (%c == [*]) {
        nextturn
        var %nnick = $hget(#,p $+ $hget(#,turn)), %msg = %nnick $+ 's turn.
      }
      else {
        nextturn
        var %nnick = $hget(#,p $+ $hget(#,turn)), %msg = %nnick $+ 's turn.
      }
      if ($numtok($hget(#,$nick),32) == 1) msg # $nick has 3U04N12O!
      elseif (!$v1) {
        msg # Congratulations $nick you win!!!
        hfree #
        hinc uno $nick
        return
      }
      msg # %msg
      msg # Top card: $hget(#,top)
      notice %nnick Your cards: $hget(#,%nnick)
      hdel # pass
    }
    else notice $nick That card doesn't play.
  }
}
alias cards {
  var %c = 12[1] 12[2] 12[3] 12[4] 12[5] 12[6] 12[7] 12[8] 12[9] 09[1] 09[2] 09[3] 09[4] 09[5] 09[6] 09[7] 09[8] 09[9] $&
    08[1] 08[2] 08[3] 08[4] 08[5] 08[6] 08[7] 08[8] 08[9] 04[1] 04[2] 04[3] 04[4] 04[5] 04[6] 04[7] 04[8] 04[9] 01[WD4] $&
    01[WD4] 01[WD4] 01[WD4] 12[D2] 12[D2] 09[D2] 09[D2] 08[D2] 08[D2] 04[D2] 04[D2] 12[S] 12[S] 09[S] 09[S] 08[S] 08[S] $&
    04[S] 04[S] 12[R] 12[R] 09[R] 09[R] 08[R] 08[R] 04[R] 04[R] 01[W] 01[W] 01[W] 01[W]
  var %i = $1, %o
  while (%i) { 
    %o = $instok(%o,$gettok(%c,$r(1,68),32),0,32)
    dec %i
  }
  return %o
}
alias iscard {
  if ($regex($1,/^([bgyr])\w* (\d)$/i)) return $+($col($regml(1)),[,$regml(2),])
  elseif ($regex($1,/^w(?:ild)? ?d?(?:raw)? ?4? ([bgyr])/i)) return $col($regml(1)) $+ [*]
  elseif ($regex($1,/^([bgyr])\w* d(?:raw)?2$/i)) return $col($regml(1)) $+ [D2]
  elseif ($regex($1,/^([bgyr])\w* ([sr])\w*$/i)) return $+($col($regml(1)),[,$upper($regml(2)),])
}
alias col {
  if ($1 == b) return 12
  elseif ($1 == g) return 09
  elseif ($1 == y) return 08
  else return 04
}
alias nextturn {
  var %c = $iif(#,#,$1)
  $iif($hget(%c,rev),hinc,hdec) %c turn
  if (!$hget(%c,p $+ $hget(%c,turn))) hadd %c turn $iif($hget(%c,rev),1,$hget(%c,players))
}
alias hascard {
  var %c = $iscard($1)
  if ($strip(%c) == [*]) {
    if (4 isin $1) return $istok($hget(#,$2),01[wd4],32)
    else return $istok($hget(#,$2),01[W],32)
  }
  else return $istok($hget(#,$2),%c,32)
}
alias delcard {
  var %c = $iscard($2-), %o
  if ($strip(%c) == [*]) %o = $iif(4 isin $2-,01[wd4],01[W])
  else %o = %c
  hadd # $1 $remtok($hget(#,$1),%o,1,32)
}
alias remplayer {
  var %p = $hfind($1,$2).data, %i = $right(%p,-1)
  hdel $1 $2
  hdel $1 %p
  hdec $1 players
  msg $1 $3-
  if ($hget($1,players) == 1) { 
    msg $1 Game ended, you need atleast two people to uno.
    hfree $1
  }
  else {
    if (!$hget($1,p $+ $hget($1,turn))) {
      if (!$hget($1,top)) return
      nextturn $1
      var %nnick = $hget($1,p $+ $hget($1,turn))
      msg $1 %nnick $+ 's turn.
      msg $1 Top card: $hget($1,top)
      notice %nnick Your cards: $hget($1,%nnick)
    }
    while (%i <= $hget($1,players)) {
      hadd $1 p $+ %i $hget($1,p $+ $calc(%i +1))
      hdel $1 p $+ $calc(%i +1)
      inc %i
    }
  }
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...