All pastes #835499 Raw Edit

Miscellany

public text v1 · immutable
#835499 ·published 2007-12-28 22:08 UTC
rendered paste body
on *:input:*:{
  if ($left($1,1) isin /~) && ($istok(stats compare,$right($1,-1),32) || $setskill($right($1,-1)) || $setgame($right($1,-1)) || $regex($right($1,-1),/^c(mb|ombat|lose(st)?)|f(ar|[au]rthest)$/Si)) {
    var %a = 1, %b, %c = $iif(/* iswm $1,echo -at,msg $target)
    tokenize 32 $right($1-,-1)
    while ($sock(stats.*,%a)) inc %a
    if (!%defname) {
      if ($?("What is your rsn?")) set %defname $replace($v1,$chr(32),-)
      else {
        echo -at $c1(Specify a default rsn.)
        halt
      }
    }
    if (compare == $1) {
      if ($3) && ($setskill($2)) {
        %b = $1 $v1 $3 $iif($4,$v1,%defname)
        if ($gettok(%b,3,32) == $gettok(%b,4,32)) {
          echo -at $c1(Guess.)
          halt
        }
        $iif($hget($3),hfree $v1)
        unset $($+(%,id,.,%a),1)
        sockopen $+(stats,.,%a) hiscore.runescape.com 80
        sockmark $+(stats,.,%a) %c com $iif($4,$v1,%defname) $3
        inc %a
      }
      else {
        echo -at $c1(Specify a skill and person to compare.)
        halt
      }
    }
    if (stats == $1) || ($setgame($1)) || ($regex($1,/^c(mb|ombat|lose(st)?)|f(ar|[au]rthest)$/Si)) %b = $1 $iif($2-,$replace($v1,$chr(32),-),%defname)
    if ($setskill($1)) {
      if (#* iswm $2 && $right($2,-1) isnum 1-99) {
        %b = $1-2 $iif($3-,$replace($v1,$chr(32),-),%defname)
      }
      else %b = $1 $iif($2-,$replace($v1,$chr(32),-),%defname)
    }
    tokenize 32 %b
    $iif($hget($($+($,$0),2)),hfree $v1)
    unset $($+(%,id,.,%a),1)
    sockopen $+(stats,.,%a) hiscore.runescape.com 80
    sockmark $+(stats,.,%a) %c %b
    haltdef
  }
}

on *:sockopen:stats.*:{
  sockwrite -nt $sockname GET $+(/index_lite.ws?player=,$gettok($sock($sockname).mark,-1,32)) HTTP/1.1
  sockwrite -nt $sockname Host: hiscore.runescape.com
  sockwrite -nt $sockname $crlf
  inc $+(%,id,.,$right($sockname,-6))
}

on *:sockread:stats.*:{
  if ($sockerr) return
  else {
    var %id = $right($sockname,-6), %rsn = $gettok($sock($sockname).mark,-1,32), %num = $calc($($+(%,id,.,%id),2) - 12), %sock
    sockread %sock
    if (*404 Not found iswm %sock) sockmark $sockname $gettok($sock($sockname).mark,1-2,32) Unranked %rsn
    if ($setskill(%num)) hadd -m %rsn $v1 %sock
    if ($setgame(%num)) hadd -m %rsn $v1 %sock
  }
  inc $($+(%,id,.,%id),1)
}

on *:sockclose:stats.*:{
  tokenize 32 $sock($sockname).mark
  var %style = $1-2, %rsn = $($+($,$0),2), %type = $3, %stats.a, %stats.b, %stats.c
  if (%type == unranked) %stats.a = $c1(The nick) $c2(%rsn) $c1(does not appear in the highscores for any skills.)
  if ($regex(%type,/^com(pare)?$/i)) {
    var %rsn.a = %rsn, %rsn.b = $($+($,$calc($0 - 1)),2), %skill = $($+($,$calc($0 - 2)),2), %d = $+($c1($chr(40)),$c2(%skill),$c1($chr(41)))
    if ($hget(%rsn.a,%skill)) && ($hget(%rsn.b,%skill)) {
      tokenize 44 $hget(%rsn.a,%skill)
      var %rank.a = $1, %level.a = $2, %exp.a = $3
      tokenize 44 $hget(%rsn.b,%skill)
      var %rank.b = $1, %level.b = $2, %exp.b = $3
      var %a = $abs($calc(%level.a - %level.b)), %b = $abs($calc(%exp.a - %exp.b)), %c = $abs($calc(%rank.a - %rank.b))
      var %rank.c = $iif(%c > 1,s), %level.c = $iif(%a > 1,s)
      var %2lvl = %b
      if (%rank.a == -1 || %rank.b == -1) {
        %stats.a = $c2($iif(%rank.a == -1,%rsn.a,%rsn.b)) $c1(does not appear in the highscores for) $+($c2(%skill),$c1(.))
      }
      else {
        %stats.a = $c2(%rsn.a) $c1(is level) $c2($bytes(%level.a,b)) $c1(and) $c2(%rsn.b) $c1(is level) $c2($bytes(%level.b,b)) %d
        if (%level.a == %level.b) {
          if (%exp.a == %exp.b) %stats.b = $c2(%rsn.a) $c1(and) $c2(%rsn.b) $c1(both have) $c2($bytes(%exp.a,b)) $c1($+(experience,$chr(44))) $c1(but) $c2($iif(%rank.a < %rank.b,%rsn.a,%rsn.b)) $c1(is) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1(higher.)
          if (%exp.a > %exp.b) %stats.b = $c2(%rsn.a) $c1(and) $c2(%rsn.b) $c1(are both level) $+($c2(%level.a),$c1($chr(44))) $c1(but) $c2(%rsn.a) $c1(is) $c2($bytes(%b,b)) $c1(experience and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1(higher.)
          if (%exp.a < %exp.b) %stats.b = $c2(%rsn.a) $c1(and) $c2(%rsn.b) $c1(are both level) $+($c2(%level.a),$c1($chr(44))) $c1(but) $c2(%rsn.a) $c1(is) $c2($bytes(%b,b)) $c1(experience and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1(lower.)
        }
        if (%level.a < %level.b) {
          if (%exp.a > %exp.b) %stats.b = $c2(%rsn.a) $c1(is) $c2($bytes(%a,b)) $c1($+(level,%level.c)) $c1(and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1($+(below,$chr(44))) $c1(but) $c2($bytes(%b,b)) $c1(experience above) $+($c2(%rsn.b),$c1(.))
          else %stats.b = $c2(%rsn.a) $c1(is) $c2($bytes(%a,b)) $c1($+(level,%level.c,$chr(44))) $c2($bytes(%b,b)) $c1(experience and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1(below) $+($c2(%rsn.b),$c1(.))
        }
        if (%level.a > %level.b) {
          if (%exp.a > %exp.b) %stats.b = $c2(%rsn.a) $c1(is) $c2($bytes(%a,b)) $c1($+(level,%level.c,$chr(44))) $c2($bytes(%b,b)) $c1(experience and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1(above) $+($c2(%rsn.b),$c1(.))
          else %stats.b = $c2(%rsn.a) $c1(is) $c2($bytes(%a,b)) $c1($+(level,%level.c)) $c1(and) $c2($bytes(%c,b)) $c1($+(rank,%rank.c)) $c1($+(above,$chr(44))) $c1(but) $c2($bytes(%b,b)) $c1(experience below) $+($c2(%rsn.b),$c1(.))
        }
        %stats.c = $iif(%exp.a != %exp.b && $read(stats.txt,s,%skill,1),$+($+($chr(2),$c1([),$chr(2)),$c1(For) $c2($bytes(%2lvl,b)) $c1(experience),$+($chr(2),$c1(]),$chr(2)),$c1(:)) $v1)
      }
      hfree %rsn.a
      hfree %rsn.b
    }
  }
  if (%type == stats) {
    var %a = 0
    %stats.a = $c1(Stats for) $+($chr(2),$c2([),$chr(2),$c2(%rsn),$chr(2),$c2(]),$chr(2),$c1(:))
    %stats.b = $+($chr(2),$c2([),$chr(2),$c2(Skills),$chr(2),$c2(]),$chr(2))
    while ($setskill(%a)) {
      tokenize 44 $hget(%rsn,$v1)
      %stats.b = %stats.b $iif($1 > 0,$c1($setskill(%a)) $c2($bytes($2,b)))
      inc %a
    }
    %stats.c = $+($chr(2),$c2([),$chr(2),$c2(Minigames),$chr(2),$c2(]),$chr(2)) $c1(Duel tournament:) $c2($iif($gettok($hget(%rsn,duel),2,44) > 0,$bytes($v1,b),Unranked)) $c1(Bounty hunter:) $c2($iif($gettok($hget(%rsn,bh),2,44) > 0,$bytes($v1,b),Unranked)) $c1(Bounty hunter rogue:) $c2($iif($gettok($hget(%rsn,bhr),2,44) > 0,$bytes($v1,b),Unranked))
    hfree %rsn
  }
  if ($setskill(%type)) {
    var %a, %b, %c = $4, %norm, %2lvl
    tokenize 44 $hget(%rsn,$v1)
    if ($1 == -1) {
      %stats.a = $c2(%rsn) $c1(does not appear in the highscores for) $+($c2($setskill(%type)),$c1(.))
    }
    else {
      %a = $iif(#* iswm %c && $right(%c,-1) > $calc($2 + 1),$v1,$calc($2 + 1))
      %b = $calc($xp(%a) - $3)
      %2lvl = %b
      %norm = $iif($setskill(%type) != Overall && $calc($2 + 1) != 100,$true)
      %stats.a = $c2($setskill(%type)) $c1(stats for) $+($chr(2),$c2([),$chr(2),$c2(%rsn),$chr(2),$c2(]),$chr(2),$c1(:))
      %stats.b = $c1(Rank:) $c2($bytes($1,b)) $c1(Level:) $c2($bytes($2,b)) $c1(Exp:) $c2($bytes($3,b)) $iif(%norm,$c1(Exp to lvl) $+($c2($bytes(%a,b)),$c1(:)) $c2($bytes(%b,b)))
      %stats.c = $iif(%norm,$+($chr(2),$c1([),$chr(2),$c1(For level) $c2(%a),$chr(2),$c1(]),$chr(2),$c1(:)) $read(stats.txt,s,$setskill(%type),1))
    }
    hfree %rsn
  }
  if ($setgame(%type)) {
    var %a = 1, %b = 7, %c = $v1, %d = $replace($v1,-,$chr(32))
    tokenize 44 $hget(%rsn,%c)
    %stats.a = $c2($+($chr(2),[,$chr(2)$c2(,%rsn),$chr(2),],$chr(2))) $c1(is) $iif($1 > 0,$c1(rank) $c2($bytes($1,b)) $c1(with a score of) $+($c2($bytes($2,b)),$c1(.)),$+($c2(Unranked),$c1(.))) $+($c1($chr(40)),$c2(%d),$c1($chr(41)))
    while (%a <= %b) {
      tokenize 44 $hget(%rsn,$setskill($v1))
      %stats.b = %stats.b $c1($+($setskill($v1),:)) $c2($iif($2 > 0,$v1,-))
      inc %a
    }
    hfree %rsn
  }
  if ($regex(%type,/^c(mb|ombat)$/i)) {
    var %x, %y = 1, %z = 7
    while (%y <= %z) {
      tokenize 44 $hget(%rsn,$setskill(%y))
      set -l $+(%,$setskill(%y)) $iif($2 > 0,$2,$iif($setskill(%y) == Hitpoints,10,1))
      $iif(!%ranked,set -l %ranked $iif($calc($1 + 1),$v1))
      %x = %x $c1($+($setskill(%y),:)) $c2($iif($2 > 0,$v1,-))
      inc %y
    }
    if (%ranked) {
      var %a = $calc(%defence * 100), %b = $calc(%hitpoints * 100), %c = $calc(%prayer * 50), %d = $calc(%attack * 130), %e = $calc(%strength * 130)
      if ($odd(%prayer)) %c = %c - 50
      if ($odd(%ranged)) var %f = $calc(((%ranged - 1) + (%ranged * 2)) * 65)
      else var %f = $calc(%ranged * 195)
      if ($odd(%magic)) var %g = $calc(((%magic - 1) + (%magic * 2)) * 65)
      else var %g = $calc(%magic * 195)
      var %base = $calc((%a + %b + %c) / 400), $&
        %melee = $calc((%d + %e) / 400), %range = $calc(%f / 400), %mage = $calc(%g / 400), $&
        %cmb = $calc(%base + $gettok($sorttok(%melee %range %mage,32,n),-1,32)), %cmbstyle, %cmb.temp = $abs($calc($int($calc(%cmb +1)) - %cmb))
      if (%melee > %range) && (%melee > %mage) %cmbstyle = melee
      else {
        if (%mage > %range) %cmbstyle = mage
        else %cmbstyle = ranged
      }
      var $&
        %h.2lvl = $ceil($calc(%cmb.temp / .25)), %p.2lvl = $round($calc(%cmb.temp / .124),0), $&
        %a.2lvl = $ceil($calc(%cmb.temp / .32707)), %m.2lvl = $round($calc(%cmb.temp / .4834),0), $&
        %s.2lvl = $ceil($calc(%cmb.temp / .324)), %r.2lvl = $round($calc(%cmb.temp / .4865),0), $&
        %d.2lvl = $ceil($calc(%cmb.temp / .249)), %2lvl
      if ($odd($calc(%prayer + %p.2lvl))) %p.2lvl = %p.2lvl + 1
      if ($odd($calc(%ranged + %r.2lvl))) %r.2lvl = %r.2lvl + 1
      if ($odd($calc(%magic + %m.2lvl))) %m.2lvl = %m.2lvl + 1
      if (%cmbstyle == melee) var %dynamic.2lvl = $iif(%attack != 99,$c1(Attack:) $c2(%a.2lvl)) $iif(%strength != 99,$c1(Strength:) $c2(%s.2lvl))
      if (%cmbstyle == magic) var %dynamic.2lvl = $iif(%magic != 99,$c1(Magic:) $c2(%m.2lvl))
      if (%cmbstyle == ranged) var %dynamic.2lvl = $iif(%ranged != 99,$c1(Ranged:) $c2(%r.2lvl))
      %2lvl = %dynamic.2lvl $iif(%defence != 99,$c1(Defence) $c2(%d.2lvl)) $iif(%hitpoints != 99,$c1(Hitpoints:) $c2(%h.2lvl)) $iif(%prayer != 99,$c1(Prayer:) $c2(%p.2lvl))
      %stats.a = $+($chr(2),$c2([),$chr(2),$c2(%rsn),$chr(2),$c2(]),$chr(2)) $c1(is) $c2(%cmb) $c1(%cmbstyle style combat.)
      %stats.b = %x
      %stats.c = $iif(%2lvl && $calc($int(%cmb) + 1) isnum 1-126,$+($chr(2),$c1([),$chr(2),$c1(For level) $c2($v1),$chr(2),$c1(]),$chr(2),$c1(:)) %2lvl)
    }
    else %stats.a = $c1(The nick) $c2(%rsn) $c1(does not appear in the hiscores for any combat skills.)
    hfree %rsn
  }
  if ($regex(%type,/^(close(st)?|f(ar|[au]rthest))$/Si)) {
    var %a = 1, %b, %c, %d, %e = $iif(close* iswm %type,closest,furthest), %2lvl
    while ($setskill(%a)) {
      tokenize 44 $hget(%rsn,$v1)
      %b = $calc($2 + 1)
      %c = $calc($xp(%b) - $3)
      if (%b isnum 1-99) {
        if (%d) {
          if (%c $iif(close* iswm %e,<,>) $gettok(%d,3,32)) %d = $setskill(%a) %b %c
        }
        else %d = $setskill(%a) %b %c
      }
      inc %a
    }
    tokenize 32 %d
    if (!$1) %stats.a = $c2(%rsn) $c1(can't level any further.)
    else {
      %2lvl = $3
      %stats.a = $+($c2(%rsn),$c1('s)) $c1(%e skill $iif(close* iswm %e,to,from) a level is) $c2($1) $+($c1($chr(40)),$c2($bytes($3,b)) $c1(exp for level) $c2($2),$c1($chr(41)))
      %stats.b = $iif($read(stats.txt,s,$1,1),$+($chr(2),$c1([),$chr(2),$c1(For level) $c2($2),$chr(2),$c1(]),$chr(2),$c1(:)) $v1)
    }
    hfree %rsn
  }
  if ($regex(%type,/^c(mb|ombat)%$/Si)) {
    var %a = 1, %b = 7, %c = $gettok($hget(%rsn,overall),3,44), %d
    while (%a <= %b) {
      tokenize 44 $hget(%rsn,$setskill($v1))
      %d = $calc(%d + $3)
      inc %a
    }
    %stats.a = $c2(%rsn) $c1(is) $c2($+($round($calc((%d / %c) * 100),2),%)) $c1(combat $+(based,$chr(44)) with) $c2($bytes(%d,b)) $c1(combat experience and) $c2($bytes(%c,b)) $c1(experience overall.)
    hfree %rsn
  }
  $iif(%stats.a,%style $+($v1,$chr(15)))
  $iif(%stats.b,%style $+($v1,$chr(15)))
  $iif(%stats.c,%style $+($v1,$chr(15)))
  unset $+(%,style,.,$right($sockname,-6)) $+(%,id,.,$right($sockname,-6))
}

alias -l setskill {
  if ($1 == 0) || ($regex($1,/^total|overall$/Si)) return Overall
  if ($1 == 1) || ($regex($1,/^at(t|k|tack)$/Si)) return Attack
  if ($1 == 2) || ($regex($1,/^def(en[cs]e)?$$/Si)) return Defence
  if ($1 == 3) || ($regex($1,/^str(ength)?$/Si)) return Strength
  if ($1 == 4) || ($regex($1,/^h(p|it(s|points?))$/Si)) return Hitpoints
  if ($1 == 5) || ($regex($1,/^rang(e(d?)|ing)$/Si)) return Ranged
  if ($1 == 6) || ($regex($1,/^pray(er)?$$/Si)) return Prayer
  if ($1 == 7) || ($regex($1,/^mag(e|ic)$$/Si)) return Magic
  if ($1 == 8) || ($regex($1,/^cook(ing)?$/Si)) return Cooking
  if ($1 == 9) || ($regex($1,/^w(c|ood(cut(ting)?))$/Si)) return Woodcutting
  if ($1 == 10) || ($regex($1,/^fletch(ing)?$/Si)) return Fletching
  if ($1 == 11) || ($regex($1,/^fish(ing)?$/Si)) return Fishing
  if ($1 == 12) || ($regex($1,/^f(m|iremak(e|ing))$/Si)) return Firemaking
  if ($1 == 13) || ($regex($1,/^craft(ing)?$/Si)) return Crafting
  if ($1 == 14) || ($regex($1,/^smith|smelt(ing)?$/Si)) return Smithing
  if ($1 == 15) || ($regex($1,/^min(e|ing)$/Si)) return Mining
  if ($1 == 16) || ($regex($1,/^herb(law|lore)?$/Si)) return Herblore
  if ($1 == 17) || ($regex($1,/^agil(ity)?$/Si)) return Agility
  if ($1 == 18) || ($regex($1,/^thie(f|v(e|ing))$/Si)) return Thieving
  if ($1 == 19) || ($regex($1,/^slay(er|ing)?$/Si)) return Slayer
  if ($1 == 20) || ($regex($1,/^farm(er|ing)?$/Si)) return Farming
  if ($1 == 21) || ($regex($1,/^r(c|unecraft)(ing)?$/Si)) return Runecraft
  if ($1 == 22) || ($regex($1,/^hunt(er|ing)?$/Si)) return Hunter
  if ($1 == 23) || ($regex($1,/^con(struct(ion|ing)?)?$/Si)) return Construction
}

alias -l setgame {
  if ($1 == 24) || ($regex($1,/^duel(ling)?$/Si)) return Duel-tournament
  if ($1 == 25) || ($regex($1,/^b(ounty(hunt(er|ing)?)?|h)$/Si)) return Bounty-hunter
  if ($1 == 26) || ($regex($1,/^b(h)?r(ogue)?$/Si)) return Bounty-hunter-rogue
}

alias -l xp return $gettok(0 83 174 276 388 512 650 801 969 1154 1358 1584 1833 2107 2411 2746 3115 3523 3973 4470 5018 5624 6291 7028 7842 8740 9730 10824 12031 13363 14833 16456 18247 20224 22406 24815 27473 30408 33648 37224 41171 45529 50339 55649 61512 67983 75127 83014 91721 101333 111945 123660 136594 150872 166636 184040 203254 224466 247886 273742 302288 333804 368599 407015 449428 496254 547953 605032 668051 737627 814445 899257 992895 1096278 1210421 1336443 1475581 1629200 1798808 1986068 2192818 2421087 2673114 2951373 3258594 3597792 3972294 4385776 4842295 5346332 5902831 6517253 7195629 7944614 8771558 9684577 10692629 11805606 13034431,$1,32)

alias -l odd if ($right($1,1) isin 13579) return $true

alias c1 return $+($chr(3),03,$1-)

alias c2 return $+($chr(3),06,$1-)