rendered paste bodyon $*:TEXT:/^[!@.]/Si:#:{
inc %ID
var %line10 = $remove($1,$left($1,1))
tokenize 32 $strip($1-)
if ($right($1,-1) == stats) {
var %style = astats
if ($left($2,1) == $chr(35)) {
tokenize 32 $1 $remove($2,$chr(35)) $3-
if ($remove($2,-) isnum 30-9999) {
set $+(%,stats.gl.,%id) $2
if ($3) { set $+(%,stats.rsn.,%id) $replace($3-,$chr(32),-) }
elseif ($readini(DefRSN.ini,-n,RSNs,$mask($fulladdress,3))) { set $+(%,stats.rsn.,%id) $ifmatch }
else {
$iif($left($1,1) == @,msg $chan,notice $nick) You must specify a player to look up. To set a default player, use !defname <username>
halt
}
}
}
elseif ($2) { set $+(%,stats.rsn.,%id) $replace($2-,$chr(32),-) }
elseif ($readini(DefRSN.ini,-n,RSNs,$mask($fulladdress,3))) { set $+(%,stats.rsn.,%id) $ifmatch }
else {
$iif($left($1,1) == @,msg $chan,notice $nick) You must specify a player to look up. To set a default player, use !defname <username>
halt
}
}
elseif ($regex($1,/co?mb(at)?/Si)) {
if (*%* iswm $1) var %style = per
else var %style = combat
if ($2) { set $+(%,stats.rsn.,%ID) $replace($3-,$chr(32),-) }
elseif ($readini(DefRSN.ini,-n,RSNs,$mask($fulladdress,3))) set $+(%,stats.rsn.,%ID) $ifmatch
else {
$iif($left($1,1) == @,msg $chan,notice $nick) You must specify a player to look up. To set a default player, use !defname <username>
halt
}
}
elseif ($regex($1,/pc|pest(con)?(trol)?/Si)) {
var %style = pc
if ($2) { set $+(%,stats.rsn.,%ID) $replace($3-,$chr(32),-) }
elseif ($readini(DefRSN.ini,-n,RSNs,$mask($fulladdress,3))) set $+(%,stats.rsn.,%ID) $ifmatch
else {
$iif($left($1,1) == @,msg $chan,notice $nick) You must specify a player to look up. To set a default player, use !defname <username>
halt
}
}
elseif ($setskill($remove($1,@,!,.))) {
var %style = istat, %skill = $setskill($remove($1,@,!,.))
if ($2) { set $+(%,stats.rsn.,%ID) $replace($3-,$chr(32),-) }
elseif ($readini(DefRSN.ini,-n,RSNs,$mask($fulladdress,3))) set $+(%,stats.rsn.,%ID) $ifmatch
else {
$iif($left($1,1) == @,msg $chan,notice $nick) You must specify a player to look up. To set a default player, use !defname <username>
halt
}
}
elseif ($right($1,-1) == defname) && ($2) {
writeini -n DefRSN.ini RSNs $mask($fulladdress,3) $replace($2-,$chr(32),-)
notice $nick Your default username is now " $+ $2- $+ ". This defname is associated with the address $mask($fulladdress,3)
halt
}
else halt
if ($len($($+(%,stats.rsn.,%ID),2)) > 12) {
$iif($left($1,1) == @,msg $chan,notice $nick) *** [ $($+(%,stats.rsn.,%ID),2) ]: is to long to be a RSN
cleanup %ID
halt
}
set $+(%,stats.style.,%ID) %style
set $+(%,stats.skill.,%ID) %skill
set $+(%,stats.display.,%ID) $iif($left($1,1) == @,msg $chan,notice $nick)
sockopen stats. $+ %ID hiscore.runescape.com 80
}
on *:SOCKOPEN:stats.*: {
var %id = $gettok($sockname,2,46)
sockwrite -n $sockname GET /lang/en/aff/runescape/hiscorepersonal.ws?user1= $+ $($+(%,stats.rsn.,%ID),2) HTTP/1.1
sockwrite -n $sockname Host: hiscore.runescape.com
sockwrite -n $sockname $+($crlf,$crlf)
}
on *:SOCKREAD:stats.*: {
var %ID = $gettok($sockname,2,46)
if ($sockerr) {
$($+(%,stats.style.,%ID),2) *** [ Stats ]: Unable to connect
cleanup %id
}
else {
sockread &Incoming
bwrite $sockname -1 -1 &Incoming
if ($bfind(&Incoming, 1, </html>).text && !$($+(%,stats.active.,%id),2)) {
makehash $sockname
}
elseif ($bfind(&Incoming, 1, does not feature in the hiscores.).text) {
set $+(%,stats.active.,%id) on
$($+(%,stats.display.,%ID),2) *** [ $($+(%,stats.rsn.,%ID),2) ]: does not appear in the hiscores list
cleanup %id
}
}
}
alias -l makehash {
var %file = $1
bread %file 1 $file(%file).size &stats
var %currentstat, %x = 1
while (%x) {
var %x = $bfind(&stats,$calc(%x + 1),<a href="overall.ws?table=)
var %currentstat = $nohtml($bvar(&stats,%x,200).text)
tokenize 10 %currentstat
hadd -m %file $1-4
}
process %file
}
alias process {
var %table = $1, %id = $gettok($1,2,46)
var %display = $($+(%,stats.display.,%ID),2), $&
%rsn = $($+(%,stats.rsn.,%ID),2), $&
%skill = $($+(%,stats.skill.,%ID),2), $&
%style = $($+(%,stats.style.,%ID),2)
if (!%rsn) {
%display You must specify a player to look up. To set a default player, use !defname <username>
cleanup %id
}
elseif (%style == astats) {
if ($($+(%,stats.gl.,%id),2)) { var %gl = $ifmatch }
var %x = 1
while (%x <= 24) {
tokenize 32 $hget(%table,$setskill(%x))
if (!$2) { inc %x }
else {
if (%gl) {
if ($2 isnum %gl) { var %line = %line $setskill(%x) $2 }
inc %x
}
else {
var %line = %line $setskill(%x) $2
inc %x
}
}
}
tokenize 32 %line
if ($43) {
%display *** [ %rsn ]: $1-42
%display *** [ %rsn ]: $43-
}
else { %display *** [ %rsn ]: $1- }
cleanup %id
}
elseif (%style == per) {
var %overall = $remove($iif($gettok($hget(%table,overall),3,32),$v1,0),$chr(44))
var %attack = $remove($iif($gettok($hget(%table,attack),3,32),$v1,0),$chr(44))
var %defence = $remove($iif($gettok($hget(%table,defence),3,32),$v1,0),$chr(44))
var %strength = $remove($iif($gettok($hget(%table,strength),3,32),$v1,0),$chr(44))
var %hitpoints = $remove($iif($gettok($hget(%table,hitpoints),3,32),$v1,0),$chr(44))
var %ranged = $remove($iif($gettok($hget(%table,ranged),3,32),$v1,0),$chr(44))
var %prayer = $remove($iif($gettok($hget(%table,prayer),3,32),$v1,0),$chr(44))
var %magic = $remove($iif($gettok($hget(%table,magic),3,32),$v1,0),$chr(44))
var %cooking = $remove($iif($gettok($hget(%table,cooking),3,32),$v1,0),$chr(44))
var %woodcutting = $remove($iif($gettok($hget(%table,woodcutting),3,32),$v1,0),$chr(44))
var %fletching = $remove($iif($gettok($hget(%table,fletching),3,32),$v1,0),$chr(44))
var %fishing = $remove($iif($gettok($hget(%table,fishing),3,32),$v1,0),$chr(44))
var %firemaking = $remove($iif($gettok($hget(%table,firemaking),3,32),$v1,0),$chr(44))
var %crafting = $remove($iif($gettok($hget(%table,crafting),3,32),$v1,0),$chr(44))
var %smithing = $remove($iif($gettok($hget(%table,smithing),3,32),$v1,0),$chr(44))
var %mining = $remove($iif($gettok($hget(%table,mining),3,32),$v1,0),$chr(44))
var %herblore = $remove($iif($gettok($hget(%table,herblore),3,32),$v1,0),$chr(44))
var %agility = $remove($iif($gettok($hget(%table,agility),3,32),$v1,0),$chr(44))
var %thieving = $remove($iif($gettok($hget(%table,thieving),3,32),$v1,0),$chr(44))
var %slayer = $remove($iif($gettok($hget(%table,slayer),3,32),$v1,0),$chr(44))
var %farming = $remove($iif($gettok($hget(%table,farming),3,32),$v1,0),$chr(44))
var %runecrafting = $remove($iif($gettok($hget(%table,runecraft),3,32),$v1,0),$chr(44))
var %construction = $remove($iif($gettok($hget(%table,construction),3,32),$v1,0),$chr(44))
var %hunter = $remove($iif($gettok($hget(%table,hunter),3,32),$v1,0),$chr(44))
var %cmb = $calc( %attack + %defence + %strength + %hitpoints + %ranged + %prayer + %magic )
var %exp = %overall
var %es = $calc( %cooking + %woodcutting + %fletching + %fishing + %firemaking + %crafting + %smithing + %mining + %herblore + %agility + %theiving + %slayer + %farming + %runecrafting + %construction + %hunter )
var %percent = $calc( ( %cmb / %exp ) * 100)
%display *** [ %rsn ]: %rsn has $bytes(%cmb,db) Combat Xp and $bytes(%es,db) Non-Combat Xp (Total Xp: $bytes(%overall,db) $+ )
%display *** [ %rsn ]: $round(%percent,2) $+ $chr(37) of %rsn $+ 's Xp is Combat related
cleanup %id
}
elseif (%style == istat) {
tokenize 32 $hget(%table,%skill)
if (!$2) { %display *** [ %rsn ]: does not appear in the hiscores list for %skill }
else { %display *** [ %rsn ]: %skill Level: $2 Rank: $1 Exp: $3 }
cleanup %id
}
elseif (%style == combat) {
var %a.mult = .32707, %s.mult = .324, %d.mult = .25, %h.mult = .25, %p.mult = .124, %r.mult = .487, %m.mult = .487
var %a = $iif($gettok($hget(%table,attack),2,32),$v1,-), $&
%s = $iif($gettok($hget(%table,strength),2,32),$v1,-), $&
%d = $iif($gettok($hget(%table,defence),2,32),$v1,-), $&
%h = $iif($gettok($hget(%table,hitpoints),2,32),$v1,-), $&
%r = $iif($gettok($hget(%table,ranged),2,32),$v1,-), $&
%m = $iif($gettok($hget(%table,magic),2,32),$v1,-), $&
%p = $iif($gettok($hget(%table,prayer),2,32),$v1,-)
var %meleecombat = $calc(%a * %a.mult + %s * %s.mult + %d * %d.mult + %h * %h.mult + %p * %p.mult), $&
%RangedCombat = $calc(%r * %r.mult + %p * %p.mult + %d * %d.mult + %h * %h.mult), $&
%MagicCombat = $calc(%m * %m.mult + %p * %p.mult + %d * %d.mult + %h * %h.mult)
if (%MagicCombat == %RangedCombat && %MagicCombat == %RangedCombat && %m != %r) {
%display *** [ %rsn ]: does not appear in the hiscores for any combat skills
cleanup %id
}
elseif (%MagicCombat > %RangedCombat) && (%MagicCombat > %MeleeCombat) var %cmbstyle = Mage, %Combat = %MagicCombat
elseif (%RangedCombat > %MeleeCombat) var %cmbstyle = Ranger, %Combat = %RangedCombat
else var %cmbstyle = Warrior, %combat = %MeleeCombat
var %cmb.temp = $abs($calc($int($calc(%combat +1)) - %combat)), $&
%a.2lvl = $ceil($calc(%cmb.temp / %a.mult)), %s.2lvl = $ceil($calc(%cmb.temp / %s.mult)), $&
%d.2lvl = $ceil($calc(%cmb.temp / %d.mult)), %m.2lvl = $ceil($calc(%cmb.temp / %m.mult)), $&
%r.2lvl = $ceil($calc(%cmb.temp / %r.mult)), %p.2lvl = $ceil($calc(%cmb.temp / %p.mult))
if (%cmbstyle == mage) var %dynamic.2lvl = Magic: %m.2lvl
elseif (%cmbstyle == Ranger) var %dynamic.2lvl = Ranged: %r.2lvl
else var %dynamic.2lvl = Att/Str: $round($calc(%a.2lvl * %s.2lvl / 2 ),0)
var %combat = $round(%combat,2), %next = $ceil(%combat)
%display *** [ %rsn ]: Cmb-Lvl ( $+ %cmbstyle $+ ): %combat ASDHRPM: %a %s %d %h %r %p %m
%display *** [ %rsn ]: Next cmb lvl in: %dynamic.2lvl $&
Def/Hp: %d.2lvl Prayer: %p.2lvl
cleanup %id
}
elseif (%style = pc) {
var %a = $iif($gettok($hget(%table,attack),2,32),$v1,0), $&
%s = $iif($gettok($hget(%table,strength),2,32),$v1,0), $&
%d = $iif($gettok($hget(%table,defence),2,32),$v1,0), $&
%h = $iif($gettok($hget(%table,hitpoints),2,32),$v1,0), $&
%r = $iif($gettok($hget(%table,ranged),2,32),$v1,0), $&
%m = $iif($gettok($hget(%table,magic),2,32),$v1,0), $&
%p = $iif($gettok($hget(%table,prayer),2,32),$v1,0)
var %pc1 = $pc.p(%a), %pc2 = $pc.p(%s), %pc3 = $pc.p(%d), %pc4 = $pc.p(%h)
var %pc5 = $pc.p(%r), %pc6 = $pc.p(%m), %pc7 = $pc.pp(%p)
%display *** [ %rsn ]: Exp Per Point: Attack %pc1 Strength %pc2 Defence %pc3 Hitpoints %pc4 Ranged %pc5 Magic %pc6 Prayer %pc7
cleanup %id
}
}
alias -l pc.p { return $floor($calc( $1 * $1 / 6 )) }
alias -l pc.pp { return $floor($calc( $1 * $1 / 12 )) }
alias -l cleanup {
unset $+(%,next.*.,$1)
unset %stats.*. [ $+ [ $1 ] ]
unset $+(%,stats.*.,$1)
sockclose $+(Stats.,$1)
.remove $+(Stats.,$1)
}
alias -l nohtml {
var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x)
return $remove(%x, ,$chr(09))
}
alias -l setskill {
if ($1 == 1 || $regex($1,/^(st|(skill)?total|overall)$/Si)) { return Overall }
elseif ($1 == 2 || $regex($1,/^at(t|k|tack)$/Si)) { return Attack }
elseif ($1 == 3 || $regex($1,/^def(en[cs]e)?$$/Si)) { return Defence }
elseif ($1 == 4 || $regex($1,/^str(ength)?$/Si)) { return Strength }
elseif ($1 == 5 || $regex($1,/^hp|hit(s|points?)?$/Si)) { return Hitpoints }
elseif ($1 == 6 || $regex($1,/^range(r|d|ing)?$/Si)) { return Ranged }
elseif ($1 == 7 || $regex($1,/^Pray(er)?$$/Si)) { return Prayer }
elseif ($1 == 8 || $regex($1,/^mag(e|ic)$$/Si)) { return Magic }
elseif ($1 == 9 || $regex($1,/^cook(ing)?$/Si)) { return Cooking }
elseif ($1 == 10 || $regex($1,/^wc|wood(cut(ting)?)?$/Si)) { return Woodcutting }
elseif ($1 == 11 || $regex($1,/^fletch(ing)?$/Si)) { return Fletching }
elseif ($1 == 12 || $regex($1,/^fish(ing)?$/Si)) { return Fishing }
elseif ($1 == 13 || $regex($1,/^(fire|fm)(make?(ing)?|ing)?$/Si)) { return Firemaking }
elseif ($1 == 14 || $regex($1,/^craft(ing)?$/Si)) { return Crafting }
elseif ($1 == 15 || $regex($1,/^(smith|smelt)(ing)?$/Si)) { return Smithing }
elseif ($1 == 16 || $regex($1,/^min(e|ing|eing)?$/Si)) { return Mining }
elseif ($1 == 17 || $regex($1,/^herb(law|lore)?$/Si)) { return Herblore }
elseif ($1 == 18 || $regex($1,/^agil(ity)?$/Si)) { return Agility }
elseif ($1 == 19 || $regex($1,/^(th(ei|ie)[fv](e|ing)?)$/Si)) { return Thieving }
elseif ($1 == 20 || $regex($1,/^slay(er|ing)?$/Si)) { return Slayer }
elseif ($1 == 21 || $regex($1,/^farm(er|ing)?$/Si)) { return Farming }
elseif ($1 == 22 || $regex($1,/^(rc|runecraft)(er|ing)?$/Si)) { return Runecraft }
elseif ($1 == 23 || $regex($1,/^(construct)(ion|ing)?$/si)) { return Construction }
elseif ($1 == 24 || $regex($1,/^(hunt)(ing|er)?$/Si)) { return Hunter }