All pastes #508973 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-05-25 07:14 UTC
rendered paste body
alias -l c1 { return $+($chr(3),12,$1-,$chr(3)) }
alias -l c2 { return $+($chr(3),04,$1-,$chr(3)) }
alias -l c3 { return $+($chr(3),06,$1-,$chr(3)) }
alias -l c4 { return $+($chr(3),02,$1-,$chr(3)) }
alias -l c5 { return $+($chr(3),03,$1-,$chr(3)) }
alias -l c6 { return $+($chr(3),03,$1-,$chr(3)) }
on $*:TEXT:/^[!@.]/Si:#: {
  if ($remove($1,!,@,.) == stats) {
    if ($2 == -rank) { set %stats.style rank }
    elseif ($2 == -exp) { set %stats.style exp }
    elseif ($2 == -level) { set %stats.style level }
    else { set %stats.style level }
  }
  elseif ($regex($remove($1,!,@,.),/^(def(ault)?|set)(rsn|name)/i)) {
    writeini -n RSNs.ini RSNs $address($nick,2) $replace($2-,$chr(32),_)
    notice $nick $c1(Your RSN) $+(",$c2,$replace($2-,$chr(32),_),$c1,") $c1(for the hostname) $c2($address($nick,2)) $c1(has been set successfully.)
    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 ($left($2,1) == -) { tokenize 32 $2- }
  if ($2) {
    if (* isin $2-) {
      tokenize 32 $remove($1-,*)
      if ($2 !ison $chan) { notice $nick $c1(The username) $+(",$c2,$2-,$c1,") $c1(was not found on the channel.) | unset %stats.* | halt }
      elseif (!$readini(RSNs.ini,n,RSNs,$address($2,2))) { notice $nick $c1(The username) $+(",$c2,$2-,$c1,") $c1(has not set a default RSN.) | unset %stats.* | halt }
      else { set %stats.user $readini(RSNs.ini,n,RSNs,$address($2,2)) }
    }
    else { set %stats.user $replace($2-,$chr(32),_) }
  }
  else { set %stats.user $readini(RSNs.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($statstrue($gettok(%stats.style,2,46)) stats for) $+($c2,%stats.user,$c1,:)
        %stats.display $c1(Level:) $c2(%level) $c1(Rank:) $c2(%rank) $c1(Exp:) $c2(%exp) $&
          $c1(Exp until $calc(%level + 1) $+ :) $c2($bytes($calc($statsxp($calc(%level + 1)) - $remove(%exp,$chr(44))),b))
      }
      else {
        %stats.display $c1(The username ") $+ $c2(%stats.user) $+ $c1(" 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(Combat stats for) $c2(%stats.user) $c1($+,$chr(40),%class,-,based Combat,:,$chr(32),$c2,%combat,$c1,$chr(41),:)
      %stats.display $c1(Attack:) $c2(%a) $c1(Defence:) $c2(%d) $c1(Strength:) $c2(%s) $c1(Hitpoints:) $c2(%h) $c1(Ranged:) $c2(%r) $c1(Prayer:) $c2(%p) $c1(Magic:) $c2(%m)
      unset %stats.* | sockclose stats
    }
    else {
      var %x = 1
      while (%x <= 23) {
        var %statline = %statline $iif($($+(%,stats.,$statstrue(%x),.level),2),$c1($statstrue(%x) $+ :) $c2($($+(%,stats.,$statstrue(%x),.,%stats.style),2)),$null)
        inc %x
      }
      %stats.display $c1(Stats for) $c2(%stats.user) $+($c1,$chr(40),Overall: $iif(%stats.Overall.level,$c2($($+(%,stats.Overall.,%stats.style),2)),$c2(N/A)),$c1,$chr(41),:)
      %stats.display %statline | 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 statstrue {
  if ($regex($1,/^0|overall|total/i)) { return Overall }
  elseif ($regex($1,/^1|at(k|tack)/i)) { return Attack }
  elseif ($regex($1,/^2|def(en[sc]e)?/i)) { return Defence }
  elseif ($regex($1,/^3|str(ength)?/i)) { return Strength }
  elseif ($regex($1,/^4|hp|hit(point)?s/i)) { return Hitpoints }
  elseif ($regex($1,/^5|range[rd]?/i)) { return Ranged }
  elseif ($regex($1,/^6|pray(er|ing?)?/i)) { return Prayer }
  elseif ($regex($1,/^7|mag(e|ick?)?/i)) { return Magic }
  elseif ($regex($1,/^8|cook(ing?)?/i)) { return Cooking }
  elseif ($regex($1,/^9|wc|woodcut(ting?)?/i)) { return Woodcutting }
  elseif ($regex($1,/^10|fletch(ing?)?/i)) { return Fletching }
  elseif ($regex($1,/^11|f(i|ee)sh(ing?)?/i)) { return Fishing }
  elseif ($regex($1,/^12|fm|firemake?(ing?)?/i)) { return Firemaking }
  elseif ($regex($1,/^13|craft(ing?)?/i)) { return Crafting }
  elseif ($regex($1,/^14|smith(ing?)?/i)) { return Smithing }
  elseif ($regex($1,/^15|mine?(ing?)?/i)) { return Mining }
  elseif ($regex($1,/^16|herb(lore?|al(ism)?)?/i)) { return Herblore }
  elseif ($regex($1,/^17|agil(ity)?/i)) { return Agility }
  elseif ($regex($1,/^18|th(ie|ei)[fv](ing?)?/i)) { return Thieving }
  elseif ($regex($1,/^19|slay(er|ing?)?/i)) { return Slayer }
  elseif ($regex($1,/^20|farm(er|ing?)?/i)) { return Farming }
  elseif ($regex($1,/^21|(rc|runecraft)(ing?)?/i)) { return Runecraft }
  elseif ($regex($1,/^22|hunt(er|ing?)?/i)) { return Hunter }
  elseif ($regex($1,/^23|cons(truct(io?ng?)?)?/i)) { return Construction }
  else return $null
}

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 false } } 

on $*:TEXT:/^[!@.](pc|pest) */Si:#: {
  ;;; Check if it's a valid skill, sockopen, and set vars. ;;;
  if ($getskill($2)) {
    /var %x = 1
    /while ($sock(pc. $+ %x)) {
      /inc %x
    }
    if (#* iswm $4) {
      /notice $nick Syntax: !Pest <Skill> <RSN>  - Alternative: !Pest <Skill> <Level To Get> <RSN>
      /halt
    }
    if (#* iswm $3) {
      /set %level. $+ %x $right($3,-1)
    }
    ;;; Set Vars ;;;
    /set %target. $+ %x $iif($left($1,1) == @,msg $chan,.notice $nick)
    /set %rsn. $+ %x $iif(*#* !iswm $3,$replace($3-,$chr(32),+),$replace($4-,$chr(32),+))
    /set %skill. $+ %x $getskill($2)
    /sockopen pc. $+ %x www.o-ss.net 80
    /halt
  }
  /notice $nick Specify a valid skill to look up.  EX: !pest attack blairsooley
}
alias -l cleanup {
  ;;; Clean up the socket, unset vars, close it ;;;
  /sockclose $1
  /unset %level. $+ $right($1,1)
  /unset %target. $+ $right($1,1)
  /unset %rsn. $+ $right($1,1)
  /unset %skill. $+ $right($1,1)
}
on *:sockopen:pc.*: {
  ;;; Go to the file ;;;
  /var %x = $right($sockname,1)
  if ($sockerr > 0) /return
  /sockwrite -nt $sockname GET $+(/parsers/skills.php?user=,%rsn. [ $+ [ %x ] ],&skill=,%skill. [ $+ [ %x ] ]) HTTP/1.1
  /sockwrite -nt $sockname Host: www.o-ss.net
  /sockwrite -nt $sockname $crlf $crlf
}
on *:sockread:pc.*: {
  ;;; Get the data, tokenize, and do checks to output. ;;;
  if ($sockerr) /return
  /var %x = $right($sockname,1)
  /var %read | /sockread %read
  /tokenize 32 %read
  if (*</TITLE>* iswm $1-) { %target. [ $+ [ %x ] ] $replace(%rsn. [ $+ [ %x ] ],+,$chr(32)) Does Not Feature in the Hi-Scores for %skill. [ $+ [ %x ] ] $+ . | /cleanup $sockname | /halt }
  if ($3 == does) { %target. [ $+ [ %x ] ] $replace(%rsn. [ $+ [ %x ] ],+,$chr(32)) Does Not feature in the Hi-Scores. | /cleanup $sockname | /halt }
  if ($0 == 4) { %target. [ $+ [ %x ] ] Pest control points needed to get level $iif(%level. [ $+ [ %x ] ],%level. [ $+ [ %x ] ],$calc(($2)+1)) in %skill. [ $+ [ %x ] ] $+ : $iif(%level. [ $+ [ %x ] ],$pestget(%skill. [ $+ [ %x ] ],%level. [ $+ [ %x ] ],$calc($xp(%level. [ $+ [ %x ] ])-($remove($3,$chr(44))))),$pestget(%skill. [ $+ [ %x ] ],$calc(($2)+1),$calc($xp($calc($2 + 1))- $remove($3,$chr(44))))) | /cleanup $sockname }
}
alias -l /getskill {
  ;;; Regex to return skills ;;;
  if ($regex($1,/^over(all)?/Si)) return overall
  elseif ($regex($1,/^at(t|k|tack)?/Si)) return attack
  elseif ($regex($1,/^def(en[cs]e)?/Si)) return defence
  elseif ($regex($1,/^hp|hit(s|points?)?/Si)) return hitpoints
  elseif ($regex($1,/^range(r|d|ing)?/Si)) return ranged
  elseif ($regex($1,/^Pray(er)?/Si)) return prayer
  elseif ($regex($1,/^mag(e|ic)?/Si)) return magic
  elseif ($regex($1,/^str(ength)?/Si)) return strength
}
alias /pest {
  ;;; Pest alias to retrive skill points per ticket ;;;
  /var %type = $iif($1 == prayer,12,6)
  /return $ceil($calc(($2)*($2)/(%type)))
}
alias /pestget {
  ;;; Gets amount of tickets. ;;;
  /var %skill = $1
  /var %exp = $remove($3,$chr(44))
  /var %level = $2
  /var %gstring = $pest(%skill,%level)
  /return $bytes($ceil($calc((%exp)/(%gstring))),b)
}
alias /xp {
  ;;; Calculates XP to level ;;;
  /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)
}