PDA

View Full Version : ZoneProxy 1.0 and Modified EQEmu 0.4.4 + source


Windcatcher
11-14-2003, 12:19 PM
FINALLY. A way to use third-party OpenZone zones without the need to overwrite existing zones. Enter ZoneProxy.

ZoneProxy runs on the PLAYER'S machine. It listens to commands from the server to set up a third-party zone (e.g. "windszone") and re-codes that zone on the fly to a designated alias zone (e.g. tutorial). When it's finished it notifies the server that it has finished, and then the server tells the client to zone to the alias zone. ZoneProxy does NOT modify the EQ client in any way; it merely replaces the alias zone on the fly with your own (and restores the alias from backups when it exits).

That's how it works in a nutshell. It wasn't my idea, but a brilliant idea from Purcevil. It requires a modified server to make it all work, and I've posted an archive that does the job. The server archive is in the EQEmu Admin section under the SourceForge download site. If you go here you should be able to get both:

https://sourceforge.net/project/showfiles.php?group_id=41381&release_id=197629

This is all purely experimental right now, but it seems to work well for me. It's at the stage where it's ready for wider testing and feedback is appreciated.

How to test:

Using OpenZone, make textureset folders for one or more zones using names that aren't normally recognized (e.g. windszone, deadgulch, etc.). Make zones and export them to .S3D for those texturesets. When you're done, put the zones in with your EQ client.

Run the modified EQEmu 0.4.4 server instead of the normal server. The archive I put up is only an UPDATE, not the entire emulator: you'll still need the full EQEmu 0.4.4 distribution, but the files I supply are replacements where necessary. All of my source changes are bracketed by

// ZONEPROXY BEGIN

and

//ZONEPROXY END

Put ZoneProxy in the same folder as your client. Run it *before* running your client.

Add an integer column called "thirdparty" to the "zone" table in your server's database. Populate it with zero (0) for all zones except your new third-party ones. Put ones (1) in for those.

Run your client and log into the server. The third-party zones should work like any other. The documentation that comes with ZoneProxy is fairly extensive and should help you if you get confused.

WC

a_Guest03
11-14-2003, 02:41 PM
Windcatcher, you bring good things to life!

I'm glad Purcevil's ideas incited this code implementation. It sounds brilliant! It's what I think a lot of people have really wanted. I'm pretty sure that the theory of this program will work full-function in practical use. You basically tell the client, "swap this for now, then change it back", and it can be done infinite times, as long as disk space exists (minimal at a few Megs)?

Does the server just need to know zonepoints and zone names to trigger the alias?
Would it be a good idea to have a simple way to add custom zones? What do you think the best way to add them would be? Should we incorporate that into mangoo's tools?
Could you refresh me on what tools can be used to create zones and textures? Is there a freeware (linux) program that I can use to create images of creatures, items, or terrain?

I want to poke around with this.

Windcatcher
11-14-2003, 02:58 PM
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.

Windcatcher
11-16-2003, 08:55 AM
I'm getting questions as to when or whether ZoneProxy will be supported by EQEmu 0.5.0 in the near future. Since I'm not a server dev, I thought I'd ask: is anyone playing with ZoneProxy and are there any thoughts for adding support to the general EQEmu release?

WC

a_Guest03
11-17-2003, 03:29 AM
It's my vote that it get added to main releases, but you would probably still have to maintain it, WC.