View Single Post
  #3  
Old 11-14-2003, 02:58 PM
Windcatcher
Demi-God
 
Join Date: Jan 2002
Posts: 1,175
Default

ZoneProxy's operation is amazingly simple.

1. Whenever the world server is told that the player is going to go to a certain zone, it goes out to ZoneProxy and asks for the name of that player's alias zone (different players can have different alias zones). Right now this first step is done every time you zone, which might not be strictly necessary. I don't know enough about how the server operates but this could be cached, methinks. The reason I allow the alias zone to be configurable is in case the client starts rejecting certain zones or their names start to change. Theoretically any zone can serve as the alias zone.

2. Once the server knows what the client's alias zone is called, it checks the intended zone against both this alias name and against the "zone" table in the database. There needs to be a new column in the database called "thirdparty" that contains zero for all normal zones and one for new third-party zones. If either the intended zone is a third-party zone OR if it's the alias zone (let's say the player really wants to go to the tutorial zone), then the server tells ZoneProxy to set up that zone.

3. Once ZoneProxy has done this and notified the server, then the server tells the zone server what the name of the player's alias zone is. To my knowledge there is a zoneserver class instance for every player, so this works okay. If the player is not zoning to the alias zone or a third-party zone, then the world server tells the zoneserver instance that there is no alias zone.

4. There are some code changes in the zone server code that check whether a zone needs to be aliased or not. The idea is that, when communicating with the client, the client is always told that the zone is the alias zone even though the zone server knows better. There is also some special-case code for handling the #zone command, but otherwise that's all there is to it.

ZoneProxy does the zone swapping by opening your third-party zone, renaming certain .WLD files to match the alias zone (and setting the CRC values accordingly), and then overwriting the alias zone files with your zone. It keeps separate backups of the original alias zone and restores them on command or when it exits. It's vital to start ZoneProxy before starting the client, since it has to write to the zone files. Not doing this tends to cause sharing violations. ZoneProxy works by keeping the alias zone files open for writing at all times unitl it is closed.

You can make new zones with OpenZone, which is another program I've released. The current version is 2.3, but I'm trying frantically to get 2.4 out tonight. It fixes a ton of bugs and adds a ton more new features. I'm in the process of updating the documentation right now. Once that's done, up it goes.

There used to be a site called ftp.eqemupvp.com where someone was hosting textures and zone files for me that you could use with OpenZone. It doesn't seem to be there anymore, so if you want to use OpenZone you'll either need to create your own textures or I'll need another place to host my texture files. For the moment I'll put them up on SourceForge, but that might not be the best solution in the long run.

A wonderful program for making your own textures is TextureMaker. You can find it on the web with a search engine. It's shareware and the full version costs $70, but believe me it's worth every penny. It's flat-out unbelievable.
Reply With Quote