I found this game of stone-paper-scissors and want to improve it ...
How I can do to saved the scores for each user who plays on each channel and, at the same time if one of the users win 5 times end the game?
####################################################
# Author : TALES 24-08-2003 #
# File name: ssp.tcl #
# version script : v1 #
# Script info : This is a little game for channel #
# hope you like the game. #
# cmd like: !choose scissor #
# !choose stone #
# !choose paper #
####################################################
# if you got any questions you #
# can find me @ irc.chatcity.nl #
# http://www.cb3rob.net/~tales/ #
####################################################
# this script is made for eggdrop 1.6.13 #
# but should work on al 1.6.* versions #
# use of this script is for your own risk! #
####################################################
# Credits : Fr33man_, Ace^ #
####################################################
bind pub - !choose msg_ssp
set ssp_list {
"scissor"
"stone"
"paper"
}
proc msg_ssp {nick uhost hand chan rest} {
global botnick ssp_list
set ssp [lindex $ssp_list [rand [llength $ssp_list]]]
set cmd [string tolower [lindex $rest 0]]
if { ($cmd == $ssp) } {
putserv "PRIVMSG $chan :You have \0037$cmd\003 and i have \0037$ssp\003 game \00312-draw-\003"
return 0
}
if {$cmd == "stone"} {
if {$ssp == "paper"} {
putserv "PRIVMSG $chan :You have \0037Stone\003 and i have \0037Paper\003 you \0034-lose-\003"
return 0
}
if {$ssp == "scissor"} {
putserv "PRIVMSG $chan :You have \0037Stone\003 and i have \0037Scissor\003 you \0033-won-\003"
return 0
}
}
if {$cmd == "paper"} {
if {$ssp == "stone"} {
putserv "PRIVMSG $chan :You have \0037Paper\003 and i have \0037Stone\003 you \0033-won-\003"
return 0
}
if {$ssp == "scissor"} {
putserv "PRIVMSG $chan :You have \0037Paper\003 and i have \0037Scissor\003 you \0034-lose-\003"
return 0
}
}
if {$cmd == "scissor"} {
if {$ssp == "stone"} {
putserv "PRIVMSG $chan :You have \0037Scissor\003 and i have \0037Stone\003 you \0034-lose-\003"
return 0
}
if {$ssp == "paper"} {
putserv "PRIVMSG $chan :You have \0037Scissor\003 and i have \0037Paper\003 you have \0033-won-\003"
return 0
}
}
}
putlog "ssp.tcl v1 made by TALES loaded succesfully."
If you do not understand my ideas is because I can not think in English, I help me with Google Translate. I only speak Spanish. Bear with me. Thanks
namespace eval ssp {
variable maxScore 5
variable ssp [list "scissor" "stone" "paper"]
bind pub - !choose [namespace current]::choose
bind pub o|o !reset [namespace current]::reset
proc choose {nick uhost hand chan text} {
variable ssp
variable diceScore
set random [lindex $ssp [rand [llength $ssp]]]
if {[scan $text {%s} pick] != 1} {
putserv "PRIVMSG $chan :To play the game choose one from \"[join $random]\" and make your choose like: !choose $random"
return
}
set pick [string tolower $pick]
set won 0
if {[string equal $random $pick]} {
putserv "PRIVMSG $chan :You have \0037$pick\003 and i have \0037$random\003 game \00312-draw-\003"
} else {
switch -- $pick {
"stone" {
if {[string equal $random "paper"]} {
putserv "PRIVMSG $chan :You have \0037Stone\003 and i have \0037Paper\003 you \0034-lose-\003"
} elseif {$random eq "scissor"} {
putserv "PRIVMSG $chan :You have \0037Stone\003 and i have \0037Scissor\003 you \0033-won-\003"
incr won
}
}
"paper" {
if {[string equal $random "scissor"]} {
putserv "PRIVMSG $chan :You have \0037Paper\003 and i have \0037Scissor\003 you \0034-lose-\003"
} elseif {$random eq "stone"} {
putserv "PRIVMSG $chan :You have \0037Paper\003 and i have \0037Stone\003 you \0033-won-\003"
incr won
}
}
"scissor" {
if {[string equal $random "stone"]} {
putserv "PRIVMSG $chan :You have \0037Scissor\003 and i have \0037Stone\003 you \0034-lose-\003"
} elseif {$random eq "paper"} {
putserv "PRIVMSG $chan :You have \0037Scissor\003 and i have \0037Paper\003 you have \0033-won-\003"
incr won
}
}
default {
putserv "PRIVMSG $chan :Sorry, your pick is not valid. You must choose one from: [join $ssp]"
}
}
}
if {$won} {
set pos [getPos $chan $nick]
set score [expr $pos != -1 ? [getScore $chan $nick] : 0]
set newScore [incr score]
if {$pos != -1} {
set diceScore($chan) [lreplace $diceScore($chan) $pos $pos [list $nick $newScore]]
} else {
lappend diceScore($chan) [list $nick 1]
}
}
if {[checkScore $chan]} {
array unset diceScore $chan
putserv "PRIVMSG $chan :Congrats to $nick! He won this round!"
}
}
proc reset {nick uhost hand chan text} {
variable diceScore
array unset diceScore $chan
}
proc checkScore {chan} {
variable diceScore
variable maxScore
set x 0
if {[info exists diceScore($chan)]} {
foreach {player score} [join $diceScore($chan)] {
if {$score < $maxScore} continue
incr x
break
}
}
return $x
}
proc getPos {chan nick} {
set pos -1
set match 0
variable diceScore
if {[info exists diceScore($chan)]} {
foreach {player score} [join $diceScore($chan)] {
incr pos
if {![string equal -nocase $player $nick]} continue
incr match
break
}
}
return [expr $match ? "$pos" : "-1"]
}
proc getScore {chan nick} {
set x 0
variable diceScore
if {[info exists diceScore($chan)]} {
foreach {player score} [join $diceScore($chan)] {
if {![string equal -nocase $player $nick]} continue
incr x $score
break
}
}
return $x
}
}
<cez> !choose bla
<@bot> Sorry, your pick is not valid. You must choose one from: scissor stone paper
<cez> !choose stone
<@bot> You have Stone and i have Scissor you -won-
<cez> !choose stone
<@bot> You have stone and i have stone game -draw-
<cez> !choose stone
<@bot> You have Stone and i have Scissor you -won-
<cez> !choose stone
<@bot> You have Stone and i have Scissor you -won-
<cez> !choose stone
<@bot> You have Stone and i have Paper you -lose-
<cez> !choose stone
<@bot> You have Stone and i have Scissor you -won-
<cez> !choose stone
<@bot> You have Stone and i have Paper you -lose-
<cez> !choose stone
<@bot> You have Stone and i have Scissor you -won-
<@bot> Congrats to cez! He won this round!
This should be extended to monitor nick change, kick, part and quit and also do some resets every 30 minutes, 1 hour or whatever. I added a !reset in case something goes wrong, but you can remove it.
Once the game is over, the king and the pawn go back in the same box.
Then I 'll see if I can add something in order to that a nick can not play until his turn comes .
Sometimes , they play more than once out of turn.
Example:
If nicks A, B , C , D and E playing..
After playing A, you should expect to play B and then C ... and so on...
If you do not understand my ideas is because I can not think in English, I help me with Google Translate. I only speak Spanish. Bear with me. Thanks