Channel Central — File Browser

ChannelCentralv1.0 / ChannelCentralv1.0 / Chancentral / chancentral.mrc

chancentral.mrc — 43.88 KB — Download this file

;-------------------------------------------
; Channel central by Lindrian
; Do not edit anything here unless you know what youre doing!
;-------------------------------------------
dialog cm {
  title "Channel central..."
  size -1 -1 228 185
  option dbu
  icon icons\script.ico
  tab "Channel modes", 10, 2 0 225 169
  tab "Bans", 2
  tab "Excepts", 64
  tab "Invites", 65
  tab "Topic", 47
  tab "Statistics", 16
  edit "", 41, 67 145 18 10, tab 10 autohs
  edit "", 42, 67 135 61 10, tab 10 pass autohs
  edit "", 48, 7 25 211 37, tab 47 autovs multi vsbar limit 600
  text "Characters avaliable:", 110, 10 125 52 8, tab 47
  text "", 52, 64 125 155 8, tab 47, right
  button "Set topic", 54, 50 171 33 12, tab 47
  box "Current channel information...", 55, 4 16 220 65, tab 10
  edit "", 56, 81 26 120 9, tab 10 read autohs
  edit "", 57, 81 46 120 9, tab 10 read autohs
  edit "", 58, 81 36 120 9, tab 10 read autohs
  edit "", 59, 81 56 120 9, tab 10 read autohs
  text ":", 19, 76 26 6 8, tab 10 center
  text ":", 26, 76 66 6 8, tab 10 center
  text ":", 25, 76 56 6 8, tab 10 center
  text ":", 24, 76 46 6 8, tab 10 center
  text ":", 23, 76 36 6 8, tab 10 center
  edit + $+ $chanmodes, 890, 81 66 120 10, tab 10 read autohs
  text "Active channel", 60, 16 27 59 8, tab 10
  text "Active network/server", 61, 16 47 59 8, tab 10
  text "Current modes", 62, 16 37 61 8, tab 10
  text "Ammount of ops (@)", 63, 16 57 59 8, tab 10
  text "users", 29, 89 146 16 8, tab 10
  check "p - Private", 103, 82 95 50 8, tab 10
  check "s - Secret", 104, 82 105 50 8, tab 10
  check "m - Moderated", 107, 16 125 50 8, tab 10
  check "t - Only ops set topic", 100, 16 95 60 8, tab 10
  check "n - No ext. messages", 101, 16 105 65 8, tab 10
  check "i - Invite only", 102, 16 115 50 8, tab 10
  check "l - Limit channel:", 106, 16 145 51 8, tab 10
  check "k - Channel key:", 105, 16 135 51 8, tab 10
  combo 49, 30 140 189 35, tab 47 drop
  text "Topic:", 50, 10 141 16 8, tab 47
  text "Topic set at:", 90, 10 152 30 8, tab 47
  text "-No topic selected-", 91, 44 152 158 15, tab 47
  button "Clear topic data", 92, 2 171 45 12, tab 47
  text "", 97, 7 115 211 8, tab 47
  text "Avaliable modes", 5, 16 67 59 8, tab 10
  button "Close", 1, 190 171 37 12, cancel default
  button "Ok", 3, 150 171 37 12
  list 4, 4 17 220 135, tab 2 size extsel
  list 8, 4 17 220 135, tab 64 size extsel
  list 12, 4 17 220 135, tab 65 size extsel
  text "Current/maximum:", 9, 6 155 50 8, tab 64
  text "0/0", 11, 50 155 170 8, tab 64, right
  text "Current/maximum:", 13, 6 155 50 8, tab 65
  text "0/0", 14, 50 155 170 8, tab 65, right
  text "Current/maximum:", 6, 6 155 50 8, tab 2
  text "0/0", 7, 50 155 170 8, tab 2, right
  box "Topic...", 15, 4 16 220 121, tab 47
  box "Modes", 577, 4 85 220 81, tab 10
  text Bans are not supported on $network $+ !, 584, 4 80 221 20, tab 2 hide center
  text Excepts are not supported on $network $+ !, 585, 4 80 221 20, tab 64 hide center
  text Invites are not supported on $network $+ !, 586, 4 80 221 20, tab 65 hide center
  list 17, 4 17 220 105, tab 16 size extsel
  list 18, 4 123 220 44, tab 16 size extsel
  list 20, 154 98 51 59, tab 10 size
  box "Other modes", 21, 150 89 59 73, tab 10
  button "", 22, 7 63 211 50, tab 47
}
dialog inform {
  title "information..."
  size -1 -1 150 76
  option dbu
  icon icons\script.ico
  button "Ok", 3, 110 62 37 12, ok
  edit "", 2, 2 4 145 50, read multi return vsbar
  edit "", 4, 2 58 147 1
}
on *:dialog:inform:init:0: {
  dll $mdx SetMircVersion $version
  dll $mdx MarkDialog $dname
  dll $mdx SetBorderStyle 4 staticedge
  dll $mdx SetBorderStyle 2
  did -ra $dname 2 %cm.inform
}
alias cb2 return
on *:dialog:cm:*:*: {
  if ($devent == init) {
    dcx Mark $dname cb2
    did -ra $dname 4 Refreshing bans...
    did -ra $dname 8 Refreshing excepts...
    did -ra $dname 12 Refreshing invites...
    var %t = $ticks
    unset %cm.mode.* %cm.other.modes
    dll $mdx SetMircVersion $version
    dll $mdx MarkDialog $dname
    dll $mdx SetColor $dname 4,8,12 background $color($color(background))
    dll $mdx SetColor $dname 4,8,12 text $color($color(text))
    dll $mdx SetColor $dname 4,8,12 textbg $color($color(background)) 
    dll $mdx SetControlMDX $dname 97 ProgressBar smooth > $ctl
    dll $mdx SetControlMDX $dname 4,8,12,17 ListView report showsel rowselect labeltip editlabels > $views
    dll $mdx SetControlMDX $dname 18 ListView report report showsel rowselect labeltip noheader > $views
    dll $mdx SetControlMDX $dname 20 ListView report showsel labeltip checkboxes noheader > $views
    did -i $dname 20 1 headerdims 80:1
    dll $mdx SetBorderStyle 56,57,58,890,59 windowedge
    dll $mdx SetFont $dname 55,15,577,21 13 700 Tahoma
    did -i $dname 4,8,12 1 headerdims 215:1 97:2 110:3
    did -i $dname 4,8,12 1 headertext + 0 Address	+ 0 Set by	+ 0 Date   
    did -i $dname 17 1 Headerdims 50 40 80 80 70 120 80 80 
    did -i $dname 17 1 headertext $+(Number,$chr(9),Status,$chr(9),Nick,$chr(9),Real name,$chr(9),Ident,$chr(9),Host,$chr(9),Away,$chr(9),IrcOp)
    did -i $dname 18 1 headerdims 200:1 60:2 160:3
    did -i $dname 18 1 headertext + 0 1	+ 0 2 + 0 3
    if ($scid($activecid).status != connected) { dialog -x $dname | halt }
    $iif($chan(%cm.chan).topic,cm.topic.load.2,cm.topic.load.er)
    did -ra $dname 56 %cm.chan ( $+ $nick(%cm.chan,0) users $+ )
    did -ra $dname 57 $network ( $+ $server $+ )
    did -ra $dname 58 $iif($chan(%cm.chan).mode,$v1,No modes set)
    did -ra $dname 59 $+($round($calc($nick(%cm.chan,0,o) / $nick(%cm.chan,0) * 100),0),%) ( $+ $nick(%cm.chan,0,o) $+ )
    did -a $dname 48 $chan(%cm.chan).topic
    set %cm.chan.cid $cid
    cm.mode.check
    cm.topic.check
    ;cm.topic.load
    dialog -t $dname Channel Central... [/cc] ( $+ %cm.chan $+ )
    if (b isincs $chanmodes) mode %cm.chan +b
    if (e isincs $chanmodes) mode %cm.chan +e
    if (I isincs $chanmodes) mode %cm.chan +I
    other.modes.load
    if (I !isincs $chanmodes) {
      did -v $dname 586
      did -h $dname 12-14
    }
    if (e !isincs $chanmodes) {
      did -v $dname 585
      did -h $dname 8,9,11
    }
    if (b !isincs $chanmodes) {
      did -v $dname 584
      did -h $dname 4,6,7
    }
    did -b $dname 54
    if ($me !isop %cm.chan) {
      did -b $dname 100-105,107,42,106,41,29,3,54
    }
    who_ %cm.chan
    var %n = $nick(%cm.chan,0)
    did -a $dname 18 Total users on the channel $chr(9) %n
    did -a $dname 18 Ops $chr(9) $nick(%cm.chan,0,o) $chr(9) $round($calc($nick(%cm.chan,0,o) / %n * 100),1) $+ %
    did -a $dname 18 Voiced users $chr(9) $nick(%cm.chan,0,v) $chr(9) $round($calc($nick(%cm.chan,0,v) / %n * 100),1) $+ %
    did -a $dname 18 Regulars $chr(9) $nick(%cm.chan,0,r) $chr(9) $round($calc($nick(%cm.chan,0,r) / %n * 100),1) $+ %
    did -a $dname 18 Away users $chr(9) 0 $chr(9) 0%
    did -a $dname 18 IRC operators $chr(9) 0 $chr(9) 0%
    set %cm.temp.topic $didtok(48,32) 
    cm.topic.check
    dll $mdx SetControlMDX $dname 22 window > $dialogs
    window -phf @topicprev -1 -1 $window(-1).w $window(-1).h
    did -a $dname 22 grab $window(@topicprev).hwnd @topicprev
    prevtopic
    var %i = $hfind(topichist,$+($network,%cm.chan,$cr,*),0,w),%r,%z = 1,%g,%n = $nick(%cm.chan,0),%cm = $gettok($chanmodes,1,44)
    while (%i) {
      %r = $addtok(%r,$hget(topichist,$hfind(topichist,$+($network,%cm.chan,$cr,*),%i,w)) %i,124)
      dec %i
    }
    %r = $sorttok(%r,124)
    while ($gettok(%r,%z,124)) {
      tokenize 32 $v1
      did -i $dname 49 1 $+($decode($gettok($hfind(topichist,$+($network,%cm.chan,$cr,*),$2,w),2,13),m),$str( ,150),$1)
      inc %z
    }
    if ($calc($ticks - %t) > 500) {
      set %cm.inform The channel central took $calc($v1 / 1000) seconds to load. This is most likely due to your topic history being too mayor! Please clean it up! It may also be due to a huge ban/invite/excepts list, or alot of users on the channel for the statistics.
      $dialog(inform,inform,-4)
    }
    set %cm.chan.t 10
  }
  elseif ($devent == edit) {
    if ($did == 41) {
      if ($did(41) !isnum) {
        var %t = $did(41)
        did -ra $dname 41 $remove(%t,$right(%t,1))
        beep 1
      }
    }
    if ($did == 48) {
      cm.topic.check
      prevtopic
      if ($($didtok(48,32),0) != $chan(%cm.chan).topic) && ($($didtok(48,32),0) != %cm.temp.topic) && ($gtxt($dname,48) != $chan(%cm.chan).topic) && ($oh($me,%cm.chan)) {
        did -e $dname 54
      }
      else {
        did -b $dname 54
      }
    }
  }
  elseif ($devent == sclick) {
    if ($did) {
      tokenize 32 $did($did,1)
      if ($1-2 == headerclick headerEvent) && ($3 isnum) {
        headersort
      }
    }
    if ($dialog($dname).tab != 16) { set %cm.chan.t $v1 }
    if $did == 16 {
      if $chan($active).inwho {
        set %cm.inform There's already a /who request for %cm.chan in progress! Please wait for it to finish.
        $dialog(inform,inform,-4)
        did -f $dname %cm.chan.t
      }
    }
    if ($did == 17) {
      tokenize 32 $did($did,1)
      if ($1 == rclick) && ($did(17).seltext) {
        stats.popup
      }
    }
    if ($istok(4 8 12,$did,32)) {
      if (!$istok(bans excepts invites,$gettok($did($did).seltext,7,32),32)) && ($oh($me,%cm.chan)) {
        var %r, %ö = $iif($did == 4,-b+b,$iif($did == 8,-e+e,$iif($did == 12,-I+I)))
        if ($did($did).sel) && ($oh($me,%cm.chan)) { %r = 1 }
        if (beginlabeledit * iswm $did($did,1)) && (!$did(20).enabled) { did -i $dname $did 1 cancel }
        elseif (endlabeledit * iswm $did($did,1)) { cm.labeledit %ö $did $lbl($did,1) $gtok($did($did,1),3-) }
      }
      tokenize 32 $did($did,1)
      if ($1 == rclick) {
        if ($istok(bans excepts invites,$gettok($did($did).seltext,7,32),32)) {
          cm.popup $did $iif($did == 4,ba&n,$iif($did == 8,e&xcept,$iif($did == 12,&invite))) 1 
        }
        else {
          cm.popup $did $iif($did == 4,ba&n,$iif($did == 8,e&xcept,$iif($did == 12,&invite)))
        }
      }
    }
    if ($did == 92) {
      cdialog Are you sure you wish to clear all topic data?
      if (%cdialog.did == yes) {
        hdel -w topichist *
        hsave -o topichist topichist.hsh
        did -r $dname 49
        did -ra $dname 91 -No topic selected-
      }
    }
    if ($did == 54) {
      if ($($didtok(48,32),0) != $chan(%cm.chan).topic) && ($($didtok(48,32),0) != %cm.temp.topic) && ($gtxt($dname,48) != $chan(%cm.chan).topic) {
        var %topic = $iif($didtok(48,32),$v1,$chr(10))
        .scid $activecid topic %cm.chan $(%topic,0)
        cm.topic.check
        did -b $dname 54
      }
    }
    if ($did == 49) {
      var %t = $gettok($did($did),-1,160)
      did -ra $dname 48 $deltok($did($did),-1,160)
      did -ra $dname 91 $asctime(%t,dddd $+ $chr(44) mmmm doo yyyy $+ $chr(44) HH:nn:ss) ( $+ $duration($calc($ctime - %t)) ago)
      cm.topic.check
      prevtopic
      if ($($didtok(48,32),0) != $chan(%cm.chan).topic) && ($($didtok(48,32),0) != %cm.temp.topic) && ($gtxt($dname,48) != $chan(%cm.chan).topic) && ($oh($me,%cm.chan)) {
        did -e $dname 54
      }
      else {
        did -b $dname 54
      }
      halt
    }
    elseif ($istok(100 101 102 103 104 107,$did,32)) {
      if $did($did).state {
        set %cm.mode.add $addtok(%cm.mode.add,$left($did($did),1),32)
      }
      else {
        set %cm.mode.add $remtok(%cm.mode.add,$left($did($did),1),32)
        set %cm.mode.rem $addtok(%cm.mode.rem,$left($did($did),1),32)
      }
    }
    elseif ($did == 105) {
      did $iif($did(105).state,-e,-b) $dname 42
    }
    elseif ($did == 106) {
      did $iif($did(106).state,-e,-b) $dname 41
    }
    elseif ($did == 43) {
      cm.other.modes.add
    }
    elseif ($did == 3) {
      if ($oh($me,%cm.chan)) {
        var %y = $chan(%cm.chan).mode
        if ($did(105).state == 0) { mode %cm.chan -k $chan(%cm.chan).key }
        elseif $did(42) && $did(105).state == 1 { mode %cm.chan +k $did(42) }
        var %a = %cm.chan,%i = $did(20).lines,%r,%d,%m = $gtok($chan(%a).mode,1),%z
        while (%i > 1) {
          tokenize 32 $gettok($did(20,%i),1,9)
          var %z = $mid($6,2)
          if ($5 == 2) { 
            if (%z !isincs %m) { 
              %r = $+(%r,$iif(!%r,+),%z) 
            } 
          }
          elseif (%z isincs %m) { 
            %d = $+(%d,$iif(!%d,-),%z) 
          }
          if ($regex(%r $+ %d,/[a-zA-Z]/g) >= $modespl) {
            mode %cm.chan %r $+ %d
            var %r = "",%d = ""
          }
          dec %i
        }
        if ($did(106).state == 1) { mode %cm.chan +l $did(41) }
        elseif ($did(106).state == 0) && (l isincs $gtok($chan(%cm.chan).mode,1)) {
          %cm.mode.rem = %cm.mode.rem $+ l
        }
        var %x = $remove($+($iif(%r,%r,+),%cm.mode.add,$iif(%d,%d,-),%cm.mode.rem),$chr(32))
        if ($removecs(%x,+,-,$chr(32)) != $null) .scid $activecid mode %cm.chan %x
        ;  .scid $activecid mode %cm.chan $removecs($+(+,$remove(%r,+),$remove(%cm.mode.add,+),-,%t,$remove(%cm.mode.rem,-)),$chr(32))
        unset %cm.mode.*
      }
      if ($($didtok(48,32),0) != $chan(%cm.chan).topic) && ($($didtok(48,32),0) != %cm.temp.topic) && ($gtxt($dname,48) != $chan(%cm.chan).topic) {
        .scid $activecid topic %cm.chan $iif($didtok(48,32),$($v1,0),$chr(10))
      }
      dialog -x $dname
      unset %cm.temp.topic
    }
  }
}
alias cm.clear {
  set -u1 %cm.clear.all 1
  if ($1 == b) { var %p = b, %il = $ibl(%cm.chan,%a), %max = $ibl(%cm.chan,0), %id = 4, %msg = bans, %id2 = 7 }
  if ($1 == I) { var %p = I, %il = $iil(%cm.chan,%a), %max = $iil(%cm.chan,0), %id = 12, %msg = invites, %id2 = 11 }
  if ($1 == e) { var %p = e, %il = $iel(%cm.chan,%a), %max = $iel(%cm.chan,0), %id = 8, %msg = excepts, %id2 = 14 }
  var %a = 1, %b
  while (%a <= %max) {
    %b = %b $iif(%p == b,$ibl(%cm.chan,%a),$iif(%p == I,$iil(%cm.chan,%a),$iif(%p == e,$iel(%cm.chan,%a))))
    if $numtok(%b,32) == $modespl {
      mode %cm.chan $+(-,$str(%p,$numtok(%b,32))) %b
      %b = ""
    }
    inc %a
  }
  if (%b) { mode %cm.chan $+(-,$str(%p,$numtok(%b,32))) %b }
  ;mode %cm.chan $+(+,%p)
  did -ra cm %id No %msg set.
  cm.update.stats %id2 %cm.chan
}
alias cc {
  if $active !ischan { echo -a This feature can only be used in channels! | halt }
  if ($me !ison $active) { echo -a You're not currently on $_Wrap($active) $+ ! | halt }
  if (!$dialog(cm)) && ($status == connected) { 
    set %cm.chan $active
    $dialog(cm,cm,-4)
  }
}
alias inform {   
  set %cm.inform $$1- 
  if (!$dialog(inform)) { 
    dialog -m inform inform
  } 
  else { 
    did -ra inform 2 %cm.inform
    dialog -v inform 
  } 
}
alias cm.topic.load.2 {
  var %c = $cm.topiclen
  var %text = $didtok(cm,48,32)
  var %calc = $int($calc($len(%text) / %c * 100))
  set %cm.top %text
  did -ra $dname 97 $iif(%calc <= 100,$v1,100)
  did -ra $dname 52 $+($len(%text),/,%c) ( $+ $calc(100 - %calc) $+ % $+ )
  if ($len(%text) > %c) { 
    dll $mdx SetColor $dname 52,53 text $rgb(480,0,0) 
  }
  else { 
    dll $mdx SetColor $dname 52,53 text $rgb(0,0,0) 
  }
}
alias cm.topic.load.er {
  did -ra cm 52 0/ $+ $cm.topiclen (0%)
  did -a cm 97 0
}
on *:part:%cm.chan: {
  if (%cm.chan.cid == $cid) && ($nick == $me) {
    if ($dialog(cm)) {
      dialog -c cm cm
      $inform(You have parted from %cm.chan $+ , closing dialog...)
    }
  }
}
on *:kick:%cm.chan: {
  if (%cm.chan.cid == $cid) && ($knick == $me) {
    if ($dialog(cm)) {
      dialog -c cm cm
      $inform(You have been kicked from %cm.chan $+ , closing dialog...)
    }
  }
}
alias cm.mode.check {
  var %x = $chan(%cm.chan).mode
  if (t isincs $gettok(%x,1,32)) { did -c cm 100 }
  if (n isincs $gettok(%x,1,32)) { did -c cm 101 }
  if (i isincs $gettok(%x,1,32)) { did -c cm 102 }
  if (p isincs $gettok(%x,1,32)) { did -c cm 103 }
  if (s isincs $gettok(%x,1,32)) { did -c cm 104 }
  if (m isincs $gettok(%x,1,32)) { did -c cm 107 }
  if (k isincs %x) { 
    did -c cm 105 
    if ($me isop %cm.chan) did -e cm 42 
    did -ra cm 42 $chan(%cm.chan).key
  }
  else { did -b cm 42 }
  if (l isincs %x) { 
    did -c cm 106 
    if ($me isop %cm.chan) did -e cm 41 
    did -ra cm 41 $chan(%cm.chan).limit
  }
  else { did -b cm 41 }
}
alias -l cm.id return 100,101,102,103,104,105,106,107,41,42
alias cm.topiclen { return $iif(%cm.topic. [ $+ [ $cid ] ],$v1,0) }
alias cm.topic { var %a = $chan(%cm.chan).topic, %b = $(%a),2 | set %c $len(%b) }
#channel on
alias channel cc
#channel end
alias cm.topic.check {
  var %c = $cm.topiclen
  var %lines = $did(cm,48).lines
  var %text = $didtok(cm,48,32)
  var %len = $iif(%lines > 1,$calc($len(%text) - ($v1 - 1)),$len(%text))
  var %calc = $int($calc(%len / %c * 100))
  set %cm.top %text
  did -a cm 97 $iif(%calc <= 100,$v1,100)
  did -ra cm 52 $+($calc(%c - %len),/,%c) ( $+ $calc(100 - %calc) $+ % $+ )
  if (%len > %c) { 
    Dll $mdx SetColor cm 52,53 text $rgb(480,0,0) 
  }
  else { 
    Dll $mdx SetColor cm 52,53 text $rgb(0,0,0) 
  }
}
on *:rawmode:%cm.chan: {
  statusbar
  if ($dialog(cm)) {
    if ($right($1,1) === e) { var %dialog = 8, %dialog2 = 11 }
    if ($right($1,1) === b) { var %dialog = 4, %dialog2 = 7 }
    if ($right($1,1) === I) { var %dialog = 12, %dialog2 = 14 }
    cm.update.stats %dialog2 %cm.chan
    if ($istok(-b+b -e+e -I+I,$1,32)) {
      did -o cm %dialog %label.sel $+($3,$chr(9),$nick,$chr(9),$asctime($ctime,dd/mm/yyyy HH:nn))
      unset %label.sel
    }
    if (!%cm.clear.all) {
      if ($nick == $me) && ($left($1,1) == -) { halt }
      if ($did(cm,%dialog).lines == 1) { return }
      if ($left($1,1) == -) && ($nick != $me) { 
        did -r cm %dialog
        mode %cm.chan $+(+,$right($1,1))
        return
      }
      if ($istok(bans excepts invites,$gettok($did(cm,%dialog,2),7,32),32)) { did -r cm %dialog }
      if (%dialog) did -a cm %dialog + 0 0 0 $2 $+ 	+ 0 0 0 $nick $+ 	+ 0 0 0 $asctime($ctime,dd/mm/yyyy HH:nn)
      if (%dialog == 4) {
        if ($dialog(cm)) did -ra cm 7 $iif(%cm.bans. [ $+ [ $cid ] ],$ibl(%cm.chan,0) $+ / $+ $v1,$ibl(%cm.chan,0) $+ /unknown) ( $+ $round($calc($ibl(%cm.chan,0) / %cm.bans. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
      }
    }
    if (%dialog == 8) {
      if ($dialog(cm)) did -ra cm 11 $iif(%cm.excepts. [ $+ [ $cid ] ],$iel(%cm.chan,0) $+ / $+ $v1,$iel(%cm.chan,0) $+ /unknown) ( $+ $round($calc($iel(%cm.chan,0) / %cm.excepts. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
    }
    if (%dialog == 12) {
      if ($dialog(cm)) did -ra cm 14 $iif(%cm.invites. [ $+ [ $cid ] ],$iil(%cm.chan,0) $+ / $+ $v1,$iil(%cm.chan,0) $+ /unknown) ( $+ $round($calc($iil(%cm.chan,0) / %cm.invites. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
    }
  }
}
on *:op:%cm.chan: {
  if ($opnick == $me) {
    if ($dialog(cm)) {
      did -e cm 100-105,107,42,106,41,29,3,54
    }
  }
}
on *:deop:%cm.chan: {
  if ($opnick == $me) {
    if ($dialog(cm)) {
      did -b cm 100-105,107,42,106,41,29,3,54
    }
  }
}
raw 367:*: {
  haltdef
  if (!%ban.delay) && ($dialog(cm)) did -r cm 4 | set %ban.delay 1
  if ($dialog(cm)) {
    did -a cm 4 + 0 0 0 $3 $+ 	+ 0 0 0 $iif($4,$v1,*) $+ 	+ 0 0 0 $asctime($5,dd/mm/yyyy HH:nn)
  }
}
raw 348:*: {
  haltdef
  if (!%except.delay) && ($dialog(cm)) did -r cm 8 | set %except.delay 1
  if ($dialog(cm)) {
    did -a cm 8 + 0 0 0 $3 $+ 	+ 0 0 0 $iif($4,$v1,*) $+ 	+ 0 0 0 $asctime($5,dd/mm/yyyy HH:nn)
  }
}
raw 346:*: {
  haltdef
  if (!%invite.delay) && ($dialog(cm)) did -r cm 12 | set %invite.delay 1
  if ($dialog(cm)) {
    did -a cm 12 + 0 0 0 $3 $+ 	+ 0 0 0 $iif($4,$v1,*) $+ 	+ 0 0 0 $asctime($5,dd/mm/yyyy HH:nn)
  }
}
raw 368:*: { 
  statusbar
  if ($ibl($2,0) == 0) && ($dialog(cm)) { did -ra cm 4 No bans set. }
  if ($dialog(cm)) { did -ra cm 7 $ibl($2,0) $+ / $+ $iif(%cm.bans. [ $+ [ $cid ] ],$v1,unknown) ( $+ $round($calc($ibl($2,0) / %cm.bans. [ $+ [ $cid ] ]  * 100),0) $+ % $+ ) }
  unset %ban.delay
  haltdef
}
raw 349:*: {
  statusbar
  if ($iel($2,0) == 0) && ($dialog(cm)) { did -ra cm 8 No excepts set. }
  if ($dialog(cm)) did -ra cm 11 $iif(%cm.excepts. [ $+ [ $cid ] ],$iel($2,0) $+ / $+ $v1,$iil($2,0) $+ /unknown) ( $+ $round($calc($iel($2,0) / %cm.excepts. [ $+ [ $cid ] ]  * 100),0) $+ % $+ ) 
  unset %except.delay
  haltdef
}
raw 347:*: {
  statusbar
  if ($iil($2,0) == 0) && ($dialog(cm)) { did -ra cm 12 No invites set. }
  if ($dialog(cm)) did -ra cm 14 $iif(%cm.invites. [ $+ [ $cid ] ],$iil($2,0) $+ / $+ $v1,$iil($2,0) $+ /unknown) ( $+ $round($calc($iil($2,0) / %cm.invites. [ $+ [ $cid ] ]  * 100),0) $+ % $+ ) 
  unset %invite.delay
  haltdef
}
raw 472:*: haltdef
raw 461:*: { var %x = k,%y = l | if (%x isin $1-) || (%y isin $1-) { haltdef } }
raw 005:*: {
  if $regex($1-,/MAXBANS=(\d+)/) { set $+(%,cm.bans,.,$cid) $regml(1) }
  if $regex($1-,/TOPICLEN=(\d+)/) { set $+(%,cm.topic,.,$cid) $regml(1) }
  if $regex($1-,/MAXLIST=b:([0-9]+)/) { set $+(%,cm.bans,.,$cid) $regml(1) }
  if ($gettok($wildtok($1-,PREFIX=?*,1,32),2,61)) { set $+(%,cm.prefix,.,$cid) $v1 }
  var %r = /MAXLIST=.*?,e:(\d+)/ | if $regex($1-,%r) { set $+(%,cm.excepts,.,$cid) $regml(1) }
  var %r = /MAXLIST=.*?,I:(\d+)/ | if $regex($1-,%r) { set $+(%,cm.invites,.,$cid) $regml(1) }
  if ($gettok($wildtok($1-,SILENCE=?*,1,32),2,61)) { set %silencenum. $+ $cid $v1 }
}
raw 004:*:{ set %usermodes. $+ $cid $4 }
raw 352:*: {
  if ($dialog(cm)) {
    var %number = $did(cm,17).lines
    did -a cm 17 $+(%number,$chr(46)) $+($chr(9),$iif(~ isin $7,$v1,$iif(& isin $7,$v1,$iif(@ isin $7,$v1,$iif(% isin $7,$v1,$iif(+ isin $7,$v1))))),$chr(9),$6,$chr(9),$9,$chr(9),$3,$chr(9),$4,$chr(9),$iif(G isin $7,Yes,No),$chr(9),$iif($chr(42) isin $7,Yes,No))
    cm.stats $1- 
    haltdef 
  }
}
raw 315:*: {
  if ($dialog(cm)) {
    haltdef
  }
}
alias cm.stats {
  if (G isincs $7) {
    var %g = $calc($gettok($did(cm,18,6),12,32) + 1), %n = $nick(%cm.chan,0)
    did -o cm 18 6 Away users $chr(9) %g $chr(9) $round($calc(%g / %n * 100),1) $+ %
  }
  if (* isin $7) {
    var %y = $calc($gettok($did(cm,18,7),12,32) + 1), %n = $nick(%cm.chan,0)
    did -o cm 18 7 1 IRC operators $chr(9) %y $chr(9) $round($calc(%y / %n * 100),1) $+ %
  }
}
alias stats.popup {
  mkmenu stats office2003rev
  if ($did(cm,$did).seltext) { 
    var %nick = $remove($gettok($did(cm,17).seltext,15,32),+fs,+,$chr(9))
    xpop -a stats 0 $chr(9) +g 1 0 $chr(151) $iif($len(%nick) > 8,$left(%nick,8) $+ ..,%nick) $chr(151)
    xpop -a stats 0 $chr(9) + 0 0 -
  }
  var %o = $iif($oh($me,%cm.chan),+,+g), %r = $iif($did(cm,$did).seltext,+,+g)
  xpopup -i stats + 0 $shortfn($scriptdiricons\question.ico)
  xpop -a stats 0 $chr(9) + 1 1 Whois
  xpop -a stats 0 $chr(9) + 0 0 -
  xpop -a stats 0 $chr(9) $iif(%o == +,%r,%o) 2 0 K&ick
  xpop -a stats 0 $chr(9) $iif(%o == +,%r,%o) 3 0 B&an
  xpop -a stats 0 $chr(9) $iif(%o == +,%r,%o) 4 0 K&ick && Ban
  xpopup -s stats +t $mouse.dx $mouse.dy 
  xpopup -d stats
}
alias stats.do {
  var %nick = $remove($gettok($did(cm,17).seltext,15,32),+fs,$chr(9),+s)
  if ($1 == kick) {
    kick %cm.chan %nick
  }
  if ($1 == whois) {
    whois %nick %nick
  }
  if ($1 == ban) {
    mode %cm.chan +b $bantype(%nick)
  }
  if ($1 == kb) {
    ban -k %cm.chan %nick
  }
}
alias cm.popup {
  if ($1 == 4) {
    var %d = $iif($ibl(%cm.chan,0) == 0,+g,+)
  }
  elseif ($1 == 8) {
    var %d = $iif($iel(%cm.chan,0) == 0,+g,+) 
  }
  elseif ($1 == 12) {
    var %d = $iif($iil(%cm.chan,0) == 0,+g,+)
  }
  var %o = $iif($oh($me,%cm.chan),+,+g), %r = $iif($did(cm,$1).seltext,+,+g), %r = $iif($3,+g,%r), %z = $iif($did(cm,$1,0).sel > 1,+g,+)
  mkmenu cm office2003rev
  xpopup -i cm + 0 $shortfn($scriptdiricons\question.ico)
  xpopup -i cm + 0 $shortfn($scriptdiricons\search.ico)
  if ($did(cm,$did).seltext) && (!$3) { 
    xpop -a cm 0 $chr(9) +g 1 1 $chr(151) $iif($len($remove($gettok($did(cm,$did).seltext,6,32),	,+fs)) > 8,$left($remove($gettok($did(cm,$did).seltext,6,32),	,+fs),8) $+ ..,$remove($gettok($did(cm,$did).seltext,6,32),	,+fs)) $chr(151)
    xpop -a cm 0 $chr(9) + 0 0 -
  }
  xpop -a cm 0 $chr(9) %o 2 0 &Add $2 
  xpop -a cm 0 $chr(9) $iif(%o == +,%r,%o) 3 0 &Remove $+($2,(s))
  xpop -a cm 0 $chr(9) $iif(%o == + && %z == +,%r,$iif(%o == +,%z,%o)) 4 0 &Edit $2 
  xpop -a cm 0 $chr(9) + 0 0 -
  if ($did == 4) {  
    xpop -a cm 0 $chr(9) $iif($ibl(%cm.chan,0) == 0,+g,+) 5 2 Fin&d ban..
    xpop -a cm 0 $chr(9) + 0 0 -
  }
  xpop -a cm  0 $chr(9) $iif(%o == +,%d,%o) 6 0 Clear $+($2,(s))
  xpopup -s cm +t $mouse.dx $mouse.dy 
  xpopup -d cm
}
ON *:SIGNAL:Xpopup-cm: {
  var %pop = $gettok($signal, 2-, 45)
  if (%pop == cm) {
    var %id = $replace($dialog(cm).tab,2,4,64,8,65,12)
    if ($1 == 2) { cm.menu.do %id add }
    elseif ($1 == 3) { cm.menu.do %id rem }
    elseif ($1 == 4) { cm.menu.do %id edit }
    elseif ($1 == 5) { findban }
    elseif ($1 == 6) { cm.menu.do %id clear }
  }
}
on *:signal:xpopup-stats: {
  if ($1 == 1) stats.do whois
  elseif ($1 == 2) stats.do kick
  elseif ($1 == 3) stats.do ban
  elseif ($1 == 4) stats.do kb
}
alias cm.menu.do  {
  if ($1 == 4) {
    if ($2 == rem) { cm.remove.sel 4 }
    elseif ($2 == add) { set %prefix +b | set %dialog 4 | $dialog(cm.add,cm.add,-4) }
    elseif ($2 == edit) { set %prefix -b+b | set %prefix2 +b | set %dialog 4 | $dialog(cm.edit,cm.edit,-4) }
    elseif ($2 == clear) { cm.clear b }
  }
  if ($1 == 8) {
    if ($2 == rem) { cm.remove.sel 8 }
    elseif ($2 == add) { set %prefix +e | set %dialog 8 | $dialog(cm.add,cm.add,-4) }
    elseif ($2 == edit) { set %prefix -e+e | set %prefix2 +e | set %dialog 8 | $dialog(cm.edit,cm.edit,-4) }
    elseif ($2 == clear) { cm.clear e }
  }
  if ($1 == 12) {
    if ($2 == rem) { cm.remove.sel 12 }
    elseif ($2 == add) { set %prefix +I | set %dialog 12 | $dialog(cm.add,cm.add,-4) }
    elseif ($2 == edit) { set %prefix -I+I | set %prefix2 +I | set %dialog 12 | $dialog(cm.edit,cm.edit,-4) }
    elseif ($2 == clear) { cm.clear I }
  }
}
dialog cm.add {
  title "Channel Central [/cm]"
  size -1 -1 143 73
  option dbu
  text "Please input your mask below in the format of: nick!ident@address.com", 1, 5 4 108 15
  edit "", 2, 3 42 137 10
  icon icons\script.ico
  button "Ok", 3, 73 58 32 13, default
  button "Cancel", 4, 108 58 32 13, cancel default
}
on *:dialog:cm.add:init:0: did -b $dname 3
on *:dialog:cm.add:edit:2: {
  did $iif($did(2),-e,-b) $dname 3
  $iif($did(2),did -t $dname 3)
}
on *:dialog:cm.add:sclick:3: {
  mode %cm.chan %prefix $did(2) 
  dialog -x $dname 
  unset %prefix %dialog
}
dialog cm.edit {
  title "Channel Central [/cm]"
  size -1 -1 143 73
  option dbu
  text "Please input your replacement below in the format of: nick!ident@address.com", 1, 5 4 108 15
  edit "", 2, 3 42 137 10
  icon icons\script.ico
  button "Ok", 3, 71 58 32 12, default
  button "Cancel", 4, 108 58 32 13, cancel
}
on *:load: {
  if ($version < 6.21) {
    echo -a This script require you to have mIRC 6.21 or above. download the latest version from www.mirc.com
    unload -rs $qt($script)
  }
  else {
    .scon -at1 .version
    set %cm.statsbar off
    .enable #channel
    set %cm.style office2003rev 2
    echo -at Thank you for loading my channel central. The channel central will now by default be enabled, toggle it and various settings by typing /cm.settings
  }
}
on *:dialog:cm.edit:init:0: {
  set %cm.replace $remove($gettok($did(cm,%dialog).seltext,6,32),	,+fs) 
  set %label.sel $did(cm,%dialog).sel
  did -ra $dname 2 %cm.replace 
  did -c $dname 2 1 1 $calc($len(%cm.replace) + 1)
}
on *:dialog:cm.edit:sclick:3: {
  if ($did(2) != %cm.replace) {
    mode %cm.chan %prefix %cm.replace $did($dname,2) | dialog -x $dname 
  }
  else {
    dialog -x $dname
  }
}
alias findban {
  if (%cm.chan !ischan) { inform * /findban: insufficient parameters (You're in no channel) | return }
  var %x = 1, %y = $ibl(%cm.chan,0)
  $iif(!$1,idialog Name or address to search for. Wildcards such as ? and * are accepted.)
  set %findban $iif(%idialog.result,$v1,$1)
  if (%findban == *!*@*) { inform You can't search for the term $v2 $+ ! | return }
  if (!%findban) return
  updatenl
  while (%x <= %y) {
    if ($wildtok($ibl(%cm.chan,%x),$+(*,%findban,*),1,32)) {
      set %match 1
      inform $qt(%findban) matched $ibl(%cm.chan,%x) set by $ibl(%cm.chan,%x).by at $asctime($ibl(%cm.chan,%x).ctime) on %cm.chan $+ .
    }
    inc %x
  }
  if (!%match) && (%findban != $null) { inform No matches for $qt(%findban) found on %cm.chan $+ . }
  unset %findban %match %idialog.result
} 
; Thanks to xDaeMoN and Snabbi for helping me here.
alias cm.remove.sel {
  var %a = 1, %r, %t = $iif($1 == 4,-b,$iif($1 == 8,-e,$iif($1 == 12,-I))), %i = $iif($1 == 4,7,$iif($1 == 8,11,$iif($1 == 12,14)))
  while ($did(cm,$1,%a).sel) {
    %r = %r $remove($gettok($did(cm,$1,$did(cm,$1,%a).sel),6,32),$chr(9),+fs,+s)
    if ($numtok(%r,32) == $modespl) {
      mode %cm.chan $str(%t,$numtok(%r,32)) %r
      var %r = ""
    }
    inc %a
  }
  if (%r) mode %cm.chan $str(%t,$numtok(%r,32)) %r
  cm.dialog.rem $did(cm,$1,0).sel $1
  cm.update.stats %i %cm.chan
  if ($did(cm,$1).lines == 1) {
    did -ra cm $1 No $iif($1 == 4,bans,$iif($1 == 8,excepts,$iif($1 == 12,invites))) set.
  }
}
alias cm.dialog.rem {
  var %i = $1
  while (%i) {
    did -d cm $2 $did(cm,$2,%i).sel
    dec %i
  }
}
alias oh return $iif($1 isop $2 || $1 ishop $2,$true,$false)
alias cm.update.stats {
  var %i = $1
  if ($dialog(cm)) {
    if (%i == 7) {
      did -ra cm 7 $iif(%cm.bans. [ $+ [ $cid ] ],$ibl($2,0) $+ / $+ $v1,$ibl($2,0) $+ /unknown) ( $+ $round($calc($ibl($2,0) / %cm.bans. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
    }
    if (%i == 11) {
      did -ra cm 11 $iif(%cm.excepts. [ $+ [ $cid ] ],$iel($2,0) $+ / $+ $v1,$iel($2,0) $+ /unknown) ( $+ $round($calc($iel($2,0) / %cm.excepts. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
    }
    if (%i == 14) {
      did -ra cm 14 $iif(%cm.invites. [ $+ [ $cid ] ],$iil($2,0) $+ / $+ $v1,$iil($2,0) $+ /unknown) ( $+ $round($calc($iil($2,0) / %cm.invites. [ $+ [ $cid ] ]  * 100),0) $+ % $+ )
    }
  }
}
alias other.modes.load {
  var %i = 1, %m = $removecs($chanmodes,$chr(44),$chr(32),t,m,n,p,s,k,l,i,b,e,I)
  while ( %i <= $len(%m) ) {
    $iif($mid(%m,%i,1) isincs $gettok($chan(%cm.chan).mode,1,32),%cm.other.modes = %cm.other.modes $mid(%m,%i,1))
    did -a cm 20 0 0 0 $iif($mid(%m,%i,1) isincs $gettok($chan(%cm.chan).mode,1,32),2,1) + $+ $mid(%m,%i,1)
    inc %i
  }
}
alias prevtopic {
  var %i = 0, %w = @topicprev,%y = 1,%t = $gtxt(cm,48),%f = $window(%w).font,%s = $window(%w).fontsize,%h = $calc($height(%t,%f,%s) +1)
  drawrect -nf %w $color(back) 1 0 0 $window(%w).w $window(%w).h
  if (%t != $null) {
    while (%y < $window(%w).h) {
      drawtext -npb %w $color(topic) $color(back) $qt(%f) %s $calc(2-(%i *($window(%w).w -6))) %y %t
      inc %y %h
      inc %i
    }
    drawrect -n %w $color(back) 2 0 0 $calc($window(%w).w -2) $calc($window(%w).h -2)
  }
  drawdot %w
}
alias gtxt {
  var %i = $did($1,$2).lines,%r
  while (%i) {
    %r = $did($1,$2,%i) $+ %r
    dec %i
  }
  return %r
}
alias cm.labeledit {
  if ($3 != $4) && ($4) { 
    set %label.sel $did(cm,$2).sel
    mode %cm.chan $1 $3-4 
  }
}
alias save.topic {
  if ($encode($3-,m)) {
    var %t = $v1,%h = $+($network,$1,$cr,%t)
    if ($1 == %chancentral.chan) && (!$hget(topichist,%h)) { did -i chancentral 5 1 $+($3-,$str( ,150),$2) }
    hadd -m topichist %h $2
  }
  if ($hfind(topichist,$+($network,$1,$cr,*),0,w) > 50) {
    var %i = $v1,%l = $ctime,%r
    while (%i) {
      var %h = $hfind(topichist,$+($network,$1,$cr,*),%i,w)
      if ($hget(topichist,%h) < %l) { var %l = $v1,%r = %h }
      dec %i
    }
    hdel topichist %r
  }
}
on *:topic:#: {
  save.topic $chan $ctime $1-
  if ($dialog(cm)) {
    did -r cm 49
    did -ra cm 91 -No topic selected-
    var %i = $hfind(topichist,$+($network,%cm.chan,$cr,*),0,w),%r,%z = 1,%g,%n = $nick(%cm.chan,0),%cm = $gettok($chanmodes,1,44)
    while (%i) {
      %r = $addtok(%r,$hget(topichist,$hfind(topichist,$+($network,%cm.chan,$cr,*),%i,w)) %i,124)
      dec %i
    }
    %r = $sorttok(%r,124)
    while ($gettok(%r,%z,124)) {
      tokenize 32 $v1
      did -i cm 49 1 $+($decode($gettok($hfind(topichist,$+($network,%cm.chan,$cr,*),$2,w),2,13),m),$str( ,150),$1)
      inc %z
    }
  }
}
raw 333:*:{ save.topic $2 $4 $chan($2).topic }
alias -l mdx return $shortfn($scriptdirdlls\mdx.dll)
alias -l views return $shortfn($scriptdirdlls\views.mdx)
alias -l dialogs return $shortfn($scriptdirdlls\dialog.mdx)
alias -l ctl return $shortfn($scriptdirdlls\ctl_gen.mdx)
alias who_ {
  .enable #raws
  who $1-
}
#rawz off
raw 315:*: haltdef
raw 352:*: haltdef
#rawz end
alias mkmenu {
  if ($xpopup($1).ismenu == $false) {
    xpopup -c $1 $gettok(%cm.style,1,32)
    xpopup -l $1 2 $rgb(58, 110, 165)
    xpopup -l $1 5 $rgb(214, 230, 250)
    xpopup -l $1 7 $rgb(214, 230, 250)
    xpopup -l $1 8 $rgb(58, 110, 165)
    xpopup -l $1 2 $rgb(58, 110, 165)
    xpopup -l $1 5 $rgb(214, 230, 250)
    xpopup -l $1 7 $rgb(214, 230, 250)
    xpopup -l $1 8 $rgb(58, 110, 165)
    xpopup -t $1 $gettok(%cm.style,1,32)
  }
}
alias -l xpop {
  if ( $isid ) returnex $dcx( _xpop, $1 $prop $2- )
  dcx xpop $2 $1 $3-
}
alias -l xpopup {
  if ( $isid ) returnex $dcx( _xpopup, $1 $prop $2- )
  dcx xpopup $2 $1 $3-
}
alias -l dcx {
  if ($isid) returnex $dll($scriptdirdlls\dcx.dll,$1,$2-)
  else dll " $+ $scriptdirdlls\dcx.dll" $1 $2-
}
alias gtok return $gettok($1,$2,32)
alias headerunsel {
  var %w1 = $+(@mdxunsel.,$1,.,$2,.1),%w2 = $+(@mdxunsel.,$1,.,$2,.2),%z
  window -hw0 %w1
  window -hw0 %w2
  filter -iwr 2- $+ $did($1,$2).lines $1 $2 %w1
  var %i = 1,%t = $line(%w1,0)
  while (%i <= %t) {
    noop $regsub($gtok($line(%w1,%i),3-),/	\+[fs]+ (\d+) (\d+) (\d+)/g,	+ \1 \2 \3,%z)
    echo %w2 1 + %z
    inc %i
  }
  close -@ %w1
}
alias headersort {
  if (headerclick headerEvent ?* iswm $did($did,1)) {
    var %z,%x = $gtok($did($did,1),3),%w = $+(@mdxunsel.,$dname,.,$did,.2),%r
    headerunsel $dname $did
    filter $iif(%sortheader. [ $+ [ $dname ] $+ ] . [ $+ [ $did ] ] == %x,-cwoet,-cwot) %x 9 %w $dname $did *
    close -@ %w
    did -i $dname $did 1 page headertext
    noop $regsub($puttok($remove($gtok($did($did,1),2-),(asc.),(desc.)),$remove($iif(%x == 1,$gtok($gettok($did($did,1),%x,9),2-),$gettok($did($did,1),%x,9)),(asc.),(desc.)) ( $+ $iif(%sortheader. [ $+ [ $dname ] $+ ] . [ $+ [ $did ] ] == %x,desc.,asc.) $+ ),%x,9),/(\+[clr]) 1/g,\1 0,%r)
    var %ö = $gettok($did($did,1),%x,9))
    did -i $dname $did 1 %r
    if (%sortheader. [ $+ [ $dname ] $+ ] . [ $+ [ $did ] ] != %x) { set $+(%,sortheader.,$dname,.,$did) %x }
    else { unset $+(%,sortheader.,$dname,.,$did) }
  }
}
alias idialog {
  if ($1) {
    set %idialog.text $1-
    $dialog(idialog,idialog,-4)
  }
}
dialog idialog {
  title "input request"
  size -1 -1 163 86
  option dbu
  icon icons\script.ico
  edit "", 2, 2 3 159 51, read multi return vsbar
  button "Cancel", 3, 124 72 37 12, cancel default
  edit "", 4, 2 58 159 12, autohs
  button "Ok", 5, 84 72 37 12, disable default
}
on *:dialog:idialog:*:*: {
  if ($devent == init) {
    dll $mdx SetMircVersion $version
    dll $mdx MarkDialog $dname
    dll $mdx SetBorderStyle $dname 2
    did -f $dname 4
    did -ra $dname 2 %idialog.text
    if (%idialog.text2) {
      did -ra $dname 4 $v1
      did -c $dname 4 1 1 $calc($len($v1) + 1)
      unset %idialog.text2
    }
  }
  if ($devent == close) unset %idialog.result idialog.text
  if ($devent == edit) {
    if ($did == 4) {
      did $iif($did(4),-e,-b) $dname 5
      did -t $dname $iif($did(4),5,3)
    }
  }
  elseif ($devent == sclick) {
    if ($did == 5) {
      set %idialog.result $did(4)
      dialog -x $dname
    }
  }
}
dialog cdialog {
  title "confirmation request..."
  size -1 -1 163 70
  option dbu
  icon icons\script.ico
  edit "", 2, 2 4 159 45, read multi return vsbar
  button "No", 3, 123 56 37 12, default
  button "Yes", 5, 83 56 37 12
  edit "", 10, 2 52 160 1
}
on *:dialog:cdialog:init:0: {
  dll $mdx SetMircVersion $version
  dll $mdx MarkDialog $dname
  dll $mdx SetBorderStyle $dname 2
  dll $mdx SetBorderStyle $dname 10 staticedge
  did -ra $dname 2 %cdialog.text
  did -f $dname 3
}
alias cdialog {
  if ($1) {
    set %cdialog.text $1-
    $dialog(cdialog,cdialog,-4)
  }
}
on *:dialog:cdialog:sclick:*: {
  if ($istok(3 5,$did,32)) {
    if ($did) set -u2 %cdialog.did $did($did)
    dialog -x $dname
    .timer -m 1 500 unset %idialog.result %cdialog.did
  }
}
alias lbl {
  if ($dialog($1)) && ($1 !isnum) {
    if ($4) { var %t = $did($1,$2,$3), %c = $4 }
    else { var %t = $did($1,$2).seltext, %c = $3 }
  }
  else {
    if ($3) { var %t = $did($1,$2), %c = $3 }
    else { var %t = $did($1).seltext, %c = $2 }
  }
  return $gtok($gettok($gettok(%t,1,4),%c,9),$iif(%c == 1,6-,5-))
}
on *:exit: {
  if ($hget(topichist)) .hsave -o topichist topichist.hsh
}
on *:disconnect: { 
  if ($hget(topichist)) .hsave -o topichist topichist.hsh
}
on *:start: {
  if !$hget(topichist) { .hmake topichist 100 }
  if $exists(topichist.hsh) { .hload topichist topichist.hsh }
}
raw 005:*: {
  if $regex($1-,/MAXBANS=(\d+)/) { set $+(%,cm.bans,.,$cid) $regml(1) }
  if $regex($1-,/TOPICLEN=(\d+)/) { set $+(%,cm.topic,.,$cid) $regml(1) }
  if $regex($1-,/MAXLIST=b:([0-9]+)/) { set $+(%,cm.bans,.,$cid) $regml(1) }
  var %r = /MAXLIST=.*?,e:(\d+)/ | if $regex($1-,%r) { set $+(%,cm.excepts,.,$cid) $regml(1) }
  var %r = /MAXLIST=.*?,I:(\d+)/ | if $regex($1-,%r) { set $+(%,cm.invites,.,$cid) $regml(1) }
}
on *:unload: {
  unset %cm.*
  hfree topichist
}
alias statusbar {
  if ($1) {
    if ($1 == new) { 
      xstatusbar -A 1 tooltips grip
      dcx xSignal 1 +s
      set %cm.statusbar on
      if ($dialog(config)) {
        did -c config 227
      }
    }
    elseif ($1 == close) {
      xstatusbar -A 0
      dcx xSignal 0 +s
      set %cm.statusbar off
      if ($dialog(config)) {
        did -u config 227
      }
    }
  }
  if ($xstatusbar().visible) {
    xstatusbar -l $str(120 $chr(32),10) -1
    xstatusbar -w + 0 $shortfn($scriptdiricons\3.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\2.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\1.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\6.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\4.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\5.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\3.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\10.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\11.ico)
    xstatusbar -w + 0 $shortfn($scriptdiricons\12.ico)
    .scid $activecid xstatusbar -t 1 +p 1 Users: $iif($active ischan,$nick($active,0),n/a) $chr(9) Users: $iif($active ischan,$nick($active,0),n/a)
    if (~ isincs %cm.prefix. [ $+ [ $activecid ] ]) .scid $activecid xstatusbar -t 2 +p 2 Owners: $iif($active ischan,$nick($active,0,q) $wr($calc(($nick($active,0,q) / $nick($active,0)) * 100)),n/a) $chr(9) Owners: $iif($active ischan,$nick($active,0,q) $wr($calc(($nick($active,0,q) / $nick($active,0)) * 100)),n/a)
    else .scid $activecid xstatusbar -t 2 +p 0 n/a
    if (& isincs %cm.prefix. [ $+ [ $activecid ] ]) .scid $activecid xstatusbar -t 3 +p 3 Admins: $iif($active ischan,$nick($active,0,a,vhrq) $wr($calc(($nick($active,0,a,vhrq) / $nick($active,0)) * 100)),n/a) $chr(9) Admins: $iif($active ischan,$nick($active,0,a,vhrq) $wr($calc(($nick($active,0,a,vhrq) / $nick($active,0)) * 100)),n/a)
    else .scid $activecid xstatusbar -t 3 +p 0 n/a
    if (@ isincs %cm.prefix. [ $+ [ $activecid ] ]) .scid $activecid xstatusbar -t 4 +p 4 Ops: $iif($active ischan,$nick($active,0,o) $wr($calc(($nick($active,0,o) / $nick($active,0)) * 100)),n/a) $chr(9) Ops: $iif($active ischan,$nick($active,0,o) $wr($calc(($nick($active,0,o) / $nick($active,0)) * 100)),n/a)
    else .scid $activecid xstatusbar -t 4 +p 0 n/a
    if (% isincs %cm.prefix. [ $+ [ $activecid ] ]) .scid $activecid xstatusbar -t 5 +p 5 Half-Ops: $iif($active ischan,$nick($active,0,h) $wr($calc(($nick($active,0,h) / $nick($active,0)) * 100)),n/a) $chr(9) Half-Ops: $iif($active ischan,$nick($active,0,h) $wr($calc(($nick($active,0,h) / $nick($active,0)) * 100)),n/a)
    else .scid $activecid xstatusbar -t 5 +p 0 n/a
    if (+ isincs %cm.prefix. [ $+ [ $activecid ] ]) .scid $activecid xstatusbar -t 6 +p 6 Voices: $iif($active ischan,$nick($active,0,v) $wr($calc(($nick($active,0,v) / $nick($active,0)) * 100)),n/a) $chr(9) Voices: $iif($active ischan,$nick($active,0,v) $wr($calc(($nick($active,0,v) / $nick($active,0)) * 100)),n/a)
    else .scid $activecid xstatusbar -t 6 +p 0 n/a
    var %b = %cm.bans. [ $+ [ $activecid ] ], %e = %cm.excepts. [ $+ [ $activecid ] ], %i = %cm.invites. [ $+ [ $activecid ] ]
    .scid $activecid xstatusbar -t 7 +p 7 Regulars: $iif($active ischan,$nick($active,0,r) $wr($calc(($nick($active,0,r) / $nick($active,0)) * 100)),n/a) $chr(9) Regulars: $iif($active ischan,$nick($active,0,r) $wr($calc(($nick($active,0,r) / $nick($active,0)) * 100)),n/a)
    .scid $activecid xstatusbar -t 8 +p 8 Bans: $iif($active ischan,$ibl($active,0) $wr($calc(($ibl($active,0) / %b) * 100)),n/a) $chr(9) Bans: $iif($active ischan,$ibl($active,0) $wr($calc(($ibl($active,0) / %b) * 100)),n/a)
    .scid $activecid xstatusbar -t 9 +p 9 Invites: $iif($active ischan,$iel($active,0) $wr($calc(($iel($active,0) / %i) * 100)),n/a) $chr(9) Invites: $iif($active ischan,$iel($active,0) $wr($calc(($iel($active,0) / %e) * 100)),n/a)
    .scid $activecid xstatusbar -t 10 +p 10 Excepts: $iif($active ischan,$iil($active,0) $wr($calc(($iil($active,0) / %i) * 100)),n/a) $chr(9) Excepts: $iif($active ischan,$iil($active,0) $wr($calc(($iil($active,0) / %i) * 100)),n/a)
  }
}
alias -l wr return ( $+ $round($1-,0) $+ % $+ )
on *:active:*: statusbar
on *:join:#: statusbar
on *:SIGNAL:*: {
  if ($signal == XPopup-statusbar) {
    if ($1 == 2) statusbar
    elseif ($1 == 4) statusbar close
  }
  if ($1 == DCXStatusbar) {
    if ($2 == rclick) {
      mkmenu statusbar office2003rev
      xpopup -i statusbar + 0 $shortfn($scriptdiricons\question.ico)
      xpop -a statusbar 0 $chr(9) +g 1 1 $xstatusbar($4).text
      xpop -a statusbar 0 $chr(9) + 0 0 -
      xpop -a statusbar 0 $chr(9) + 2 0 &Refresh
      xpop -a statusbar 0 $chr(9) + 0 0 -
      xpop -a statusbar 0 $chr(9) +c 4 0 En&able statusbar
      xpopup -s statusbar +t $mouse.dx $mouse.dy 
      xpopup -d statusbar
    }
  }
}
alias xstatusbar {
  !if ($isid) returnex $dcx( _xstatusbar, mIRC $prop $1- )
  dcx xstatusbar $1-
}
dialog cm.settings {
  title "Channel Central configuration..."
  size -1 -1 113 64
  option dbu
  check "Enable channel central", 1, 8 9 68 9
  check "Use statusbar", 2, 16 20 50 8
  combo 3, 49 30 54 35, drop
  text "Menu Style:", 4, 17 31 31 9
  box "Settings...", 5, 4 0 105 46
  button "&Ok", 6, 69 49 40 13, ok
  icon $scriptdiricons\script.ico
}
on *:dialog:cm.settings:*:*: {
  if ($devent == init) {
    dll $mdx MarkDialog $dname
    dll $mdx SetFont $dname 5 13 700 Tahoma
    didtok $dname 3 44 office2003,office2003rev,officexp,icy,icyrev,grade,graderev,normal,vertical,verticalrev
    did $iif(%cm.statusbar == on,-e,-b) $dname 4,2
    did $iif(%cm.statusbar == on,-c,-u) $dname 2
    did $iif($group(#channel) == on,-e,-b) $dname 4,2
    did $iif($group(#channel) == on,-c,-u) $dname 1
    did -c $dname 3 $gettok(%cm.style,2,32)
  }
  elseif ($devent == sclick) {
    if ($did == 1) {
      did $iif($did(1).state == 1,-e,-b) $dname 4,2
      $iif($did(1).state == 1,.enable,.disable) #channel
      statusbar $iif($did(1).state == 1 && $did(2).state == 1,new,close)
    }
    elseif ($did == 2) {
      statusbar $iif($did(2).state == 0,close,new)
    }
    elseif ($did == 3) {
      set %cm.style $did(3) $did(3).sel
    }
  }
}
alias cm.settings dialog $iif($dialog(cm.settings),-v,-m) cm.settings cm.settings
;---------------------------------------
; End of file
;---------------------------------------