All pastes #186934 Raw Edit

Miscellany

public text v1 · immutable
#186934 ·published 2006-09-30 16:57 UTC
rendered paste body
menu channel {
  Runescape Stats Kicker:/rsstatskicker
}
alias rsstatskicker {
  dialog -ma rsstatskicker rsstatskicker
}
dialog rsstatskicker {
  title "Runescape Stats Kicker"
  size -1 -1 195 161
  option dbu
  tab "Channels/Requirements", 1, -3 -1 209 185
  combo 2, 20 44 124 44, tab 1 size
  text "Settings: Channels and Requirements", 3, 21 26 122 8, tab 1
  button "Add", 7, 22 99 37 12, tab 1
  button "Remove", 8, 64 99 37 12, tab 1
  button "Clear", 9, 108 99 37 12, tab 1
  button "Clear Confirm", 10, 108 111 37 12, tab 1
  tab "Nicks/Addresses", 11
  combo 12, 20 52 80 50, tab 11 size
  text "Settings: Nicks/Address", 13, 21 26 79 8, tab 11
  text "Nicks/Addresses below will not be kicked", 14, 21 34 79 8, tab 11
  button "Add", 15, 109 52 37 12, tab 11
  button "Remove", 16, 109 66 37 12, tab 11
  button "Clear", 17, 109 80 37 12, tab 11
  button "Clear Confirm", 18, 109 94 37 12, tab 11
  tab "Cache", 19
  text "Cache:", 21, 21 26 25 8, tab 19
  text "A feature that saves if the nick meets the requirements for that channel. This will eliminate the need to retrieve the stats for the user every time they join.", 20, 21 34 119 29, tab 19
  button "Clear Cache", 22, 21 67 37 12, tab 19
  tab "Info/Settings", 4
  text "Kick count:", 5, 37 28 28 8, tab 4
  text "Users in #pestcontrol:", 23, 10 43 55 8, tab 4
  text "Total voiced:", 24, 32 56 33 8, tab 4
  edit "", 25, 71 27 50 10, disable tab 4
  edit "", 26, 71 41 50 10, disable tab 4
  edit "", 27, 71 54 50 10, disable tab 4
  text "Highest amount of users:", 28, 5 77 62 8, tab 4
  text "Lowest amount of users:", 29, 6 90 61 8, tab 4
  edit "", 30, 71 75 50 10, disable tab 4
  edit "", 31, 71 89 50 10, disable tab 4
  button "Ok", 6, 110 139 37 12, ok cancel
}
alias rsstatskicker.refresh {
  did -h rsstatskicker 10,18
  did -r rsstatskicker 2,12,25-27,30,31
  did -a rsstatskicker 25 %kicks
  did -a rsstatskicker 26 $nick(#pestcontrol,0)
  did -a rsstatskicker 27 %pcvoice
  did -a rsstatskicker 30 %pchigh
  did -a rsstatskicker 31 %pclow
  var %x = 1
  while ($read(RSstatschan.txt,%x)) {
    did -a rsstatskicker 2 $read(RSstatschan.txt,%x)
    inc %x
    continue
  }
  var %x = 1
  while ($read(RSstatsnick.txt,%x)) {
    did -a rsstatskicker 12 $read(RSstatsnick.txt,%x)
    inc %x
    continue
  }
}
on *:dialog:rsstatskicker:init:*: {
  rsstatskicker.refresh
}
on *:dialog:rsstatskicker:sclick:*: {
  if ($did == 7) { 
    if (!$read(RSStatschan.txt,w,$did(2))) && ($chr(35) isin $did(2)) {
      write RSStatschan.txt $did(2)
      rsstatskicker.refresh
    }
  }
  if ($did == 8) {
    if ($read(RSStatschan.txt,w,$did(2))) {
      write -ds $+ $gettok($did(2),1,32) RSStatschan.txt
      rsstatskicker.refresh
    }
  }
  if ($did == 9) { did -v rsstatskicker 10 }
  if ($did == 10) { 
    .remove rsstatschan.txt
    rsstatskicker.refresh 
  }
  if ($did == 15) {
    if (!$read(RSStatsnick.txt,w,$gettok($mask(! $+ $did(12),2),1,32))) {
      write RSStatsnick.txt $mask(! $+ $did(12),2)
      rsstatskicker.refresh
    }
  }
  if ($did == 16) {
    if ($read(RSStatsnick.txt,w,$mask(! $+ $did(12),2))) {
      write -ds $+ $mask(! $+ $did(12),2) RSStatsnick.txt
      rsstatskicker.refresh
    }
  }
  if ($did == 17) { did -v rsstatskicker 18 }
  if ($did == 18) {
    .remove rsstatsnick.txt
    rsstatskicker.refresh
  }
  if ($did == 22) { .remove rsstatscache.txt }
}
alias rsstats.cleanup {
  if ($1 != all) {
    unset %rsstats.*. [ $+ [ $1 ] ]
    sockclose rsstats. [ $+ [ $1 ] ]
  }
  elseif ($1 == all) {
    unset %rsstats.*.*
    var %c = 1
    while ($sock(rsstats. $+ %c)) {
      sockclose rsstats. [ $+ [ %c ] ]
    }
  }
}
on *:disconnect: {
  rsstats.cleanup all
}
on *:join:#pestcontrol: {
  if ($read(RSStatschan.txt,w,$chan)) {
    if ($me isop $chan) || ($me ishop $chan) {
      if ($read(RSStatsnick.txt,w,$nick)) { halt }
      if ($read(RSstatsnick.txt,w,$address($nick,2))) { halt }
      if ($read(RSStatsCache.txt,w,$nick)) { mode $chan +v $nick | inc %cache | halt }
      if ($len($nick) > 13) {
        inc %kicks
        ban -ku120 $chan $nick 5 Your nickname is too long 12¤4 %kicks $+ 1
        cleanup %ID
        halt
      }
      var %s = 1
      var %ID = 1
      while ($sock(rsstats. $+ %s)) || ($sock(stats. $+ %s)) {
        inc %s
        inc %ID
      }
      set %rsstats.skill. [ $+ [ %s ] ] autovoice
      set %rsstats.rsn. [ $+ [ %s ] ] $nick
      set %rsstats.chan. [ $+ [ %s ] ] $chan
      set %rsstats.time. [ $+ [ %s ] ] $time
      if (%rsstats.settingssource == rscript) { sockopen rsstats. [ $+ [ %s ] ] rscript.org 80 }
      elseif (%rsstats.settingssource == backup) { 
        set $+(%,stats.rsn.,%ID) $nick
        set $+(%,stats.style.,%ID) combat
        sockopen $+(stats.,%ID) hiscore.runescape.com 80 
      }
      if ($nick($chan,0) > %pchigh) { set %pchigh $nick($chan,0) }
      if ($nick($chan,0) < %pclow) { set %pclow $nick($chan,0) }
    }
  }
}

alias rsstats.voice {
  var %chan = $iif($left($1,1) iswm $chr(35),$1,$chan)
  if ($me isop %chan) || ($me ishop %chan) {
    var %x = 1
    var %y = $nick(%chan,0,r)
    while (%x <= %y) {
      if ($read(RSstatsCache.txt,w,$nick(%chan,%x,r))) { mode %chan +v $nick(%chan,%x,r) | inc %cache | inc %x | continue }
      if ($read(RSStatsnick.txt,w,$nick(%chan,%x,r))) { inc %x | continue }
      if ($read(RSstatsnick.txt,w,$address(%nick($chan,%x,r),2))) { inc %x | continue }
      var %s = 1
      while ($sock(rsstats. $+ %s)) || ($sock(stats. $+ %s)) {
        inc %s
      }
      if ($len($nick(%chan,%x,r)) > 13) {
        inc %kicks
        ban -ku120 %chan $nick(%chan,%x,r) 5 Your nickname is too long 12¤4 %kicks $+ 1
        inc %x
        continue
      }
      set %rsstats.skill. [ $+ [ %s ] ] autovoice
      set %rsstats.rsn. [ $+ [ %s ] ] $nick(%chan,%x,r)
      set %rsstats.chan. [ $+ [ %s ] ] %chan
      set %rsstats.time. [ $+ [ %s ] ] $time
      if (%rsstats.settingssource == rscript) { sockopen rsstats. [ $+ [ %s ] ] rscript.org 80 }
      elseif (%rsstats.settingssource == backup) { 
        var %ID = %s
        set $+(%,stats.rsn.,%ID) $nick(%chan,%x,r)
        set $+(%,stats.style.,%ID) combat
        sockopen $+(stats.,%ID) hiscore.runescape.com 80 
      }
      inc %x
    }
  }
}
on *:sockopen:rsstats.*: {
  inc %rsstats.usageremote
  sockwrite -n $sockname GET /lookup.php?type=stats&user= $+ $replace(%rsstats.rsn. [ $+ [ $right($sockname,-8) ] ],$chr(32),$chr(95)) HTTP/1.1
  sockwrite -n $sockname Host: rscript.org $+ $crlf $+ $crlf
}
on *:sockopen:stats.*: {
  var %id = $gettok($sockname,2,46)
  sockwrite -n $sockname GET /lang/en/aff/runescape/hiscorepersonal.ws?user1= $+ $($+(%,stats.rsn.,%ID),2) HTTP/1.1
  sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf
}
on *:sockread:stats.*: {
  if ($sockerr) { set %rsstats.settingssource rscript }
  sockread &Incoming
  bwrite $sockname -1 -1 &Incoming
  if ($bfind(&Incoming, 1, </html>).text) makehash $sockname
  elseif ($bfind(&Incoming, 1,does not feature in the hiscores).text) {
    if (%rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] isreg %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ]) {
      inc %kicks
      ban -ku30 %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ] %rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] 5 Please change your nick to your Runescape username. Use _ as spaces 12¤4 %kicks $+ 1
      sockclose $sockname
      cleanup $gettok($sockname,2,46)
    }
  }
}
alias -l makehash {
  var %file = $1
  bread %file 1 $file(%file).size &stats
  var %currentstat, %x = 1
  while (%x) {
    var %x = $bfind(&stats,$calc(%x + 1),<a href="overall.ws?table=)
    var %currentstat = $striptags($bvar(&stats,%x,200).text)
    tokenize 10 %currentstat
    hadd -m %file $1 $2 $3 $4 $xp2next($3,$4)
  }
  process %file
}
alias process {
  var %table = $1, %id = $gettok($1,2,46), %x = 0, $&
    %display = $($+(%,stats.display.,%ID),2), $&
    %rsn = $($+(%,stats.rsn.,%ID),2), $&
    %skill = $($+(%,stats.skill.,%ID),2), $&
    %style = $($+(%,stats.style.,%ID),2)
  if (%style == combat) {
    var %a.mult = .32707, %s.mult = .324, %d.mult = .25, %h.mult = .25, %p.mult = .124, %r.mult = .487, %m.mult = .487
    var %a = $iif($gettok($hget(%table,attack),2,32),$v1,-), $&
      %s = $iif($gettok($hget(%table,strength),2,32),$v1,-), $&
      %d = $iif($gettok($hget(%table,defence),2,32),$v1,-), $&
      %h = $iif($gettok($hget(%table,hitpoints),2,32),$v1,-), $&
      %r = $iif($gettok($hget(%table,ranged),2,32),$v1,-), $&
      %m = $iif($gettok($hget(%table,magic),2,32),$v1,-), $&
      %p = $iif($gettok($hget(%table,prayer),2,32),$v1,-)

    var %meleecombat  = $calc(%a * %a.mult + %s * %s.mult + %d * %d.mult + %h * %h.mult + %p * %p.mult), $&
      %RangedCombat = $calc(%r * %r.mult + %p * %p.mult + %d * %d.mult + %h * %h.mult), $&
      %MagicCombat  = $calc(%m * %m.mult + %p * %p.mult + %d * %d.mult + %h * %h.mult)
    if (%MagicCombat > %RangedCombat) && (%MagicCombat > %MeleeCombat) var %cmbstyle = Magic, %Combat = %MagicCombat
    elseif (%RangedCombat > %MeleeCombat) var %cmbstyle = Ranged, %Combat = %RangedCombat
    else var %cmbstyle = melee, %combat = %MeleeCombat
    var %combat = $round(%combat,2), %next = $ceil(%combat)
    if (%combat >= 95) || ($eval($calc(%a + %s)) >= 160) {
      mode %rsstats.chan. [ $+ [ %id ] ] +v %rsn
      if (!$read(RSStatscache.txt,w,%rsn)) { write Rsstatscache.txt %rsn }
      inc %pcvoice
    }
    elseif (%combat < 95) && ($eval($calc(%a + 5)) < 160) {
      if (%rsn isreg %rsstats.chan. [ $+ [ %id ] ]) {
        inc %kicks
        ban -ku120 %rsstats.chan. [ $+ [ %id ] ] %rsstats.rsn. [ $+ [ %id ] ] 2 7The4 %rsstats.chan. [ $+ [ %id ] ] 7requirements:04 95 CMB or 160 Combined att+str 12¤4 %kicks $+ 1
      }
    }
    else { echo -a Error }
  }
  sockclose $sockname
  cleanup %id
}

alias -l cleanup {
  rsstats.cleanup $1
  unset $+(%,stats.*.,$1)
  sockclose $+(Stats.,$1)
  .remove $+(Stats.,$1)
  if ($hget($+(Stats.,$1))) {
    .hfree $+(Stats.,$1)
  }
}

alias -l xp {
  var %x = 1, %level = $calc($1 - 1), %xp = 0
  while (%x <= %level) {
    var %TempXp = $calc((%x + 300 * 2^(%x / 7)) /4)
    inc %xp %TempXp
    inc %x
  }
  return $int(%xp)
}

alias -l xp2Next {
  var %xp = $remove($2,$chr(44)), %nextxp = $xp($calc($1 + 1))
  return $calc(%nextxp - %xp)
}
alias -l striptags { var %x,%y = $regsub($1-,/(<[^>]+>)/g,$null,%x) | return %x }

on *:sockread:rsstats.*: {
  var %s = $right($sockname,-8)
  if ($sockerr) {
    %rsstats.display. [ $+ [ %s ] ] Socket error: Please try again later.
    set %rsstats.settingssource backup
    rsstats.cleanup %s
    halt
  }
  else {
    if (%rsstats.skill. [ $+ [ %s ] ] == autovoice) {
      var %a.mult = .32707, %s.mult = .324, %d.mult = .249, %h.mult = .25, %p.mult = .124, %r.mult = .487, %m.mult = .487
      while (1) {
        var %rsstats.read. [ $+ [ %s ] ]
        sockread %rsstats.read. [ $+ [ %s ] ]
        tokenize 32 %rsstats.read. [ $+ [ %s ] ]
        if (not found isin %rsstats.read. [ $+ [ %s ] ]) {
          inc %kicks
          ban -ku30 %rsstats.chan. [ $+ [ %s ] ] %rsstats.rsn. [ $+ [ %s ] ] 5 Please use your Runescape Username. Use _ as spaces 12¤4 %kicks $+ 1
          rsstats.cleanup %s
          break
          halt
        }
        else {
          if (Attack isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %a = 1 }
            else { var %a = $3 }
          }
          if (Strength isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %st = 1 }
            else { var %st = $3 }
          }
          if (Defence isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %d = 1 }
            else { var %d = $3 }
          }
          if (Hitpoints isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %h = 1 }
            else { var %h = $3 }
          }
          if (prayer isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %p = 1 }
            else { var %p = $3 }
          }
          if (Ranged isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %r = 1 }
            else { var %r = $3 }
          }
          if (Magic isin %rsstats.read. [ $+ [ %s ] ]) {
            if ($3 == Ranked) { var %m = 1 }
            else { var %m = $3 }
            var %def = $calc(%d * 100)
            var %hp = $calc(%h * 100)
            if ($iif($regex($right(%p,1),[02468]),Even,Odd) == Even) { var %pray $calc(%p * 50) }
            else { var %pray $calc((%p - 1) * 50) }
            var %base = $calc((%def + %hp + %pray) / 400)
            var %att = $calc(%a * 130)
            var %str = $calc(%st * 130)
            if ($iif($regex($right(%r,1),[02468]),Even,Odd) == Even) { var %range = $calc(%r * 195) }
            else { var %range = $calc((%r * 195) - 65) }
            if ($iif($regex($right(%m,1),[02468]),Even,Odd) == Even) { var %mage = $calc(%m * 195) }
            else { var %mage = $calc((%m * 195) - 65) }
            var %melee = $calc((%att + %str) / 400)
            var %ranger = $calc(%range / 400)
            var %mage = $calc(%mage / 400)
            if (%melee > %ranger) && (%melee > %mage) {
              var %style = Melee
              var %combat = $calc(%melee + %base)
            }
            if (%ranger > %melee) && (%ranger > %mage) {
              var %style = Ranger
              var %combat = $calc(%ranger + %base)
            }
            if (%mage > %melee) && (%mage > %ranger) {
              var %style = Mage
              var %combat = $calc(%mage + %base)
            }
            else {
              var %style = Melee
              var %combat = $calc(%melee + %base)
            }
            var %next = $ceil(%combat)
            var %cmb.temp = $abs($calc($int($calc(%combat +1)) - %combat)), $&
              %a.2lvl = $ceil($calc(%cmb.temp / %a.mult)), %s.2lvl = $ceil($calc(%cmb.temp / %s.mult)), $&
              %d.2lvl = $ceil($calc(%cmb.temp / %d.mult)), %m.2lvl = $ceil($calc(%cmb.temp / %m.mult)), $&
              %r.2lvl = $ceil($calc(%cmb.temp / %r.mult)), %p.2lvl = $ceil($calc(%cmb.temp / %p.mult))
            var %combat = $round(%combat,2), %next = $ceil(%combat)
            if (%combat >= 160) || ($eval($calc(%a + %s)) >= 95) {
              mode %rsstats.chan. [ $+ [ %s ] ] +v %rsstats.rsn. [ $+ [ %s ] ]
              write Rsstatscache.txt %rsn
              inc %pcvoice
            }
            else {
              if (%rsstats.rsn. [ $+ [ %s ] ] isreg %rsstats.chan. [ $+ [ %S ] ]) {
                inc %kicks
                ban -ku120 %rsstats.chan. [ $+ [ %s ] ] %rsstats.rsn. [ $+ [ %s ] ] 2 7The4 %rsstats.chan. [ $+ [ %s ] ] 7requirements:04 90 CMB or 150 Combined att+str 12¤4 %kicks $+ 1
              }
            }
            rsstats.cleanup %s
            break
          }
        }
      }
    }
  }
}