Arqade is a question and answer site for passionate videogamers on all platforms. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

So as I go around doing quests, I notice that the merchants change their inventory since I last looked, what triggers this?

share|improve this question
up vote 4 down vote accepted

Merchants have a basic inventory that never changes that consists of common and miscellaneous items, but their uncommon and up inventory changes.

I don't know the exact details, because it seems fairly random due to sometimes them changing when I leave for 1 second, and sometimes not changing for 10 minutes.

I'd hazard a guess at one of the following, and I'll clear this up once I've researched it more:

  1. It's similar to dead bodies despawning in that if you can't see them for a limited amount of time, then they despawn, maybe you just have to leave the immediate area for x amount of time.

  2. I think this is the more likely one, perhaps there's a hidden timer that causes them to change their inventory similar to the special deals in Borderlands. Say every 15 minutes the inventories change, whether that's 1 minute from when you see them, or 10 minutes from when you see them.

share|improve this answer
It's worth it to note that merchant inventories can apparently stay the same between reloads as well. I just exited back to the menu and reloaded to see if it would give me a different choice at the store, and it was the same. – FAE Sep 10 '11 at 1:36

It's based on the system time in some way. A quick Autoit script confirmed this. If anybody wants it, here's the autoit script to increase time and date by an hour each time you press CTRL+Z.

#include <Process.au3>

$month = 1
$day = 1
$year = 2011
$hour = 0
HotkeySet("^z", "IncreaseTime")

while True

Func IncreaseTime()
    $hour += 1
    if $hour == 24 Then
        $hour = 0
        $day += 1
        if $day == 28 Then
            $day = 0
            $month += 1
            if $month == 13 Then
                $month = 1
                $year += 1
    _RunDOS("date " & $month & "-" & $day & "-" & $year)
    _RunDOS("time " & $hour & ":00.00.00")

EDIT: After I posted this, I realized it might be a good idea to mention that you should reset your system time and date back to the real time after you're done. If you don't, things like SSL may stop working. Just edit your time and synch with internet servers.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.