Hi-Lo Multiplayer Version (with AIs + Stats + 4 Players Max)

By manish17xxx on May 19, 2017

COMMANDS -

!high - go high
!low - go low
!stats user - See the stats of any user
!hilo - Start game
!start solo - Start a solo game , i.e, play alone.
!start multi : Start a multiplayer game with given number of players.

############################################################
##       Hi-Lo Multiplayer Version Script ( with Stats and AI Players)            ##
##       Version: 1.0              ##
##       By: manish17               ##
##       irc.lunarirc.net   #LunarIRC   User - manish  
  Follow my blog : https://manishsnippets.blogspot.com ##
############################################################
on *:TEXT:!hilo*:#: {
  if ( %hilo != on ) && (%ongoing == $null) {
    set %hilo on
set %chan $chan
    set %o 0
    msg $chan 3 Hi-Lo game has been started. 13 cards are taken, and a random card is drawn and removed every time. You need to guess whether the next card is higher or lower than the previous card.
    msg $chan 9 Type !start Solo or !start multi to start a Solo Game or a Multiplayer Game respectively.    
  }
  else {
    msg $chan 9 Type !start Solo or !start multi to start a Solo Game or a Multiplayer Game respectively.
  }  
}

on *:TEXT:!start*:#: {
  if ( %hilo == on ) && ( %o == 0 ) && ( $2 == solo ) {
    inc %o
    set %gamemode solo
    set %nick $nick
    set %chan $chan
    msg $chan 6 Game of High-Low has been started by $nick . Current champion: %champ .
    startg
    msg %chan 4,0♥ $+ %oldcard 4,010 has been chosen! 12 cards remaining in the deck.
    msg %chan 6 $nick may choose to go !high or go !low
    timer 1 30 timeout
  }
  elseif ( %hilo == on ) && ( %o == 0 ) && ( $2 == multi ) {
    inc %o
    set %chan $chan
    set %gamemode multiplayer
    unset %game
    set %multi started
    set %cards 2.3.4.5.6.7.8.9.10.J.Q.K.A
    set %AInames ProMan LucyFir StupidTolga
    if ( $3 isnum ) && ( $3 >= 2 ) && ( $3 <= 4 ) {
      set %playing $3
    }
    else { set %playing 4 }
    msg %chan 6 A game of Hi-Lo Multiplayer has been started. Type !join to join. You have 30 seconds..
    set %joining on
    timer 1 15 msg %chan 10 15 seconds left... If enough players do not join, AI Players will be joining.
    timer 1 30 timeup

  }
  elseif ( %o == 1 ) {
    msg $chan 7 A game of High-Low %gamemode is already in progress in %chan .
  }
  else {
  msg $chan 6 Please start a game of High-Low by typing !hilo . }
}
alias startg {
  getinfo %nick
  inc %sgp
  makedata %nick
  set %score 0
  set %cards 2.3.4.5.6.7.8.9.10.J.Q.K.A
  set %total $numtok(%cards,46)
  set %x $rand(1,%total)
  set %oldcard $gettok(%cards,%x,46)
  %cards = $deltok(%cards,%x,46)
}
on *:TEXT:!stophilo*:#: {
  if ( $nick isop %chan ) {
    end
    msg %chan 14  Game has been stopped by $nick .
  }
}
on *:TEXT:!high*:#: {
  timers off
  if ( $nick == %tplayer ) {
    go high
  }
  elseif ( $nick == %nick) {  
    ignore %nick
    timer 1 1 msg %chan 10 $nick goes for high.
    set %total $numtok(%cards,46)
    set %x $rand(1,%total)
    set %newcard $gettok(%cards,%x,46)
    %cards = $deltok(%cards,%x,46)
    set %oldval $value(%oldcard)
    set %newval $value(%newcard)
    if ( %newval > %oldval ) {
      inc %score
      timer 1 5 msg %chan 14  The next card is 4,0♥ $+ %newcard 4,0 .
      timer 1 5 msg %chan 6 $numtok(%cards,46) cards remaining in the deck.
      timer 1 5 msg %chan 6 $nick makes a correct choice and is still in the game.
      timer 1 7 msg %chan 10 Current score of $nick : %score
      timer 1 7 ignore -r %nick
      timer 1 37 timeout
      if ( %score == 12 ) {
        timer 1 8 msg %chan 9 $nick has won the game of High-Low with a top-class score of 12, and is the new champion!
        getinfo %nick
        if ( %score > %hs ) { set %hs %score }
        makedata %nick
        set %champ $nick
        unset %o
        set %hilo off
        unset %nick
timers off
      }

    }
    else {
      timer 1 4 msg %chan 14  The next card is 4,0♥ $+ %newcard 4,0 .
      timer 1 5 msg %chan 4 Game Over! $nick loses the game with a total score of %score . Well played!
      ignore -r %nick
      getinfo %nick
      if ( %score > %hs ) { set %hs %score }
      makedata %nick
      unset %o
      set %hilo off
      unset %nick
    }
    set %oldcard %newcard
  }
}
on *:TEXT:!low*:#: {
  timers off
  if ( $nick == %tplayer ) {
    go low
  }
  elseif ( $nick == %nick) {  
    ignore %nick
    timer 1 1 msg $chan 10 $nick goes for low.
    set %total $numtok(%cards,46)
    set %x $rand(1,%total)
    set %newcard $gettok(%cards,%x,46)
    %cards = $deltok(%cards,%x,46)
    set %oldval $value(%oldcard)
    set %newval $value(%newcard)
    if ( %newval < %oldval ) {
      inc %score
      timer 1 5 msg %chan 14  The next card is 4,0♥ $+ %newcard 4,0 .
      timer 1 5 msg %chan 6 $numtok(%cards,46) cards remaining in the deck.
      timer 1 5 msg %chan 6 $nick makes a correct choice and is still in the game.
      timer 1 7 msg %chan 10 Current score of $nick : %score
      timer 1 7 ignore -r %nick
      timer 1 37 timeout
      if ( %score == 12) {
        timer 1 8 msg %chan 9 $nick has won the game of High-Low with a top-class score of 12, and is the new champion!
        getinfo %nick
        if ( %score > %hs ) { set %hs %score }
        makedata %nick
        set %champ $nick
        unset %o
        set %hilo off
        unset %nick
        timers off
      }
    }
    else {
      timer 1 4 msg %chan 14  The next card is 4,0♥ $+ %newcard 4,0 .
      timer 1 5 msg %chan 4 Game Over! $nick loses the game with a total score of %score . Well played!
      ignore -r %nick
      getinfo %nick
      if ( %score > %hs ) { set %hs %score }
      makedata %nick
      unset %o
      set %hilo off
      unset %nick

    }
    set %oldcard %newcard
  }
}

alias -l value return $iif($1 isnum,$1,$+(1,$pos(JQKA,$1,1)))

alias  timeout {
  msg %chan 4 Sorry %nick , you ran out of the time-limit (30 seconds) and eventually lose the game with the score %score .
  getinfo %nick
  if ( %score > %hs ) { set %hs %score }
  makedata %nick
  unset %o
  set %hilo off
  notice %nick Please Wait 30 seconds if you want to play again.
  ignore -cu30 %nick
  unset %nick
}
alias  go {
  timers off
  ignore %tplayer
  timer 1 1 msg %chan 10 %tplayer decides to go $1 .
  getnewcard
  set %decision $1
  set %oldval $value(%oldcard)
  set %newval $value(%newcard)
  timer 1 3 msg %chan The next card is 4,0♥ $+ %newcard 4,0 .
  if ( %decision == high ) && ( %newval > %oldval ) {
    timer 1 4 msg %chan 9 %tplayer makes a correct choice and is still in the game.
    set %mcb $gettok(%corr,%turn,46)
    inc %mcb
    set %corr $deltok(%corr,%turn,46)
    set %corr $instok(%corr,%mcb,%turn,46)
  }
  elseif ( %decision == low ) && ( %newval < %oldval ) {
    timer 1 4 msg %chan 9 %tplayer makes a correct choice and is still in the game.
    set %mcb $gettok(%corr,%turn,46)
    inc %mcb
    set %corr $deltok(%corr,%turn,46)
    set %corr $instok(%corr,%mcb,%turn,46)

  }
  else {
    timer 1 4 msg %chan 4 %tplayer makes a wrong choice and loses a life.
    %life = $gettok(%lifes,%turn,46)
    set %life $calc(%life - 1)
    set %lifes $deltok(%lifes,%turn,46)
    set %lifes $instok(%lifes,%life,%turn,46)

  }
  timer 1 6 showlifes
  timer 1 8 getout
}

alias -l showlifes {
  var %pk = 1
  while ( %pk <= %playing ) {
    set %display %display 6   $gettok(%players,%pk,32) $+ : $gettok(%lifes,%pk,46)
    inc %pk
  }
  msg %chan 3 Current Lives : %display
  unset %display
}

alias -l getout {
  if ( $istok(%lifes,0,46) ) {
    getinfo %tplayer
    set %correct $gettok(%corr,%turn,46)
    set %cg $calc(%cg + %correct)
    set %wg $calc(%wg + 3)
    set %corr $deltok(%corr,%turn,46)
    makedata %tplayer
    set %lifes $remtok(%lifes,0,0,46)
    msg %chan 4 %tplayer has lost all their lives and is now out of the game, finishing with 10 coins. Adieu!  
coins %tplayer 10
    ignore -r %tplayer
    set %players $remtok(%players,%tplayer,0,32)
    set %playing $calc(%playing - 1)
    set %turn $calc(%turn - 1)
  }
  if ( %playing == 1 ) {
    timer 1 2 winner
  }
  else { continuegame }
}

alias -l shuffle {
  if ( $numtok(%cards,46) == 0 ) {
    msg %chan 13 The other cards are being taken again and re-shuffled!
    set %cards 2.3.4.5.6.7.8.9.10.J.Q.K.A
    set %cards $remtok(%cards,%newcard,1,46)
} }
alias -l aiornot {
  if ( $1 == $gettok(%AInames,1,32) ) {
    var %highchance = 0
    var %lowchance = 0
    var %p = 1
    while ( %p <= $numtok(%cards,46) ) {
      set %curcard $gettok(%cards,%p,46)
      set %curvalue $value(%curcard)
      if ( %curvalue > $value(%newcard) ) { inc %highchance }
      else { inc %lowchance }
      inc %p
    }
    if ( %highchance > %lowchance ) {
      go high
    }
    else {
      go low
    }
  }
  elseif ( $1 == $gettok(%AInames,2,32) ) {
    set %newval $value(%newcard)
    var %highchance = 14 - %newval
    var %lowchance = %newval - 2
    if ( %highchance > %lowchance ) {
      go high
    }
    else {
      go low
    }
  }
  elseif ( $1 == $gettok(%AInames,3,32) ) {
    set %y $rand(1,2)
    if ( %y == 1 ) {
      go high
    }
    else {
      go low
    }
  }
}
alias -l winner {
  set %winner $gettok(%players,1,32)
  msg %chan 10 $gettok(%players,1,32) has won the game with %lifes lives remaining, earning 25 coins.
coins %winner 25
  ignore -r %winner
  getinfo %players
  set %correct %corr
  set %cg $calc(%cg + %correct)
  set %wg $calc(3 - %lifes)
  inc %mgw
  makedata %players
  end
}
alias -l end {
  timers off
  ignoreall 3
  unset %players %ongoing %turn %tplayer %multi %playing %ai %life %lifes %m %hilo %o %corr
  set %game over
}

alias -l continuegame {
  if ( %game == $null ) {
    inc %turn
    if ( %turn > %playing ) {
      set %turn 1
      ignoreall
    }
    set %tplayer $gettok(%players,%turn,32)
    msg %chan 10 Its %tplayer 's turn to continue. They may choose to go !high or go !low .
    ignore -r %tplayer
    timer 1 20 gone
    aiornot %tplayer
  }
}

alias -l getnewcard {
  if ( $numtok(%cards,32) == 0 ) {  shuffle }
  set %oldcard %newcard
  set %total $numtok(%cards,46)
  set %x $rand(1,%total)
  set %newcard $gettok(%cards,%x,46)
  %cards = $deltok(%cards,%x,46)
}
alias -l getai {
  var %i = 1
  while ( %i <= 3 ) {
    set %ai $gettok(%AInames,%i,32)
    set %players %players %ai
    inc %i
  }
  set %players $gettok(%players,1- $+ %playing $+ ,32)
  msg %chan 9 AI Player(s) have joined the game.
}
on *:TEXT:!join*:#: {
  if ( %playing != $null ) && ( %joining == on ) {
    if ( $nick isin %players ) { notice $nick You are already playing. }
    elseif ( $istok(%AInames,$nick,32) ) { notice $nick You cannot use that nickname. }
    else {
      getinfo $nick
      inc %mgp
      makedata $nick
      msg %chan 3 $nick has joined the game.
      set %players %players $nick
      if ( $numtok(%players,32) == %playing ) {
        msg %chan 13 The game may be started now.
        set %joining off
        timers off
        start
} } } }

alias -l timeup {
  msg %chan 10 Time is up!
  if ( $numtok(%players,32) == 0 ) {
    msg %chan 10 Nobody has joined. Game is turning off.
    unset %playing
    unset %multi
    end
  }
  else {
    getai
    set %joining off
    start
  }
}

alias -l start {
  set %turn 1
  set %tplayer $gettok(%players,1,32)
  set %lifes $left(3.3.3.3, $+ $calc(2 * %playing - 1))
  set %corr $replace(%lifes,3,0)
  set %total $numtok(%cards,46)
  set %x $rand(1,%total)
  set %oldcard $gettok(%cards,%x,46)
  %cards = $deltok(%cards,%x,46)
  set %newcard %oldcard
  msg %chan 4,0♥ $+ %oldcard 4,010 has been chosen! 12 cards remaining.
  msg %chan 6 Its %tplayer 's turn to start the game. They may choose to go !high or go !low .
  timer 1 20 gone
}

alias -l gone {
  msg %chan 4 %tplayer ran out of time to make a choice and loses a life.
  ignoreall
  %life = $gettok(%lifes,%turn,46)
  set %life $calc(%life - 1)
  set %lifes $deltok(%lifes,%turn,46)
  set %lifes $instok(%lifes,%life,%turn,46)
  showlifes
  getout
}
alias -l ignoreall {
  var %pq = 1
  while ( %pq <= %playing ) {
    if ( $1 == $null ) { ignore $gettok(%players,%pq,32) }
    else { ignore -r $gettok(%players,%pq,32) }
    inc %pq
  }
}

alias getinfo {
  if ( $istok(%AInames,$1,32) ) { return }
  elseif (!$read(hilo.txt,w,* $+ $1 $+ * ) ) { write hilo.txt $1 0 0 0 0 0 0 | getinfo $1 }
  set %info $read(hilo.txt,w,* $+ $1 $+ * )
set %in $gettok(%info,1,32)
  set %mgp $gettok(%info,2,32)
  set %mgw $gettok(%info,3,32)
  set %cg $gettok(%info,4,32)
  set %wg $gettok(%info,5,32)
  set %sgp $gettok(%info,6,32)
  set %hs $gettok(%info,7,32)
}

alias -l makedata {
  if ( $istok(%AInames,$1,32) ) { return }
  set %todel $read(hilo.txt,w,* $+ $1 $+ * )
  set %no $readn $+
  write -dl $+ %no hilo.txt
  write hilo.txt $1 %mgp %mgw %cg %wg %sgp %hs

}

alias -l coins {
  if ($read(coins.txt,w,* $+ $1 $+ *)) {
    set %n $readn $+
    set %data $read(coins.txt,w,* $+ $1 $+ *)
    set %current $gettok(%data,2,32)
    set %new $calc(%current + $2)
    set %data $replace(%data,%current,%new)
    write -dl $+ %n coins.txt
    write coins.txt %data
  }
  else {
    write coins.txt $1 $2
  }
}

on *:TEXT:!stats*:#: {
  if ( $2 == $null) { return }
  getinfo $2
  msg $chan 6 Hi-Lo Stats for %in :
  msg $chan 10⚔Multiplayer:11 ❂Games Played:6 %mgp 11 ✬Games Won:6 %mgw 11 ☠Guesses (9☑/4☒): 6 %cg $+ / $+ %wg
  msg $chan 10☃Solo:11 ♙Games Played:6 %sgp 11 ❆Highest Score:6 %hs
  }

Comments

Sign in to comment.
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.