alias -l c1 { return $+($chr(3),01,$1-,$chr(3)) } alias -l c2 { return $+($chr(3),10,$1-,$chr(3)) } alias -l c3 { return $+($chr(3),02,$1-,$chr(3)) } on $*:TEXT:/^[!@.]/Si:#: { if ($remove($1,!,@,.) == stats) { set %stats.style level } elseif ($regex($remove($1,!,@,.),/^(def(ault)?|set)(rsn|name)/i)) { writeini -n DefRSN.ini RSNs $address($nick,2) $replace($2-,$chr(32),_) notice $nick $c1(Your default RSN for the host) $c2($address($nick,2)) $c1(has been set to) $c2($replace($2-,$chr(32),_)) $+ $c1(.) 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 ($2) { if (& isin $2-) { tokenize 32 $remove($1-,&) if ($2 !ison $chan) { notice $nick $c1(The username) $c2($2-) $c1(was not found on the channel.) | unset %stats.* | halt } elseif (!$readini(DefRSN.ini,n,RSNs,$address($2,2))) { notice $nick $c1(The username) $c2($2-) $c1(has not set a default RSN.) | unset %stats.* | halt } else { set %stats.user $readini(DefRSN.ini,n,RSNs,$address($2,2)) } } else { set %stats.user $replace($2-,$chr(32),_) } } else { if ((!$readini(DefRSN.ini,n,RSNs,$address($nick,2))) && (!$2)) { .notice $nick You must specify a username between 3 and 12 characters. This can be omitted if defname is set. | Halt } else { set %stats.user $readini(DefRSN.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 (** 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($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1($chr(2) $+ [) $c2($statstrue($gettok(%stats.style,2,46))) $c1(]) $+ $chr(2) $& $c1(Level:) $c2(%level) $c1($chr(124)) $c1(Rank:) $c2(%rank) $c1($chr(124)) $c1(Exp:) $c2(%exp) $& $c1($chr(124)) $c1(Exp until $calc(%level + 1) $+ :) $c2($bytes($calc($statsxp($calc(%level + 1)) - $remove(%exp,$chr(44))),b)) } else { %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(User 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($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(Combat Level is) $c2(%combat) $c1([) $c2($+(%class,-,based Combat)) $c1(]) %stats.display $c1(Attack:) $c2(%a) $c1($chr(124)) $c1(Defence:) $c2(%d) $c1($chr(124)) $c1(Strength:) $c2(%s) $c1($chr(124)) $c1(Hitpoints:) $c2(%h) $c1($chr(124)) $c1(Ranged:) $c2(%r) $c1($chr(124)) $c1(Prayer:) $c2(%p) $c1($chr(124)) $c1(Magic:) $c2(%m) unset %stats.* | sockclose stats } else { var %x = 1 while (%x <= 17) { var %statline = %statline $iif($($+(%,stats.,$statstrue(%x),.level),2),$c1($statstrue(%x) $+ :) $c2($($+(%,stats.,$statstrue(%x),.,%stats.style),2)) $c1($chr(124)) $&,$null) inc %x } while (%x > 17) && (%x < 24) { var %statline2 = %statline2 $iif($($+(%,stats.,$statstrue(%x),.level),2),$c1($statstrue(%x) $+ :) $c2($($+(%,stats.,$statstrue(%x),.,%stats.style),2)) $c1($chr(124)) $&,$null) inc %x } %stats.display $c1($chr(2) $+ [) $+ $c3(%stats.user) $+ $c1(]) $+ $chr(2) $c1(Overall:) $iif(%stats.Overall.level,$c2($($+(%,stats.Overall.,%stats.style),2)),$c2(-)) $c1($chr(124)) $& $replace(%statline,Attack,Att,Defence,Def,Strength,Str,Hitpoints,HP,Ranged,Range,Prayer,Pray,Magic,Mage,Cooking,Cook,Woodcutting,Woodcut,Fletching,Fletch,Fishing,Fish,Firemaking,FM,Crafting,Craft,Smithing,Smith,Herblore,Herb,Agility,Agil,Thieving,Thief,Slayer,Slay,Farming,Farm,Runecraft,Rc,Hunter,Hunt,Construction,Con) %stats.display $replace(%statline2,Attack,Att,Defence,Def,Strength,Str,Hitpoints,HP,Ranged,Range,Prayer,Pray,Magic,Mage,Cooking,Cook,Woodcutting,Woodcut,Fletching,Fletch,Fishing,Fish,Firemaking,FM,Crafting,Craft,Smithing,Smith,Herblore,Herb,Agility,Agil,Thieving,Thief,Slayer,Slay,Farming,Farm,Runecraft,Rc,Hunter,Hunt,Construction,Con) | 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 -l statstrue { if ($1 == 0) || ($regex($1,/^(st|(skill)?total|overall)$/Si)) return Overall elseif ($1 == 1) || ($regex($1,/^at(t|k|tack)?$/Si)) return Attack elseif ($1 == 2) || ($regex($1,/^def(en[cs]e)?$$/Si)) return Defence elseif ($1 == 3) || ($regex($1,/^str(ength)?$/Si)) return Strength elseif ($1 == 4) || ($regex($1,/^hp|hit(s|points?)?$/Si)) return Hitpoints elseif ($1 == 5) || ($regex($1,/^range(r|d|ing)?$/Si)) return Ranged elseif ($1 == 6) || ($regex($1,/^Pray(er)?$$/Si)) return Prayer elseif ($1 == 7) || ($regex($1,/^mag(e|ic)$$/Si)) return Magic elseif ($1 == 8) || ($regex($1,/^cook(ing)?$/Si)) return Cooking elseif ($1 == 9) || ($regex($1,/^wc|wood(cut(ting)?)?$/Si)) return Woodcutting elseif ($1 == 10) || ($regex($1,/^fletch(ing)?$/Si)) return Fletching elseif ($1 == 11) || ($regex($1,/^fish(ing)?$/Si)) return Fishing elseif ($1 == 12) || ($regex($1,/^(fire|fm)(make?(ing)?|ing)?$/Si)) return Firemaking elseif ($1 == 13) || ($regex($1,/^craft(ing)?$/Si)) return Crafting elseif ($1 == 14) || ($regex($1,/^(smith|smelt)(ing)?$/Si)) return Smithing elseif ($1 == 15) || ($regex($1,/^mine(ing)?$/Si)) return Mining elseif ($1 == 16) || ($regex($1,/^herb(law|lore)?$/Si)) return Herblore elseif ($1 == 17) || ($regex($1,/^agil(ity)?$/Si)) return Agility elseif ($1 == 18) || ($regex($1,/^(th(ei|ie)[fv](e|ing)?)$/Si)) return Thieving elseif ($1 == 19) || ($regex($1,/^slay(er|ing)?$/Si)) return Slayer elseif ($1 == 20) || ($regex($1,/^farm(er|ing)?$/Si)) return Farming elseif ($1 == 21) || ($regex($1,/^(rc|runecraft)(er|ing)?$/Si)) return Runecraft elseif ($1 == 22) || ($regex($1,/^(construct)(ion|ing)?$/si)) return Construction elseif ($1 == 23) || ($regex($1,/^(hunt)(er|ing)?$/si)) return Hunter } 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 fa