; ############################################################################## ; # Load event - Check for dcx.dll # ; ############################################################################## on *:load: { if (!$findfile($mircdir,dcx.dll,1)) { echo 4 -a **** You do not appear to have dcx.dll which is required for this addon to work echo 4 -a **** You can download it from: http://www.mircscripts.org/download.php?id=2942&type=5 } else { echo 3 -a **** Successfully loaded RSStats script by Urza echo 3 -a **** Type /RSStats or right click and select 'Runescape Stats Lookup' to use } } ; ############################################################################## ; # Access menu/alias # ; ############################################################################## menu * { Runescape Stats Lookup .Stats lookup:RSStats .Settings:RSStats_Settings .Manage Columns:RSStats_Columns } alias RSStats { dialog $iif($dialog(RSStats),-v,-md) RSStats RSStats } alias RSStats_Settings { dialog $iif($dialog(Settings),-v,-md) Settings Settings } alias RSStats_Columns { dialog $iif($Dialog(ManageCols),-v,-md) ManageCols ManageCols } ; ############################################################################## ; # Main Dialog # ; ############################################################################## dialog -l RSStats { title "Runscape Stats Lookup" size -1 -1 460 420 menu "&File", 1 item "&Settings", 2, 1 item break, 3, 1 item "E&xit", 4, 1 menu "&View", 5 item "Manage Columns", 6, 5 } on *:dialog:RSStats:*:*: { if ($devent == init) { dcx Mark $dname RSStats_Events xdialog -b $dname +ty xdialog -c $dname 10 listview 5 5 450 345 report grid fullrow singlesel noscroll notrack showsel if (!$readini(RSStats.ini,n,Config,Order)) || (!$readini(RSStats.ini,n,Config,Fields)) { writeini -n RSStats.ini Config Fields 1,1,1,1,1,1 writeini -n RSStats.ini Config Order Skill,Rank,Level,Xp,Xp to lvl,% of total Xp } var %x = 2 while ($getitem(%x).nospace) { var %item = $v1 if (!$readini(RSStats.ini,n,%item,Align)) writeini -n RSStats.ini %item Align $iif(%item == Skill,1,2) if (!$readini(RSStats.ini,n,%item,Label)) writeini -n RSStats.ini %item Label $getitem(%x) inc %x } BuildListView xdialog -c $dname 11 edit 183 370 100 20 tabstop return xdialog -c $dname 12 button 183 395 100 20 default tabstop xdid -t $dname 12 Search xdid -b $dname 12 xdialog -c $dname 13 text 4 351 450 18 center xdialog -c $dname 14 check 10 395 120 20 xdid -t $dname 14 Copy colour codes? xdid $iif($readini(RSStats.ini,n,config,CopyColours) == 1,-c,-u) $dname 14 } elseif ($devent == menu) { if ($did == 2) dialog $iif($dialog(Settings),-v,-md) Settings Settings elseif ($did == 6) dialog $iif($dialog(ManageCols),-v,-md) ManageCols ManageCols } } alias RSStats_Events { var %dname = $1, %devent = $2, %did = $3, %key = $4 if (%devent == keyup) { if (%did == 11) && (%key == 13) Lookup $xdid(%dname,11).text } elseif (%devent == edit) { if (%did == 11) { if ($len($xdid(%dname,11).text) isnum 1-12) xdid -e %dname 12 else xdid -b %dname 12 } } elseif (%devent == sclick) { if (%did == 12) Lookup $xdid(%dname,11).text elseif (%did == 13) dialog -x %dname elseif (%did == 14) writeini -n RSStats.ini Config CopyColours $xdid(%dname,14).state } var %copyevent = $readini(RSStats.ini,n,config,CopyEvent) var %copyevent = $iif(%Copyevent == 1,Sclick,$iif(%copyevent == 2,dclick,rclick)) if (%devent == %copyevent) { var %copyformat = $readini(RSStats.ini,n,config,CopyFormat) var %skill = $xdid(%dname,10,0).seltext tokenize 32 $hget(RSStats,%skill) var %rank = $1, %lvl = $2, %xp = $3, %xp2lvl = $4, %percent = $5, %rsn = $xdid(%dname,11).text var %copy = $replace(%copyformat,[NICK],$c2(%rsn).c1,[SKILL],$c2(%skill).c1,[RANK],$c2(%rank).c1) var %copy = $replace(%copy,[XP],$c2(%xp).c1,[LVL],$c2(%lvl).c1) var %copy = $replace(%copy,[XP2LVL],$c2(%xp2lvl).c1,[PERCENT],$c2(%percent).c1) if ($readini(RSStats.ini,n,config,CopyColours) == 1) clipboard $c1(%copy) else clipboard $strip(%copy) } } alias -l Lookup { xdid -r RSStats 10 if ($hget(RSStats)) hfree RSStats set %RSStats.rsn $1- xdid -t RSStats 13 Looking up hiscore data for %RSStats.rsn $+ . Please wait... sockopen RSStats hiscore.runescape.com 80 } ; ############################################################################## ; # Manage Columns dialog # ; ############################################################################## dialog -l ManageCols { title "Column Management" size -1 -1 420 150 } on *:dialog:ManageCols:*:*: { if ($devent == init) { dcx Mark $dname ManageCols_Events xdialog -b $dname +ty xdialog -c $dname 1 box 5 5 90 140 xdid -t $dname 1 Fields xdid -c $dname 1 2 check 5 15 75 20 xdid -t $dname 2 Skill xdid -c $dname 1 3 check 5 35 75 20 xdid -t $dname 3 Rank xdid -c $dname 1 4 check 5 55 75 20 xdid -t $dname 4 Level xdid -c $dname 1 5 check 5 75 75 20 xdid -t $dname 5 Xp xdid -c $dname 1 6 check 5 95 75 20 xdid -t $dname 6 Xp to lvl xdid -c $dname 1 7 check 5 115 75 20 xdid -t $dname 7 % of total Xp xdialog -c $dname 8 box 100 5 155 140 xdid -t $dname 8 Order xdid -c $dname 8 9 list 5 20 90 120 if ($exists(up.bmp)) { xdid -c $dname 8 10 button 100 27 50 40 bitmap up.bmp xdid -k $dname 10 +dhns $rgb(255,255,255) Up.bmp } else { xdid -c $dname 8 10 button 100 27 50 40 xdid -t $dname 10 Up } if ($exists(down.bmp)) { xdid -c $dname 8 11 button 100 77 50 40 bitmap down.bmp xdid -k $dname 11 +dhns $rgb(255,255,255) Down.bmp } else { xdid -c $dname 8 11 button 100 77 50 40 xdid -t $dname 11 Down } xdialog -c $dname 12 box 260 5 155 70 xdid -t $dname 12 Options xdid -c $dname 12 13 text 5 18 50 20 right xdid -t $dname 13 Alignment: xdid -c $dname 12 14 comboex 60 15 90 100 dropdown xdid -c $dname 12 15 text 5 48 50 20 right xdid -t $dname 15 Label: xdid -c $dname 12 16 edit 60 45 90 20 xdialog -c $dname 17 button 260 115 75 30 xdid -t $dname 17 Apply xdialog -c $dname 18 button 340 115 75 30 xdid -t $dname 18 Ok xdid -b $dname 13,14,15,16 xdid -a $dname 14 0 0 0 0 0 Left xdid -a $dname 14 0 0 0 0 0 Right xdid -a $dname 14 0 0 0 0 0 Center if (!$readini(RSStats.ini,n,Config,Fields)) || (!$readini(RSStats.ini,n,Config,Order)) { writeini -n RSStats.ini Config Fields 1,1,1,1,1,1 writeini -n RSStats.ini Config Order Skill,Rank,Level,Xp,Xp to lvl,% of total Xp } tokenize 44 $readini(RSStats.ini,n,Config,Fields) var %x = 1 while ($($+($,%x),2) != $null) { xdid $iif($v1 == 1,-c,-u) $dname $calc(%x + 1) inc %x } tokenize 44 $readini(RSStats.ini,n,Config,Order) var %x = 1 while ($($+($,%x),2) != $null) { xdid -a $dname 9 0 $v1 inc %x } } } alias ManageCols_Events { var %dname = $1, %devent = $2, %did = $3 if (%devent == sclick) { if (%did isnum 2-7) { if ($getitem(%did) == $xdid(%dname,9,$xdid(%dname,9).sel).text) var %disable = 1 if ($xdid(%dname,%did).state == 0) { var %x = 1, %total = $xdid(%dname,9).num while ($xdid(%dname,9,%x).text) { if ($v1 == $getitem(%did)) xdid -d %dname 9 %x inc %x } } else xdid -a %dname 9 0 $getitem(%did) if (%disable) { unset %disable xdid -b %dname 13,14,15,16 xdid -u %dname 14 xdid -r %dname 16 } } elseif (%did == 9) { var %item = $replace($xdid(%dname,9,$xdid(%dname,9).sel).text,$chr(32),-) xdid -e %dname 13,14,15,16 if (!$readini(RSStats.ini,n,%item,Align)) writeini -n RSStats.ini %item Align $iif(%item == Skill,1,2) xdid -c %dname 14 $readini(RSStats.ini,n,%item,Align) if (!$readini(RSStats.ini,n,%item,label)) writeini -n RSStats.ini %item Label $replace(%item,-,$chr(32)) xdid -ra %dname 16 $readini(RSStats.ini,n,%item,label) } elseif (%did isnum 10-11) { var %sign = $iif(%did == 10,-,+) var %pos = $xdid(%dname,9).sel, %newpos = $calc(%pos %sign 1), %text = $xdid(%dname,9,%pos).text if (%newpos < 1) || (%newpos > $xdid(%dname,9).num) halt xdid -d %dname 9 %pos xdid -a %dname 9 %newpos %text xdid -c %dname 9 %newpos } elseif (%did == 14) { var %item = $replace($xdid(%dname,9,$xdid(%dname,9).sel).text,$chr(32),-) writeini -n RSStats.ini %item Align $xdid(%dname,14).sel } elseif (%did isnum 17-18) { SaveColOptions BuildListView if (%did == 18) dialog -x %dname } } elseif (%devent == edit) { if (%did == 16) { var %item = $replace($xdid(%dname,9,$xdid(%dname,9).sel).text,$chr(32),-) writeini -n RSStats.ini %item Label $xdid(%dname,16).text } } } ; ############################################################################## ; # Settings dialog # ; ############################################################################## dialog -l Settings { title "Settings" size -1 -1 266 259 } on *:dialog:Settings:*:*: { if ($devent == init) { dcx Mark $dname Settings_Events xdialog -b $dname +ty xdialog -c $dname 1 tab 0 0 266 220 tabstop ; Local options tab xdid -a $dname 1 0 0 Local $chr(9) 2 panel 4 22 258 178 0 0 300 200 xdid -c $dname 2 3 box 4 4 250 165 xdid -t $dname 3 Copy Format xdid -c $dname 3 4 text 4 15 242 15 xdid -t $dname 4 Enter the format to be used when copying stats xdid -c $dname 3 5 edit 4 30 242 20 autohs autovs tabstop xdid -c $dname 3 6 text 4 55 242 30 xdid -t $dname 6 Note: Information not shown in the table can still be copied xdid -c $dname 3 7 text 4 85 242 25 xdid -t $dname 7 Use the following codes to refer to relevent data items xdid -c $dname 3 8 listview 5 115 242 45 report tabstop noscroll nolabelwrap grid noheader xdid -t $dname 8 + 0 81 $tab + 0 80 $tab + 0 81 xdid -a $dname 8 0 0 + 0 0 0 0 -1 -1 [SKILL] $tab + 0 [NICK] $tab + 0 [RANK] xdid -a $dname 8 0 0 + 0 0 0 0 -1 -1 [XP] $tab + 0 [LVL] $tab + 0 [XP2LVL] xdid -a $dname 8 0 0 + 0 0 0 0 -1 -1 [PERCENT] xdid -c $dname 2 9 text 5 175 50 20 xdid -t $dname 9 Copy on: xdid -c $dname 2 10 comboex 55 172 150 300 tabstop dropdown xdid -a $dname 10 0 0 0 0 0 Single Click xdid -a $dname 10 0 0 0 0 0 Double Click xdid -a $dname 10 0 0 0 0 0 Right Click ; Remote options tab xdid -a $dname 1 0 0 Remote $chr(9) 11 panel 0 0 300 200 0 0 300 200 xdid -c $dname 11 12 box 4 4 250 60 xdid -t $dname 12 All Skill lookup xdid -c $dname 12 13 check 4 15 50 20 tabstop xdid -t $dname 13 Enable xdid -c $dname 12 14 text 4 35 90 20 xdid -t $dname 14 Command Trigger: xdid -c $dname 12 15 edit 100 32 100 20 autohs autovs tabstop xdid -c $dname 11 16 box 4 70 250 60 xdid -t $dname 16 Single skill lookups xdid -c $dname 16 17 check 4 15 50 20 tabstop xdid -t $dname 17 Enable xdid -c $dname 16 18 text 4 35 90 20 xdid -t $dname 18 Command Trigger: xdid -c $dname 16 19 edit 100 32 100 20 autohs autovs tabstop xdid -c $dname 11 33 text 4 135 242 30 center xdid -t $dname 33 Regex can be used in triggers to block multiple options xdid -c $dname 11 20 text 4 170 50 20 xdid -t $dname 20 Seperator: xdid -c $dname 11 21 edit 60 167 30 20 tabstop xdid -c $dname 11 22 text 95 170 40 20 xdid -t $dname 22 Display: xdid -c $dname 11 23 comboex 140 167 110 100 tabstop dropdown xdid -a $dname 23 0 0 0 0 0 Public Message xdid -a $dname 23 0 0 0 0 0 Public Notice xdid -a $dname 23 0 0 0 0 0 Private Message xdid -a $dname 23 0 0 0 0 0 Private Notice ; Access tab xdid -a $dname 1 0 0 Access $chr(9) 34 panel 0 0 300 200 0 0 300 200 xdid -c $dname 34 35 text 4 4 242 30 xdid -t $dname 35 Channel names can be prefixed with a network to make them network specific. EG: Swiftirc.#mIRC xdid -c $dname 34 36 box 4 35 100 120 xdid -t $dname 36 Allowed xdid -c $dname 36 37 edit 4 15 92 20 xdid -c $dname 36 44 list 4 35 92 90 vsbar xdid -c $dname 34 38 box 152 35 100 120 xdid -t $dname 38 Blocked xdid -c $dname 38 39 edit 4 15 92 20 xdid -c $dname 38 45 list 4 35 92 90 vsbar xdid -c $dname 34 40 radio 4 158 242 20 xdid -t $dname 40 Allow only in specified chans, block by default xdid -c $dname 34 41 radio 4 175 242 20 xdid -t $dname 41 Block only in specified chans, allow by default xdid -c $dname 34 42 button 108 50 40 20 xdid -t $dname 42 Add xdid -c $dname 34 43 button 108 80 40 20 xdid -t $dname 43 Delete ; Colour options tab xdid -a $dname 1 0 0 Colours $chr(9) 25 panel 0 0 300 200 0 0 300 200 xdid -c $dname 25 26 text 4 15 90 20 xdid -t $dname 26 Text Colour: xdid -c $dname 25 27 colorcombo 100 12 100 20 xdid -m $dname 27 xdid -c $dname 25 28 text 4 50 90 20 xdid -t $dname 28 Data Colour: xdid -c $dname 25 29 colorcombo 100 47 100 20 xdid -m $dname 29 xdid -c $dname 25 30 text 4 85 90 20 xdid -t $dname 30 Seperator Colour: xdid -c $dname 25 31 colorcombo 100 82 100 20 xdid -m $dname 31 xdid -c $dname 25 32 text 4 120 242 40 xdid -t $dname 32 Select the colours to be used when sending and copying stats xdialog -c $dname 24 button 185 225 75 30 tabstop xdid -t $dname 24 Close ; Populate Settings SetDefaultSettings xdid -a $dname 5 $readini(RSStats.ini,n,config,CopyFormat) xdid -c $dname 10 $readini(RSStats.ini,n,config,CopyEvent) xdid $iif($readini(RSStats.ini,n,AllSkills,state) == 1,-c,-u) $dname 13 xdid $iif($readini(RSStats.ini,n,AllSkills,state) == 1,-e,-b) $dname 14,15 xdid -a $dname 15 $readini(RSStats.ini,n,AllSkills,trigger) xdid $iif($readini(RSStats.ini,n,SingleSkills,state) == 1,-c,-u) $dname 17 xdid $iif($readini(RSStats.ini,n,SingleSkills,state) == 1,-e,-b) $dname 18,19 xdid -a $dname 19 $readini(RSStats.ini,n,SingleSkills,trigger) xdid -a $dname 21 $readini(RSStats.ini,n,Config,Seperator) xdid -c $dname 23 $readini(RSStats.ini,n,Config,Display) xdid -c $dname 27 $readini(RSStats.ini,n,Colours,Text) xdid -c $dname 29 $readini(RSStats.ini,n,Colours,Data) xdid -c $dname 31 $readini(RSStats.ini,n,Colours,Seperator) if ($readini(RSStats.ini,n,config,AccessType) == allow) { xdid -c $dname 41 xdid -b $dname 37,44 } else { xdid -c $dname 40 xdid -b $dname 39,45 } loadlist block loadlist allow if ($readini(RSStats.ini,n,SingleSkills,state) == 0) && ($readini(RSStats.ini,n,AllSkills,state) == 0) { xdid -b $dname 20,21,22,23 } else xdid -e $dname 20,21,22,23 } } alias Settings_Events { var %dname = $1, %devent = $2, %did = $3, %key = $4 if (%devent == keydown) { if (%did == 15) || (%did == 19) { if (%key == 32) { var %x = $input(Spaces are not allowed in the command triggers,oh,Error) xdid -ra %dname %did $remove($xdid(%dname,%did).text,$chr(32)) } } } elseif (%devent == sclick) { if (%did == 13) { if ($xdid(%dname,13).state == 1) { xdid -e %dname 14,15,20,21,22,23 } else { xdid -b %dname 14,15 if ($xdid(%dname,17).state == 0) xdid -b %dname 20,21,22,23 } } elseif (%did == 17) { if ($xdid(%dname,17).state == 1) { xdid -e %dname 18,19,20,21,22,23 } else { xdid -b %dname 18,19 if ($xdid(%dname,13).state == 0) xdid -b %dname 20,21,22,23 } } elseif (%did == 24) { SaveSettings dialog -x %dname } elseif (%did == 42) { if ($xdid(%dname,37).text) && (!$isitem($v1,44)) { var %item = $xdid(%dname,37).text if (#* iswm %item) || (?*.#* iswm %item) var %chan = %item else var %chan = $+($chr(35),%item) xdid -a %dname 44 0 %chan } elseif ($xdid(%dname,39).text) && (!$isitem($v1,45)) { var %item = $xdid(%dname,39).text if (#* iswm %item) || (*.#* iswm %item) var %chan = %item else var %chan = $+($chr(35),%item) xdid -a %dname 45 0 %chan } } elseif (%did == 43) { if ($xdid(%dname,44).sel) xdid -d %dname 44 $v1 elseif ($xdid(%dname,45).sel) xdid -d %dname 45 $v1 } elseif (%did == 44) { xdid -ra %dname 37 $xdid(%dname,44,$xdid(%dname,44).sel).text } elseif (%did == 45) { xdid -ra %dname 39 $xdid(%dname,45,$xdid(%dname,45).sel).text } elseif (%did == 40) { xdid -r %dname 39 xdid -e %dname 37,44 xdid -b %dname 39,45 } elseif (%did == 41) { xdid -r %dname 37 xdid -b %dname 37,44 xdid -e %dname 39,45 } } } ; ############################################################################## ; # Text Event for remote lookups # ; ############################################################################## on *:text:*:#: { tokenize 32 $strip($1-) var %TriggerRegex = $+(/,$readini(RSStats.ini,n,AllSkills,trigger),/) if ($regex($1,%TriggerRegex)) && ($readini(RSStats.ini,n,AllSkills,state) == 1) { var %style = Astats } elseif ($isskilltrigger($1)) && ($readini(RSStats.ini,n,SingleSkills,state) == 1) { var %style = Istat, %skill = $isskilltrigger($1) } if (!%style) halt if ($readini(RSStats.ini,n,config,accesstype) == block) { if ($checklist(allow,$chan)) || ($checklist(allow,$+($network,.,$chan))) var %status = allow else var %status = block } else { if ($checklist(block,$chan)) || ($checklist(block,$+($network,.,$chan))) var %status = block else var %status = allow } if (%status == block) halt var %display = $readini(RSStats.ini,n,config,display) if (%display == 1) %display = msg $chan elseif (%display == 2) %display = notice $chan elseif (%display == 3) %display = .msg $nick elseif (%display == 4) %display = .notice $nick if ($len($2-) > 12) { %display $c1(The nick) $c2($2-) $c1(is too long) | halt } elseif ($2) var %rsn = $2- else var %rsn = $nick var %x = 1 while ($sock($+(RSStats,%x))) inc %x set $+(%,RSStats.style.,%x) %style set $+(%,RSStats.rsn.,%x) %rsn set $+(%,RSStats.skill.,%x) %skill set $+(%,RSStats.chan.,%x) $chan set $+(%,RSStats.nick.,%x) $nick sockopen $+(RSStats,%x) hiscore.runescape.com 80 } ; ############################################################################## ; # Sockets # ; ############################################################################## on *:sockopen:RSStats*: { if ($sockname != RSStats) var %RSStats.rsn = %RSStats.rsn. [ $+ [ $remove($sockname,RSStats) ] ] sockwrite -n $sockname GET /lang/en/aff/runescape/hiscorepersonal.ws?user1= $+ %RSStats.rsn HTTP/1.1 sockwrite -n $sockname Host: hiscore.runescape.com $+ $crlf $+ $crlf } on *:sockread:RSStats*: { if ($sockname != RSStats) { var %display = $readini(RSStats.ini,n,config,display), %id = $remove($sockname,RSStats) if (%display == 1) %display = msg %RSStats.chan. [ $+ [ %id ] ] elseif (%display == 2) %display = notice %RSStats.chan. [ $+ [ %id ] ] elseif (%display == 3) %display = .msg %RSStats.nick. [ $+ [ %id ] ] elseif (%display == 4) %display = .notice %RSStats.nick. [ $+ [ %id ] ] var %RSStats.rsn = %RSStats.rsn. [ $+ [ %id ] ] } sockread &Incoming bwrite $sockname -1 -1 &Incoming if ($sockerr) { if ($sockname == RSStats) xdid -t RSStats 13 An error occured during stats lookup else %display $c1(An error occured during stats lookup) cleanup $sockname } elseif ($bfind(&Incoming, 1, ).text) process $sockname elseif ($bfind(&Incoming, 1, does not feature in the hiscores.).text) { if ($sockname == RSStats) xdid -t RSStats 13 The nick %RSStats.rsn does not appear in the hiscores else %display $c1(The nick) $c2(%RSStats.rsn) $c1(does not appear in the hiscores) cleanup $sockname } } ; ############################################################################## ; # Process alias # ; ############################################################################## alias -l process { var %file = $1 if (%file != RSStats) var %id = $remove(%file,RSStats) bread %file 1 $file(%file).size &stats var %currentstat, %x = 1 while (%x) { var %x = $bfind(&stats,$calc(%x + 1),