Version Conflicts - how they come to be and how to resolve them
What is the problem? Each time, a file for Unreal is created, it is given a unique identifier (GUID), for example: B8C03AC511D59C9A45443F8500005453
When you join a server, the server sends information of all files you need to have in order to join, the file information contain the GUID and the filename (package name).
Your Unreal game first looks if it has the file installed in one of the normal Unreal folders. If the file is found, the GUID of the server file is compared to the file on your harddisk. If the GUIDs match, you can join. If not, an error is produced telling you that your file is of a different version and you cannot join (yet :).
Should Unreal not find the file installed in the Unreal folder, it will look in the Unreal\Cache directory if there is a file which has the name GUID.uxx whereas GUID is that code again... So in our example the cache is searched for the file B8C03AC511D59C9A45443F8500005453.uxx. Should this file be found in the cache, you can join. If not, the file is downloaded from the server, you can join when the download is complete.
How can this shit happen that there 2 files with same name but different identifiers? This happens because map authors, Unreal scipt coders or texture makers are sometimes pretty stupid people. They change something in their file and then just save it again. The newer file still has the old filename, but a new identifier - that's logic because it's a new file! Now if the author puts that new file on just one server and the rest of the world doesn't know that the file has been updated, everyone with the old file will get this error as described above and cannot join.
Authors would have to rename their files (and packages) which often creates more problems when files interact with each other. So they just forget about the "clean way" disregarding the problems their decision NOT to work properly has later for other users. While this may be understandable for some u files (as they often have dynamic binds to packages/files based on filenames) it is merely inacceptable for texture, music and sound packages.
An easy solve would be to include version numbers in the package names like "MyPackage", then "MyPackageV2", "MyPackageV3" and so on... ... this way version conflicts will never occur -- quite easy in my view... just that it makes more work because variable settings have to be restored and so on and so on... but the extra work saves lots of problems later...
Okay now we have the error - what do? Look up the file which causes the conflict on your harddrive. Since anything might cause a conflict (*.u *.umx *.utx *.uax) you may have to look through all directories of Unreal to find the file with the conflicting name. Once you found it, rename it. You best add "_old" to the file name so you can restore the file easily later when you need to by renaming it to the original name again.
Note that you can't rename files which JUST caused a conflict, you will have to quit Unreal before or open a new map manually - but to keep it simple, just quit Unreal, rename file, restart :)
Now that you have renamed the file, try joining the same server where you got the error. Now Unreal is not able to find the file because you renamed it. So then it looks in the cache for the GUID and if it's not there either, you will just download it. Then you join.
If that works, why should I ever restore the old file? Because this only works online! Maybe you sometimes want to view a map offline to learn it - or play botmatches (ahem....). When you play offline, the cache cannot be used. All files must be installed.
Common conflicts Files which commonly cause conflicts (just examples): Jumpad.u, DMProng.unr, Prong.uax, UTech1.utx (you play RealCTF? :) Say you have DMProng and want to play it, but last time you joined a server you got a version conflict with "Jumpad", so the file "Unreal\system\Jumpad.u" is missing and you cannot play DMProng offline then (you will be told the file is missing). In this case, you have to rename your old file back to the original name to play offline.
Can't I have both, the original file and the cache file? You CAN, but it won't help much, because Unreal first looks for the file name and only 2nd for the GUID. So if you have a conflicting file AND the correct file in the cache, Unreal will still say "Version Conflict", but when you rename the offending file, you will immediately join after that because the correct one is found in the cache.
Some people claim that their Unreal installation first looks into the Cache to avoid that problem so they actually never have to rename files once they have a false and correct version at the same time, but I never saw this for real, so I doubt it's true. If there is a setting to force Unreal to first look into the cache, TELL US HOW IMMEDIATELY!!! - the rest of the world will be grateful!
I only play online, never offline, why should I ever install files then? Because some files are simply very large. Actually it is possible to download almost ANY file from a server directly, though some files have a flag setting which makes it completely impossible to auto-download, these files include the original DM-maps (Deck16, Curse, Elsinore etc...) but due to the existance of flag modifiers any file can be "download-protected" and you should not assume to get all files from a game server.
However, if you install files correctly you usually save yourself a lot of time, because downloading directly from Unreal servers is prone to failure. If your connection is slow, it often breaks - maybe because a map change takes place before your download is complete... And if your connection is fast, then the server will start to lag and make games unplayable while you download from it!
If everybody always downloaded files from servers, no one would EVER be able to play!!!
Update: 2003-02-06: WAIT WAIT WAIT!! I get conflicts, but I do not have any of the files installed which Unreal claims to cause conflicts!? Okay, no problem at all... in this special case Unreal is using its RAM cache to look up packages it already has loaded before. You see, this happens when you just played on one server which had one version of a certain file, then move to another server which has a different version of the same file (without restarting Unreal in between). What is happening is Unreal remembers the old package name and immediately associates it with the cached file it used just before. Solutions: Either of the 2 following measurements will help:
- Exit and restart Unreal (this definitely ALWAYS helps in a cache-version conflict as Unreal has to reload all from scratch)
- Disconnect from the current server, then hit TAB/ConsoleKey (whatever yours is) and type the command
- obj garbage
- to force Unreal to garbage collect all unused packages. You will not get any response from Unreal, but after this you should be able to get on the server using the other version too...
- You could, for example, bind one key to open entry to quickly disconnect from the current server (and be in the jail cell intermission level) and the next key to obj garbage. Whenever you need to switch servers, press those 2 keys to avoid any version conflicts due to your cache.
One last tip from our side In your Unreal.ini file, one setting is PurgeCacheDays=30 by default, you find it right under the line [Core.System]
To keep repeated downloads of the same files going, make the setting PurgeCacheDays=0 so that your cache will NEVER be purged. Your cache may grow large over the years, but that's better than having to download the same files over and over again...