Go Back   EQEmulator Home > EQEmulator Forums > Archives > Archive::Development > Archive::Development

Archive::Development Archive area for Development's posts that were moved here after an inactivity period of 90 days.

Reply
 
Thread Tools Display Modes
  #1  
Old 02-02-2004, 06:38 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default Questions on zone points

This question is probably aimed more at merth or Lethal Encounter. I've asked a few people on irc and most of them point me towards those 2 devs.

The problem I'm having is figuring out how the client knows when it crosses a zone point and how it is storing these zone points. Most people have told me that the client gets these from the server when it enters a new zone (OP_SendZonePoints I'm guessing). The server gets them from the DB. Well this is all fine except in a few cases. One is from akanon to steamfont, another from lavastorm to soltemple.

When you cross the akanon to steamfont zoneline (or where it should be) nothing happens. Running in debug mode there is no zoning packet sent at all. Now when you enter akanon the server is sending the zone points to the client, so it seems the client should have these somewhere.

Lavastorm to soltemple is another problem. A zoning packet is sent when you cross the zoneline, but instead of passing zoneid 80 it passes zoneid 0. Now when I entered lavastorm I watched the zonepoints packet and 80 (50 in hex) was in there. So why is the client returning 0?

I don't know how much of a role the db plays in zone points. I delete all instances of the lavastorm to nektulos zone point from the db and it never gets sent in the zonepoints packet, yet somehow I can still zone into nektulos.

I've been looking through the code to try and figure this stuff out but I am just running into dead ends. Sure we can send the client zone points but how do we know that it got all of them? And what about the case when we don't send them a zonepoint, yet somehow the client still sends the right zone when it crosses the zoneline?

So, merth, Lethal Encounter, or any other dev, I need some help.
Reply With Quote
  #2  
Old 02-02-2004, 07:37 AM
Lurker_005
Demi-God
 
Join Date: Jan 2002
Location: Tourist town USA
Posts: 1,671
Default

I might know why everyone is so frustrated with zone points!

Looking thru the MWnpcmov_053_alpha2 DB the zone_points table I see 3 entries for lavastorm to soltemple. So the one that is triggering the zone may NOT be the one everyone is trying to change to get the zone line working.
__________________
Please read the forum rules and look at reacent messages before posting.
Reply With Quote
  #3  
Old 02-02-2004, 08:21 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

I've deleted all but one and it's still not working. I haven't deleted all of them yet, but my guess is that even if you delete all of them it will still zone you back to lavastorm. I'll test this when I get home later.
Reply With Quote
  #4  
Old 02-02-2004, 08:31 AM
farce
Hill Giant
 
Join Date: Feb 2003
Posts: 126
Default

are you deleting them in zone_points or zone_points_raw or both?
Reply With Quote
  #5  
Old 02-02-2004, 09:22 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

I haven't tried with lavastorm to soltemple, but I deleted all entries for lavastorm from the zonepoints_raw table and I deleted the lavastorm to nektulos entries in the zone_points table. After doing a reboot I could still zone from lavastorm to nektulos.

It seems this only happens with certain zonelines. I deleted the entry for lavastorm to najena in the zone_points table and I couldn't zone at all. It was pretty much like the akanon to steamfont zoneline, nothing would happen, you just run until you hit the wall. Run back and forth over the zoneline and still nothing.
Reply With Quote
  #6  
Old 02-03-2004, 02:59 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

Well last night I messed around with the code a little more. I commented out the section where zone points are sent. I definately noticed a difference as most of the time I tried to zone I got the "Entering Unknown Zone" message and ported back to somewhere in the zone I was in. What was wierd is that some zones still worked, lavastorm->nektulos still worked even though the server was never sending zone points.

So it seems to me that sending zone points is how the client knows what zone to send you to, but it still doesn't determine where the zoneline is. I'm wondering if that is in the zone files? Either that or maybe the number parameter from the zone_points table is being sent wrong.

I must say I'm a little disappointed that no devs have replied. One of you has to know the process that is going on, and even if it's not a complete explanation, it could definately point me in the right direction. I'm somebody that is trying to help.
Reply With Quote
  #7  
Old 02-03-2004, 04:40 AM
Monrezz's Avatar
Monrezz
Dragon
 
Join Date: Mar 2003
Location: #loc
Posts: 745
Default

I can't find it now but Windcatcher made a post a few weeks back about zoneline data being hardcoded into the zone file.

Im sure he mentioned a packet was sent when the client 'touched' the zoneline that told the client to zone.

Have a little search for all posts by Windcatcher within the last week or teo and I'm sure you'll find it, has some useful information.

Monrezz
__________________

kRPG Profile
Reply With Quote
  #8  
Old 02-03-2004, 05:09 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

I don't know if this is the post you are talking about, but I have skimmed over it before. The 0x29 Region flag is what looks interesting. If the client is sending zone points hardcoded in the zone file, then why do some zones work and others don't? It would seem that they all work, or none work. I'll have to take a closer look at the .wld files tonight and see if I find anything useful in there. Thanks for the pointer.
Reply With Quote
  #9  
Old 02-03-2004, 06:04 AM
Edgar1898
Senior Member
Former EQEmu Developer
Current EQ2Emu Lead Developer
 
Join Date: Dec 2002
Posts: 1,065
Default

Ok here is the deal with zone points, I'll try to explain them as best I can.

Whenever you login to the zone the zoneserver sends all the zone points to the player. Whenever the client runs into these zonepoints (most are hard coded) the client tells the server that it wants to zone. The problem is that it doesnt tell the server which zone point the client is using, so the server relies on the players position to determine which one the client used and the correct place to send them based on the coords in the database for the particular zonepoint. The x,y,z coords are the coords that the zonepoint itself is located at, it doesnt have to be exact but it needs to be close. The target_x,y,z coords are used by the server to tell where it should send the player once they have zoned. Its a little difficult to explain, but I'll give you an example:

Code:
id | zone | number | y | x | z | heading | target_zone | target_y | target_x | target_z | target_heading
341 | gfaydark | 4 | 2608 | -53 | 16 | 0 | crushbone | -660 | 162 | 4 | 999
345 | crushbone | 1 | -660 | -162 | 4 | 0 |gfaydark | 2608 | -53 | 16 | 999

Now as you can see the zonepoint in gfay is physically located at 2608,-53,16 (y,x,z) and whenever someone goes over it, they are zoned into crushbone to -660,162,4 (y,x,z) the heading of 999 tells the client to keep whatever heading it was using when it zoned. Now if you didnt have the right x,y,z the server would try to find the closest zone point, which might NOT be the correct one and it would send you somewhere else. I collected most of these from live not too long ago, so the only thing that needs to be changed is for you to delete the old ones that arent used anymore and the change the x,y,z coords to be as close as possible to the actual zoneline in game. Also note that if you use /loc it displays the format as y,x,z and #loc gives it in x,y,z so try not to let that confuse you.

Hope this cleared it up a little
__________________
Lethal Encounter
Reply With Quote
  #10  
Old 02-03-2004, 07:25 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

Thank you very much Lethal. It's nice to know the exact process that is going on. It is pretty much the same process that I assumed was going on. So if we never sent the zone points, the server would only zone when it crossed a hardcoded zoneline. The server would then find the closest x,y,z value to the players position and send them to the right zone and target_x,y,z. I'm still wondering why Ak'anon to steamfont doesn't even trigger a zone packet. I'm guessing that zoneline isn't hardcoded and for some reason when the server is sending the zonelines it might not be doing it correctly. So now the client has no idea of the zoneline and therefore never sends a zone packet. At least I have some more info to work from. One last question. How significant is the number field in the zone_points table? I notice that it is being sent along with zonepoints, but does this help the client at all? Thanks again.
Reply With Quote
  #11  
Old 02-03-2004, 09:11 AM
Edgar1898
Senior Member
Former EQEmu Developer
Current EQ2Emu Lead Developer
 
Join Date: Dec 2002
Posts: 1,065
Default

very significant, when a zone point is hard coded, the client uses that to correspond the zone point its sent from the zoneserver with the one that it knows exists at a specified point.
__________________
Lethal Encounter
Reply With Quote
  #12  
Old 02-03-2004, 09:23 AM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

So how do we get the right number? Do we just have to trial and error it or can it be packet collected? If it needs to be packet collected, what opcode are we looking for? I'm guessing that akanon to steamfont doesn't work because it is hardcoded and it's not being sent the right number.
Reply With Quote
  #13  
Old 02-04-2004, 09:36 AM
Tertiary
Hill Giant
 
Join Date: Nov 2003
Posts: 192
Default

Quote:
Originally Posted by toolh3
So how do we get the right number? Do we just have to trial and error it or can it be packet collected? If it needs to be packet collected, what opcode are we looking for? I'm guessing that akanon to steamfont doesn't work because it is hardcoded and it's not being sent the right number.
Hardcoded zonelines I understand fine. As for non-harcoded zonelines, I am interested whereabouts in the code this is checked for too. I never really noticed this before and was looking into the lavastorm/soltemple issue ... I just come across a pink doorway when trying to zone from lavastorm -> soltemple with no OP_ZoneChange sent. I tried on my own local server, Shawn's GM server and Scorpius2k with the same result. I had a quick search around the code but couldn't figure out where the code for 'non harcoded' zonelines was (if it is in the code yet at all).
Reply With Quote
  #14  
Old 02-04-2004, 12:09 PM
sandy
Hill Giant
 
Join Date: Oct 2002
Posts: 212
Default

try this :

Code:
DELETE FROM `zone_points` WHERE zone='lavastorm';
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 1, '-15.000000', '856.000000', '5.000000', '999.000000', 'najena');
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 25, '3107.000000', '289.000000', '-17.000000', '999.000000', 'nektulos');
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 31, '-443.000000', '-525.000000', '70.000000', '999.000000', 'soldunga');
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 32, '-413.000000', '-265.000000', '-112.000000', '999.000000', 'soldungb');
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 77, '250.000000', '56.000000', '3.000000', '999.000000', 'soltemple');
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('lavastorm', 88, '250.000000', '56.000000', '3.000000', '999.000000', 'soltemple');
and :

Code:
DELETE FROM `zone_points` WHERE zone='soltemple';
INSERT INTO `zone_points` ( `zone`, `number`, `target_y`, `target_x`, `target_z`, `target_heading`, `target_zone` ) VALUES ('soltemple', 1, '1344.000000', '331.000000', '149.000000', '999.000000', 'lavastorm');
yes all this data is sent to the client each time you zone in
i wrote a program that give me all this data in sql format directly from live like doors, spawns and npc_types too
'number' identifies each zoneline in the zone, it's hardcoded in the eq zone client files for sure but I don't know where
to get these number you need to packet collect it, i don't know if packetcollector can do it but eqcollector does and with eqcollector you can dump the data collected in text format so it's readable =)
__________________
Sandy
Reply With Quote
  #15  
Old 02-05-2004, 03:39 PM
toolh3
Sarnak
 
Join Date: Jul 2003
Posts: 35
Default

sandy,
That didn't seem to help. I'm still getting the entering unknown zone message and then zoned into a lava pit in lavastorm.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 10:14 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3