OK, I'm going to try and thoroughly explain what's going on. Hopefully this will make some sense:
  • There's nothing special about how $mircdir and $scriptdir work on Vista. They behave the same as they do on any other version of Windows.

  • The actual behaviour of $mircdir and $scriptdir has not changed at all. To clarify what those behaviours are:
    - $mircdir is the 'root' directory. This is the place where any relative filenames will start from, and it is the place that mIRC will look for the mirc.ini settings file (unless that's been overridden using mIRC's -i command-line switch).
    - $scriptdir always points to the directory containing the currently executing script.

  • What has changed from v6.3 onwards is the default locations that mIRC uses for storing settings. I cannot stress enough that this doesn't affect how $mircdir works and that any script that correctly uses $mircdir prior to 6.3 will continue to work correctly after 6.3. The problem is that prior to 6.3 a lot of people apparently misunderstood what $mircdir did, and thought that it always returned the directory containing mirc.exe (because versions prior to 6.3 used to store settings there by default).


From all this we can figure out a few things:
  • $mircdir can always be assumed to be a writeable location for the given user, $scriptdir cannot - ie. a script could be installed by an admin but used by a non-admin who has read-only access to the script's directory.

  • $mircdir will always return a directory so that your script behaves appropriately for how the user has set up mIRC. What I mean is that whether the user has chosen to use mIRC in a multi-user way (the default from 6.3 onwards) or whether they've chosen to use mIRC so that all users use the same settings (the pre-6.3 way) then by using $mircdir for storing your script's settings it will always work how the user wants it.


So in conclusion:

Anything that could be written by the user (ie. settings, savegames, downloads, whatever) should use $mircdir. Anything that will not be changed by the user (ie. script resources like icons or default sounds etc.) should use $scriptdir (which should be fairly logical since they'll presumably be installed there with the script files).


Spelling mistakes, grammatical errors, and stupid comments are intentional.