Well, according to those who've responded to my poll, some people are having problems getting their OpenZone and ZoneProxy working with EQEmu. Here I'll try as best I can to explain the steps involved and how to perform them.
First let me start with a brief explanation of what the programs do and how everything fits together. OpenZone, as most of you are probably aware, is a program that lets you create EQ zones that you can play in. It lets you export .S3D files, which are the same format as every other zone that comes with the game. The trick is getting the client to actually load them.
The EQ client is hardcoded to only load certain zones: those zones that come from SOE. To get the client to load zones that you or others create with OpenZone (zones it hasn't been explicitly told to allow), we have to make it think that the zone is acceptable. To accomplish this, we use ZoneProxy and a version of the EQEmu server that works with it.
You can get ZoneProxy and OpenZone from the Files link on the EQEmu homepage, but as of this writing you'll need to recompile EQEmu to make it work with ZoneProxy, since no one has as yet released a binary distribution of EQEmu that supports it. I've uploaded the EQEmu source files in which I've made the necessary changes: they're stored alongside ZoneProxy and OpenZone under the package "EQEmu 0.5.3-DR2-ZP". In each of the source files, my chages are bracketed by the comments:
Code:
// ZONEPROXY BEGIN
.
.
.
//ZONEPROXY END
These changes are verified to work with EQEmu 0.5.1, and the sections of code seem to be the same in the version of EQEmu 0.5.3-DR2 that I have. If anyone goes through these instructions and can't make it work with 0.5.3, please let me know. Simply put, you should take the changes I made in the source code I uploaded, make the same changes to the 0.5.3 build you want to use, and recompile EQEmu.
Once you've made a version of EQEmu that has the ZoneProxy-friendly changes and have gotten a good compile, it's time to modify your database so it also supports ZoneProxy. The first step in this is to add a new column to the "zone" table called "thirdparty". You can do this with the following SQL command:
Code:
alter table zone add thirdparty int(2) unsigned default '0';
For example, assuming your database is called "eq" and you have MySQL installed in C:\MYSQL, you can do the following:
Code:
C:
cd\mysql\bin
mysql
use eq
alter table zone add thirdparty int(2) unsigned default '0';
quit
This will add a column called "thirdparty" that contains integers and is normally set to zero.
The next step is to add entries to the zone table for each OpenZone zone you created. If you exported your zone to "deadgulch" (which created deadgulch.s3d, deadgulch_chr.s3d, and deadgulch_obj.s3d), then you need to add an entry where the short_name is "deadgulch". Also make sure to give it a unique value in the zoneidnumber field (800, for example). DO NOT USE 999 as my EQEmu server changes use that as a special value to force zone reloading.
Once you've added the new entries, set the new thirdparty column to 1 for each of the OpenZone zones. That way the EQEmu server will know that they need to be set up using ZoneProxy.
After you've made all these changes, you're ready to try it out. I recommend first using minilogin to do your initial testing to eliminate the possibility of Internet lag. Take the following steps:
1. Copy your OpenZone .S3D files to your EQ client directory.
2. Copy ZoneProxy.exe and ZoneProxy.ini (preferably from ZoneProxy 1.1) to your EQ client directory.
3. Start your recompiled EQEmu server (minilogin, if necessary, then the world and zone servers).
4. Start ZoneProxy. YOU MUST ALWAYS DO THIS BEFORE STARTING YOUR EQ CLIENT.
5. Start your EQ client.
6. Log in as normal. Once you're in, use the #zone command to go to one of your OpenZone zones (e.g. #zone deadgulch). It should work just like normal. If you get a zone unavailable message, try it again -- I've occasionally seen glitches when first entering the world (though never once I'm ingame).
HOW IT WORKS
The process of loading an OpenZone zone is done by making it look like a zone that the client will load. I call this an "alias" zone, and by default it's the tutorial zone (though this can be changed in zoneproxy.ini). When the server is told to send you to a zone and the thirdparty column tells it that the zone is one that the client won't normally load, it sends a message over a socket to the client's ZoneProxy program asking it what the alias zone is. It then tells the client to set up the third party zone (the zone the server wants to use), which means that ZoneProxy will overwrite the alias zone with the third party zone and re-code the files so that they look like the alias zone (don't worry, it backs up the alias zone on startup if necessary and restores it on exit). When ZoneProxy is done it notifies the EQEmu server, and the server then tells the client to zone to the ALIAS zone. The result is that the client thinks it's in the alias zone (e.g. tutorial), but the server knows better. This way you can have as many zones as you want.
WC