alias c1 { return $+($chr(3),14,$1-) } alias c2 { return $+($chr(3),07,$1-) } on $*:text:/^[!@]def|set(rsn|name)/si:#: { var %sckid = $right($ticks,5) if ($left($1,1) == !) set %way. [ $+ [ %sckid ] ] notice $nick if ($left($1,1) == @) set %way. [ $+ [ %sckid ] ] msg $chan if ($len($2-) > 12) { .notice $nick $c1(The RSN) $c2($2-) $c1(is too long.) halt } if ($remove($2-,_,-,$chr(32)) !isalnum) { .notice $nick $c1(The RSN) $c2($2-) $c1(contains invalid characters.) halt } writeini DefRSN.ini RSNs $mask($fulladdress,3) $replace($2-,$chr(32),-) writeini DefRSN.ini RSNs $nick $replace($2-,$chr(32),-) .notice $nick $c1(Your default RSN has been set to) $c2($2-) $+ $c1(.) halt } on $*:text:/^[!@]xptime help/Si:#: { set %helpxpmessage $iif($left($1,1) == @,msg $chan,notice $nick) %helpxpmessage The commands are: !start (skill) (rsn) !end (skill (rsn) !defname (rsn) or !setname (rsn) } on $*:text:/^[!@]start/Si:#: { if (!$2) { /notice $nick $c1 $+ Please use the correct syntaxt: $c2 $+ !start (skill) (rsn) $c1 $+ <-- The rsn is not needed if a def name is set. $c2 $+ For help type $c1 $+ !xptime help | halt } var %sckid = $right($ticks,5) if ($left($1,1) == !) set %way. [ $+ [ %sckid ] ] notice $nick if ($left($1,1) == @) set %way. [ $+ [ %sckid ] ] msg $chan var %ID = 1 if ($len($3-) > 12) { .notice $nick $c1(The RSN) $c2($2-) $c1(is too long.) cleanup %ID halt } elseif ($3) { if (&* iswm $2) { set $+(%,skill.rsn.) $iif($readini(DefRSN.ini,RSNs,$address($right($2,-1),3)),$ifmatch,$iif($readini(DefRSN.ini,RSNs,$right($2,-1)),$ifmatch,$right($2,-1))) } else { set $+(%,skill.rsn.) $replace($3-,$chr(32),-) } } elseif ($readini(DefRSN.ini,RSNs,$mask($fulladdress,3))) set $+(%,skill.rsn.) $ifmatch elseif ($readini(DefRSN.ini,RSNs,$nick)) set $+(%,skill.rsn.) $ifmatch else set $+(%,skill.rsn.) $nick set %skill.name $rsskill($2) set %skill.fulldate $fulldate set %skill.user $nick set %skill.useraddress $address( $+ %skill.user $+ ,2) if ($ini(Skilltimers.ini, $+ %skill.useraddress , $+ %skill.name $+ )) { /notice $nick $c1 $+ I am sorry but you already have a timer set for that skill. $c2 $+ Please end the current timer with $c1 $+ !end (skill) (rsn) $c2 $+ before setting a timer for that skill. | unset %skill.* | halt } sockopen rsnchecker. [ $+ [ %sckid ] ] www.slushpuppy.silverinterlocution.org 80 sockopen Exptimer. [ $+ [ %sckid ] ] www.users.on.net 80 } on *:SOCKOPEN:rsnchecker.*: { sockwrite -nt $sockname GET /rsstats.php?stats= $+ %skill.rsn. HTTP/1.1 sockwrite -nt $sockname Host: www.slushpuppy.silverinterlocution.org sockwrite -nt $sockname $crlf } on *:SOCKREAD:rsnchecker.*: { if ($sockerr) { %way. [ $+ [ $right($sockname,5) ] ] Socket Error: $sockname $+ . Error code: $sockerr Please inform $me of this error message. halt } else { var %sockreader sockread %sockreader if (*does not feature in the hiscores.
* iswm %sockreader) { set %skill.norsn $nohtml(%sockreader) %way. [ $+ [ $right($sockname,5) ] ] $c1 $+ Sorry $c2 $+ %skill.norsn unset %skill.* unset %*. [ $+ [ $right($sockname,5) ] ] sockclose $sockname } } } on *:SOCKOPEN:Exptimer.*: { sockwrite -nt $sockname GET /~adtory/stats.php?user= $+ %skill.rsn. HTTP/1.1 sockwrite -nt $sockname Host: www.users.on.net sockwrite -nt $sockname $crlf } on *:SOCKREAD:Exptimer.*: { if ($sockerr) { %way. [ $+ [ $right($sockname,5) ] ] Socket Error: $sockname $+ . Error code: $sockerr Please inform $me of this error message. halt } else { var %sockreader sockread %sockreader if (* $+ %skill.name $+ * iswm %sockreader-1) { tokenize 32 $remove(%sockreader,$1,$2) set %skill.startexp $nohtml(%sockreader) /writeini Skilltimers.ini %skill.useraddress %skill.name $c1 $+ Starting exp for the name $c2 $+ %skill.rsn. $+ , $c1 $+ with $c2 $+ %skill.name $+ , $c1 $+ is $c2 $+ $3- $+ . $c1 $+ Recorded on: $c2 $+ $date at $ctime if ($ini(Skilltimers.ini, $+ %skill.useraddress , %skill.name )) %way. [ $+ [ $right($sockname,5) ] ] $c1 $+ %skill.user $+ : $c2 $+ $replace($readini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ ), $ctime , $time )) unset %*. [ $+ [ $right($sockname,5) ] ] unset %sockreader* sockclose $sockname } if ($len($remove(%sockreader,$chr(9),$chr(32))) > 0) { var %x = 0 while (%x > -1) { if ($len(%sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]) <= 850) set %sockreader [ $+ [ $+(-,$calc(%x + 1)) ] ] %sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ] dec %x } } } } on $*:text:/^[!@]end/si:#: { if (!$2) { /notice $nick $c1 $+ Please use the correct syntaxt: $c2 $+ !start (skill) (rsn) $c1 $+ <-- The rsn is not needed if a def name is set. $c2 $+ For help type $c1 $+ !xptime help | halt } var %sckid = $right($ticks,5) if ($left($1,1) == !) set %way. [ $+ [ %sckid ] ] notice $nick if ($left($1,1) == @) set %way. [ $+ [ %sckid ] ] msg $chan var %ID = 1 if ($len($3-) > 12) { .notice $nick $c1(The RSN) $c2($2-) $c1(is too long.) cleanup %ID halt } elseif ($3) { if (&* iswm $2) { set $+(%,skill.rsn.) $iif($readini(DefRSN.ini,RSNs,$address($right($2,-1),3)),$ifmatch,$iif($readini(DefRSN.ini,RSNs,$right($2,-1)),$ifmatch,$right($2,-1))) } else { set $+(%,skill.rsn.) $replace($3-,$chr(32),-) } } elseif ($readini(DefRSN.ini,RSNs,$mask($fulladdress,3))) set $+(%,skill.rsn.) $ifmatch elseif ($readini(DefRSN.ini,RSNs,$nick)) set $+(%,skill.rsn.) $ifmatch else set $+(%,skill.rsn.) $nick set %skill.name $rsskill($2) set %skill.user $nick set %skill.useraddress $address( $+ %skill.user $+ ,2) if ($ini(Skilltimers.ini, $+ %skill.useraddress $+ , %skill.name )) { if ($remove($gettok($readini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ ),6,32),$chr(44)) != %skill.rsn. ) { /notice $nick $c1 $+ You do not have a timer set for $c2 $+ %skill.rsn. $c1 $+ with $c2 $+ %skill.name $+ . $c1 $+ You have $c2 $+ %skill.name $c1 $+ set for $c2 $+ $remove($gettok($readini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ ),6,32),$chr(44)) $+ . | unset %skill.* | halt } sockopen Exptimerend. [ $+ [ %sckid ] ] www.users.on.net 80 } else { /notice $nick $c1 $+ I am sorry but you do not have a timer set for that skill. | unset %skill.* | halt } } on *:SOCKOPEN:Exptimerend.*: { sockwrite -nt $sockname GET /~adtory/stats.php?user= $+ %skill.rsn. HTTP/1.1 sockwrite -nt $sockname Host: www.users.on.net sockwrite -nt $sockname $crlf } on *:SOCKREAD:Exptimerend.*: { if ($sockerr) { %way. [ $+ [ $right($sockname,5) ] ] Socket Error: $sockname $+ . Error code: $sockerr Please inform $me of this error message. halt } else { var %sockreader sockread %sockreader if (* $+ %skill.name $+ * iswm %sockreader-1) { tokenize 32 $remove(%sockreader,$1,$2) set %skill.endexp $nohtml(%sockreader) set %skill.startexp $remove($gettok($readini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ ),10,32),.) set %skill.endexp $3- set %skill.expgained $calc($remove( %skill.endexp - %skill.startexp,$chr(44))) set %skill.timestart $remove($gettok($readini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ ),15,32),:) set %skill.timeend $ctime set %skill.timetotal $calc( %skill.timeend - %skill.timestart ) set %skill.exppermin $calc($remove(( %skill.expgained / %skill.timetotal ) * 60 , $chr(44))) set %skill.expperhr $calc($remove(( %skill.expgained / %skill.timetotal ) * 3600 , $chr(44))) set %skill.timetolvl $duration($calc($remove((( $xp($calc($2 + 1)) - %skill.endexp ) / %skill.expgained ) * %skill.timetotal ,$chr(44))),HH:nn:ss)) set %skill.expleft $calc($remove($xp($calc($2 + 1)) - %skill.endexp , $chr(44))) if ($ini(Skilltimers.ini, $+ %skill.useraddress $+ , $+ %skill.name $+ )) %way. [ $+ [ $right($sockname,5) ] ] $c1 $+ %skill.user $+ : $c2 $+ The $c1 $+ %skill.name $c2 $+ exp for $c1 $+ %skill.rsn. $c2 $+ is : $c1 $+ $3- $+ . $c2 $+ Exp Gained: $bytes(%skill.expgained,b) Exp Till level: $bytes(%skill.expleft,b) Current Level: $2 %way. [ $+ [ $right($sockname,5) ] ] $c1 $+ Estimated exp per min: $c2 $+ $round(%skill.exppermin,1) $c1 $+ Estimated exp per hour: $c2 $+ $round(%skill.expperhr,1) $c1 $+ Estimated time to level: $c2 $+ %skill.timetolvl %way. [ $+ [ $right($sockname,5) ] ] $c2 $+ Total time passed: $c1 $+ $duration( %skill.timetotal , HH:nn:ss) /remini Skilltimers.ini %skill.useraddress %skill.name unset %skill.* unset %*. [ $+ [ $right($sockname,5) ] ] unset %sockreader* sockclose $sockname } if ($len($remove(%sockreader,$chr(9),$chr(32))) > 0) { var %x = 0 while (%x > -1) { if ($len(%sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]) <= 850) set %sockreader [ $+ [ $+(-,$calc(%x + 1)) ] ] %sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ] dec %x } } } } alias -l cleanup { unset $+(%,stats.*.,$1) sockclose $+(Stats.,$1) .remove $+(Stats.,$1) hfree $+(stats.,$1) } alias c1 { return $+($chr(3),12,$1-) } alias c2 { return $+($chr(3),04,$1-) } alias -l rsskill { if ($regex($1,/^(st|(skill)?total|overall)$/Si)) return Overall elseif ($regex($1,/^at(t|k|tack)$/Si)) return Attack elseif ($regex($1,/^def(en[cs]e)?$$/Si)) return Defence elseif ($regex($1,/^str(ength)?$/Si)) return Strength elseif ($regex($1,/^hp|hit(s|points?)?$/Si)) return Hitpoints elseif ($regex($1,/^range(r|d|ing)?$/Si)) return Ranged elseif ($regex($1,/^Pray(er)?$$/Si)) return Prayer elseif ($regex($1,/^mag(e|ic)$$/Si)) return Magic elseif ($regex($1,/^cook(ing)?$/Si)) return Cooking elseif ($regex($1,/^wc|wood(cut(ting)?)?$/Si)) return Woodcutting elseif ($regex($1,/^fletch(ing)?$/Si)) return Fletching elseif ($regex($1,/^fish(ing)?$/Si)) return Fishing.11 elseif ($regex($1,/^(fire|fm)(make?(ing)?|ing)?$/Si)) return Firemaking elseif ($regex($1,/^craft(ing)?$/Si)) return Crafting elseif ($regex($1,/^(smith|smelt)(ing)?$/Si)) return Smithing elseif ($regex($1,/^min(e|ing)?$/Si)) return Mining elseif ($regex($1,/^herb(law|lore)?$/Si)) return Herblore elseif ($regex($1,/^agil(ity)?$/Si)) return Agility elseif ($regex($1,/^(th(ei|ie)[fv](e|ing)?)$/Si)) return Thieving elseif ($regex($1,/^slay(er|ing)?$/Si)) return Slayer elseif ($regex($1,/^farm(er|ing)?$/Si)) return Farming elseif ($regex($1,/^(rc|runecraft)(er|ing)?$/Si)) return Runecraft elseif ($regex($1,/^hunt(ing|er)?$/Si)) return Hunter elseif ($regex($1,/^(construct)(ion|ing)?$/si)) return Construction } alias -1 defname { if ($regex($1,/^(def|set)?$/si)) return Defname } alias -l nohtml { var %x, %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x) %x = $replace(%x, ,$null) return %x } alias xp { 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 comma { return $bytes($1,b) }