Jump to content
chain

Uno

Recommended Posts

  • Administrators

exsplains it self...
I got this on mIRC Renegade, i liked it alot tweaked it a lil too

 

on *:LOAD:{
  if ($version < 6.14) { 
    echo -a Uno was coded and tested on mirc 6.14. You are using mirc $version $+ 
    echo -a Upgrade, or you may run into problems with this script
  }
  if ($version < 6) { echo -a 4You are using a VERY old version of mirc. You WILL run into problems with this script. }   
  unosetup
}
alias unosetup {
  if ($exists($unoini(uno.ini))) {
    echo -a *** Found an existing config/user database...backing it up ( unoback $+ $ctime $+ .ini )
    if ($readini($unoini(uno.ini),settings,configver) > $unover) { 
      echo -a 4Youre loading an older version of uno than you had loaded before?!??!!?
      echo -a Config Version: $readini($unoini(uno.ini),settings,configver) This version: $unover
    }
    copy $unoini(uno.ini) unoback $+ $ctime $+ .ini
  }
  if ($readini($unoini(uno.ini),settings,allowreg) == $null) {
    %tmpmsg = $?!="Do you want to enable user registration? (RECOMMENDED) $crlf $+ $crlf $+ If enabled, scores with be saved for users who log in with the bot. Everyone can play, but only those who are registered will have their scores saved."
    writeini $unoini(uno.ini) settings allowreg $iif(%tmpmsg == $true,1,0)
  }
  if ($readini($unoini(uno.ini),settings,enabled) == $null) { writeini $unoini(uno.ini) settings enabled 1 }
  if ($readini($unoini(uno.ini),settings,color) == $null) { writeini $unoini(uno.ini) settings color 1 }
  writeini $unoini(uno.ini) settings configver $unover
  if ($readini($unoini(uno.ini),settings,encrypt) == 1) { 
    echo -a Encrypted passwords has been removed. All passwords will be converted to plan text once the user logs in.
  }
  if ($readini($unoini(uno.ini),settings,idlewarn) == $null) { writeini $unoini(uno.ini) settings idlewarn 30 }
  if ($readini($unoini(uno.ini),settings,idleremove) == $null) { writeini $unoini(uno.ini) settings idleremove 120 }
  if (!$exists($unoini(unotheme.ini))) { 
    echo -a 4,1UNOTHEME.INI NOT FOUND! Unobot will NOT work without this file. See http://shady.nu/?x=mirc
    echo -a *** Loading unobot anyway.
  } 
  if ($readini($unoini(uno.ini),settings,theme) == $null) { writeini $unoini(uno.ini) settings theme default }
  if ($readini($unoini(uno.ini),settings,floodmsgs) == $null) { writeini $unoini(uno.ini) settings floodmsgs 7 }
  if ($readini($unoini(uno.ini),settings,floodreps) == $null) { writeini $unoini(uno.ini) settings floodreps 4 }
  if ($readini($unoini(uno.ini),settings,floodignoresecs) == $null) { writeini $unoini(uno.ini) settings floodignoresecs 10 }
  if ($readini($unoini(uno.ini),settings,floodpunishmsg) == $null) { writeini $unoini(uno.ini) settings floodpunishmsg 2 }
  if ($readini($unoini(uno.ini),settings,floodpunishrep) == $null) { writeini $unoini(uno.ini) settings floodpunishrep 2 }
  if ($readini($unoini(uno.ini),settings,floodban) == $null) { writeini $unoini(uno.ini) settings floodban 60 }
  if ($readini($unoini(uno.ini),settings,floodenabled) == $null) { writeini $unoini(uno.ini) settings floodenabled 0 }
  if ($readini($unoini(uno.ini),settings,htmlbackground) == $null) { writeini $unoini(uno.ini) settings htmlbackground white }
  if ($readini($unoini(uno.ini),settings,htmltext) == $null) { writeini $unoini(uno.ini) settings htmltext black }
  if ($readini($unoini(uno.ini),settings,htmlborder) == $null) { writeini $unoini(uno.ini) settings htmlborder black }
  if ($readini($unoini(uno.ini),settings,topcalc) == $null) { writeini $unoini(uno.ini) settings topcalc 2 }
  if (!$exists($unoini(uno.ini))) { 
    echo -a --------
    echo -a 4,1!UNO.INI WAS NOT CREATED! 
    echo -a Bad location: $unoini(uno.ini)
    echo -a This means that the directory " $+ $nofile($unoini(uno.ini)) $+ " cannot be written to for one reason or another.
    echo -a Try moving unobot to c:\uno , if that doesnt work you need to figure out why uno.ini cannot be created in that directory.
    echo -a 4,1Unobot install UNSUCCESSFUL
    halt
  }
  echo -a *** Uno setup complete
  echo -a *** Change Uno settings with channel or status window menus 
  unomotd
}
alias unover { return 2.6 }
alias unomotd { 
  if (!$sock(unocheck)) { sockopen unocheck bl4h.mine.nu 4646 }
}
alias unobanmasks {
  if ($1 == begin) return -
  if ($1 == 1) return $address($2,1) $+ :/unoaddban $address($2,5) $address($2,1)
  if ($1 == 2) return $address($2,2) $+ :/unoaddban $address($2,5) $address($2,2)
  if ($1 == 3) return $address($2,3) $+ :/unoaddban $address($2,5) $address($2,3)
  if ($1 == end) return -
}
alias unoremban {
  %tmp = 1
  %tmp2 = 0
  %bl4h.unotmpliness = $lines($shortfn($scriptdir $+ unobans.txt))
  while (%tmp <= %bl4h.unotmpliness) {
    if ($read($shortfn($scriptdir $+ unobans.txt),%tmp) iswm $1) {
      write -d $+ %tmp $shortfn($scriptdir $+ unobans.txt)
      inc %tmp2
    }
    else { inc %tmp }
  }
  echo -a %tmp2 Bans removed
}
alias unoaddban {
  %bl4h.unountmp = 1
  %bl4h.unotmplines = $lines($shortfn($scriptdir $+ unobans.txt))
  while (%bl4h.unountmp <= %bl4h.unotmplines) {
    if ($read($shortfn($scriptdir $+ unobans.txt),%bl4h.unountmp) iswm $1) { 
      echo -a ! User already banned as: $read($shortfn($scriptdir $+ unobans.txt),%bl4h.unountmp)
    }
    inc %bl4h.unountmp
  }
  write $shortfn($scriptdir $+ unobans.txt) $2
  echo -a *** Added $2 to the uno ban list
}
menu Menubar {
  -
  (-[Uno]-)
  .$submenu($unobanmasks($1,$snick($chan,1)))
  .Custom banmask:/unoaddban $address($snick($chan,1),5) $?="Enter banmask"
  .Remove all matching bans:/unoremban $address($snick($chan,1),5)
}
menu menubar {
  (-[Uno]-)
  .Uno settings:/unodiag unoman
  .Uno banlist:{ 
    if ($exists($shortfn($scriptdir $+ unobans.txt))) { run $shortfn($scriptdir $+ unobans.txt) }
    else { write $shortfn($scriptdir $+ unobans.txt) ;put one ban mask per line | run $shortfn($scriptdir $+ unobans.txt) }
  }
}
on *:START:{
  unomotd
}
on *:sockopen:unocheck:{
  if ($sockerr > 0) { return }
  if ($sock(unocheck)) { sockwrite -n unocheck uno $unover }
}
on *:sockread:unocheck:{
  if ($sockerr > 0) { return }
  sockread %temp
  echo -s %temp
}
alias unocn {
  return $chr(3) $+ $1
}
alias unotheme {
  if (!$readini($unoini(unotheme.ini),$readini($unoini(uno.ini),settings,theme),$2)) { return UNO ERROR: Missing theme var : $2 }
  %bl4h.unotheme = $readini($unoini(unotheme.ini),$readini($unoini(uno.ini),settings,theme),$2)
  %bl4h.unotheme = $replace(%bl4h.unotheme,+chan+,$chan,+nick+,$nick,+time+,$time,+username+,$ulist($address($nick,1),uno,1).info,+botnick+,$me)
  ;%bl4h.unotheme = $replace(%bl4h.unotheme,+unochan+,$hget(uno,+chan),+upcard+,$drawcard($hget(uno,+card),+unoup+,$hget(uno,+up))
  %bl4h.unotheme = $replace(%bl4h.unotheme,+1+,$gettok($1-,1,32),+2+,$gettok($1-,2,32),+3+,$gettok($1-,3,32),+4+,$gettok($1-,4,32))
  %bl4h.unotheme = $replace(%bl4h.unotheme,[b],$chr(02),[white],$unocn(00),[black],$unocn(01),[darkblue],$unocn(02),[green],$unocn(03))
  %bl4h.unotheme = $replace(%bl4h.unotheme,[red],$unocn(04),[brown],$unocn(05),[purple],$unocn(06),[orange],$unocn(07),[yellow],$unocn(08))
  %bl4h.unotheme = $replace(%bl4h.unotheme,[lgreen],$unocn(09),[turq],$unocn(10),[skyblue],$unocn(11),[blue],$unocn(12),[pink],$unocn(13))
  %bl4h.unotheme = $replace(%bl4h.unotheme,[dgray],$unocn(14),[lgray],$unocn(15),[r],$chr(22),[u],$chr(31))
  %bl4h.unotheme = $replace(%bl4h.unotheme,[/b],$chr(2),[/r],$chr(22),[/u],$chr(31))
  if ([/ isin %bl4h.unotheme) {
    %bl4h.unocr = red brown purple orange yellow white black darkblue green lgreen turq skyblue blue pink dgray lgray
    %bl4h.untmp = 1
    while ($gettok(%bl4h.unocr,0,32) >= %bl4h.untmp) {
      %bl4h.unotheme = $replace(%bl4h.unotheme,[/ $+ $gettok(%bl4h.unocr,%bl4h.untmp,32) $+ ],$chr(3))
      inc %bl4h.untmp
    }
  }
  return %bl4h.unotheme
}
on ^*:NOTICE:uno*:?:{
  ;close -m $nick
  if (!$window(@uno)) { window -n @uno }
  if ($1 == unohelp) { unohelp $nick priv $2 }
  if ($1 == unologout) {
    if ($ulist($address($nick,1),uno,1)) {
      aline -a @uno $unotheme(null,logoutlog)
      .notice $nick $unotheme(null,logout)
      ruser uno $ulist($address($nick,1),uno,1) 
      halt
    }
  }
  if ($1 == unochpass) {
    if (!$2) { .notice $nick $unotheme($nick,hchpass) }
    if ($ulist($address($nick,1),uno,1).info) {
      writeini $unoini(uno.ini) $ulist($address($nick,1),uno,1).info password $2
      .notice $nick $unotheme($2,passchange)
      halt
    }
    else { .notice $nick $unotheme(null,notlogged) | halt }
  }
  if ($1 == unologin) {
    unset %bl4h.unologtmp
    if ($readini($unoini(uno.ini),settings,allowreg) != 1) { 
      .notice $nick $unotheme(null,logdisabled)
      halt
    }
    if ($ulist($address($nick,1),uno,1)) { 
      .notice $nick $unotheme(null,alreadylogged)
      halt
    }
    if (!$2 || !$3) { .notice $nick $unotheme(null,hlogin) | halt }
    if (!$readini($unoini(uno.ini),$2,registered) || $readini($unoini(uno.ini),$2,registered) == 0) { .notice $nick $unotheme($2,notregged) | halt }    
    if ($3 == $readini($unoini(uno.ini),$2,password) && %bl4h.unologtmp != 1) { %bl4h.unologtmp = 1 }
    if (%bl4h.unologtmp == 1) {
      .guser uno $nick 1 $2
      .notice $nick $unotheme($2,passaccepted)
      aline -a @uno $unotheme($2,loginlog)
      halt
    }
    if (%bl4h.unologtmp != 1) { 
      .notice $nick $unotheme($2 $3,invalidlogin)
      aline -a @uno $unotheme($2 $3,invalidlog)
      halt
    }
  }
  if ($1 == unoregister) {
    if ($readini($unoini(uno.ini),$2,registered) == 1) { .notice $nick $unotheme($2,usernametaken) | halt }
    userhost $nick
    if (!$2 || !$3) { .notice $nick $unotheme(null,hregister) | halt }
    if ($len($2) > 20 || $len($3) > 20) { .notice $nick $unotheme(null,toolong) | halt }
    %bl4h.unolamercheck = $unohostcheck($nick)
    if (%bl4h.unolamercheck != 0) {
      .notice $nick $unotheme(%bl4h.unolamercheck,alreadyregged)
      halt
    }
    else {
      writeini $unoini(uno.ini) $2 password $3
      writeini $unoini(uno.ini) $2 registered 1
      writeini $unoini(uno.ini) $2 wins 0
      writeini $unoini(uno.ini) $2 loss 0
      writeini $unoini(uno.ini) $2 score 0
      writeini $unoini(uno.ini) $2 totalgames 0
      writeini $unoini(uno.ini) $2 place 0
      writeini $unoini(uno.ini) $2 playersince $ctime
      writeini $unoini(uno.ini) $2 redad $address($nick,1)
      .notice $nick $unotheme($2 $3,regsuccess)
      .guser uno $nick 1 $2
      .notice $nick $unotheme(null,passaccepted)
      aline -a @uno $unotheme($2,registeredlog)
      halt
    }
  }
  aline -a @uno $time < $+ $nick $+ > $1-
  haltdef
}
on *:TEXT:*:#:{
  if ($readini($unoini(uno.ini),settings,enabled) == 1) {
    ;flood protection
    if ($hget(flood. $+ $nick,ig)) { halt }
    if (!%bl4h.floodenabled) { %bl4h.floodenabled = $readini($unoini(uno.ini),settings,floodenabled) }
    if (%bl4h.floodenabled == 1) {
      if (!%bl4h.floodunorep) { %bl4h.floodunorep = $readini($unoini(uno.ini),settings,floodreps) }
      if (!%bl4h.floodunomsgs) { %bl4h.floodunomsgs = $readini($unoini(uno.ini),settings,floodmsgs) }
      if (!%bl4h.floodunoignore) { %bl4h.floodunoignore = $readini($unoini(uno.ini),settings,floodignoresecs) }
      if (!%bl4h.floodpunishmsg) { %bl4h.floodpunishmsg = $readini($unoini(uno.ini),settings,floodpunishmsg) }
      if (!%bl4h.floodpunishrep) { %bl4h.floodpunishrep = $readini($unoini(uno.ini),settings,floodpunishrep) }
      unset %bl4h.flooder
      if (!$hget(flood. $+ $nick,s)) {
        hadd -m flood. $+ $nick t $md5($1-)
        hadd -m flood. $+ $nick rep 1
        hadd -m flood. $+ $nick msg 1
        hadd -z flood. $+ $nick s 10
        goto gays 
      }
      if ($md5($1-) isin $hget(flood. $+ $nick,t)) { hinc flood. $+ $nick rep }
      hadd flood. $+ $nick t $hget(flood. $+ $nick,t) $md5($1-)
      hinc flood. $+ $nick msg
      if ($hget(flood. $+ $nick,s)) {
        if ($hget(flood. $+ $nick,rep) >= %bl4h.floodunorep) { %bl4h.flooder = rep | %bl4h.floodpunish = %bl4h.floodpunishrep }
        if ($hget(flood. $+ $nick,msg) >= %bl4h.floodunomsgs) { %bl4h.flooder = msg | %bl4h.floodpunish = %bl4h.floodpunishmsg }
        if (%bl4h.flooder) {
          hadd -u $+ %bl4h.floodunoignore flood. $+ $nick ig 1
          if (%bl4h.floodpunish == 3 && $me isop $chan) { ban -u $+ $readini($unoini(uno.ini),settings,floodban) $chan $nick | %bl4h.unotmpban = $readini($unoini(uno.ini),settings,floodban) }
          if (%bl4h.floodpunish >= 2 && $me isop $chan) {
            kick $chan $nick $upper(%bl4h.flooder) FLOOD: $iif(%bl4h.unotmpban,>> $readini($unoini(uno.ini),settings,floodban) second ban,slow down)
            unset %bl4h.unotmpban
          }
          else { .notice $nick $unotheme(%bl4h.floodunoignore,floodmsg) }
          return 
        }
      }
      :gays
      ;end flood protection
    }
    if ($1 == !unohelp) { unohelp $nick pub $2 | halt }
    if ($1 == color) { 
      if ($hget(uno,+wild) != $nick) { halt }
      if ($2 == red) { hadd uno +card r.RED | goto k }
      if ($2 == blue) { hadd uno +card b.BLUE | goto k }
      if ($2 == green) { hadd uno +card g.GREEN | goto k }
      if ($2 == yellow) { hadd uno +card y.YELLOW | goto k }
      halt
      :k
      hdel uno +wild
      goone
      nextplayer
      halt
    }
    if ($1 == !uno) {
      if ($unoisban($address($nick,5)) == 1) { .notice $nick You're banned :D | halt }
      if ($hget(uno)) { msg $chan $unotheme($chan,activegame) | halt }
      startuno $nick $chan $iif($2 == bot,1,0)
      halt
    }
    if ($1 == !unotop10) { 
      if ($readini($unoini(uno.ini),settings,top10)) {
        unset %bl4h.unotmpu
        %bl4h.unotmp = 1
        while (%bl4h.unotmp <= $gettok($readini($unoini(uno.ini),settings,top10),0,32)) {
          %bl4h.unotmpu = %bl4h.unotmpu $ord(%bl4h.unotmp) $+ : $gettok($readini($unoini(uno.ini),settings,top10),%bl4h.unotmp,32)
          inc %bl4h.unotmp
        }
        msg $chan %bl4h.unotmpu
      }
      halt
    }
    if ($1 == !unostat) { 
      if (!$2) { unostat $chan $nick | halt }
      else { unostat $chan $2 | halt }
    }
    if ($1 == !unoend || $1 = !enduno || $1 = !stopuno) {
      if (!$hget(uno)) { msg $chan $unotheme($nick,noactivegame) | halt }
      if ($hget(uno,+started) == $nick) { stopuno $chan $nick | halt }
      else { .msg $chan $unotheme($hget(uno,+started),endunoerr) | halt } 
    }
    if ($1 == !unoabout) { .notice $nick Unobot $unover by bl4h (bl4h@shady.nu) http://shady.nu | halt }
    if ($1- == join) {
      if (!$hget(uno)) { msg $chan $unotheme(null,noactivegame) | halt }
      if ($unoingame($nick)) { .notice $nick $unotheme(null,alreadyplaying) | halt }
      userhost $nick
      if ($unoisban($address($nick,5)) == 1) { .notice $nick You're banned :D | halt }
      if ($readini($unoini(uno.ini),settings,allowreg) == 1) {
        if ($ulist($address($nick,1),uno,1)) { .notice $nick $unotheme(null,playingas) }
        if (!$ulist($address($nick,1),uno,1)) { 
          .notice $nick $unotheme(null,notplayingas)
          .notice $nick $unotheme(null,hregistersuggest)
        }
      }
      setupplayer $nick
      halt
    }
    if ($1 == count) { unocount | halt }
    if ($1 == order || $1 == turns) {
      if ($hget(uno,+turn)) { msg $chan Up: $gettok($unoorder,1,32) Next: $gettok($unoorder,2-,32) $+  }
    }
    if ($1 == !unoremove) {
      if ($unoingame($nick)) { 
        .notice $nick You may not join this current game again.
        hadd uno +nojoin $hget(uno,+nojoin) $address($nick,2)
        unoremplayer $nick
        halt 
      }
    }
    if ($hget(uno,+wild)) { msg $hget(uno,+chan) $unotheme($hget(uno,+wild),wildwait) | halt }
    if ($1 == play) {
      if ($hget(uno,+up) != $nick) { .notice $nick $unotheme($nick,notyourturn) | halt }
      playcard $nick $2-
      halt
    }
    if ($1 == pass) {
      if (!$hget(uno)) { .notice $nick $unotheme($nick,noactivegame) | halt }
      if ($hget(uno,+up) != $nick) { .notice $nick $unotheme(null,notyourturn) | halt }
      if (!%bl4h.unodraw) { .notice $hget(uno,+up) $unotheme(null,mustdraw) | halt }
      goone
      nextplayer
      halt
    }
    if ($1 == draw) {
      if (!$hget(uno)) { .notice $nick $unotheme($nick,noactivegame) | halt }
      if ($hget(uno,+up) != $nick) { .notice $nick $unotheme(null,notyourturn) | halt }
      if (%bl4h.unodraw == 1) { .notice $nick $unotheme(null,passorplay) | halt }
      givecards $hget(uno,+up) 1
      %bl4h.unodraw = 1
      .notice $hget(uno,+up) $unotheme(null,passorplay)
      halt
    }
  }
}
alias unoisban {
  %bl4h.unotmp = 1
  while (%bl4h.unotmp <= $gettok($hget(uno,+nojoin),0,32)) {
    if ($gettok($hget(uno,+nojoin),%bl4h.unotmp,32) iswm $1) { return 1 }
    inc %bl4h.unotmp
  }
  if ($exists($shortfn($scriptdir $+ unobans.txt))) {
    %bl4h.unotmp = 1
    while (%bl4h.unotmp <= $lines($shortfn($scriptdir $+ unobans.txt))) {
      if ($read($shortfn($scriptdir $+ unobans.txt),%bl4h.unotmp) iswm $1) { return 1 }
      inc %bl4h.unotmp
    }
  }
  return 0
}
alias playcard {
  %bl4h.unoply = $hascard($1,$2-)
  if (%bl4h.unoply != 0) {
    hadd uno +card $upper(%bl4h.unoply)
    removecard $hget(uno,+up) $upper(%bl4h.unoply)
    if ($gettok($hget(uno,$1),0,45) == 1) { msg $hget(uno,+chan) $unotheme($hget(uno,+up),hasuno) }
    if (!$gettok($hget(uno,$1),0,45)) {
      if (%bl4h.unoply == W.D.F) { givecards $gettok($unoorder,2,32) 4 }
      if ($gettok(%bl4h.unoply,2,46) == dt) { givecards $gettok($unoorder,2,32) 2 }
      msg $hget(uno,+chan) $unotheme($hget(uno,+up),unowin)
      msg $hget(uno,+chan) Duration: $duration($calc($ctime - $hget(uno,+time)))
      unoscore $hget(uno,+up)
      stopuno $hget(uno,+chan) $hget(uno,+up)
      halt
    }
    if (%bl4h.unoply == W.D.F) {
      hadd uno +wild $hget(uno,+up)
      goone
      givecards $hget(uno,+up) 4
      msg $hget(uno,+chan) $unotheme($hget(uno,+up),drawfour)
      if ($hget(uno,+up) == $me) { msg $hget(uno,+chan) $unobotmad }
      if ($hget(uno,+wild) == $me) {
        hadd uno +card $unobc(WILD)
        msg $hget(uno,+chan) I choose color $gettok($hget(uno,+card),2,46)
        hdel uno +wild
        nextplayer 
        halt
      }
      msg $hget(uno,+chan) $unotheme($hget(uno,+wild),choosecolor)
      halt
    }
    if (%bl4h.unoply == W) {
      hadd uno +wild $hget(uno,+up)
      goone
      if ($hget(uno,+wild) == $me) {
        hadd uno +card $unobc(WILD)
        msg $hget(uno,+chan) I choose color $gettok($hget(uno,+card),2,46)
        hdel uno +wild
        nextplayer 
        halt
      }
      msg $hget(uno,+chan) $unotheme($hget(uno,+wild),choosecolor)
      halt
    }
    if ($gettok(%bl4h.unoply,2,46) == r) {
      if ($hget(uno,+rot) == inc) { hadd uno +rot dec | msg $hget(uno,+chan) $unotheme(null,reverseback) | goto poo }
      if ($hget(uno,+rot) == dec) { hadd uno +rot inc | msg $hget(uno,+chan) $unotheme(null,reversefwd) }
      :poo
      if ($gettok($hget(uno,+players),0,32) == 2) { nextplayer | halt }
    }
    if ($gettok(%bl4h.unoply,2,46) == dt) {
      goone
      msg $hget(uno,+chan) $unotheme($hget(uno,+up),drawtwo)
      if ($hget(uno,+up) == $me) {
        if ($rand(1,3) == 2) { msg $hget(uno,+chan) $unobotmad }
      }
      givecards $hget(uno,+up) 2
    }
    if ($gettok(%bl4h.unoply,2,46) == s) {
      goone
      msg $hget(uno,+chan) $unotheme($hget(uno,+up),skipped)
    }
    goone
    nextplayer
  }
}
alias goone {
  if ($hget(uno,+rot) == inc) {
    if ($gettok($hget(uno,+players),0,32) == $hget(uno,+turn)) { hadd uno +turn 1 }
    else { hinc uno +turn }
  }
  if ($hget(uno,+rot) == dec) {
    if ($hget(uno,+turn) == 1) { hadd uno +turn $gettok($hget(uno,+players),0,32) }
    else { hdec uno +turn }
  }
  hadd uno +up $gettok($hget(uno,+players),$hget(uno,+turn),32)
  unosendn
}
alias unoorder {
  %bl4h.unototal = $gettok($hget(uno,+players),0,32)
  %bl4h.unopos = $hget(uno,+turn)
  %bl4h.unotmp = $hget(uno,+turn)
  %bl4h.unoorder = $gettok($hget(uno,+players),$hget(uno,+turn),32)
  if ($hget(uno,+rot) == inc) { inc %bl4h.unotmp }
  if ($hget(uno,+rot) == dec) { dec %bl4h.unotmp }
  while (%bl4h.unotmp != %bl4h.unopos) {
    if (%bl4h.unotmp != 0) { %bl4h.unoorder = %bl4h.unoorder $gettok($hget(uno,+players),%bl4h.unotmp,32) }
    if ($hget(uno,+rot) == inc) { inc %bl4h.unotmp }
    if ($hget(uno,+rot) == dec) { dec %bl4h.unotmp }
    if (%bl4h.unotmp <= 0) { 
      if ($hget(uno,+rot) == inc) { %bl4h.unotmp = 1 }
      if ($hget(uno,+rot) == dec) { %bl4h.unotmp = %bl4h.unototal }
    }
    if (%bl4h.unotmp > %bl4h.unototal) { %bl4h.unotmp = 1 }
  }
  return %bl4h.unoorder
}
alias removecard {
  unset %bl4h.unohi
  unset %bl4h.unopoo                     
  %bl4h.unotmp = 1
  %bl4h.unocards = $hget(uno,$1)
  %bl4h.unotot = $gettok(%bl4h.unocards,0,45)
  while (%bl4h.unotot >= %bl4h.unotmp) {
    if (!%bl4h.unohi && $gettok(%bl4h.unocards,%bl4h.unotmp,45) == $2) { set %bl4h.unohi 1 | inc %bl4h.unotmp }
    else { %bl4h.unopoo = %bl4h.unopoo $+ - $+ $gettok(%bl4h.unocards,%bl4h.unotmp,45) | inc %bl4h.unotmp } 
  }
  hadd uno $1 %bl4h.unopoo
}
alias unobotthink {
  %bl4h.unobotthink = *evil-grin*.. You'll-pay-for-that... woooot.. Dum-de-dum.. hehe.. Oh-boy.. hrm.. Lets-see-here..  uh.. Hmm,-you're-good.. Decisions-decisions.. Ahah!-... Eeny-Meeny-Miney-Moe.. LOL.. Oh-dear.. Errr.. Ah-me-brain!-...
  return $replace($gettok(%bl4h.unobotthink,$rand(1,$gettok(%bl4h.unobotthink,0,32)),32),$chr(45),$chr(32))
}
alias unobotmad {
  %bl4h.unobotthink = ARRGH! This-is-getting-annoying! RATS! *sigh* You're-getting-on-my-nerves->:/ dfasdfjhweuryaeuwysadjkf I'm-steamed. BAH
  return $replace($gettok(%bl4h.unobotthink,$rand(1,$gettok(%bl4h.unobotthink,0,32)),32),$chr(45),$chr(32))
}
alias unosendn {
  if ($readini($unoini(uno.ini),settings,idlewarn) > 0) {
    if (!$1) { .timerunoidle 1 $readini($unoini(uno.ini),settings,idlewarn) /unosendn warn }
    if ($1 == warn) { 
      .notice $hget(uno,+up) $unotheme($readini($unoini(uno.ini),settings,idleremove),idlewarnplayer)
      .timerunoidle 1 $readini($unoini(uno.ini),settings,idleremove) /unoremplayer $hget(uno,+up)
    } 
  }
}
alias nextplayer { 
  unset %bl4h.unodraw
  msg $hget(uno,+chan)  $+ $hget(uno,+up) up: $drawcards($hget(uno,+card)) 
  if ($hget(uno,+up) == $me) {
    unobotbrain
    return
  }
  if ($gettok($hget(uno,+players),0,32) > 2) { .notice $hget(uno,+up) Next: $replace($gettok($unoorder,2-,32),$chr(32),$chr(44) $chr(32)) }
  .notice $hget(uno,+up) $drawcards($hget(uno,$hget(uno,+up)))
}

alias unobotplay {
  if (!%bl4h.unohold) {
    %bl4h.unohold = 1
    if ($rand(1,4) == 2) { msg $hget(uno,+chan) $unobotthink }
    .timer 1 $1 unobotplay $2-
    halt
  }
  unset %bl4h.unohold
  msg $hget(uno,+chan) play $replace($2-,$chr(46),$chr(32))
  playcard $me $2-
  halt
}
alias unobc {
  if ($1 == c) { return $count($hget(uno,$me),$2 $+ .) }
  if ($1 == n) { return $count($hget(uno,$me),. $+ $2) }
  if ($1 == r) { 
    %bl4h.unoinc = 1
    %bl4h.unocrds = $hget(uno,$me)
    while ($gettok(%bl4h.unocrds,0,45) >= %bl4h.unoinc) {
      if ($gettok($gettok(%bl4h.unocrds,%bl4h.unoinc,45),1,46) == $2) { return $gettok(%bl4h.unocrds,%bl4h.unoinc,45) }
      inc %bl4h.unoinc
    }
  }
  if ($1 == wild) {
    %bl4h.unocol = $iif($count($hget(uno,$me),G.) > $count($hget(uno,$me),Y.),G $count($hget(uno,$me),G.),Y $count($hget(uno,$me),Y.))
    %bl4h.unocol = $iif($gettok(%bl4h.unocol,2,32) > $count($hget(uno,$me),B.),%bl4h.unocol,B $count($hget(uno,$me),B.))
    %bl4h.unocol = $iif($gettok(%bl4h.unocol,2,32) > $count($hget(uno,$me),R.),%bl4h.unocol,R $count($hget(uno,$me),R.))
    return $gettok(%bl4h.unocol,1,32) $+ . $+ $replace($gettok(%bl4h.unocol,1,32),r,RED,y,YELLOW,b,BLUE,g,GREEN)
  }
  if ($1 == best) {
    %bl4h.unoinc = 1
    %bl4h.unocrds = $hget(uno,$me)
    %bl4h.unowow = 0 0
    while ($gettok(%bl4h.unocrds,0,45) >= %bl4h.unoinc) {
      if ($gettok($gettok(%bl4h.unocrds,%bl4h.unoinc,45),2,46) == $2) {
        if ($count($hget(uno,$me),$gettok($gettok(%bl4h.unocrds,%bl4h.unoinc,45),1,46) $+ .) > $gettok(%bl4h.unowow,2,32)) { 
          %bl4h.unowow = $gettok(%bl4h.unocrds,%bl4h.unoinc,45) $count($hget(uno,$me),$gettok($gettok(%bl4h.unocrds,%bl4h.unoinc,45),1,46) $+ .)
        }
      }
      inc %bl4h.unoinc
    }
    return $gettok(%bl4h.unowow,1,32)
  }
}
alias unobotbrain {
  if ($unobc(c,$gettok($hget(uno,+card),1,46)) > 0) {
    if ($count($hget(uno,unobot),$gettok($hget(uno,+card),1,46) $+ .S) > 0) {
      unobotplay $rand(2,5) play $gettok($hget(uno,+card),1,46) S
      halt
    }
    if ($count($hget(uno,unobot),$gettok($hget(uno,+card),1,46) $+ .DT) > 0) {
      unobotplay $rand(2,5) play $gettok($hget(uno,+card),1,46) DT
      halt
    }
    unobotplay $rand(2,5) play $unobc(r,$gettok($hget(uno,+card),1,46))
    halt
  }
  if ($unobc(n,$gettok($hget(uno,+card),2,46)) > 0) {
    unobotplay $rand(2,5) play $replace($unobc(best,$gettok($hget(uno,+card),2,46)),$chr(46),$chr(32))
    halt
  }
  if ($count($hget(uno,$me),W) > 0) {
    unobotplay $rand(2,5) play $iif($count($hget(uno,$me),W.D) > 0,WD4,W)
    halt
  }
  if (%bl4h.unodraw != 1) {
    describe $hget(uno,+chan) draws a card
    givecards $hget(uno,+up) 1
    set %bl4h.unodraw 1
    .timer 1 1 unobotbrain
    halt
  }
  if ($rand(1,5) == 2) { msg $hget(uno,+chan) $unobotmad }
  goone
  nextplayer
}
alias hascard {
  %bl4h.unoinc = 1
  %bl4h.unocrds = $hget(uno,$1)
  %bl4h.unocart = $replace($2-,w,W,wild,W,wd4,W.D.F,wdf,W.D.F,w d 4,W.D.F,w d f,W.D.F)
  %bl4h.unocart = $replace(%bl4h.unocart,$chr(32),$chr(46))
  while ($gettok(%bl4h.unocrds,0,45) >= %bl4h.unoinc) {
    if ($gettok(%bl4h.unocrds,%bl4h.unoinc,45) == %bl4h.unocart) { 
      if ($gettok(%bl4h.unocart,1,46) == $gettok($hget(uno,+card),1,46) || $gettok(%bl4h.unocart,2,46) == $gettok($hget(uno,+card),2,46) || %bl4h.unocart == W || %bl4h.unocart == W.D.F) {
        return %bl4h.unocart
      }
    }
    inc %bl4h.unoinc
  }
  return 0
}
alias makedeck {
  hmake unocards 500
  %bl4h.unotmp = 1
  %bl4h.unotmp2 = 1
  %bl4h.unotimes = 1
  while (%bl4h.unotmp <= 9) {
    if (%bl4h.unotmp2 > 4) { break }
    hadd unocards $gettok(G R B Y,%bl4h.unotmp2,32) $+ . $+ %bl4h.unotmp 2
    inc %bl4h.unotmp
    if (%bl4h.unotmp > 9) { set %bl4h.unotmp 1 | inc %bl4h.unotmp2 }
  }
  hadd unocards R.0 1
  hadd unocards G.0 1
  hadd unocards B.0 1
  hadd unocards Y.0 1
  hadd unocards R.DT 2
  hadd unocards G.DT 2
  hadd unocards B.DT 2
  hadd unocards Y.DT 2
  hadd unocards G.R 2
  hadd unocards R.R 2
  hadd unocards B.R 2
  hadd unocards Y.R 2
  hadd unocards G.S 2
  hadd unocards R.S 2
  hadd unocards Y.S 2
  hadd unocards B.S 2
  hadd unocards W.D.F 4
  hadd unocards W 4
}
alias stopuno {
  .timeruno* off
  msg $hget(uno,+chan) $unotheme($2,stopuno)
  unset %bl4h.uno*
  hfree -w uno*
}
alias startuno {
  unset %bl4h.uno*
  hfree -w uno*
  hmake uno
  hadd uno +started $1
  hadd uno +turn 1
  hadd uno +chan $2
  hadd uno +rot inc
  hadd uno +color $readini($unoini(uno.ini),settings,color)
  if ($3 == 1) { hadd uno +bot 1 }
  makedeck
  msg $2 $unotheme($1,unostart) $iif($hget(uno,+bot),$unotheme(null,unostartbot),)
  .timeruno 1 30 begingame $2
}
alias begingame {
  if (!$gettok($hget(uno,+players),0,32)) { stopuno $1 $me | halt }
  if ($gettok($hget(uno,+players),0,32) == 1) { hadd uno +bot 1 }
  if ($hget(uno,+bot) == 1) { setupplayer $me }
  if ($gettok($hget(uno,+players),0,32) >= 2) {
    msg $hget(uno,+chan) Playing this round: $hget(uno,+players)
    %bl4h.unofirst = $hfind(unocards, *, $rand(1,$hfind(unocards, *, 0, w)), w)
  }
  ;er remind me to fix this below
  if ($gettok(%bl4h.unofirst,1,46) == W) { 
    hdec unocards %bl4h.unofirst
    %bl4h.unofirst = r.RED
    goto eh
  }
  hdec unocards %bl4h.unofirst
  :eh
  hadd uno +card %bl4h.unofirst
  hadd uno +time $ctime
  if ($hget(unocards,%bl4h.unofirst) == 0) { hdel unocards %bl4h.unofirst }
  hadd uno +up $gettok($hget(uno,+players),$hget(uno,+turn),32)
  nextplayer
}
alias setupplayer {
  if ($hget(uno,$1)) { halt }
  hadd uno +players $hget(uno,+players) $1
  hadd uno $1
  msg $hget(uno,+chan) $unotheme($1,willplay)
  givecards $1 7
}
alias givecards {
  if ($hget(uno,+up) == $1) { unset %bl4h.unodraw }
  %bl4h.unotmp = 1
  unset %bl4h.unocard*
  while (%bl4h.unotmp <= $2) {
    if (!$hget(unocards,0).item) { msg $hget(uno,+chan) $unotheme(null,shuffledeck) | hfree unocards | makedeck }
    %bl4h.unocard = $hfind(unocards, *, $rand(1,$hfind(unocards, *, 0, w)), w)
    %bl4h.unocardz = %bl4h.unocardz $+ - $+ %bl4h.unocard
    hdec unocards %bl4h.unocard 
    if ($hget(unocards,%bl4h.unocard) == 0) { hdel unocards %bl4h.unocard }
    inc %bl4h.unotmp
  }
  hadd uno $1 $hget(uno,$1) $+ %bl4h.unocardz
  if ($1 == $me) { return }
  .notice $1 You drew: $drawcards(%bl4h.unocardz)
}
alias drawcards {
  unset %bl4h.unofix.*
  unset %bl4h.unofix
  %bl4h.unototcar = $gettok($1-,0,45)
  %bl4h.unotmpp = 1
  while (%bl4h.unotmpp <= %bl4h.unototcar) {
    if ($left($gettok($1-,%bl4h.unotmpp,45),1) == W) {
      if ($gettok($1-,%bl4h.unotmpp,45) == W.D.F) {
        if ($hget(uno,+color) == 1) {
          %bl4h.unofix = %bl4h.unofix 0[8,1W12D0440]
        }
        if ($hget(uno,+color) == 0) {
          %bl4h.unofix = %bl4h.unofix [W D F]
        }
        inc %bl4h.unotmpp 
      }
      if ($gettok($1-,%bl4h.unotmpp,45) == W) {
        if ($hget(uno,+color) == 1) {
          %bl4h.unofix = %bl4h.unofix 0[8,1W12I04L9D0]
        }
        if ($hget(uno,+color) == 0) {
          %bl4h.unofix = %bl4h.unofix [WILD]
        }
        inc %bl4h.unotmpp 
      }
    }
    else {
      if ($hget(uno,+color) == 1) {
        if ($left($gettok($1-,%bl4h.unotmpp,45),1) == r) { %bl4h.unofix.r = %bl4h.unofix.r $+ 0[4,01 $+ $chr(32) $+ $gettok($gettok($1-,%bl4h.unotmpp,45),2,46) $+ $chr(32) $+ 0] }
        if ($left($gettok($1-,%bl4h.unotmpp,45),1) == b) { %bl4h.unofix.b = %bl4h.unofix.b $+ 0[12,01 $+ $chr(32) $+ $gettok($gettok($1-,%bl4h.unotmpp,45),2,46) $+ $chr(32) $+ 0] }
        if ($left($gettok($1-,%bl4h.unotmpp,45),1) == y) { %bl4h.unofix.y = %bl4h.unofix.y $+ 0[8,01 $+ $chr(32) $+ $gettok($gettok($1-,%bl4h.unotmpp,45),2,46) $+ $chr(32) $+ 0] }
        if ($left($gettok($1-,%bl4h.unotmpp,45),1) == g) { %bl4h.unofix.g = %bl4h.unofix.g $+ 0[9,01 $+ $chr(32) $+ $gettok($gettok($1-,%bl4h.unotmpp,45),2,46) $+ $chr(32) $+ 0] }
      }
      if ($hget(uno,+color) == 0) {
        %bl4h.unofix = %bl4h.unofix $+ $chr(91) $+ $left($gettok($1-,%bl4h.unotmpp,45),1) $+ $chr(32) $+ $gettok($gettok($1-,%bl4h.unotmpp,45),2,46) $+ $chr(93)
      }
      inc %bl4h.unotmpp 
    }
  }
  %bl4h.unofix = %bl4h.unofix $+ %bl4h.unofix.r $+ %bl4h.unofix.b $+ %bl4h.unofix.y $+ %bl4h.unofix.g
  return %bl4h.unofix
}
alias unoscore {
  %bl4h.unoscore = 0
  %bl4h.unotmp = 1
  while ($gettok($hget(uno,+players),0,32) >= %bl4h.unotmp) {
    if ($gettok($hget(uno,+players),%bl4h.unotmp,32) == $1) { inc %bl4h.unotmp }
    %bl4h.unotmp2 = 1
    while (%bl4h.unotmp2 <= $gettok($hget(uno,$gettok($hget(uno,+players),%bl4h.unotmp,32)),0,45)) {
      %bl4h.unocrd = $gettok($gettok($hget(uno,$gettok($hget(uno,+players),%bl4h.unotmp,32)),%bl4h.unotmp2,45),2,46)
      %bl4h.unocrd2 = $gettok($gettok($hget(uno,$gettok($hget(uno,+players),%bl4h.unotmp,32)),%bl4h.unotmp2,45),1,46)
      if (%bl4h.unocrd2 == W) { inc %bl4h.unoscore 50 }
      if (%bl4h.unocrd == S) { inc %bl4h.unoscore 20 }
      if (%bl4h.unocrd == R) { inc %bl4h.unoscore 20 }
      if (%bl4h.unocrd == DT) { inc %bl4h.unoscore 20 }
      if (%bl4h.unocrd isnum) { inc %bl4h.unoscore %bl4h.unocrd }
      inc %bl4h.unotmp2
    }
    inc %bl4h.unotmp
  }
  %bl4h.unotmp3 = 1
  while ($gettok($hget(uno,+players),0,32) >= %bl4h.unotmp3) {
    if ($gettok($hget(uno,+players),%bl4h.unotmp3,32) == $1) { inc %bl4h.unotmp3 }
    else {
      if ($gettok($hget(uno,+players),%bl4h.unotmp3,32) == $me) { goto lame }
      if ($ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1)) {
        if ($readini($unoini(uno.ini),settings,allowreg) == 1) {
          %bl4h.unosloss = $calc($readini($unoini(uno.ini),$ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1).info,loss) + 1)
          %bl4h.unoswin = $readini($unoini(uno.ini),$ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1).info,wins)
          writeini $unoini(uno.ini) $ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1).info loss %bl4h.unosloss
          writeini $unoini(uno.ini) $ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1).info totalgames $calc(%bl4h.unosloss + %bl4h.unoswin)
          writeini $unoini(uno.ini) $ulist($address($gettok($hget(uno,+players),%bl4h.unotmp3,32),1),uno,1).info lastgame $ctime
        }      
      }
      :lame
      msg $hget(uno,+chan) $gettok($hget(uno,+players),%bl4h.unotmp3,32) $+ : $drawcards($hget(uno,$gettok($hget(uno,+players),%bl4h.unotmp3,32)))
      inc %bl4h.unotmp3
    }
  }
  msg $hget(uno,+chan) $unotheme($1 %bl4h.unoscore,endscore)
  if ($1 == $me) { parseunotop | goto skip }
  if ($readini($unoini(uno.ini),settings,allowreg) == 1) {
    if ($ulist($address($1,1),uno,1)) {
      %bl4h.unoscoretot = $calc($readini($unoini(uno.ini),$ulist($address($1,1),uno,1).info,score) + %bl4h.unoscore)
      %bl4h.unoscorewins = $calc($readini($unoini(uno.ini),$ulist($address($1,1),uno,1).info,wins) + 1)
      %bl4h.unoscoreloss = $readini($unoini(uno.ini),$ulist($address($1,1),uno,1).info,loss)
      writeini $unoini(uno.ini) $ulist($address($1,1),uno,1).info totalgames $calc(%bl4h.unoscorewins + %bl4h.unoscoreloss)
      writeini $unoini(uno.ini) $ulist($address($1,1),uno,1).info score %bl4h.unoscoretot
      writeini $unoini(uno.ini) $ulist($address($1,1),uno,1).info wins %bl4h.unoscorewins
      writeini $unoini(uno.ini) $ulist($address($1,1),uno,1).info lastgame $ctime
      parseunotop
      msg $hget(uno,+chan) $1 ( $+ $ulist($address($1,1),uno,1).info $+ ):  $+ %bl4h.unoscoretot points $+  < $+ %bl4h.unoscorewins wins / %bl4h.unoscoreloss losses> Place:04 $ord($readini($unoini(uno.ini),$ulist($address($1,1),uno,1).info,place))
    }
    else { .notice $1 $unotheme($1,mustreg) }
  }
  :skip
}
alias unocount {
  unset %bl4h.unocount
  %bl4h.unoscore = 0
  %bl4h.unotmp = 1
  while ($gettok($hget(uno,+players),0,32) >= %bl4h.unotmp) {
    %bl4h.unotmp2 = 1
    %bl4h.unonick = $gettok($hget(uno,+players),%bl4h.unotmp,32)
    while (%bl4h.unotmp2 <= $gettok($hget(uno,$gettok($hget(uno,+players),%bl4h.unotmp,32)),0,45)) {
      inc %bl4h.unotmp2
    }
    set %bl4h.unocount %bl4h.unocount %bl4h.unonick $+ : $calc(%bl4h.unotmp2 - 1)
    inc %bl4h.unotmp
  }
  msg $hget(uno,+chan) %bl4h.unocount
}
alias unostat {
  if ($ulist($address($2,1),uno,1).info) { %bl4h.unotmp = $ulist($address($2,1),uno,1).info }
  if (!$ulist($address($2,1),uno,1).info) { %bl4h.unotmp = $2 }
  if ($readini($unoini(uno.ini),%bl4h.unotmp,totalgames)) {
    if ($readini($unoini(uno.ini),%bl4h.unotmp,place) == 1) { msg $1 %bl4h.unotmp is $1 $+ 's 8U12N4O master! }
    if ($readini($unoini(uno.ini),%bl4h.unotmp,place) == 2 || $readini($unoini(uno.ini),%bl4h.unotmp,place) == 3) { msg $1 %bl4h.unotmp is a top 3 player! }
    msg $1  $+ %bl4h.unotmp $+ :  $readini($unoini(uno.ini),%bl4h.unotmp,score) $+  < $+ $readini($unoini(uno.ini),%bl4h.unotmp,wins) $+ W/ $+ $readini($unoini(uno.ini),%bl4h.unotmp,loss) $+ L $+ > Place:4 $ord($readini($unoini(uno.ini),%bl4h.unotmp,place))
  }
  else { msg $1  $+ $2 $+  no such user/no games played }
}
alias unohelp {
  if ($2 == pub && !$3) { 
    .notice $1 For official uno rules visit: http://hometown.aol.com/babso00001/unorules.html
    .notice $1 Use /notice $me unohelp for private commands.
    .notice $1 Commands: !uno , !unoremove , !unoend , join , play , draw , pass , order , count , !unostat , !unotop10, !unoabout
    .notice $1 Type !unohelp <command> for help on a specific command
    return
  }
  if ($2 == priv && !$3) {
    .notice $1 You must register a username to have your scores saved.
    .notice $1 Commands: unoregister , unologin , unochpass , unologout
    .notice $1 Use unohelp <command> for help on a specific command
    return
  }
  if ($readini($unoini(unohelp.ini),help,$3) != $null) { .notice $nick $readini($unoini(unohelp.ini),help,$3) }
  else { .notice $nick No help on that command }
}
alias unoingame {
  %bl4h.unod = 1
  while ($gettok($hget(uno,+players),0,32) >= %bl4h.unod) {
    if ($gettok($hget(uno,+players),%bl4h.unod,32) == $1) { return 1 }
    inc %bl4h.unod
  }
  return 0
}
alias unohtmlscore {
  parseunotop
  %bl4h.unotmp = 1
  write -c unotop10.html
  write unotop10.html <html>
  write unotop10.html <!-- Generated by unobot $unover ( http://shady.nu ) -->
  write unotop10.html <head><title>UNO! Top 10 players</title></head>
  write unotop10.html <STYLE id=default type=text/css> .tabel $chr(123) BORDER-RIGHT: $readini($unoini(uno.ini),settings,htmlborder) 2px solid; BORDER-TOP: $readini($unoini(uno.ini),settings,htmlborder) 2px solid; BORDER-LEFT: $readini($unoini(uno.ini),settings,htmlborder) 2px solid; BORDER-BOTTOM: $readini($unoini(uno.ini),settings,htmlborder) 2px solid $chr(125) 
  write unotop10.html .tdb $chr(123) BORDER-BOTTOM: $readini($unoini(uno.ini),settings,htmlborder) 2px solid; BORDER-RIGHT: $readini($unoini(uno.ini),settings,htmlborder) 2px solid; $chr(125) </style>
  write unotop10.html <body bgcolor=" $+ $readini($unoini(uno.ini),settings,htmlbackground) $+ " text=" $+ $readini($unoini(uno.ini),settings,htmltext) $+ ">
  write unotop10.html <center><table width="70%" class=tabel><tr><td class=tdb>Place</td><td class=tdb>User</td><td class=tdb>Wins</td><td class=tdb>Loss</td><td class=tdb>Score</td></tr>
  if ($readini($unoini(uno.ini),settings,top10)) {
    while (%bl4h.unotmp <= $gettok($readini($unoini(uno.ini),settings,top10),0,32)) {
      %bl4h.unotmpu = $gettok($readini($unoini(uno.ini),settings,top10),%bl4h.unotmp,32)
      write unotop10.html <tr><td> $ord(%bl4h.unotmp) </td><td> %bl4h.unotmpu </td>
      write unotop10.html <td> $readini($unoini(uno.ini),%bl4h.unotmpu,wins) </td><td> $readini($unoini(uno.ini),%bl4h.unotmpu,loss) </td>
      write unotop10.html <td><b> $readini($unoini(uno.ini),%bl4h.unotmpu,score) </b></td></tr>
      inc %bl4h.unotmp
    }
    write unotop10.html </table><br><br><a href="http://shady.nu/?x=mirc">Unobot $unover </a></center></html>
    run unotop10.html
  }
}
alias parseunotop {
  %bl4h.parsetmp = 1
  %bl4h.parsetotal = $ini($unoini(uno.ini),0)
  if ($ini($unoini(uno.ini),0) > 101 && $hget(uno,+chan)) { msg $hget(uno,+chan) Calculating... }
  while (%bl4h.parsetmp <= %bl4h.parsetotal) {
    window -n @sorting
    if ($ini($unoini(uno.ini),%bl4h.parsetmp) == settings) { goto skip }
    if ($readini($unoini(uno.ini),settings,topcalc) == 1) { aline @sorting $calc($readini($unoini(uno.ini),$ini($unoini(uno.ini),%bl4h.parsetmp),score) / $readini($unoini(uno.ini),$ini($unoini(uno.ini),%bl4h.parsetmp),totalgames)) $ini($unoini(uno.ini),%bl4h.parsetmp) }
    if ($readini($unoini(uno.ini),settings,topcalc) == 2) { aline @sorting $readini($unoini(uno.ini),$ini($unoini(uno.ini),%bl4h.parsetmp),score) $ini($unoini(uno.ini),%bl4h.parsetmp) }
    :skip
    inc %bl4h.parsetmp
  }
  filter -eutc 1 32 @sorting @sorting
  %bl4h.parsetmp = 1
  if ($readini($unoini(uno.ini),settings,top10)) { remini $unoini(uno.ini) settings top10 }
  while (%bl4h.parsetmp <= $line(@sorting,0)) {
    writeini $unoini(uno.ini) $gettok($line(@sorting,%bl4h.parsetmp),2,32) place %bl4h.parsetmp
    if (%bl4h.parsetmp <= 10) { writeini $unoini(uno.ini) settings top10 $readini($unoini(uno.ini),settings,top10) $gettok($line(@sorting,%bl4h.parsetmp),2,32) }
    :error
    reseterror
    inc %bl4h.parsetmp
  }
  close -@ @sorting
}
on *:NICK:{
  if ($unoingame($nick)) {
    hadd uno +players $hget(uno,+players) $newnick
    hadd uno $newnick $hget(uno,$nick)
    if ($hget(uno,+up) == $nick) { hadd uno +up $newnick }
    if ($hget(uno,+wild) == $nick) { hadd uno +wild $newnick }
    if ($hget(uno,+started) == $nick) { hadd uno +started $newnick }
    unodelplayer $nick
  }
}
on *:JOIN:#:{
  if ($unoingame($nick) && $chan == $hget(uno,+chan)) {
    msg $hget(uno,+chan) WB $nick $+ , Game is still on! Its $hget(uno,+up) $+ 's turn.
  }
}
alias unodelplayer {
  unset %bl4h.unop
  %bl4h.unol = 1
  %bl4h.unone = $gettok($unoorder,2,32)
  while (%bl4h.unol <= $gettok($hget(uno,+players),0,32)) {
    if ($gettok($hget(uno,+players),%bl4h.unol,32) != $1) { %bl4h.unop = %bl4h.unop $gettok($hget(uno,+players),%bl4h.unol,32) }
    inc %bl4h.unol
  }
  hdel uno $1
  hadd uno +players %bl4h.unop
  if ($hget(uno,+wild) == $1) { hdel uno +wild | hadd uno +card r.RED }
  if ($hget(uno,+started) == $1) { hadd uno +started $gettok($hget(uno,+players),1,32) }
  if ($hget(uno,+up) == $1) {
    hadd uno +up %bl4h.unone
    hadd uno +turn $findtok($hget(uno,+players),%bl4h.unone,1,32)
    nextplayer 
  }
}
alias unoremplayer {
  if ($gettok($hget(uno,+players),0,32) > 2) {
    unodelplayer $1
    msg $hget(uno,+chan) $1 has been removed from the game!
  }
  else { 
    stopuno $hget(uno,+chan) $1 
  }
}
on *:QUIT:{
  if ($unoingame($nick)) {
    unoremplayer $nick
  }
}
dialog unouser {
  title "Uno users"
  size -1 -1 142 126
  option dbu
  list 1, 6 10 50 88, size vsbar
  ;button "ADD", 2, 6 104 23 12
  box "Group Box", 3, 2 2 58 120
  button "DEL", 4, 34 104 21 12
  edit "", 5, 88 12 50 10
  edit "", 6, 88 28 22 10
  edit "", 7, 116 28 22 10
  text "Pass:", 8, 66 14 19 8
  text "W/L", 9, 66 30 19 8
  button "Apply change", 10, 94 66 37 12
  edit "", 11, 88 44 50 10
  text "Score:", 12, 66 46 21 8
}
alias unodref {
  %tmp = 1
  did -r unouser 1
  while (%tmp <= $ini($unoini(uno.ini),0)) {
    if ($ini($unoini(uno.ini),%tmp) != settings) { did -a unouser 1 $ini($unoini(uno.ini),%tmp) }
    inc %tmp
  }
  if (%tmp <= 2) { 
    did -a unouser 1 [No Users yet]
    did -b unouser 10,4
  }
}
alias unodiag {
  if ($dialog($1)) { dialog -v $1 | halt }
  dialog -m $1 $1
}
alias unohostcheck {
  %tmp2 = $address($1,1)
  %tmp = 1
  while (%tmp <= $ini($unoini(uno.ini),0)) {
    if ($readini($unoini(uno.ini),$ini($unoini(uno.ini),%tmp),redad) iswm %tmp2) { return $ini($unoini(uno.ini),%tmp) }
    inc %tmp
  }
  return 0
}
dialog unothemeedit {
  title "Unobot Theme Editor"
  size -1 -1 196 68
  option dbu
  list 1, 4 4 54 44, size vsbar
  edit "", 2, 66 10 120 10, autohs
  combo 3, 2 52 60 50, drop
  button "Save", 4, 70 28 37 12, flat
  button "Preview", 5, 108 28 37 12, flat
  button "Convert", 6, 146 28 37 12, flat
}
on *:DIALOG:*:*:*:{
  if ($dname == unothemeedit) {
    if ($devent == init) {
      %tmp = 1
      while ($ini($unoini(unotheme.ini),0) >= %tmp) {
        did -a unothemeedit 3 $ini($unoini(unotheme.ini),%tmp)
        inc %tmp
      }

    }
    if ($devent = sclick) {
      if ($did == 3) { 
        if ($did(3).seltext) {
          did -r unothemeedit 1
          %tmp = 1
          while ($ini($unoini(unotheme.ini),$did(3).seltext,0) >= %tmp) {
            did -a unothemeedit 1 $ini($unoini(unotheme.ini),$did(3).seltext,%tmp)
            inc %tmp
          }
        }
      }
      if ($did = 1 && $did(1).seltext) {
        did -ra unothemeedit 2 $readini($unoini(unotheme.ini),$did(3).seltext,$did(1).seltext)
      }
      if ($did = 5 && $did(1).seltext && $did(2).text) {
        if (!$window(@prev)) { window @prev }
        aline -a @prev $unotheme(TEST1 TEST2 TEST3 TEST4,$did(1).seltext)
      }
    }
  }
  if ($dname == unoman) {
    if ($devent == sclick || $devent == init) {
      if ($did == 11) { unodiag unouser }
      if ($did == 13) { unodiag unoabout }
      if ($did == 12) { unodiag unomisc }
      if ($did == 3) { writeini $unoini(uno.ini) settings enabled 1 }
      if ($did == 4) { writeini $unoini(uno.ini) settings enabled 0 }
      if ($did == 6) { writeini $unoini(uno.ini) settings color 1 }
      if ($did == 7) { writeini $unoini(uno.ini) settings color 0 }
      if ($did == 9) { writeini $unoini(uno.ini) settings allowreg 1 }
      if ($did == 10) { writeini $unoini(uno.ini) settings allowreg 0 }
      if ($readini($unoini(uno.ini),settings,enabled) == 1) { did -e unoman 4 | did -b unoman 3 }
      else { did -e unoman 3 | did -b unoman 4 }
      if ($readini($unoini(uno.ini),settings,allowreg) == 1) { did -e unoman 10 | did -b unoman 9 }
      else { did -e unoman 9 | did -b unoman 10 }
      if ($readini($unoini(uno.ini),settings,color) == 1) { did -e unoman 7 | did -b unoman 6 }
      else { did -e unoman 6 | did -b unoman 7 }
    }
  }
  if ($dname == unoabout) {
    if ($devent == sclick) {
      if ($did == 3) { run http://shady.nu }
      if ($did == 4) { run mailto:bl4h@shady.nu }
    }
  }
  if ($dname == unouser) {
    if ($devent == init) {
      unodref
    }
    if ($devent == sclick) {
      if ($did == 1) {
        did -r unouser 5,6,7,11
        did -a unouser 5 $readini($unoini(uno.ini),$did(1).seltext,password)
        did -a unouser 6 $readini($unoini(uno.ini),$did(1).seltext,wins)
        did -a unouser 7 $readini($unoini(uno.ini),$did(1).seltext,loss)
        did -a unouser 11 $readini($unoini(uno.ini),$did(1).seltext,score)
      }
      if ($did == 10) {
        if (!$did(1).seltext) { %tmp = $input(No username selected!,o,Fail) | halt }
        if ($did(5).text) { writeini $unoini(uno.ini) $did(1).seltext password $did(5).text }
        if ($did(6).text isnum) { writeini $unoini(uno.ini) $did(1).seltext wins $did(6).text }
        if ($did(7).text isnum) { writeini $unoini(uno.ini) $did(1).seltext loss $did(7).text }
        if ($did(11).text isnum) { writeini $unoini(uno.ini) $did(1).seltext score $did(11).text }
        %tmp = $input(Applied,o,Applied)
      }
      if ($did = 4 && $did(1).seltext) {
        %tmp = $?!="DELETE $did(1).seltext $+ ?"
        if (%tmp == $true) { remini $unoini(uno.ini) $did(1).seltext }     
        unodref
      }
    }
  }
  if ($dname == unomisc) {
    if ($devent == init) {
      unset %bl4h.flood*
      did -i unomisc 5,8 1 ignore
      did -i unomisc 5,8 2 kick
      did -i unomisc 5,8 3 ban+kick
      did -i unomisc 12 1 Score / games played
      did -i unomisc 12 2 Score only
      did -c unomisc 12 $readini($unoini(uno.ini),settings,topcalc)
      did -c unomisc 5 $iif($readini($unoini(uno.ini),settings,floodpunishmsg),$readini($unoini(uno.ini),settings,floodpunishmsg),1)
      did -c unomisc 8 $iif($readini($unoini(uno.ini),settings,floodpunishrep),$readini($unoini(uno.ini),settings,floodpunishrep),1)
      did -a unomisc 2 $iif($readini($unoini(uno.ini),settings,floodmsgs),$readini($unoini(uno.ini),settings,floodmsgs),5)
      did -a unomisc 10 $iif($readini($unoini(uno.ini),settings,floodreps),$readini($unoini(uno.ini),settings,floodreps),3)
      did -a unomisc 17 $iif($readini($unoini(uno.ini),settings,idlewarn),$readini($unoini(uno.ini),settings,idlewarn),60)
      did -a unomisc 19 $iif($readini($unoini(uno.ini),settings,idleremove),$readini($unoini(uno.ini),settings,idleremove),120)
      did -a unomisc 22 $iif($readini($unoini(uno.ini),settings,floodban),$readini($unoini(uno.ini),settings,floodban),30)   
      if ($readini($unoini(uno.ini),settings,floodenabled) != $null) {
        if ($readini($unoini(uno.ini),settings,floodenabled) == 1) { did -c unomisc 24 }
        else { did -b unomisc 5,8,2,10 }   
      }
    }
    if ($devent == sclick) {
      if ($did == 24) {
        if ($did(unomisc,24).state == 1) { writeini $unoini(uno.ini) settings floodenabled 1 | did -e unomisc 5,8,2,10 }
        else { writeini $unoini(uno.ini) settings floodenabled 0 | did -b unomisc 5,8,2,10 }
      }
      if ($did == 21) {
        if ($did(unomisc,2).text isnum && $did(unomisc,10).text isnum && $did(unomisc,17).text isnum && $did(unomisc,19).text isnum && $did(unomisc,22).text isnum) {
          writeini $unoini(uno.ini) settings floodpunishmsg $did(unomisc,5).sel
          writeini $unoini(uno.ini) settings floodpunishrep $did(unomisc,8).sel
          writeini $unoini(uno.ini) settings topcalc $did(unomisc,12).sel
          writeini $unoini(uno.ini) settings floodmsgs $did(unomisc,2).text
          writeini $unoini(uno.ini) settings floodreps $did(unomisc,10).text
          writeini $unoini(uno.ini) settings idlewarn $did(unomisc,17).text
          writeini $unoini(uno.ini) settings idleremove $did(unomisc,19).text
          writeini $unoini(uno.ini) settings floodban $did(unomisc,22).text
          %tmp = $input(Saved,o,Saved)
        }
        else { %tmp = $input(invalid numbers,o,error) }
      }
    }
  }
}
alias unoini {
  return " $+ $shortfn($scriptdir $+ $1) $+ "
}
dialog unoman {
  title "Unobot Manager"
  size -1 -1 148 82
  option dbu notheme
  icon $shortfn($mircexe), 18
  box "Settings", 1, 2 4 144 56
  text "Uno On/Off:", 2, 8 14 39 8
  button "ON", 3, 60 12 37 12, disable
  button "OFF", 4, 104 12 37 12, disable
  text "Card coloring:", 5, 8 30 35 8
  button "ON", 6, 60 28 37 12, disable
  button "OFF", 7, 104 28 37 12, disable
  text "Registration:", 8, 8 48 35 8
  button "ON", 9, 60 44 37 12, disable
  button "OFF", 10, 104 44 37 12, disable
  button "User Manager", 11, 2 66 37 12, flat
  button "Misc Settings", 12, 54 66 37 12, flat
  button "About", 13, 108 66 37 12, flat
}
dialog unomisc {
  title "Unobot"
  size -1 -1 144 162
  option dbu
  box "Flood settings", 1, 2 2 140 62
  edit "", 2, 58 12 14 10
  text "Lines in 10 seconds", 3, 74 14 53 8
  combo 5, 6 12 36 35, size drop
  text "after", 6, 44 14 13 8
  combo 8, 6 32 36 35, size drop
  text "after", 9, 44 34 13 8
  edit "", 10, 58 32 14 10
  text "Repeats in 10 seconds", 11, 74 34 59 8
  box "Timer settings", 16, 2 66 140 50
  edit "", 17, 106 74 24 10
  text "Seconds before idle player is warned:", 18, 8 76 91 8
  edit "", 19, 106 88 24 10
  text "After warning, player is removed after:", 20, 8 90 91 8
  button "Save", 21, 56 146 37 12
  edit "", 22, 106 102 24 10
  text "Flood ban time in seconds:", 23, 34 104 67 8
  check "Enabled?", 24, 46 50 46 10
  box "Misc", 4, 2 118 140 24
  text "Top 10 by:", 7, 10 128 31 8
  combo 12, 60 126 60 32, drop
}
dialog unoabout {
  title "Unobot"
  size -1 -1 132 30
  option dbu notheme
  icon $shortfn($mircexe), $rand(1,21)
  icon 1, 4 4 15 15, $shortfn($mircexe), $rand(1,21)
  text Unobot $unover, 2, 30 4 97 10
  link "http://shady.nu", 3, 30 18 40 8
  link "bl4h@shady.nu", 4, 76 18 50 8

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...