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

02-02-2004, 06:38 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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. 
|
 |
|
 |

02-02-2004, 07:37 AM
|
Demi-God
|
|
Join Date: Jan 2002
Location: Tourist town USA
Posts: 1,671
|
|
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.
|

02-02-2004, 08:21 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|

02-02-2004, 08:31 AM
|
Hill Giant
|
|
Join Date: Feb 2003
Posts: 126
|
|
are you deleting them in zone_points or zone_points_raw or both?
|

02-02-2004, 09:22 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|
 |
|
 |

02-03-2004, 02:59 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|
 |
|
 |

02-03-2004, 04:40 AM
|
 |
Dragon
|
|
Join Date: Mar 2003
Location: #loc
Posts: 745
|
|
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
|

02-03-2004, 05:09 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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. 
|
 |
|
 |

02-03-2004, 06:04 AM
|
Senior Member Former EQEmu Developer Current EQ2Emu Lead Developer
|
|
Join Date: Dec 2002
Posts: 1,065
|
|
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
|
 |
|
 |

02-03-2004, 07:25 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|

02-03-2004, 09:11 AM
|
Senior Member Former EQEmu Developer Current EQ2Emu Lead Developer
|
|
Join Date: Dec 2002
Posts: 1,065
|
|
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
|

02-03-2004, 09:23 AM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|

02-04-2004, 09:36 AM
|
Hill Giant
|
|
Join Date: Nov 2003
Posts: 192
|
|
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).
|
 |
|
 |

02-04-2004, 12:09 PM
|
Hill Giant
|
|
Join Date: Oct 2002
Posts: 212
|
|
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
|
 |
|
 |

02-05-2004, 03:39 PM
|
Sarnak
|
|
Join Date: Jul 2003
Posts: 35
|
|
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.
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 09:51 AM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |