TimeBomb Channel Game — File Browser

TimeBombChannelGamev1.0 / TimeBombChannelGamev1.0 / TimeBomb.mrc

TimeBomb.mrc — 5.43 KB — Download this file

;################
;# General Info #
;################
;
;Filename: <TimeBomb.mrc>
;Required Files: <TimeBomb.ini>
;
;TimeBomb Channel Game v1.0 (Fully Functional, Minimal Features)
;
;"Just like diffusing the real thing, only with 100% more replay value if you lose!"
;
;Coded by: Checkers (Network: DALnet | Channel: #Helpdesk | Email: dadums@gmail.com | AIM: Sp4rkyJ0n3z)
;
;
;################
;# Instructions #
;################
;
;Load the game by extracting the files into your mIRC directory and /load -rs timebomb.mrc
;
;Use the Channel popups to Enable/Disable the game.
;Also there is an option whether or not to kick the person who failed to diffuse the bomb.
;
;To play, someone initiates the game by typing !Bomb in a channel.
;Then it will display instructions on how to diffuse the bomb and how much time you have.
;
;
;###########
;# Version #
;###########
;Release v1.0
;
;Created basic functionality.
;No known issues.
;
;I will add more features depending on feedback.
;
;Feedback / Bug Reports / Features requests -> dadums@gmail.com


#TimeBomb off

ON *:TEXT:!Bomb*:#: {
  IF (!%Bomb.Ticking) { BombStart $nick $chan }
  ELSE { .msg # Warining! %Bomb.Nick is already trying to diffuse a bomb on $iif($chan == %Bomb.Chan,this channel,%Bomb.Chan) }
}

ON *:TEXT:!Cut*:%Bomb.Chan: {
  IF ((%Bomb.Ticking) && (%Bomb.Nick == $nick) && ($chan == %Bomb.Chan)) { BombCutWire $2 }
}

alias BombStart {
  set %Bomb.Ticking 1
  set %Bomb.Nick $1
  set %Bomb.Chan $2
  set %Bomb.Time $r(15,40)
  var %Bomb.Start = $BombWires
  set %Bomb.NWires $gettok(%Bomb.Start,1,94)
  set %Bomb.CWires $gettok(%Bomb.Start,2,94)
  set %Bomb.DWires $gettok(%Bomb.Start,3,94)
  .msg $2 $BombReply(Start)
  .msg $2 $BombReply(Wires)
  .timerBomb 1 %Bomb.Time BombBoom $1 $2
}


alias BombCutWire {
  IF ($1 == %Bomb.DiffuseWire) { BombBoom Diffused }
  ELSEIF ($istok(%Bomb.AlreadyCut,$1,32)) { BombBoom AlreadyCut }
  ELSEIF (!$istok($remove($strip(%Bomb.CWires),$chr(44)),$1,32)) { BombBoom NoSuchWire }
  ELSEIF ($istok(%Bomb.DudWires,$1,32)) {
    set %Bomb.AlreadyCut %Bomb.AlreadyCut $1
    %Bomb.DWires = $deltok(%Bomb.DWires,$findtok(%Bomb.DWires,$1,32),32)
    %Bomb.CWires = $deltok(%Bomb.CWires,$findtok($remove($strip(%Bomb.CWires),$chr(44)),$1,32),32)
    dec %Bomb.NWires
    BombBoom DudWire 
  }
  ELSE { BombBoom WrongWire }
}

alias BombWires {
  ;Colors
  var %Bomb.WireColors = 4Red,3Green,2Blue,10Teal,7Orange,8Yellow,5Brown,13Purple
  ;Number of Wires
  var %Bomb.Wires = $r(2,$numtok(%Bomb.WireColors,44))
  ;Wires to choose from.
  var %Bomb.Temp.Inc = 0
  var %Bomb.Temp.Wires = %Bomb.WireColors
  while (%Bomb.Temp.Inc < %Bomb.Wires) {
    var %Bomb.Temp.Tok = $r(1,$numtok(%Bomb.Temp.Wires,44))
    var %Bomb.CutWires = $iif(%Bomb.CutWires,$+(%Bomb.CutWires,$chr(44))) $gettok(%Bomb.Temp.Wires,%Bomb.Temp.Tok,44)
    var %Bomb.Temp.Wires = $deltok(%Bomb.Temp.Wires,%Bomb.Temp.Tok,44)
    inc %Bomb.Temp.Inc
  }
  ;Set the Bombs Diffuse Wire
  set %Bomb.DiffuseWire $remove($strip($gettok(%Bomb.CutWires,$r(1,$numtok(%Bomb.CutWires,32)),32)),$chr(44))
  ;Set The wires that won't trigger the bomb.
  IF ($numtok(%Bomb.CutWires,32) > 2) {
    var %Bomb.DudWires.N = $int($calc($numtok(%Bomb.CutWires,32) * .5))
    set %Bomb.DudWires
    var %Bomb.DudWires.Temp = %Bomb.CutWires
    var %Bomb.DudWires.Temp2 = $remove($strip(%Bomb.CutWires),$chr(44))
    var %Bomb.DudWires.Temp = $deltok(%Bomb.DudWires.Temp2,$findtok(%Bomb.DudWires.Temp2,%Bomb.DiffuseWire,32),32)
    while (%Bomb.DudWires.N > $numtok(%Bomb.DudWires,32)) {
      var %Bomb.DudWires.Temp.Tok = $r(1,$numtok(%Bomb.DudWires.Temp,32))
      %Bomb.DudWires = %Bomb.DudWires $gettok(%Bomb.DudWires.Temp,%Bomb.DudWires.Temp.Tok,32)
      var %Bomb.DudWires.Temp = $deltok(%Bomb.DudWires.Temp,%Bomb.DudWires.Temp.Tok,32)
    }
  }
  return $+(%Bomb.Wires,^,%Bomb.CutWires,^,%Bomb.DudWires,^)
}

alias BombBoom {
  IF ($1 == Diffused) { .msg %Bomb.Chan $BombReply(Diffused) | goto end }
  IF ($1 == DudWire) { .msg %Bomb.Chan $BombReply(DudWire) | .msg %Bomb.Chan $BombReply(Wires) | halt }
  IF ($1 == AlreadyCut) { .msg %Bomb.Chan $BombReply(AlreadyCut) | halt }
  IF ($1 == NoSuchWire) { .msg %Bomb.Chan $BombReply(NoSuchWire) | halt }
  IF ($1 == WrongWire) { var %Bomb.BoomMsg = $BombReply(WrongWire) }
  ELSE { var %Bomb.BoomMsg = $BombReply(Failed) }

  IF ($me IsOp %Bomb.Chan) && (%Bomb.KickToggle) { 
    .Kick %Bomb.Chan %Bomb.Nick %Bomb.BoomMsg
  }
  ELSE { .msg %Bomb.Chan %Bomb.BoomMsg }

  ;Pick Random People to die.
  var %Bomb.Dead.N = $r(2,5)
  while (%Bomb.Dead.N) {
    set %Bomb.Dead $addtok(%Bomb.Dead,$nick(%Bomb.Chan,$r(1,$nick(%Bomb.Chan,0,a)),0,a),32)
    dec %Bomb.Dead.N
  }
  :end
  .unset %bomb.*
  .timerBomb off
}

alias BombReply {
  var %BombReply.File = $+($ScriptDir,TimeBomb.ini)
  IF ($exists(%BombReply.File)) {
    var %BombReply.N = $readini(%BombReply.File,$1,N)
    return $readini(%BombReply.File,$1,$r(1,%BombReply.N))
  }
  ELSE { echo -s TimeBomb: BombReply File Does Not Exist! }
}
#TimeBomb END

;Popups! YAY!
menu Channel {
  TimeBomb
  .$iif($group(#TimeBomb).status == on,Disable,Enable) TimeBomb:.$iif($group(#TimeBomb).status == on,DISABLE,ENABLE) #timebomb
  .$iif(%Bomb.KickToggle,Disable,Enable) Kicking: set %Bomb.KickToggle $iif(%Bomb.KickToggle,0,1)
  .-
  .Advertise:/msg # TimeBomb Channel Game v1.0 by Checkers (DALnet), Type !bomb to start the game.
}