alias c1 { return $+($chr(3),14,$1-) } alias c2 { return $+($chr(3),12,$1-) } on *:text:*:#: { tokenize 32 $strip($1-) if ($left($1,1) !isin @!.-) halt if ($right($1,-1) == stats) { if $floodprot($nick,$network) { return } var %style = astats } elseif ($regex($1,/co?mb(at)?/Si)) { if $floodprot($nick,$network) { return } var %style = combat } elseif ($setskill($remove($1,@,!,.,-))) { if $floodprot($nick,$network) { return } var %style = istat, %skill = $setskill($remove($1,@,!,.,-)) } elseif ($right($1,-1) == setname) && ($2) { if $floodprot($nick,$network) { return } if ($chr(36) isin $2-) || ($chr(38) isin $2-) { notice $nick 12[14Bot Exploit12] 14Attemption at box exploiting prevented. halt } if ($2 == -h) { writeini DefRSN.ini RSNs $mask($fulladdress,3) $replace($3-,$chr(32),-) .notice $nick You're default RSN for the host $mask($fulladdress,3) has been set to $3- } else { writeini DefRSN.ini RSNs $nick $replace($2-,$chr(32),-) .notice $nick You're default RSN for the nick $nick has been set to $2- } halt } else halt inc %ID if ($len($2-) > 12) { if $floodprot($nick,$network) { return } $($+(%,stats.display.,%ID),2) $c1(The nick) $c2($2-) $c1(is too long) cleanup %ID halt } elseif ($2) set $+(%,stats.rsn.,%ID) $replace($2-,$chr(32),-) elseif ($readini(DefRSN.ini,RSNs,$mask($fulladdress,3))) set $+(%,stats.rsn.,%ID) $ifmatch elseif ($readini(DefRSN.ini,RSNs,$nick)) set $+(%,stats.rsn.,%ID) $ifmatch else set $+(%,stats.rsn.,%ID) $nick 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 $+ $crlf $+ $crlf } on *:sockread:stats.*: { sockread &Incoming bwrite $sockname -1 -1 &Incoming if ($bfind(&Incoming, 1, ).text) makehash $sockname elseif ($bfind(&Incoming, 1, does not feature in the hiscores.).text) { $($+(%,stats.display.,%ID),2) $c1(The nick) $c2($($+(%,stats.rsn.,%ID),2)) $c1(Does not appear in the hiscores) cleanup $gettok($sockname,2,46) } } 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),* 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) if (%level == $null) { %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.* | unset %id [ $+ [ %id-rem ] ] | halt } if (%stats.style == skill.overall) { %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) unset %stats.* | sockclose stats.* | unset %id [ $+ [ %id-rem ] ] | halt } %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(xp:) $c2(%exp) $& $c1(xp till lvl12 $calc(%level + 1) $+ 14:) $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.* | unset %id [ $+ [ %id-rem ] ] } 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.* | unset %id [ $+ [ %id-rem ] ] } 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(-)),$c1,$chr(41),) %stats.display %statline | unset %stats.* | sockclose stats.* | unset %id [ $+ [ %id-rem ] ] } } 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 setskill { 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 false } } alias 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 else return $null }