rendered paste bodymenu channel {
Runescape Stats Kicker:/rsstatskicker
}
alias rsstatskicker {
dialog -ma rsstatskicker rsstatskicker
}
dialog rsstatskicker {
title "Runescape Stats Kicker"
size -1 -1 195 161
option dbu
tab "Channels/Requirements", 1, -3 -1 209 185
combo 2, 20 44 124 44, tab 1 size
text "Settings: Channels and Requirements", 3, 21 26 122 8, tab 1
button "Add", 7, 22 99 37 12, tab 1
button "Remove", 8, 64 99 37 12, tab 1
button "Clear", 9, 108 99 37 12, tab 1
button "Clear Confirm", 10, 108 111 37 12, tab 1
tab "Nicks/Addresses", 11
combo 12, 20 52 80 50, tab 11 size
text "Settings: Nicks/Address", 13, 21 26 79 8, tab 11
text "Nicks/Addresses below will not be kicked", 14, 21 34 79 8, tab 11
button "Add", 15, 109 52 37 12, tab 11
button "Remove", 16, 109 66 37 12, tab 11
button "Clear", 17, 109 80 37 12, tab 11
button "Clear Confirm", 18, 109 94 37 12, tab 11
tab "Cache", 19
text "Cache:", 21, 21 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, 21 34 119 29, tab 19
button "Clear Cache", 22, 21 67 37 12, tab 19
tab "Info/Settings", 4
text "Kick count:", 5, 37 28 28 8, tab 4
text "Users in #pestcontrol:", 23, 10 43 55 8, tab 4
text "Total voiced:", 24, 32 56 33 8, tab 4
edit "", 25, 71 27 50 10, disable tab 4
edit "", 26, 71 41 50 10, disable tab 4
edit "", 27, 71 54 50 10, disable tab 4
text "Highest amount of users:", 28, 5 77 62 8, tab 4
text "Lowest amount of users:", 29, 6 90 61 8, tab 4
edit "", 30, 71 75 50 10, disable tab 4
edit "", 31, 71 89 50 10, disable tab 4
button "Ok", 6, 110 139 37 12, ok cancel
}
alias rsstatskicker.refresh {
did -h rsstatskicker 10,18
did -r rsstatskicker 2,12,25-27,30,31
did -a rsstatskicker 25 %kicks
did -a rsstatskicker 26 $nick(#pestcontrol,0)
did -a rsstatskicker 27 %pcvoice
did -a rsstatskicker 30 %pchigh
did -a rsstatskicker 31 %pclow
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
}
on *:join:#pestcontrol: {
if ($read(RSStatschan.txt,w,$chan)) {
if ($me isop $chan) || ($me ishop $chan) {
if ($read(RSStatsnick.txt,w,$nick)) { halt }
if ($read(RSstatsnick.txt,w,$address($nick,2))) { halt }
if ($read(RSStatsCache.txt,w,$nick)) { mode $chan +v $nick | inc %cache | halt }
if ($len($nick) > 13) {
inc %kicks
ban -ku120 $chan $nick 5 Your nickname is too long 12¤4 %kicks $+ 1
cleanup %ID
halt
}
var %s = 1
var %ID = 1
while ($sock(rsstats. $+ %s)) || ($sock(stats. $+ %s)) {
inc %s
inc %ID
}
set %rsstats.skill. [ $+ [ %s ] ] autovoice
set %rsstats.rsn. [ $+ [ %s ] ] $nick
set %rsstats.chan. [ $+ [ %s ] ] $chan
set %rsstats.time. [ $+ [ %s ] ] $time
if (%rsstats.settingssource == rscript) { sockopen rsstats. [ $+ [ %s ] ] rscript.org 80 }
elseif (%rsstats.settingssource == backup) {
set $+(%,stats.rsn.,%ID) $nick
set $+(%,stats.style.,%ID) combat
sockopen $+(stats.,%ID) hiscore.runescape.com 80
}
if ($nick($chan,0) > %pchigh) { set %pchigh $nick($chan,0) }
if ($nick($chan,0) < %pclow) { set %pclow $nick($chan,0) }
}
}
}
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 >= 95) || ($eval($calc(%a + %s)) >= 160) {
mode %rsstats.chan. [ $+ [ %id ] ] +v %rsn
if (!$read(RSStatscache.txt,w,%rsn)) { write Rsstatscache.txt %rsn }
inc %pcvoice
}
elseif (%combat < 95) && ($eval($calc(%a + 5)) < 160) {
if (%rsn isreg %rsstats.chan. [ $+ [ %id ] ]) {
inc %kicks
ban -ku120 %rsstats.chan. [ $+ [ %id ] ] %rsstats.rsn. [ $+ [ %id ] ] 2 7The4 %rsstats.chan. [ $+ [ %id ] ] 7requirements:04 95 CMB or 160 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 >= 160) || ($eval($calc(%a + %s)) >= 95) {
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
}
}
}
}
}
}