Public feed #725292

Miscellany

public text v1 · immutable
Raw Edit
·published 2007-10-04 08:26 UTC
rendered paste body
alias skill {
  if ($prop == lvl) { var %get = 2 }
  if ($prop == exp) { var %get = 3 }
  if ($prop == rank) { var %get = 1 }
  if (!$1 || !$2) { return Error }
  if (!$hget($1,$2)) { return - }
  return $iif($remove($gettok($hget($1,$2),%get,32),$chr(44)) <= 0,N/A,$v1)
}
alias order {
  .tokenize 32 $1
  var %a = 1,%ordrd
  while (%a <= $0) {
    if ($($+($,%a),2) >= $gettok(%ordrd,1,32)) { %ordrd = $($+($,%a),2) %ordrd }
    else { %ordrd = %ordrd $($+($,%a),2) }
    inc %a
  }
  return %ordrd
}
alias exp {
  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 u2fid {
  if ($1 == 1) { return Overall }
  if ($1 == 2) { return Attack }
  if ($1 == 3) { return Defence }
  if ($1 == 4) { return Strength }
  if ($1 == 5) { return Hitpoints }
  if ($1 == 6) { return Ranged }
  if ($1 == 7) { return Prayer }
  if ($1 == 8) { return Magic }
  if ($1 == 9) { return Cooking }
  if ($1 == 10) { return Woodcutting }
  if ($1 == 11) { return Fletching }
  if ($1 == 12) { return Fishing }
  if ($1 == 13) { return Firemaking }
  if ($1 == 14) { return Crafting }
  if ($1 == 15) { return Smithing }
  if ($1 == 16) { return Mining }
  if ($1 == 17) { return Herblore }
  if ($1 == 18) { return Agility }
  if ($1 == 19) { return Thieving }
  if ($1 == 20) { return Slayer }
  if ($1 == 21) { return Farming }
  if ($1 == 22) { return Runecraft }
  if ($1 == 23) { return Hunter }
  if ($1 == 24) { return Construction }
}

alias f2u {
  if ($regex($1,/^(cmb|combat)$/Si)) { return Combat }
  if ($regex($1,/^(stats|stat)$/Si)) { return Stats }
  if ($regex($1,/^(overall|total|st|skillt|stotal|skilltotal)$/Si)) { return Overall }
  if ($regex($1,/^(at|att|attack|atk)$/Si)) { return Attack }
  if ($regex($1,/^(de|def|defence|dfnc)$/Si)) { return Defence }
  if ($regex($1,/^(st|str|strength)$/Si)) { return Strength }
  if ($regex($1,/^(hp|hits|hitpoints|hitpoint|hpoint|hitp)$/Si)) { return HitPoints }
  if ($regex($1,/^(ranged|range|arch|archery|arching)$/Si)) { return Ranged }
  if ($regex($1,/^(prayer|pray|faith)$/Si)) { return Prayer }
  if ($regex($1,/^(magic|mage|mag|mgk|mgc|spell)$/Si)) { return Magic }
  if ($regex($1,/^(cooking|cook|food|ck)$/Si)) { return Cooking }
  if ($regex($1,/^(wc|wood|woodcut|woodcutting|wcut|woodc)$/Si)) { return WoodCutting }
  if ($regex($1,/^(fletch|fletching|fl)$/Si)) { return Fletching }
  if ($regex($1,/^(fish|fishing|fsh|fi)$/Si)) { return Fishing }
  if ($regex($1,/^(firemaking|fm|fire|firemake|firem|fmake)$/Si)) { return FireMaking }
  if ($regex($1,/^(craft|crafting|cr)$/Si)) { return Crafting }
  if ($regex($1,/^(smith|sm|smithing)$/Si)) { return Smithing }
  if ($regex($1,/^(mine|mining|mi)$/Si)) { return Mining }
  if ($regex($1,/^(herb|herblore|herbal)$/Si)) { return Herblore }
  if ($regex($1,/^(agil|agility|agile|ag)$/Si)) { return Agility }
  if ($regex($1,/^(thieving|thiev|thief|steal)$/Si)) { return Thieving }
  if ($regex($1,/^(slay|slayer|slaying)$/Si)) { return Slayer }
  if ($regex($1,/^(farm|farming|frm)$/Si)) { return Farming }
  if ($regex($1,/^(rc|rune|runecraft|runecrafting|runec|rcraft)$/Si)) { return RuneCraft }
  if ($regex($1,/^(hunt|hunter|hunting)$/Si)) { return Hunter }
  if ($regex($1,/^(constr|construction|build)$/Si)) { return Construction }
}

alias combat.base {
  var %def = $1,%hp = $2,%pray = $3
  var %A = $calc(%def * 100)
  var %B = $calc(%hp * 100)
  var %C = $iif(*.* iswm $calc(%pray / 2),$calc((%pray -1) * 50),$calc(%pray * 50))
  return $calc((%a + %B + %C) / 400)
}
alias combat.class {
  var %att = $1,%str = $2,%range = $3,%mage = $4
  var %A = $calc(%att * 130)
  var %B = $calc(%str * 130)
  var %C = $iif(*.* iswm $calc(%range / 2),$calc(((%range - 1) + (%range * 2)) * 65),$calc(%range * 195))
  var %D = $iif(*.* iswm $calc(%mage / 2),$calc(((%mage - 1) + (%mage * 2)) * 65),$calc(%mage * 195))
  var %melee = $calc((%A + %B) / 400)
  var %range = $calc(%C / 400)
  var %mage = $calc(%D / 400)
  return $order(%melee %range %mage)
}
alias combat.final {
  var %base = $combat.base($iif(!$2,1,$2),$iif(!$4,10,$4),$iif(!$5,1,$5))
  var %class = $combat.class($iif(!$1,1,$1),$iif(!$3,1,$3),$iif(!$6,1,$6),$iif(!$7,1,$7))
  var %combat = $calc(%base + $gettok(%class,1,32))
  return %combat
}
on *:SOCKOPEN:stats.*: {
  var %bleh = $gettok($sockname,2,46)
  if ($sockerr) {
    .echo 4 -s Error while connecting to the stats page: $sock($sockname).wsmsg
    return
  }
  .sockwrite -n $sockname GET /index_lite.ws?player= $+ $hget($($+(u,%bleh),2),user) HTTP/1.1
  .sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf
}
on *:SOCKREAD:stats.*: {
  var %bleh = $gettok($sockname,2,46)
  if ($sockerr) {
    echo 4 -s Error while reading the stats: $sock($sockname).wsms
    return
  }
  .sockread %RSStats
  if (*404 Not Found* iswm %RSStats) {
    $($hget($($+(u,%bleh),2),display),2) $s1(%nick,The user) $s2(%nick,$hget($($+(u,%bleh),2),user)) $s1(%nick,doesn't appear in the hiscores.)
    .sockclose $sockname
    halt
  }
  if ($numtok(%RSStats,44) >= 3) {
    .inc $($+(%,snum.,%bleh),1)
    .tokenize 44 %RSStats
    .hadd -m $($+(u,%bleh),2) $u2fid($($+(%,snum.,%bleh),2)) $1 $2 $3
  }
}
on *:SOCKCLOSE:stats.*: {
  var %bleh = $gettok($sockname,2,46)
  .stats.show $($+(u,%bleh),2)
}
alias s1 { return $+($chr(3),12,$1-,$chr(3)) }
alias s2 { return $+($chr(3),10,$1-,$chr(3)) }
alias stats.show {
  var %send = $hget($1,display),%send2 = .notice $hget($1,nick),%skill = $hget($1,skill),%user = $hget($1,user),%hash = $1,%addy = $hget($1,address),%nick = $hget($1,nick)
  var %item = $hget($1,item),%target = $hget($1,target)
  if (*echo* iswm %send) { goto skipnclear }
  if (%skill == Combat) {
    var %cmb = $combat.final($skill(%hash,attack).lvl,$skill(%hash,defence).lvl,$skill(%hash,strength).lvl,$skill(%hash,hitpoints).lvl,$skill(%hash,prayer).lvl,$skill(%hash,ranged).lvl,$skill(%hash,magic).lvl)
    var %cmbc = $calc($iif(*.* !iswm %cmb,$calc(%cmb +1),$ceil(%cmb)) - %cmb)
    $(%send,2) $s1(Name:) $s2(%user) $s1(Combat:) $s2(%cmb) $&
      $s1(Attack) $s2($skill(%hash,attack).lvl) $s1(Defence) $s2($skill(%hash,defence).lvl) $s1(Strength) $s2($skill(%hash,strength).lvl) $s1(HitPoints) $s2($skill(%hash,hitpoints).lvl) $s1(Ranged) $s2($skill(%hash,ranged).lvl) $s1(Magic) $s2($skill(%hash,magic).lvl) $s1(Prayer) $s2($skill(%hash,prayer).lvl)
    $(%send,2) $s1($lr(%nick,stats,ll) Attack) $s2($ceil($calc(( %cmbc ) / ( 1 / 3 )))) $&
      $s1(Strength) $s2($ceil($calc(( %cmbc ) / ( 1 / 3 )))) $&
      $s1(Defence) $s2($ceil($calc(( %cmbc ) / ( 1 / 4 )))) $&
      $s1(HitPoints) $s2($ceil($calc(( %cmbc ) / ( 1 / 4 )))) $&
      $s1(Prayer) $s2($ceil($calc(( %cmbc ) / ( 1 / 8 ))))
    goto clearup
  }
  if (%skill == stats) {
    $(%send,2) $s1(Stats for) $s2(%user) $+ $s1(:)
    $(%send,2) $s1(Overall) $s2($skill(%hash,overall).lvl) $s1(Attack) $s2($skill(%hash,attack).lvl) $s1(Defence) $s2($skill(%hash,defence).lvl) $s1(Strength) $s2($skill(%hash,strength).lvl) $s1(HitPoints) $s2($skill(%hash,hitpoints).lvl) $s1(Prayer) $s2($skill(%hash,prayer).lvl) $s1(Magic) $s2($skill(%hash,magic).lvl) $&
      $s1(Ranged) $s2($skill(%hash,ranged).lvl) $s1(Cooking) $s2($skill(%hash,cooking).lvl) $s1(Fishing) $s2($skill(%hash,fishing).lvl) $s1(RuneCrafting) $s2($skill(%hash,runecraft).lvl) $s1(Agility) $s2($skill(%hash,agility).lvl) $s1(Construction) $s2($skill(%hash,construction).lvl)
    $(%send,2) $s1(Herblore) $s2($skill(%hash,herblore).lvl) $s1(Thieving) $s2($skill(%hash,thieving).lvl) $s1(Crafting) $s2($skill(%hash,crafting).lvl) $s1(Fletching) $s2($skill(%hash,fletching).lvl) $s1(Slayer) $s2($skill(%hash,slayer).lvl) $s1(Mining) $s2($skill(%hash,mining).lvl) $&
      $s1(Smithing) $s2($skill(%hash,smithing).lvl) $s1(Firemaking) $s2($skill(%hash,firemaking).lvl) $s1(WoodCutting) $s2($skill(%hash,woodcutting).lvl) $s1(Farming) $s2($skill(%hash,farming).lvl) $s1(Hunter) $s2($skill(%hash,hunter).lvl)
    goto clearup
  }
  if (!$hget($1,%skill)) { $(%send,2) $s1(The user) $iif(%user) $s1(does not feature in the) $s2(%skill) $s1(hiscore table) | goto clearup }
  .tokenize 32 $remove($hget($1,%skill),$chr(44))
  .var %disp
  var %b = 0,%a = 1
  if (%target <= $skill(%hash,%skill).lvl) { var %target = $calc($skill(%hash,%skill).lvl +1) }
  var %nlp = $round($calc(($skill(%hash,%skill).exp - $exp($skill(%hash,%skill).lvl)) / ( $exp($calc($skill(%hash,%skill).lvl + 1)) - $exp($skill(%hash,%skill).lvl)) * 100),2)
  var %tlp = $round($calc(($skill(%hash,%skill).exp - $exp($skill(%hash,%skill).lvl)) / ( $exp(%target) - $exp($skill(%hash,%skill).lvl)) * 100),2)
  var %e2l = $iif($skill(%hash,%skill).lvl >= 99,$calc($iif(%skill = Overall,5000000000,200000000) - $3),$calc($exp(%target) - $3))
  $(%send,2) $s1(Skill:) $s2(%skill) $s1(User:) $s2(%user)
  $(%send,2) $s1(Rank:) $s2($bytes($1,b)) $s1(Level) $s2($bytes($2,b)) $s1(Exp:) $s2($bytes($3,b)) $s1(Exp to) $iif($skill(%hash,%skill).lvl < 99,Lvl $s2(%target),$s2(Perfection) $+ :) $s2($bytes(%e2l,b))
  :clearup
  .hfree %hash
  .unset $($+(%,*,$remove(%hash,u)),1)
  if ($hget(%hash,compare)) {
    .hfree $($+(u,$hget(%hash,compare)),1)
    .unset $($+(%,*,$hget(%hash,compare)),1)
  }
  :skipnclear
}
on $*:TEXT:/^[!@](def|set)(name|rsn) .{3,12}$/Si:#: {
  if (!$2) { halt }
  .writeini -n RSN.ini $address($nick,3) rsn $2-
  .notice $nick $s1(Your default RSN has been set to) $s2($2-)
}
alias rsn {
  if ($2) { return $2 }
  if ($readini(RSN.ini,$address($1,3),rsn)) { return $ifmatch }
  else { return $1 }
}
alias -l gotonclear {
  var %hash = $1
  .hfree %hash
  .unset $($+(%,*,$remove(%hash,u)),1)
  if ($hget(%hash,compare)) {
    .hfree $($+(u,$hget(%hash,compare)),1)
    .unset $($+(%,*,$hget(%hash,compare)),1)
  }
}
on $*:TEXT:/^[!@]{2}+/Si:#: {
  if (!$f2u($right($1,-1))) { halt }
  var %class = $+($r(0,9),$r(0,9),$r(0,9),$r(0,9),$r(0,9),$r(0,9))
  var %class2 = $+($r(0,9),$r(0,9),$r(0,9),$r(0,9),$r(0,9),$r(0,9))
  hadd -m $($+(u,%class),2) nick $nick
  var %rsn = $2-,%target = next
  noop $regex(target,$2-,/#([0-9]{1,2})/Si)
  if ($regml(target,0) >= 1) { var %target = $regml(target,1) | %rsn = $remove(%rsn,$+($chr(35),%target)) }
  else { var %target = 0 }
  hadd -m $($+(u,%class),2) user_s $iif(!%rsn,$nick,$ifmatch)
  if ($+(*,$chr(38),*) iswm %rsn) {
    if ($remove(%rsn,$chr(38)) !ison $chan) {
      $($iif($left($1,1) == !,.notice $nick,.msg $chan),2) $s1(An) $s2(Error) $s1(occured when attempting to initiate a stats lookup)
      .gotonclear $($+(u,%class),2)
      halt
    }
    %rsn = $rsn($remove(%rsn,$chr(38)))
    hadd -m $($+(u,%class),2) address $address($nick,3)
    hadd -m $($+(u,%class),2) skill $f2u($right($1,-1))
    hadd -m $($+(u,%class),2) item %item
    hadd -m $($+(u,%class),2) target %target
    hadd -m $($+(u,%class),2) user $replace($rsn($nick,$iif(%rsn == $null,$null,%rsn)),$chr(32),_)
    if ($+(*,$chr(38),*) iswm %user && %rsn != $null) {
      if ($remove(%user,$chr(38)) !ison $chan) {
        $iif($left($1,1) == !,.notice $nick,.msg $chan),2) $s1(An) $s2(Error) $s1(occured when attemptign to initiate a stats lookup)
        .gotonclear $($+(u,%class),2)
        halt
      }
    }
  }
  hadd -m $($+(u,%class),2) display $iif($left($1,1) == @,msg $chan,notice $nick)
  .sockopen $+(stats.,%class) hiscore.runescape.com 80
}