Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ############################################################
- ## Nim Multiplayer Version Script ( with AI Players) ##
- ## Version: 1.0 ##
- ## By: manish ##
- ## irc.lunarirc.net #LunarIRC #LunarGames User - manish
- ## COMMANDS ##
- !nim - Start the game!
- !pick <first letter of box> <No of gems> - Pick gems from any of the boxes ( Make sure there are enough number of gems present)
- !replace - Replace yourself with an AI Player who will be playing instead of you.
- ############################################################
- on *:TEXT:!nim*:#: {
- if (%nim != on) && (%ongoing == $null) {
- set %ongoing Nim
- set %nim on
- set %aiplayers Pro Man.Lucy Fir
- set %players $nick
- set %playing 1
- set %chan $chan
- timer 1 1 msg $chan 6 A Game of Nim has been started by %players $+ . 10 There are certain number of gems in each box. You can pick a maximum of 3 gems from any box on your turn. Your task is to force the opponent to pick the last remaining gem.
- timer 1 3 msg %chan 11 Type !accept to fight against him. 17 seconds left...
- timer 1 20 nobody
- }
- }
- alias -l nobody {
- timers off
- timer 1 1 msg %chan 7 Looks like nobody accepted the challenge. 3 AI Player $gettok(%aiplayers,1,46) is joining the game.
- inc %playing
- set %players %players $+ . $+ $gettok(%aiplayers,1,46)
- set %valid 0
- timer 1 3 msg %chan 9 $gettok(%players,2,46) has accepted the challenge of $gettok(%players,1,46) and now, it's time to start the game of Nim.
- timer 1 5 startgame
- }
- on *:TEXT:!accept*:#: {
- if (%nim == on) && (%playing == 1) && ($nick != %players) {
- timers off
- inc %playing
- set %players %players $+ . $+ $nick
- set %valid 0
- timer 1 1 msg %chan 9 $nick has accepted the challenge of $gettok(%players,1,46) and now, it's time to start the game of Nim.
- timer 1 3 startgame
- }
- }
- alias -l startgame {
- timers off
- set %list G.S.B.L
- set %boxes Gold.Silver.Bronze.Lead
- set %gold 5
- set %silver $rand(6,7)
- set %bronze $rand(7,9)
- set %lead $rand(5,9)
- set %total $calc(%gold + %silver + %bronze + %lead)
- set %gems %gold $+ . $+ %silver $+ . $+ %bronze $+ . $+ %lead
- set %turn 1
- set %tplayer $gettok(%players,1,46)
- timer 1 2 msg %chan 2 The number of gems selected in the boxes are : %gold %silver %bronze %lead
- timer 1 4 showgems
- timer 1 5 msg %chan 6 Its %tplayer $+ 's turn to start the game.
- if ($istok(%aiplayers,%tplayer,46) ) { timer 1 5 ailogic }
- timer 1 5 notice %tplayer To pick gems, type !pick <first letter of box> <no of gems>
- timer 1 5 set %started on
- timer 1 45 timeont
- }
- alias -l showgems {
- msg %chan 6 Current Gems : 7Gold: $gettok(%gems,1,46) 15Silver: $gettok(%gems,2,46) 5Bronze: $gettok(%gems,3,46) 6Lead: $gettok(%gems,4,46)
- }
- alias -l checkvalidity {
- if ($1 == $null) || ($2 == $null) || (!$istok(%list,$1,46)) {
- notice %tplayer The correct syntax is !pick <First letter of box> <No of gems>
- }
- elseif ($2 !isnum) || ($2 <= 0) || ($2 > 3) {
- notice %tplayer You should pick 1,2 or 3 number of gems from a particular box.
- }
- else {
- set %choice $2
- set %box $findtok(%list,$1,1,46)
- set %boxed $gettok(%boxes,%box,46)
- set %tgem $gettok(%gems,%box,46)
- if ($calc(%tgem - $2) < 0) {
- notice $nick You cannot pick more gems than there are in the box.
- }
- else {
- inc %valid
- }
- }
- }
- on *:TEXT:!stopnim*:#: {
- if ($nick isop %chan) {
- end
- }
- }
- on *:TEXT:!replace*:#: {
- if ($nick == %tplayer) {
- set %first $gettok(%aiplayers,1,46)
- set %second $gettok(%aiplayers,2,46)
- if $istok(%players,%first,46) { set %x 2 }
- else { set %x 1 }
- msg %chan 10 $nick has been replaced with $gettok(%aiplayers,%x,46) .
- set %tplayer $gettok(%aiplayers,%x,46)
- set %players $replace(%players,$nick,%tplayer)
- ailogic
- }
- }
- on *:TEXT:!pick*:#: {
- if (%started == on) && ($nick == %tplayer) {
- timers off
- checkvalidity $2-
- if (%valid == 1) {
- set %valid 0
- msg %chan 3 %tplayer has picked up $3 gems from the %boxed box.
- set %new $calc(%tgem - $3)
- set %gems $deltok(%gems,%box,46)
- set %gems $instok(%gems,%new,%box,46)
- set %total $calc(%total - $3)
- timer 1 3 showgems
- if (%total == 1) { timer 1 4 finishgame }
- elseif (%total == 0) { timer 1 4 loseyou }
- else {
- inc %turn
- if (%turn > 2) { set %turn 1 }
- set %tplayer $gettok(%players,%turn,46)
- timer 1 5 msg %chan 6 Its %tplayer $+ 's turn to continue the game.
- if ($istok(%aiplayers,%tplayer,46) ) { timer 1 5 ailogic }
- timer 1 5 notice %tplayer To pick gems, type !pick <first letter of box> <no of gems>
- timer 1 45 timeont
- }
- }
- }
- }
- alias -l loseyou {
- timers off
- timer 1 1 msg %chan 4 %tplayer picked up all the gems, and so he has lost the game eventually. R.I.P!!
- set %players $remtok(%players,%tplayer,1,46)
- timer 1 3 msg %chan 13%players has won the game, earning 20 coins!
- timer 1 3 coins %players 20
- timer 1 5 end
- }
- alias -l finishgame {
- coins %tplayer 20
- timers off
- timer 1 3 msg %chan 6 There is only 1 gem remaining and so, 5 %tplayer wins the game, earning 20 coins.
- timer 1 4 end
- }
- alias -l end {
- timers off
- msg %chan 10 Game has been finished/stopped.
- unset %ongoing %started %nim %playing %players %turn %chan
- }
- alias -l timeont {
- set %ok 1
- msg %chan 6 %tplayer ran out of time, and so he will be making a default move.
- getmove
- }
- alias -l ailogic {
- timers off
- if (%total >= 9 ) { set %ok $rand(2,3) }
- elseif (%total >= 5 ) { set %ok $rand(1,2) }
- elseif (%total == 4) && ($istok(%gems,3,46)) { set %ok 3 }
- else { set %ok 1 }
- getmove
- }
- alias -l getmove {
- if ($gettok(%gems,1,46) >= %ok) { set %bc 1 | set %bx G }
- elseif ($gettok(%gems,2,46) >= %ok) { set %bc 2 | set %bx S }
- elseif ($gettok(%gems,3,46) >= %ok) { set %bc 3 | set %bx B }
- else { set %bc 4 | set %bx L }
- set %tgem $gettok(%gems,%bc,46)
- set %boxed $gettok(%boxes,%bc,46)
- set %new $calc(%tgem - %ok)
- set %gems $deltok(%gems,%bc,46)
- set %gems $instok(%gems,%new,%bc,46)
- set %total $calc(%total - %ok)
- timer 1 3 msg %chan 11 %tplayer picks up %ok gems from the %boxed box.
- timer 1 5 showgems
- if (%total == 1) { timer 1 4 finishgame }
- elseif (%total == 0) { timer 1 4 loseyou }
- else {
- inc %turn
- if (%turn > 2) { set %turn 1 }
- set %tplayer $gettok(%players,%turn,46)
- timer 1 5 msg %chan 6 Its %tplayer $+ 's turn to continue the game.
- if ($istok(%aiplayers,%tplayer,46) ) { timer 1 5 ailogic }
- timer 1 45 timeont
- }
- }
- alias -l coins {
- if ($istok(%aiplayers,$1-2,46)) { 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
- }
- }
Add Comment
Please, Sign In to add comment