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
ignore -r
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 ( $istok(%AInames,$1,32) ) { return }
elseif ($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
}