All pastes #594406 Raw Edit

tay blow me TWICE

public text v1 · immutable
#594406 ·published 2007-06-28 22:33 UTC
rendered paste body
alias -l c1 { return $+($chr(3),01,$1-,$chr(3)) } 
alias -l c2 { return $+($chr(3),10,$1-,$chr(3)) } 
alias -l c3 { return $+($chr(3),02,$1-,$chr(3)) }

on $*:TEXT:/^[!@.]/Si:#: {
  if ($remove($1,!,@,.) == stats) {
    set %stats.style level 
  }
  elseif ($regex($remove($1,!,@,.),/^(def(ault)?|set)(rsn|name)/i)) {
    writeini -n DefRSN.ini RSNs $address($nick,2) $replace($2-,$chr(32),_)
    notice $nick $c1(Your default RSN for the host) $c2($address($nick,2)) $c1(has been set to) $c2($replace($2-,$chr(32),_)) $+ $c1(.)  
    halt
  }
  elseif ($statstrue($remove($1,!,@,.))) && ($remove($1,!,@,.) !isnum) { set %stats.style $+(skill.,$v1) }
  elseif ($regex($remove($1,!,@,.),/^co?mb(at)?|duel/i)) { set %stats.style combat }
  else { halt }
  set %stats.display $iif($left($1,1) == @,msg $chan,notice $nick)
  set %stats.n 0
  if ($2) {
    if (& isin $2-) {
      tokenize 32 $remove($1-,&)
      if ($2 !ison $chan) { notice $nick $c1(The username) $c2($2-) $c1(was not found on the channel.) | unset %stats.* | halt }
      elseif (!$readini(DefRSN.ini,n,RSNs,$address($2,2))) { notice $nick $c1(The username) $c2($2-) $c1(has not set a default RSN.) | unset %stats.* | halt }
      else { set %stats.user $readini(DefRSN.ini,n,RSNs,$address($2,2)) }
    }
    else { set %stats.user $replace($2-,$chr(32),_) }
  }
  else { 
    if ((!$readini(DefRSN.ini,n,RSNs,$address($nick,2))) && (!$2)) { .notice $nick You must specify a username between 3 and 12 characters. This can be omitted if defname is set. | Halt } 
    else { set %stats.user $readini(DefRSN.ini,n,RSNs,$address($nick,2)) }
  }
  sockopen stats hiscore.runescape.com 80
} 

on *:SOCKOPEN:stats: {
  sockwrite -n $sockname GET $+(/hiscorepersonal.ws?user1=,%stats.user) HTTP/1.1
  sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf
}

on *:SOCKREAD:stats: {
  var %i | sockread %i
  if (*does not feature* iswm %i) {
    %stats.display $c1(The username) $c2(%stats.user) $c1(does not appear in the Runescape Hiscores.)
    unset %stats.* | sockclose stats
  }
  elseif ($statstrue(%i)) { set %stats.skill %i | set %stats.n 1 }
  elseif (%stats.n isnum 3-5) {
    set $+(%,stats.,%stats.skill,.,$statstype(%stats.n)) $gettok($gettok(%i,2,62),1,60)
    if (%stats.n == 5) { set %stats.n 0 }
  }
  elseif (*</table>* iswm %i) {
    if ($left(%stats.style,5) == skill) {
      if ($($+(%,stats.,$gettok(%stats.style,2,46),.exp),2)) {
        var %rank = $($+(%,stats.,$gettok(%stats.style,2,46),.rank),2)
        var %exp = $($+(%,stats.,$gettok(%stats.style,2,46),.exp),2)
        var %level = $($+(%,stats.,$gettok(%stats.style,2,46),.level),2)
        %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1($chr(2) $+ [) $c2($statstrue($gettok(%stats.style,2,46))) $c1(]) $+ $chr(2) $&
          $c1(Level:) $c2(%level) $c1($chr(124)) $c1(Rank:) $c2(%rank) $c1($chr(124)) $c1(Exp:) $c2(%exp) $&
          $c1($chr(124)) $c1(Exp until $calc(%level + 1) $+ :) $c2($bytes($calc($statsxp($calc(%level + 1)) - $remove(%exp,$chr(44))),b))
      }
      else {
        %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(User does not appear in the Runescape Hiscores for) $c2($gettok(%stats.style,2,46)) $+ $c1(.)
      }
      unset %stats.* | sockclose stats
    }
    elseif (%stats.style == combat) {
      var %a = $iif(%stats.Attack.level,$v1,1)
      var %d = $iif(%stats.Defence.level,$v1,1)
      var %s = $iif(%stats.Strength.level,$v1,1)
      var %h = $iif(%stats.Hitpoints.level,$v1,10)
      var %r = $iif(%stats.Ranged.level,$v1,1)
      var %p = $iif(%stats.Prayer.level,$v1,1)
      var %m = $iif(%stats.Magic.level,$v1,1)
      {
        var %base = $calc(($calc((%d *100)+(%h *100)) + $iif($isodd(%p),$calc(%p -1) *50,%p *50))/400)
        var %melee = $calc(((%a *130)+(%s *130))/400)
        var %range = $calc($iif($isodd(%r),$calc(((%r -1)+(%r *2))*65),$calc(%r *195))/400)
        var %mage = $calc($iif($isodd(%m),$calc(((%m -1)+(%m *2))*65),$calc(%m *195))/400)
        if (%range >= %mage) && (%range >= %melee) { var %combat = $calc(%range + %base) | var %class = Ranged }
        elseif (%mage >= %range) && (%mage >= %melee) { var %combat = $calc(%mage + %base) | var %class = Magic }
        else { var %combat = $calc(%melee + %base) | var %class = Melee }
      }
      %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(Combat Level is) $c2(%combat) $c1([) $c2($+(%class,-,based Combat)) $c1(])
      %stats.display $c1(Attack:) $c2(%a) $c1($chr(124)) $c1(Defence:) $c2(%d) $c1($chr(124)) $c1(Strength:) $c2(%s) $c1($chr(124)) $c1(Hitpoints:) $c2(%h) $c1($chr(124)) $c1(Ranged:) $c2(%r) $c1($chr(124)) $c1(Prayer:) $c2(%p) $c1($chr(124)) $c1(Magic:) $c2(%m)
      unset %stats.* | sockclose stats
    }
    else {
      var %x = 1
      while (%x <= 17) {
        var %statline = %statline $iif($($+(%,stats.,$statstrue(%x),.level),2),$c1($statstrue(%x) $+ :) $c2($($+(%,stats.,$statstrue(%x),.,%stats.style),2)) $c1($chr(124)) $&,$null)
        inc %x
      }
      while (%x > 17) && (%x < 24) {
        var %statline2 = %statline2 $iif($($+(%,stats.,$statstrue(%x),.level),2),$c1($statstrue(%x) $+ :) $c2($($+(%,stats.,$statstrue(%x),.,%stats.style),2)) $c1($chr(124)) $&,$null)
        inc %x
      }

      %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(Overall:) $iif(%stats.Overall.level,$c2($($+(%,stats.Overall.,%stats.style),2)),$c2(-)) $c1($chr(124)) $&
        $replace(%statline,Attack,Att,Defence,Def,Strength,Str,Hitpoints,HP,Ranged,Range,Prayer,Pray,Magic,Mage,Cooking,Cook,Woodcutting,Woodcut,Fletching,Fletch,Fishing,Fish,Firemaking,FM,Crafting,Craft,Smithing,Smith,Herblore,Herb,Agility,Agil,Thieving,Thief,Slayer,Slay,Farming,Farm,Runecraft,Rc,Hunter,Hunt,Construction,Con) 
      %stats.display $replace(%statline2,Attack,Att,Defence,Def,Strength,Str,Hitpoints,HP,Ranged,Range,Prayer,Pray,Magic,Mage,Cooking,Cook,Woodcutting,Woodcut,Fletching,Fletch,Fishing,Fish,Firemaking,FM,Crafting,Craft,Smithing,Smith,Herblore,Herb,Agility,Agil,Thieving,Thief,Slayer,Slay,Farming,Farm,Runecraft,Rc,Hunter,Hunt,Construction,Con) | unset %stats.* | sockclose stats
    }
  }
  if (%stats.n isnum 1-5) { inc %stats.n }
}

alias statstype {
  if ($1 == 3) { return rank }
  elseif ($1 == 4) { return level }
  else { return exp }
}

alias -l statstrue { 
  if ($1 == 0) || ($regex($1,/^(st|(skill)?total|overall)$/Si)) return Overall 
  elseif ($1 == 1) || ($regex($1,/^at(t|k|tack)?$/Si)) return Attack
  elseif ($1 == 2) || ($regex($1,/^def(en[cs]e)?$$/Si)) return Defence
  elseif ($1 == 3) || ($regex($1,/^str(ength)?$/Si)) return Strength
  elseif ($1 == 4) || ($regex($1,/^hp|hit(s|points?)?$/Si)) return Hitpoints
  elseif ($1 == 5) || ($regex($1,/^range(r|d|ing)?$/Si)) return Ranged
  elseif ($1 == 6) || ($regex($1,/^Pray(er)?$$/Si)) return Prayer
  elseif ($1 == 7) || ($regex($1,/^mag(e|ic)$$/Si)) return Magic
  elseif ($1 == 8) || ($regex($1,/^cook(ing)?$/Si)) return Cooking 
  elseif ($1 == 9) || ($regex($1,/^wc|wood(cut(ting)?)?$/Si)) return Woodcutting 
  elseif ($1 == 10) || ($regex($1,/^fletch(ing)?$/Si)) return Fletching 
  elseif ($1 == 11) || ($regex($1,/^fish(ing)?$/Si)) return Fishing 
  elseif ($1 == 12) || ($regex($1,/^(fire|fm)(make?(ing)?|ing)?$/Si)) return Firemaking 
  elseif ($1 == 13) || ($regex($1,/^craft(ing)?$/Si)) return Crafting 
  elseif ($1 == 14) || ($regex($1,/^(smith|smelt)(ing)?$/Si)) return Smithing 
  elseif ($1 == 15) || ($regex($1,/^mine(ing)?$/Si)) return Mining 
  elseif ($1 == 16) || ($regex($1,/^herb(law|lore)?$/Si)) return Herblore 
  elseif ($1 == 17) || ($regex($1,/^agil(ity)?$/Si)) return Agility 
  elseif ($1 == 18) || ($regex($1,/^(th(ei|ie)[fv](e|ing)?)$/Si)) return Thieving 
  elseif ($1 == 19) || ($regex($1,/^slay(er|ing)?$/Si)) return Slayer 
  elseif ($1 == 20) || ($regex($1,/^farm(er|ing)?$/Si)) return Farming 
  elseif ($1 == 21) || ($regex($1,/^(rc|runecraft)(er|ing)?$/Si)) return Runecraft 
  elseif ($1 == 22) || ($regex($1,/^(construct)(ion|ing)?$/si)) return Construction 
  elseif ($1 == 23) || ($regex($1,/^(hunt)(er|ing)?$/si)) return Hunter
}

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

alias isodd { if (. isin $calc($1 /2)) { return true } | else { return fa