This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Hey, ^DooM^... Timebomb stuff?

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
Post Reply
B
Batman
Voice
Posts: 2
Joined: Fri Mar 18, 2005 1:17 pm

Hey, ^DooM^... Timebomb stuff?

Post by Batman »

^DooM^ wrote:use this

Code: Select all

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.
User avatar
^DooM^
Owner
Posts: 772
Joined: Tue Aug 26, 2003 5:40 pm
Location: IronForge
Contact:

Post by ^DooM^ »

Here is my modified script.

Code: Select all

###############################################################################
#  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
B
Batman
Voice
Posts: 2
Joined: Fri Mar 18, 2005 1:17 pm

Post by Batman »

Man, you own. Thanks!

I like the addition of "If I'm an IRCop, use /kill"... Nice touch. ;)

Do you happen to know how to !defuse? I'd like a command so the person who placed the bomb would be able to defuse it. Kinda like a safety precaution. ;)
User avatar
^DooM^
Owner
Posts: 772
Joined: Tue Aug 26, 2003 5:40 pm
Location: IronForge
Contact:

Post by ^DooM^ »

Add this to the binds section of the script

Code: Select all

bind  pub   -   !defuse      Defuse
and add this proc to the script.

Code: Select all

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 :D
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
S
Sourge
Voice
Posts: 2
Joined: Sun Jun 04, 2006 2:28 pm

Post by Sourge »

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?
n
nsrafk
Halfop
Posts: 73
Joined: Fri May 11, 2007 12:25 am

Post by nsrafk »

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.
S
Stealth
Voice
Posts: 2
Joined: Tue Jun 05, 2007 3:31 pm

Post by Stealth »

sorry for bumping this thread, but ^DooM^, the !defuse is not working.

Code: Select all

Tcl error [Defise]: wrong # args: should be "Defuse nick uhost hand chan"
And could you try to make something like nsrafk said.
some cooldown mode.
User avatar
Alchera
Revered One
Posts: 3344
Joined: Mon Aug 11, 2003 12:42 pm
Location: Ballarat Victoria, Australia
Contact:

Post by Alchera »

^DooM^'s last post was 2 years ago. I would think the indications are nsrafk & Stealth are out of luck.
Add [SOLVED] to the thread title if your issue has been.
Search | FAQ | RTM
Post Reply