if { [getchanidle $theNick $chan] > 5 && $theNick != $nick} {
putserv "PRIVMSG $chan :$theNick is Away. Choose another victim!"
return
}
Change number to however many minutes you require.
I too added a lot of stuff to the timebomb script for my Server including cant be bombed if idle for more than 5 minutes, a kick counter and random bomb messages.
Hope this helps.
Can I have those? And, if possible, is there a way to diffuse the bomb? I'm Batman on IRC, so I thought it'd be funny to have a special diffuse for me, specifically, and one for the person who used the timebomb command.
I also modified the original script and gave it the ability to /kill, if you'd like it. It's useful (and funny) if you have an O-line.
Last edited by Batman on Fri Mar 18, 2005 4:51 pm, edited 1 time in total.
###############################################################################
# Name: Timebomb by ^DooM^
# Eggdrop Version: 1.6.x
# Original Author: jotham.read@gmail.com
#
# This is a small TCL script for Eggdrop. Timebomb is a game where one person
# asks the Eggdrop bot to plant a timebomb in another users pants. The target
# user then needs to diffuse the bomb by cutting the correct wire, or be
# kicked from the channel.
#
# To start the game a user must type:
# !timebomb <nickname> || !bomb <nickname>
# This will cause the target user to have a timebomb "stuffed in their pants"
# once this occurs the user will have a number of seconds to diffuse the bomb.
# Diffusing the bomb is done by typing:
# !cutwire <colour> || !snip <colour>
#
# The wire colors you can choose from are displayed when the bomb is planted.
# This script will not allow bots (Users who are +b), or the bot running the
# script, to be timebombed.
#
# I know it sounds very silly but it is a rather fun game.
#
# Additional script features by ^DooM^:
# -------------------------------------
#
# ** = Can be turned off
#
# 1) If the person you !bomb guesses correctly you get booted out of the channel
# 2) Added an idle check to not allow users to be bombed if they are AFK. **
# 3) Made the bot blow itself up on occasion **
# 4) Made the bot kill a user if they try and evade the kick if the bot is opered up **
# 5) Stopped the wire count from choosing just 1 wire thats too easy.
# 6) Added a kick counter
# 7) Added random amusing counter messages
# 8) Added random placements of bomb
# 9) Added protection for "specified" nicks i.e. the owner and a non linked bot
# 10) If a user bombs himself and guesses correctly the user throws the bomb away
# 11) general bug fixes
#
#
###############################################################################
bind pub - !timebomb doTimebomb
bind pub - !bomb doTimebomb
bind pub - !cutwire doCutWire
bind pub - !snip doCutWire
###############################################################################
# Configuration
#
## Set the minimum time the bomb can have in seconds
set gTimebombMinimumDuration 18
## Set the maximum time the bomb can have in seconds
set gTimebombMaximumDuration 30
## Set the colours you wish to use
set gWireChoices "Blue Green Red Brown Purple Orange Yellow Cyan Pink Grey Black White"
## Set the maximum number of wires that they can choose from to cut.
## has to be lower than the ammount of colours set above.
set gMaxWireCount 5
## Set this to your nick if you wish to be protected from being bombed
set gOwner ""
## Set this to the nick of another person or bot to protect if you havent linked the bots
set gBot ""
## This is the file used to store the number of people blown up make sure you have read/write
## access on your shell
set gKickFile "KickCounter.log"
## Set this to 1 if you wish users who are away for X minutes to be exempt from being bombed
set gIdleOn 1
## Set the number of minutes you wish a person to be idle before they are exempt from being bombed
set gIdleTime 5
## I have coded into this script a 1 in 25 chance that the bot will blow itself up arming the bomb
## if it does it will kick itself out of the channel I thought this was highly amusing.
## Set this to 0 if you wish to disable this feature.
set gAllowBotKickSelf 1
## Set this to 1 if your bot is opered up all this feature does is /kill a nick if they try and evade
## a kick from the channel if your bot is not an oper then it will just message them 'Coward' :)
set gOperBot 1
###############################################################################
# Set random counter reasons. Add as many as you like.
#
set gCounterMessage {
{people have been blown up so far}
{corpses are lying in the morgue}
{people have paid with their lives}
{times that damn bomb has exploded}
{messy endings}
{body parts scatter the floor}
{people are no more}
{green bottles hanging on the wall}
{people have lost limbs}
{tombstones with the words 'I should of cut the other wire' engraved for eternity}
{people chose the wrong damn wire}
{people commited suicide to date}
{death certificates have been issued}
{people got blown to smithereens}
{people got 0wned}
{people are crap at this}
{peoples teeth decorate the ceiling}
{people should of ducked}
{people are burning in hell}
{people didn't dodge Sentinel's rocket}
{people got telefragged}
{people have been forsaken by their evil god}
{people have gone to that better place}
{people R.I.P.}
{people saw an intense white light as their skin melted away from their bones}
{people were vaporised}
{bombs were harmed during the making of this script}
{bombs exploded leaving holes everywhere}
{times we've scraped jam off the ceiling}
{bombs were detonated to date}
{weapons of mass destruction have been detonated so far}
{times this random message procedure has been called}
{three headed monkeys all laughed at your stupidity}
{graves have been dug so far}
{people wished they had taken the blue pill}
{times someone set you up the bomb}
{people had limbs blown off in the most excruciatingly painfull way}
{times fire and brimstone have scorched the earth}
{times the room has had to be repainted}
{people realised too late that they were colour blind}
}
###############################################################################
# Set random place to plant bomb. Add as many as you like.
#
set gPlaceBombMessage {
{Pants}
{Shoe}
{Hair}
{Bra}
{Y Fronts}
{Boxers}
{Mouth}
{Ass}
{Eye Socket}
{Nose}
{Wee Hole}
}
###############################################################################
# Internal Globals Do Not Touch Unless You Know What You Are Doing....
#
set gTheScriptVersion "1.2"
set gTimebombActive 0
set gTimerId 0
set gTimebombTarget ""
set gTimebombChannel ""
set gCorrectWire ""
set gNumberNames "zero one two three four five six seven eight nine ten eleven twelve"
set gStarter ""
set gKickCounter 0
###############################################################################
# Script Starts Here
#
proc note {msg} {
putlog "$msg"
}
proc IRCKick {theNick theChannel theReason} {
global gKickCounter gKickFile gCounterMessage gOperBot
note "Kicking $theNick in $theChannel (Reason: $theReason)"
if { [onchan $theNick $theChannel] } {
#Open file and read the variable
if { [file exists $gKickFile] == 1 } {
set FileHandle [open $gKickFile "r"]
set TempString [read $FileHandle]
close $FileHandle
set lines [split $TempString "\n"]
set gKickCounter [lindex $lines 0]
} else {
# Set the kickcounter to 0 initially
set gKickCounter 0
}
set CounterMessage [lindex $gCounterMessage [rand [llength $gCounterMessage]]]
putserv "KICK $theChannel $theNick :$theReason. ($gKickCounter $CounterMessage)"
incr gKickCounter 1
# Write the variable to file (remember opening with 'w' mode truncates the file contents)
set FileHandle [open $gKickFile "w"]
puts $FileHandle $gKickCounter
close $FileHandle
return
} elseif { $gOperBot == 1 } {
putserv "KILL $theNick :$theReason"
return
} else {
putserv "NOTICE $theNick :Coward!!"
return
}
}
proc IRCPrivMSG {theTarget messageString} {
putserv "PRIVMSG $theTarget :$messageString"
}
proc IRCAction {theTarget messageString} {
putserv "PRIVMSG $theTarget :\001ACTION $messageString\001"
}
proc MakeEnglishList {theList} {
set theListLength [llength $theList]
set returnString [lindex $theList 0]
for {set x 1} {$x < $theListLength} {incr x} {
if { $x == [expr $theListLength - 1] } {
set returnString "$returnString and [lindex $theList $x]"
} else {
set returnString "$returnString, [lindex $theList $x]"
}
}
return $returnString
}
proc SelectWires {wireCount} {
global gWireChoices
set totalWireCount [llength $gWireChoices]
set selectedWires ""
for {set x 0} {$x < $wireCount} {incr x} {
set currentWire [lindex $gWireChoices [expr int( rand() * $totalWireCount )]]
if { [lsearch $selectedWires $currentWire] == -1 } {
lappend selectedWires $currentWire
} else {
set x [expr $x - 1]
}
}
return $selectedWires
}
proc DetonateTimebomb {destroyTimer kickMessage} {
global gTimebombTarget gTimerId gTimebombChannel gTimebombActive gPlaceBombMessage
if { $destroyTimer } {
killutimer $gTimerId
}
set gTimerId 0
set gTimebombActive 0
IRCKick $gTimebombTarget $gTimebombChannel $kickMessage
}
proc DiffuseTimebomb {wireCut} {
global gTimerId gTimebombActive gTimebombTarget gTimebombChannel gStarter gPlaceBombMessage
killutimer $gTimerId
set gTimerId 0
set gTimebombActive 0
set RearmDuration 2
IRCPrivMSG $gTimebombChannel "$gTimebombTarget cut the $wireCut wire. This has defused the bomb!"
if { [string tolower $gTimebombTarget] == [string tolower $gStarter] } {
IRCPrivMSG $gTimebombChannel "$gTimebombTarget Throws the bomb away"
set gStarter ""
return
} else {
set PlaceBombMessage [lindex $gPlaceBombMessage [rand [llength $gPlaceBombMessage]]]
IRCPrivMSG $gTimebombChannel "$gTimebombTarget ReArmed the bomb at \[4\002$RearmDuration\002\] Seconds and stuffed it into $gStarter's $PlaceBombMessage!"
IRCKick $gStarter $gTimebombChannel "Tick Tick *BOOM!*"
set gStarter ""
return
}
}
proc StartTimeBomb {theStarter theNick theChannel} {
global gTimebombActive gTimebombTarget gTimerId gTimebombChannel gNumberNames gCorrectWire
global gMaxWireCount gTimebombMinimumDuration gTimebombMaximumDuration gStarter gPlaceBombMessage
set PlaceBombMessage [lindex $gPlaceBombMessage [rand [llength $gPlaceBombMessage]]]
if { $gTimebombActive == 1 } {
note "Timebomb not started for $theStarter (Reason: timebomb already active)"
if { $theChannel != $gTimebombChannel } {
IRCPrivMSG $theChannel "I don't have a single bomb to spare. :-("
return
} else {
IRCAction $theChannel "points at the bulge in the back of $gTimebombTarget's $PlaceBombMessage."
}
} else {
set timerDuration [expr $gTimebombMinimumDuration + [expr int(rand() * ($gTimebombMaximumDuration - $gTimebombMinimumDuration))]]
set gStarter $theStarter
set gTimebombTarget $theNick
set gTimebombChannel $theChannel
set numberOfWires [expr 2 + int(rand() * ( $gMaxWireCount - 1 ))]
set listOfWires [SelectWires $numberOfWires]
set gCorrectWire [lindex $listOfWires [expr int( rand() * $numberOfWires )]]
set wireListAsEnglish [MakeEnglishList $listOfWires]
set wireCountAsEnglish [lindex $gNumberNames $numberOfWires]
IRCAction $theChannel "stuffs the bomb into $gTimebombTarget's $PlaceBombMessage. The display reads \[4\002$timerDuration\002\] seconds."
if { $numberOfWires == 1 } {
IRCPrivMSG $theChannel "Defuse the bomb by using '!cutwire colour' Try and cut the correct wire. There is $wireCountAsEnglish wire. It is $wireListAsEnglish."
} else {
IRCPrivMSG $theChannel "Defuse the bomb by using '!cutwire colour' Try and cut the correct wire. There are $wireCountAsEnglish wires. They are $wireListAsEnglish."
}
set gTimebombActive 1
set gTimerId [utimer $timerDuration "DetonateTimebomb 0 {\002*BOOM!*\002}"]
}
}
###############################################################################
# Eggdrop command binds
#
proc doCutWire {nick uhost hand chan arg} {
global gTimebombActive gCorrectWire gTimebombTarget
if { $gTimebombActive == 1 } {
if { [string tolower $nick] == [string tolower $gTimebombTarget] } {
if { [llength $arg] == 1 } {
if { [string tolower $arg] == [string tolower $gCorrectWire] } {
DiffuseTimebomb $gCorrectWire
} else {
DetonateTimebomb 1 "\002snip...*BOOM!*\002"
}
}
}
}
}
proc doTimebomb {nick uhost hand chan arg} {
global botnick gStarter gOwner gBot gIdleTime gTimebombActive gAllowBotKickSelf gIdleOn gPlaceBombMessage
#set gStarter $nick
set theNick $nick
if { [lindex [split $arg] 0] != "" } {
set theNick [lindex [split $arg] 0]
}
if { ![onchan $theNick $chan] } {
putserv "PRIVMSG $chan :$theNick is not here maybe he has been blown up!"
return
}
if { $gAllowBotKickSelf == 1} {
if { $gTimebombActive == 0 } {
if { ![rand 25] } {
IRCKick $botnick $chan "Blew himself up Arming the bomb"
return
}
}
}
if { $gIdleOn == 1} {
if { [getchanidle $theNick $chan] > $gIdleTime && $theNick != $nick} {
putserv "PRIVMSG $chan :$theNick is Away. Choose another victim!"
return
}
}
if { [string tolower $theNick] == [string tolower $botnick] || [string tolower $theNick] == [string tolower $gOwner] || [string tolower $theNick] == [string tolower $gBot] } {
set theNick $nick
StartTimeBomb $theNick $theNick $chan
return
}
if { [validuser $theNick] == 1 } {
if { [matchattr $theNick "+b"] == 1 } {
set theNick $nick
IRCKick $theNick $chan "You should not attack the bots!"
return
}
}
StartTimeBomb $nick $theNick $chan
}
###############################################################################
note "timebomb $gTheScriptVersion: loaded";
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
proc Defuse {nick uhost hand chan} {
global gTimerId gTimebombActive gTimebombTarget gTimebombChannel gStarter
killutimer $gTimerId
set gTimerId 0
set gTimebombActive 0
if { [string tolower $nick] == [string tolower $gStarter] } {
IRCPrivMSG $gTimebombChannel "$nick defuses the bomb and throws the bomb away"
set gStarter ""
return
}
}
I haven't tested this so let me know if it works or not
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Is it possible to protect more than 1 person ? If i add some more seperated with ";" it only protects the first person. And is it possible to add an cooldown to evade !bomb spamming?
I would really like an option to disable the script for like 2 mins or so. A cooldown would be awesome too. Like 5 triggers (!bomb <nick>) in 30 seconds would cooldown the script for X mins. Im running a huge channel, and its very often (almost anytime) when i enable the script, its impossible to stay in the chan because there's 100 people doing !bomb this and !bomb that.
So, i think it would be an awesome addition to this script.