Try this one for allowing searches with names instead of just numbers. I could have shortened it by putting things into aliases, but this way it can easily be adjusted.

Code:
on *:start: {
  if (!$hget(NewGameData)) {
    hmake NewGameData 100
    if ($isfile($+(",$scriptdir\NewGameData.hsh"))) { hload NewGameData $+(",$scriptdir\NewGameData.hsh") }
  }
  if (!$hget(OldGameData)) {
    hmake OldGameData 100
    if ($isfile($+(",$scriptdir\OldGameData.hsh"))) { hload OldGameData $+(",$scriptdir\OldGameData.hsh") }
  }
  .timerGameData 0 3600 GameData
  GameData
}

; Socket Stuff
alias GameData {
  if ($hget(OldGameData)) { hfree OldGameData }
  if ($isfile($+(",$scriptdir\OldGameData.hsh"))) { .remove $+(",$scriptdir\OldGameData.hsh") }
  if ($hget(NewGameData)) {
    hsave NewGameData $+(",$scriptdir\NewGameData.hsh")
    hfree NewGameData
  }
  hmake NewGameData 100
  hmake OldGameData 100
  if ($isfile($+(",$scriptdir\NewGameData.hsh"))) {
    hload OldGameData $+(",$scriptdir\NewGameData.hsh")
    hsave OldGameData $+(",$scriptdir\OldGameData.hsh")
  }
  sockopen GameData a.swirve.com 80
}

on *:sockopen:GameData: {
  sockwrite -n $sockname GET /data/ranks.txt HTTP/1.0
  sockwrite -n $sockname User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)
  sockwrite -n $sockname Host: a.swirve.com
  sockwrite -n $sockname Accept-Language: en-us
  sockwrite -n $sockname Accept-Encoding: gzip, deflate
  sockwrite -n $sockname Accept: */* $+ $crlf $+ $crlf
}

on *:sockread:GameData: {
  if ($sockerr) {
    echo -a Error.
    halt
  }
  else {
    var %temptext
    sockread %temptext
    if (!%temptext) { hsave NewGameData $+(",$scriptdir\NewGameData.hsh") | halt }
    tokenize 32 $gettok(%temptext,2-,41)
    hadd NewGameData $gettok(%temptext,1,32) $gettok($gettok(%temptext,2-,32),1,40) 03§ $1 03§ $2 03§ $iif($5,$3 03§ $4 03§ $5,03§ $3 03§ $4)
  }
}

; Trigger Stuff
on *:text:!who *:#yourchannel: {
  if ($2 isnum && !$3) {
    if ($hget(NewGameData,$2)) {
      msg $chan $2 $+ : $v1
    }
    else msg $chan No data on $2 $+ .
  }
  else {
    if ($hfind(NewGameData,$2- $+ *,0,w).data > 0) {
      if ($hfind(NewGameData,$2- $+ *,0,w).data > 1) {
        msg $chan Too many results for $2- $+ .  Be more specific, or use the number instead of the name.
      }
      else {
        var %data = $hfind(NewGameData,$2- $+ *,1,w).data
        msg $chan %data $+ : $hget(NewGameData,%data)
      }
    }
    else msg $chan No data for $2- $+ .
  }
}

on *:text:!cpwho *:#yourchannel: {
  if ($2 isnum && !$3) {
    if ($hget(OldGameData,$2) || $hget(NewGameData,$2)) {
      if ($hget(OldGameData,$2) && $hget(NewGameData,$2)) {
        msg $chan New Data for $2 $+ : $hget(NewGameData,$2)
        msg $chan Old Data for $2 $+ : $hget(OldGameData,$2)
      }
      elseif ($hget(NewGameData,$2)) {
        msg $chan New Data for $2 $+ : $hget(NewGameData,$2)
        msg $chan Old Data for $2 $+ : N/A
      }
      else {
        msg $chan New Data for $2 $+ : N/A
        msg $chan Old Data for $2 $+ : $hget(OldGameData,$2)
      }
    }
    else msg $chan No data on $2 $+ . 
  }
  else {
    if ($hfind(NewGameData,$2- $+ *,0,w).data > 0) {
      if ($hfind(NewGameData,$2- $+ *,0,w).data > 1) {
        msg $chan Too many results for $2- $+ .  Be more specific, or use the number instead of the name.
      }
      else {
        var %data = $hfind(NewGameData,$2- $+ *,1,w).data
        if ($hget(OldGameData,%data) || $hget(NewGameData,%data)) {
          if ($hget(OldGameData,%data) && $hget(NewGameData,%data)) {
            msg $chan New Data for %data $+ : $hget(NewGameData,%data)
            msg $chan Old Data for %data $+ : $hget(OldGameData,%data)
          }
          elseif ($hget(NewGameData,%data)) {
            msg $chan New Data for %data $+ : $hget(NewGameData,%data)
            msg $chan Old Data for %data $+ : N/A
          }
          else {
            msg $chan New Data for %data $+ : N/A
            msg $chan Old Data for %data $+ : $hget(OldGameData,%data)
          }
        }
      }
    }
    else msg $chan No data for $2- $+ .
  }
  else msg $chan No data on $2 $+ . 
}

on *:input:#yourchannel: {
  if ($1 == !who && $2) {
    if ($2 isnum && !$3) {
      if ($hget(NewGameData,$2)) {
        msg $chan $2 $+ : $v1
      }
      else msg $chan No data on $2 $+ .
    }
    else {
      if ($hfind(NewGameData,$2- $+ *,0,w).data > 0) {
        if ($hfind(NewGameData,$2- $+ *,0,w).data > 1) {
          msg $chan Too many results for $2- $+ .  Be more specific, or use the number instead of the name.
        }
        else {
          var %data = $hfind(NewGameData,$2- $+ *,1,w).data
          msg $chan %data $+ : $hget(NewGameData,%data)
        }
      }
      else msg $chan No data for $2- $+ .
    }
  }
  elseif ($1 == !cpwho && $2) {
    if ($2 isnum && !$3) {
      if ($hget(OldGameData,$2) || $hget(NewGameData,$2)) {
        if ($hget(OldGameData,$2) && $hget(NewGameData,$2)) {
          msg $chan New Data for $2 $+ : $hget(NewGameData,$2)
          msg $chan Old Data for $2 $+ : $hget(OldGameData,$2)
        }
        elseif ($hget(NewGameData,$2)) {
          msg $chan New Data for $2 $+ : $hget(NewGameData,$2)
          msg $chan Old Data for $2 $+ : N/A
        }
        else {
          msg $chan New Data for $2 $+ : N/A
          msg $chan Old Data for $2 $+ : $hget(OldGameData,$2)
        }
      }
      else msg $chan No data on $2 $+ . 
    }
    else {
      if ($hfind(NewGameData,$2- $+ *,0,w).data > 0) {
        if ($hfind(NewGameData,$2- $+ *,0,w).data > 1) {
          msg $chan Too many results for $2- $+ .  Be more specific, or use the number instead of the name.
        }
        else {
          var %data = $hfind(NewGameData,$2- $+ *,1,w).data
          if ($hget(OldGameData,%data) || $hget(NewGameData,%data)) {
            if ($hget(OldGameData,%data) && $hget(NewGameData,%data)) {
              msg $chan New Data for %data $+ : $hget(NewGameData,%data)
              msg $chan Old Data for %data $+ : $hget(OldGameData,%data)
            }
            elseif ($hget(NewGameData,%data)) {
              msg $chan New Data for %data $+ : $hget(NewGameData,%data)
              msg $chan Old Data for %data $+ : N/A
            }
            else {
              msg $chan New Data for %data $+ : N/A
              msg $chan Old Data for %data $+ : $hget(OldGameData,%data)
            }
          }
        }
      }
      else msg $chan No data for $2- $+ .
    }
    else msg $chan No data on $2 $+ . 
  }
}


To test, try:

!who Cirrus Minor
!who Cirrus
!who C
!who 76

You can try those with !cpwho as well. All except the third will result in the data being displayed. You don't need to enter the entire name, but you need to enter enough of it so that only one name matches. That's why "C" won't work, but "Cirrus" will. Note that it searches in the form of $2* (not *$2*). So you can't search for "!who Minor". This was done purposely to allow you to search with the fewest letters possible. In this case, you can use "!who Cir" and you'll get your results.


Invision Support
#Invision on irc.irchighway.net