rendered paste bodymenu channel {
Runescape Stats Kicker:/rsstatskicker
}
alias rsstats {
dialog -ma rsstats rsstats
}
alias rsstatskicker {
dialog -ma rsstatskicker rsstatskicker
}
dialog rsstatskicker {
title "Runescape Stats Kicker"
size -1 -1 177 161
option dbu
tab "Channels", 1, -2 -1 179 185
combo 2, 21 52 124 44, tab 1 size
text "Settings: Channels", 3, 22 26 122 8, tab 1
button "Add", 7, 23 99 37 12, tab 1
button "Remove", 8, 65 99 37 12, tab 1
button "Clear", 9, 109 99 37 12, tab 1
button "Clear Confirm", 10, 109 111 37 12, tab 1
tab "Nicks", 11
combo 12, 21 52 80 50, tab 11 size
text "Settings: Nicks", 13, 22 26 79 8, tab 11
text "Nicks below will not be kicked", 14, 22 34 79 8, tab 11
button "Add", 15, 110 52 37 12, tab 11
button "Remove", 16, 110 66 37 12, tab 11
button "Clear", 17, 110 80 37 12, tab 11
button "Clear Confirm", 18, 110 94 37 12, tab 11
tab "Cache", 19
text "Cache:", 21, 22 26 25 8, tab 19
text "A feature that saves if the nick meets the requirements for that channel. This will eliminate the need to retrieve the stats for the user every time they join.", 20, 22 34 119 29, tab 19
button "Clear Cache", 22, 24 80 37 12, tab 19
button "Ok", 6, 110 139 37 12, ok cancel
}
alias rsstatskicker.refresh {
did -h rsstatskicker 10,18
did -r rsstatskicker 2,12
var %x = 1
while ($read(RSstatschan.txt,%x)) {
did -a rsstatskicker 2 $read(RSstatschan.txt,%x)
inc %x
continue
}
var %x = 1
while ($read(RSstatsnick.txt,%x)) {
did -a rsstatskicker 12 $read(RSstatsnick.txt,%x)
inc %x
continue
}
}
on *:dialog:rsstatskicker:init:*: {
rsstatskicker.refresh
}
on *:dialog:rsstatskicker:sclick:*: {
if ($did == 7) {
if (!$read(RSStatschan.txt,w,$did(2))) && ($chr(35) isin $did(2)) {
write RSStatschan.txt $did(2)
rsstatskicker.refresh
}
}
if ($did == 8) {
if ($read(RSStatschan.txt,w,$did(2))) {
write -ds $+ $gettok($did(2),1,32) RSStatschan.txt
rsstatskicker.refresh
}
}
if ($did == 9) { did -v rsstatskicker 10 }
if ($did == 10) {
.remove rsstatschan.txt
rsstatskicker.refresh
}
if ($did == 15) {
if (!$read(RSStatsnick.txt,w,$gettok($mask($did(12),2),1,32))) {
write RSStatsnick.txt $mask($did(12),2)
rsstatskicker.refresh
}
}
if ($did == 16) {
if ($read(RSStatsnick.txt,w,$mask($did(12),2))) {
write -ds $+ $mask($did(12),2) RSStatsnick.txt
rsstatskicker.refresh
}
}
if ($did == 17) { did -v rsstatskicker 18 }
if ($did == 18) {
.remove rsstatsnick.txt
rsstatskicker.refresh
}
if ($did == 22) { .remove rsstatscache.txt }
}
alias rsstats.cleanup {
if ($1 != all) {
unset %rsstats.*. [ $+ [ $1 ] ]
sockclose rsstats. [ $+ [ $1 ] ]
}
elseif ($1 == all) {
unset %rsstats.*.*
var %c = 1
while ($sock(rsstats. $+ %c)) {
sockclose rsstats. [ $+ [ %c ] ]
}
}
}
on *:disconnect: {
rsstats.cleanup all
}
alias rsstats.voice {
var %chan = $iif($left($1,1) iswm $chr(35),$1,$chan)
if ($me isop %chan) || ($me ishop %chan) {
var %x = 1
var %y = $nick(%chan,0,r)
while (%x <= %y) {
if ($read(RSstatsCache.txt,w,$nick(%chan,%x,r))) { mode %chan +v $nick(%chan,%x,r) | inc %cache | inc %x | continue }
if ($read(RSStatsnick.txt,w,$nick(%chan,%x,r))) { inc %x | continue }
if ($read(RSstatsnick.txt,w,$address(%nick($chan,%x,r),2))) { inc %x | continue }
var %s = 1
while ($sock(rsstats. $+ %s)) || ($sock(stats. $+ %s)) {
inc %s
}
if ($len($nick(%chan,%x,r)) > 13) {
inc %kicks
ban -ku120 %chan $nick(%chan,%x,r) 5 Your nickname is too long 12¤4 %kicks $+ 1
inc %x
continue
}
set %rsstats.skill. [ $+ [ %s ] ] autovoice
set %rsstats.rsn. [ $+ [ %s ] ] $nick(%chan,%x,r)
set %rsstats.chan. [ $+ [ %s ] ] %chan
set %rsstats.time. [ $+ [ %s ] ] $time
if (%rsstats.settingssource == rscript) { sockopen rsstats. [ $+ [ %s ] ] rscript.org 80 }
elseif (%rsstats.settingssource == backup) {
var %ID = %s
set $+(%,stats.rsn.,%ID) $nick(%chan,%x,r)
set $+(%,stats.style.,%ID) combat
sockopen $+(stats.,%ID) hiscore.runescape.com 80
}
inc %x
}
}
}
on *:sockopen:rsstats.*: {
inc %rsstats.usageremote
sockwrite -n $sockname GET /lookup.php?type=stats&user= $+ $replace(%rsstats.rsn. [ $+ [ $right($sockname,-8) ] ],$chr(32),$chr(95)) HTTP/1.1
sockwrite -n $sockname Host: rscript.org $+ $crlf $+ $crlf
}
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.*: {
if ($sockerr) { set %rsstats.settingssource rscript }
sockread &Incoming
bwrite $sockname -1 -1 &Incoming
if ($bfind(&Incoming, 1, </html>).text) makehash $sockname
elseif ($bfind(&Incoming, 1,does not feature in the hiscores).text) {
if (%rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] isreg %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ]) {
inc %kicks
ban -ku30 %rsstats.chan. [ $+ [ $gettok($sockname,2,46) ] ] %rsstats.rsn. [ $+ [ $gettok($sockname,2,46) ] ] 5 Please change your nick to your Runescape username. Use _ as spaces 12¤4 %kicks $+ 1
sockclose $sockname
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),<a href="overall.ws?table=)
var %currentstat = $striptags($bvar(&stats,%x,200).text)
tokenize 10 %currentstat
hadd -m %file $1 $2 $3 $4 $xp2next($3,$4)
}
process %file
}
alias process {
var %table = $1, %id = $gettok($1,2,46), %x = 0, $&
%display = $($+(%,stats.display.,%ID),2), $&
%rsn = $($+(%,stats.rsn.,%ID),2), $&
%skill = $($+(%,stats.skill.,%ID),2), $&
%style = $($+(%,stats.style.,%ID),2)
if (%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 > %MeleeCombat) var %cmbstyle = Magic, %Combat = %MagicCombat
elseif (%RangedCombat > %MeleeCombat) var %cmbstyle = Ranged, %Combat = %RangedCombat
else var %cmbstyle = melee, %combat = %MeleeCombat
var %combat = $round(%combat,2), %next = $ceil(%combat)
if (%combat >= 89) || ($eval($calc(%a + %s)) >= 149) {
mode %rsstats.chan. [ $+ [ %id ] ] +v %rsn
if (!$read(RSStatscache.txt,w,%rsn)) { write Rsstatscache.txt %rsn }
inc %pcvoice
}
elseif (%combat < 89) && ($eval($calc(%a + 5)) < 149) {
if (%rsn isreg %rsstats.chan. [ $+ [ %id ] ]) {
inc %kicks
ban -ku120 %rsstats.chan. [ $+ [ %id ] ] %rsstats.rsn. [ $+ [ %id ] ] 2 7The4 %rsstats.chan. [ $+ [ %id ] ] 7requirements:04 90 CMB or 150 Combined att+str 12¤4 %kicks $+ 1
}
}
else { echo -a Error }
}
sockclose $sockname
cleanup %id
}
alias -l cleanup {
rsstats.cleanup $1
unset $+(%,stats.*.,$1)
sockclose $+(Stats.,$1)
.remove $+(Stats.,$1)
if ($hget($+(Stats.,$1))) {
.hfree $+(Stats.,$1)
}
}
alias -l xp {
var %x = 1, %level = $calc($1 - 1), %xp = 0
while (%x <= %level) {
var %TempXp = $calc((%x + 300 * 2^(%x / 7)) /4)
inc %xp %TempXp
inc %x
}
return $int(%xp)
}
alias -l xp2Next {
var %xp = $remove($2,$chr(44)), %nextxp = $xp($calc($1 + 1))
return $calc(%nextxp - %xp)
}
alias -l striptags { var %x,%y = $regsub($1-,/(<[^>]+>)/g,$null,%x) | return %x }
on *:sockread:rsstats.*: {
var %s = $right($sockname,-8)
if ($sockerr) {
%rsstats.display. [ $+ [ %s ] ] Socket error: Please try again later.
set %rsstats.settingssource backup
rsstats.cleanup %s
halt
}
else {
if (%rsstats.skill. [ $+ [ %s ] ] == autovoice) {
var %a.mult = .32707, %s.mult = .324, %d.mult = .249, %h.mult = .25, %p.mult = .124, %r.mult = .487, %m.mult = .487
while (1) {
var %rsstats.read. [ $+ [ %s ] ]
sockread %rsstats.read. [ $+ [ %s ] ]
tokenize 32 %rsstats.read. [ $+ [ %s ] ]
if (not found isin %rsstats.read. [ $+ [ %s ] ]) {
inc %kicks
ban -ku30 %rsstats.chan. [ $+ [ %s ] ] %rsstats.rsn. [ $+ [ %s ] ] 5 Please use your Runescape Username. Use _ as spaces 12¤4 %kicks $+ 1
rsstats.cleanup %s
break
halt
}
else {
if (Attack isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %a = 1 }
else { var %a = $3 }
}
if (Strength isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %st = 1 }
else { var %st = $3 }
}
if (Defence isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %d = 1 }
else { var %d = $3 }
}
if (Hitpoints isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %h = 1 }
else { var %h = $3 }
}
if (prayer isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %p = 1 }
else { var %p = $3 }
}
if (Ranged isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %r = 1 }
else { var %r = $3 }
}
if (Magic isin %rsstats.read. [ $+ [ %s ] ]) {
if ($3 == Ranked) { var %m = 1 }
else { var %m = $3 }
var %def = $calc(%d * 100)
var %hp = $calc(%h * 100)
if ($iif($regex($right(%p,1),[02468]),Even,Odd) == Even) { var %pray $calc(%p * 50) }
else { var %pray $calc((%p - 1) * 50) }
var %base = $calc((%def + %hp + %pray) / 400)
var %att = $calc(%a * 130)
var %str = $calc(%st * 130)
if ($iif($regex($right(%r,1),[02468]),Even,Odd) == Even) { var %range = $calc(%r * 195) }
else { var %range = $calc((%r * 195) - 65) }
if ($iif($regex($right(%m,1),[02468]),Even,Odd) == Even) { var %mage = $calc(%m * 195) }
else { var %mage = $calc((%m * 195) - 65) }
var %melee = $calc((%att + %str) / 400)
var %ranger = $calc(%range / 400)
var %mage = $calc(%mage / 400)
if (%melee > %ranger) && (%melee > %mage) {
var %style = Melee
var %combat = $calc(%melee + %base)
}
if (%ranger > %melee) && (%ranger > %mage) {
var %style = Ranger
var %combat = $calc(%ranger + %base)
}
if (%mage > %melee) && (%mage > %ranger) {
var %style = Mage
var %combat = $calc(%mage + %base)
}
else {
var %style = Melee
var %combat = $calc(%melee + %base)
}
var %next = $ceil(%combat)
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))
var %combat = $round(%combat,2), %next = $ceil(%combat)
if (%combat >= 149) || ($eval($calc(%a + %s)) >= 89) {
mode %rsstats.chan. [ $+ [ %s ] ] +v %rsstats.rsn. [ $+ [ %s ] ]
write Rsstatscache.txt %rsn
inc %pcvoice
}
else {
if (%rsstats.rsn. [ $+ [ %s ] ] isreg %rsstats.chan. [ $+ [ %S ] ]) {
inc %kicks
ban -ku120 %rsstats.chan. [ $+ [ %s ] ] %rsstats.rsn. [ $+ [ %s ] ] 2 7The4 %rsstats.chan. [ $+ [ %s ] ] 7requirements:04 90 CMB or 150 Combined att+str 12¤4 %kicks $+ 1
}
}
rsstats.cleanup %s
break
}
}
}
}
}
}