All pastes #629020 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-07-21 21:36 UTC
rendered paste body
on $*:TEXT:/^[!@.]/Si:#: { 
  if (%statistics [ $+ [ $chan ] ] == OFF) { Halt }
  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: {
  if (%statistics [ $+ [ $chan ] ] == OFF) { Halt }
  sockwrite -n $sockname GET $+(/hiscorepersonal.ws?user1=,%stats.user) HTTP/1.1 
  sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf 
} 

on *:SOCKREAD:stats: { 
  if (%statistics [ $+ [ $chan ] ] == OFF) { Halt }
  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 c1 { return $+($chr(3),14,$1-) } 
alias c2 { return $+($chr(3),04,$1-) } 

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