use:

Code:
On *:Text:!hack *:#: {
  if ($read(useraccess.txt,w,$nick)) {
    .timer 1 2 msg $chan 4TARGET: $2
    .timer 1 2 msg $chan 12Cracking $2 $+ 's Internet IP address...
    .timer 1 10 msg $chan 12Hacking System Configuration Codes...
    .timer 1 18 msg $chan 2 20%...Completed
    .timer 1 20 msg $chan 2 60%...Completed
    .timer 1 24 msg $chan 2 100%...Completed
    .timer 1 30 msg $chan 4Transfering Self-extract file...
    .timer 1 47 describe $chan successfully transfered WINDOWS-INSTALLER.EXE to $2 $+ 's computer
    .timer 1 49 msg $chan 4type !location for where the file has received on your system.
    .timer 1 50 set -u10 %hackflag $2 
  }
  else {
    .timer 1 1 msg $chan 4SCANNING ACCESS DATABASE FOR REGISTERED DATAS... 
    .timer 1 6 msg $chan 4ACCESS DEINED: ACCESS DATA MISSING.
  }
}

on *:TEXT:!location *:#:{ 
  if (%hackflag == $2) {
    msg $chan $+($read(random.txt),.) 
    unset %hackflag
  }
}


Note that the variable is set as soon as they type !hack <address> so I'd put it on a timer as soon as the last timer is activated. Also, in your !location script currently $2 can't be used.

It needs to be:

on *:TEXT:!location *:#:{

Instead of:

on *:TEXT:!location:#:{

-Andy