Log in

View Full Version : How to add zones instead of merely replacing them


Windcatcher
06-07-2003, 05:29 AM
People have been asking about making new zones. As some of you are aware, I recently released OpenZone that lets you make .WLD files, but as we all know the EQ client prevents us from adding new zones or even putting new filenames in .S3D archive files. However, given these restrictions, I still think it's possible to add new zones without losing existing ones.

Right now we connect to EQEmu by pointing eqhost.txt at an EQEmu server. Instead, we could place a small program in the middle, point eqhost to that (that is, on localhost), and point that program to the EQEmu server.

This program could sniff all the packets, looking for the zone packet. When it sees one come in from the server with the new zone name, it could check an internal list of all the new zones and perform a redirection. The idea is this: for all of the new zones, export them twice: once for one unused zone and once for another (e.g. neriakd and tutorial, or cshome and tutorial, etc.) Put all the ones coded for one unused zone in one subfolder and all the ones for the other unused zone in the other. Then, the small program picks the appropriate unused zone name, copies the files from the subfolder over to the EQ folder and renames them accordingly, and tells the client that it's going (for example) to the tutorial zone. Voila, new zones without losing any existing ones. You can always back up the tutorial zone so you don't lose it.

As far as I know, a program like this doesn't exist but I don't think it would be too hard for someone familiar with the server code to create it.

WC

Lurker_005
06-07-2003, 07:06 AM
Interesting idea for a workaround.

The zone table allows reuse of zone geometry for a different zone name. This would be needed for what your describing, but can also be of use now.

short_name = new short name
file_name = original short name (same as file name)
long_name = new long zone name

so for windcatchers idea

new1, tutorial, "New zone from scratch", ....
new2, tutorial, "Another new zone from scratch", ....

Zone lines may still be a pain, but there are ways around that too. Ports, make a "hub" zone that all the zone lines were changed to connect "new" zones to the regular ones...



Anyhow this can be used now also

newbhate, hateplane, "Newb Plane of Hate", ....

Then set it up however you like using newbhate as the zone name

Windcatcher
06-07-2003, 07:48 AM
The only reason I suggested having all new zones exported twice, to two different unused zone names, is because I don't know if the client will perform a full zone reload if you're told, for example, to zone to "tutorial" if you're already in "tutorial", such as going from one new zone to another. I guess the only way to find out is to put everything in place and try it. If the client allows this, then you only have to code all new zones to one zone name, like tutorial. Otherwise you'd have to export twice and have the little zone proxy program ping-pong between the unused names.

WC

Lurker_005
06-07-2003, 07:58 AM
Tutorial would always be the file_name but you would have to assign new short names to diferentate between zones otherwise all spawns would always be there...

Or am I just missing your point?

Windcatcher
06-07-2003, 09:32 AM
You're right, but I'm talking about the *client* end. The client will only load zones it knows about, so if you want to create a totally new zone you have to export it as something the client knows about, like "tutorial". You could call it's .S3D file name anything you wish, like deadgulch.s3d, but internally the filenames are all the same as those in tutorial.s3d. It would be this way for all newly created zones. Then, the little zone proxy that the *user* is running would intercept the zone packet from the server, copy the appropriate .S3D file over tutorial.s3d in the EQ folder, and tell the client to zone to "tutorial".

The question arises when you go from one new zone to another. As far as the client is concerned, you're in zone "tutorial", and I don't know if it will perform a full zone reload if it is told to zone to "tutorial" again. If not, then you have to have two sets of all new zones--one coded for "tutorial" and one for another, like "cshome". Then the zone proxy program simply has to remember which one you're using and switch to the other one.