All pastes #231673 Raw Edit

Something

public text v1 · immutable
#231673 ·published 2006-10-31 23:16 UTC
rendered paste body
; ##############################################################################
; # 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, </html>).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),<a href="overall.ws?table=) 
    var %currentstat = $striptags($bvar(&stats,%x,200).text) 
    tokenize 32 %currentstat 
    if ($1 == Overall) set %RSStats.overall.xp $4

    if ($2) {
      if (%file == RSStats) {
        AddCol $1-
        hadd -m %file $1 $2 $3 $4 $xp2next($3,$4).format $getPercent($4)
      }
      else {
        var %id = $remove(%file,RSStats), %sep = $readini(RSStats.ini,n,config,seperator) 
        var %display = $readini(RSStats.ini,n,config,display)
        var %chan = $($+(%,RSStats.chan.,%id),2), %nick = $($+(%,RSStats.chan.,%id),2)
        var %rsn = $($+(%,RSStats.rsn.,%id),2)
        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 ($($+(%,RSStats.style.,%id),2) == astats) {
          var %statsline = $iif(%statsline,%statsline $+(,$c3(%sep)),$+($c1([,%rsn,]))) $c1($+($1,:)) $c2($3)
          if ($len(%statsline) > 420) { %display %statsline | unset %statsline }
        }
        elseif ($1 == $($+(%,RSStats.skill.,%id),2)) {
          var %statsline = $c1($+([,%rsn,]) Skill:) $c2($1) $c3(%sep) $c1(Rank:) $c2($2)
          var %statsline = %statsline $c3(%sep) $c1(Lvl:) $c2($3) $c3(%sep) $c1(Xp:) $c2($4) 
          var %statsline = %statsline $c3(%sep) $c1(Xp to lvl:) $c2($xp2next($3,$4).format) $c3(%sep)
          var %statsline = %statsline $c2($getPercent($4)) $c1(of total xp.)
        }
      }
    } 
  }
  if (%file == RSStats) xdid -t RSStats 13
  else %display %statsline
  cleanup %file

} 
alias -l AddCol {
  var %skill = $1, %rank = $2, %level = $3, %xp = $4, %xp-to-lvl = $xp2next(%level,%xp).format, %%-of-total-xp = $getPercent(%xp)
  var %order = $readini(RSStats.ini,n,Config,Order)
  var %x = 1
  while ($gettok(%order,%x,44)) {
    var %item = $replace($v1,$chr(32),-)
    var %StatsLine = %StatsLine $tab + 0 $($+(%,%item),2)
    inc %x
  }
  xdid -a RSStats 10 0 0 + 0 0 0 0 -1 -1 %skill %StatsLine
}
; ##############################################################################
; # Other aliases                                                              #
; ##############################################################################
alias -l c1 { 
  var %col = $calc($readini(RSStats.ini,n,Colours,Text) - 1)
  if ($len(%col) == 1) var %col = $+(0,%col)
  return $+(,%col,$1-)
}
alias -l c2 { 
  var %col = $calc($readini(RSStats.ini,n,Colours,Data) -1)
  if ($len(%col) == 1) var %col = $+(0,%col)
  return $+(,%col,$1-,$iif($prop == c1,$c1))
}
alias -l c3 { 
  var %col = $calc($readini(RSStats.ini,n,Colours,Seperator) -1)
  if ($len(%col) == 1) var %col = $+(0,%col)
  return $+(,%col,$1-)
}

alias -l tab { return $chr(9) }
alias -l striptags { var %x,%y = $regsub($1-,/(<[^>]+>)/g,$null,%x) | return %x } 
alias -l 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
  }
  if ($prop == format) $bytes($int(%xp),b)
  else return $int(%xp)
}
alias -l xp2next {
  var %lvl = $1, %xp = $remove($2,$chr(44)), %nextlvl = $calc(%lvl + 1), %nextxp = $xp(%nextlvl)
  if (%lvl >= 99) return --
  elseif ($prop == format) return $bytes($calc(%nextxp - %xp),b)
  else return $calc(%nextxp - %xp)
}
alias -l getPercent {
  var %xp = $remove($1,$chr(44)), %total = $remove(%RSStats.Overall.xp,$chr(44))
  var %percent = $round($calc(%xp / %total * 100),2) 
  if (%xp == %total) return --
  else return $+(%percent,%)
}
alias -l SaveColOptions {
  var %dname = ManageCols, %x = 2
  while (%x <= 7) {
    var %state = $xdid(%dname,%x).state
    var %Fields = $instok(%Fields,%state,0,44)
    inc %x
  }
  var %x = 1 
  while ($xdid(%dname,9,%x).text) {
    var %Order = $addtok(%Order,$v1,44)
    inc %x
  }
  writeini -n RSStats.ini Config Fields %Fields
  writeini -n RSStats.ini Config Order %order 
}
alias -l getitem {
  if ($1 == 2) var %return = Skill
  elseif ($1 == 3) var %return = Rank
  elseif ($1 == 4) var %return = Level
  elseif ($1 == 5) var %return = Xp
  elseif ($1 == 6) var %return = Xp to lvl
  elseif ($1 == 7) var %return = % of total Xp
  if ($prop == nospace) return $replace(%return,$chr(32),-)
  else return %return
}
alias -l getfield {
  if ($1 == Skill) return 1
  elseif ($1 == Rank) return 2
  elseif ($1 == Level) return 3
  elseif ($1 == Xp) return 4
  elseif ($1 == Xp to lvl) return 5
  elseif ($1 == % of total Xp) return 6
}
alias -l getwidth {
  if ($1 == Skill) return 90
  elseif ($1 == Rank) return 65
  elseif ($1 == Level) return 65
  elseif ($1 == Xp) return 85
  elseif ($1 == Xp-to-lvl) return 70
  elseif ($1 == % $+ -of-total-Xp) return 75
}
alias -l BuildColumn {
  var %item = $replace($1,$chr(32),-), %field = $2
  var %fields = $readini(RSStats.ini,n,Config,Fields)
  if ($gettok(%fields,%field,44) == 1) {
    var %align = $readini(RSStats.ini,n,%item,Align)
    var %align = $iif(%align == 1,+l,$iif(%align == 2,+r,+c))
    var %Label = $readini(RSStats.ini,n,%item,Label)
    var %Width = $getwidth(%item)
    return %align 0 %width %label
  }
}
alias -l BuildListView {
  var %x = 1
  while ($gettok($readini(RSStats.ini,n,Config,Order),%x,44)) {
    var %ListView = %ListView $tab $BuildColumn($v1,$getfield($v1))
    inc %x
  }
  xdid -t RSStats 10 +c 0 0 %ListView 
}
alias -l SaveSettings {
  writeini -n RSStats.ini config CopyFormat $xdid(Settings,5).text
  writeini -n RSStats.ini config CopyEvent $xdid(Settings,10).sel
  writeini -n RSStats.ini AllSkills State $xdid(Settings,13).state
  writeini -n RSStats.ini AllSkills Trigger $xdid(Settings,15).text
  writeini -n RSStats.ini SingleSKills State $xdid(Settings,17).state
  if ([SKILL] !isin $xdid(Settings,19).text) {
    var %trigger = $v2 $+ [SKILL]
    var %x = $input([SKILL] must be included in single skill triggers to specifiy WHICH skill is wanted. $&
      $crlf Automatically adding it the the end of your current trigger,oh,Error)
  }
  else var %trigger = $v2
  writeini -n RSStats.ini SingleSKills Trigger %trigger
  writeini -n RSStats.ini config Seperator $xdid(Settings,21).text
  writeini -n RSStats.ini config Display $xdid(Settings,23).sel
  writeini -n RSStats.ini Colours text $xdid(Settings,27).sel
  writeini -n RSStats.ini Colours data $xdid(Settings,29).sel
  writeini -n RSStats.ini Colours Seperator $xdid(Settings,31).sel
  if ($xdid(Settings,40).state == 1) writeini -n RSStats.ini Config AccessType block
  else writeini -n RSStats.ini config AccessType allow
  Savelist 44
  Savelist 45

  SetDefaultSettings
}
alias -l Savelist {
  var %did = $1, %x = 1, %total = $xdid(Settings,%did).num
  remini -n RSStats.ini $iif(%did == 44,allow,block)
  while (%x <= %total) { 
    writeini -n RSStats.ini $iif(%did == 44,allow,block) %x $xdid(Settings,%did,%x).text
    inc %x
  }
}
alias -l loadlist {
  var %item = $1, %x = 1, %total = $ini(RSStats.ini,%item,0)
  while (%x <= %total) {
    xdid -a Settings $iif(%item == allow,44,45) 0 $readini(RSStats.ini,%item,%x)
    inc %x 
  }
}
alias -l checklist {
  var %list = $1, %item = $2, %x = 1, %total = $ini(RSStats.ini,%list,0)
  while (%x <= %total) {
    var %citem = $readini(RSStats.ini,%list,%x)
    if (%item == %citem) return $true
    inc %x
  }
  return $false
}
alias -l SetDefaultSettings {
  var %copyformat = User: [NICK] Skill: [SKILL] Rank: [RANK] Xp: [XP] Lvl: [LVL] ([XP2LVL] from next) [PERCENT] of total Xp
  if (!$readini(RSStats.ini,n,config,CopyFormat)) writeini -n RSStats.ini config CopyFormat %copyformat
  if (!$readini(RSStats.ini,n,config,CopyEvent)) writeini -n RSStats.ini config CopyEvent 3
  if ($readini(RSStats.ini,n,AllSkills,state) == $null) writeini -n RSStats.ini AllSkills state 1
  if (!$readini(RSStats.ini,n,AllSkills,trigger)) writeini -n RSStats.ini AllSkills trigger [!@]stats
  if ($readini(RSStats.ini,n,SingleSkills,State) == $null) writeini -n RSStats.ini SingleSkills state 1
  if (!$readini(RSStats.ini,n,SingleSkills,trigger)) writeini -n RSStats.ini SingleSkills trigger [!@][SKILL]
  if (!$readini(RSStats.ini,n,Config,Seperator)) writeini -n RSStats.ini Config Seperator *
  if (!$readini(RSStats.ini,n,Config,Display)) writeini -n RSStats.ini Config Display 4
  if (!$readini(RSStats.ini,n,Colours,Text)) writeini -n RSStats.ini Colours Text 6
  if (!$readini(RSStats.ini,n,Colours,Data)) writeini -n RSStats.ini Colours Data 4
  if (!$readini(RSStats.ini,n,Colours,Seperator)) writeini -n RSStats.ini Colours Seperator 8
  if (!$readini(RSStats.ini,n,config,AccessType)) writeini -n RSStats.ini Config AccessType block
}
alias -l isskilltrigger {
  var %trigger = $readini(RSStats.ini,n,SingleSkills,trigger)
  if ($regex(%trigger,/(.*)\[SKILL\](.*)/Si)) {
    if ($regex($1,$+(/^,$regml(1),(.*),$regml(2),$,/Si))) var %skill = $regml(1) 
  }
  if (!%skill) return $null
  elseif ($regex(%skill,/^(st|(skill)?total|overall)$/Si)) return Overall 
  elseif ($regex(%skill,/^at(t|k|tack)$/Si)) return Attack 
  elseif ($regex(%skill,/^def(en[cs]e)?$$/Si)) return Defence 
  elseif ($regex(%skill,/^str(ength)?$/Si)) return Strength 
  elseif ($regex(%skill,/^hp|hit(s|points?)?$/Si)) return Hitpoints 
  elseif ($regex(%skill,/^range(r|d|ing)?$/Si)) return Ranged 
  elseif ($regex(%skill,/^Pray(er)?$$/Si)) return Prayer 
  elseif ($regex(%skill,/^mag(e|ic)$$/Si)) return Magic 
  elseif ($regex(%skill,/^cook(ing)?$/Si)) return Cooking 
  elseif ($regex(%skill,/^wc|wood(cut(ting)?)?$/Si)) return Woodcutting 
  elseif ($regex(%skill,/^fletch(ing)?$/Si)) return Fletching 
  elseif ($regex(%skill,/^fish(ing)?$/Si)) return Fishing 
  elseif ($regex(%skill,/^(fire|fm)(make?(ing)?|ing)?$/Si)) return Firemaking 
  elseif ($regex(%skill,/^craft(ing)?$/Si)) return Crafting 
  elseif ($regex(%skill,/^(smith|smelt)(ing)?$/Si)) return Smithing 
  elseif ($regex(%skill,/^mine(ing)?$/Si)) return Mining 
  elseif ($regex(%skill,/^herb(law|lore)?$/Si)) return Herblore 
  elseif ($regex(%skill,/^agil(ity)?$/Si)) return Agility 
  elseif ($regex(%skill,/^(th(ei|ie)[fv](e|ing)?)$/Si)) return Thieving 
  elseif ($regex(%skill,/^slay(er|ing)?$/Si)) return Slayer 
  elseif ($regex(%skill,/^farm(er|ing)?$/Si)) return Farming 
  elseif ($regex(%skill,/^(rc|runecraft)(er|ing)?$/Si)) return Runecraft 
  elseif ($regex(%skill,/^cons?(truct(ion)?)?$/Si)) return Construction
}
alias -l cleanup {
  if ($1 != RSStats) {
    var %id = $remove($1,RSStats)
    unset $(%,RSStats.*.,$(%id,2))
  }
  else unset %RSStats.rsn
  unset %RSStats.overall.xp
  .remove $1
  sockclose $1
}
alias -l isitem {
  var %item = $1, %did = $2, %x = 1
  while (%x <= $xdid(Settings,%did).num) {
    var %citem = $xdid(Settings,%did,%x).text
    if (%item == %citem) return $true
    inc %x
  }
  return $false
}

; ##############################################################################
; # dcx.dll aliases                                                            #
; ##############################################################################
alias -l dcx {
  if ($isid) return $dll($findfile($mircdir,dcx.dll,1),$1,$2-)
  else dll " $+ $findfile($mircdir,dcx.dll,1) $+ " $1 $2-
}

alias -l xdid {
  if ($isid) return $dcx(_xdid,$1 $2 $prop $3-)
  else dcx xdid $2 $3 $1 $4-
}

alias -l xdialog {
  if ($isid) return $dcx(_xdialog,$1 $prop $2-)
  else dcx xdialog $2 $1 $3-
}