Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Database/World Building

Development::Database/World Building World Building forum, dedicated to the EQEmu MySQL Database. Post partial/complete databases for spawns, items, etc.

Reply
 
Thread Tools Display Modes
  #1  
Old 12-09-2006, 04:10 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default Infinite Zoning Loop

FNW,

There is a problem at the zone in of Vex Thal that causes a player to go into an infinite loop zoning. I use to think it was a problem in the database, but after an exhaustive search, I have been able to rule this out as a possibility based on 2 facts.

1. This bug will happen in a naked vex thal zone (ie no mobs, no doors, no traps, etc).

2. This bug is random. I have seen this bug happen on the same database with the exact same datasets and then after a reboot of the client, I have seen the bug not appear and I am able to walk into vex thal from the zone in.

I noticed messages in my debug log that records an "Unsolicited zone request..." and after looking into the source code, I can see the logic where the client sends an UnsolicatedZone message to the server, the server is unable to determine the nearest zone point to send me out of (vex thal has no zone points records) so the server then attempts to send me right back to where the client was sending me from (vex thal) and then the client sends me back out again as an UnsolicatedZone message and the whole thing just keeps on repeating.

The question here is why is the client just deciding at random to send me out via an UnsolicatedZone request? I hope it's not anything funny hardcoded into the client that is specific to this zone.

I'd appreciate any thought you may have on this matter. Thank you in advance!
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
  #2  
Old 12-09-2006, 04:52 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

A little more info about this bug...

Until now I thought the zone the client wanted to zone me to was just random, but I have noticed that it isn't random at all. In fact, I think it is the result of the servers Zone::GetClosestZonePoint() method. I'm not sure I completely understand the details of the mechanics involved here, but I know when I zone into VexThal and the last zone I was in was Misty (I was in Misty on a #zone command so I was standing by the newbie guards on the far side of the zone near Clan Runnyeye (however it is spelled... I hate goblins), when I try to walk into vexthal from the zonein, the client at random will decide to zone me out and in this case it will say I am zoning to Clan Runnyeye... If I was in UP and standing near the Maidens Eye zone when I #zone to Vex Thal, then it will say I am being zones to Maidens Eye... I think this might be signficant only because the object used to by the server to calculate a place to send me to cancel the unsolicated zone request I believe has data from when I was in Misty even though when the client tried to unsolicate zone me out, I was in Vex Thal, not Misty.

Sorry if this sounds confusing and if I can clear any of this up better for you, please let me know.
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!

Last edited by WildcardX; 12-10-2006 at 12:57 AM..
Reply With Quote
  #3  
Old 12-09-2006, 05:20 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

Even a little more info...

Once a player gets caught in this infinite zoning loop in vex thal, the player has no choice but to kill their client and restart EQ and log back in. Once they log back in, if they just keep going deeper into Vex Thal, they can, in effect, "camp out past" whatever the point is in the client that wants to send the unsolicited zone request.

And I can confirm the physical point in the zone where the client wants to send the Unsolicated Zone message is ALWAYS the same loc.
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
  #4  
Old 12-09-2006, 05:36 PM
John Adams
Demi-God
 
Join Date: Jul 2006
Posts: 1,552
Default

Fwiw, I was poking around The Nest one day and stepped off a cliff, and got into the same zone loop, had to kill the client to escape. Tried to make it happen again, and the second time I just fell to my death as expected. Couldn't reproduce, and didn't think to check logs at the time.

Letting you know I've seen it other than VT.
Reply With Quote
  #5  
Old 12-10-2006, 01:53 AM
bufferofnewbies
Hill Giant
 
Join Date: Dec 2005
Location: Lurking in KY
Posts: 239
Default

It's my weak theory that:

the error in VT is that most of the zoneins (default is at least) actually sets you behind their 'built-in' zoneline. so even when you are technically 'in ' the zone, movement still puts you into the space that the client tells the server you are attempting to zone. They might have specifically put 0, 0 location there to prevent anyone from useing the old zone viewer program to spoil the effects of the new 'big zone'.

Just in this case you are 'attempting' to zone into vex thal, and for some reason.. since you are already there, it errors out and cycles you over and over. I believe it is something about the code that requests current position vs. intended position. And since it is the same zone, it errors out for location.

But, thats just my weak theory with no support.
I wouldn't try to buy a newspaper with it.
Reply With Quote
  #6  
Old 12-10-2006, 01:38 PM
wraithlord98
Sarnak
 
Join Date: Oct 2002
Posts: 53
Default

That's most likely the problem.. question is - has anyone tried "tweaking" the zone in point to see if it corrects it?
Reply With Quote
  #7  
Old 12-10-2006, 02:02 PM
cavedude's Avatar
cavedude
The PEQ Dude
 
Join Date: Apr 2003
Location: -
Posts: 1,988
Default

It's not the zone in point for VT, it's as you are walking down the hallway. All data has been removed from that zone and it still does it. Very odd.
Reply With Quote
  #8  
Old 12-10-2006, 02:30 PM
Dymerius
Sarnak
 
Join Date: Oct 2004
Posts: 74
Default

I have this issue when zoning from HHP to HHK also. If you time it right, you can modify the zone in the characters table and prevent the client from having to kill the application.
Reply With Quote
  #9  
Old 12-10-2006, 03:11 PM
bufferofnewbies
Hill Giant
 
Join Date: Dec 2005
Location: Lurking in KY
Posts: 239
Default

Quote:
Originally Posted by cavedude
It's not the zone in point for VT, it's as you are walking down the hallway. All data has been removed from that zone and it still does it. Very odd.
That is what I mean by a 'hard-coded' zoneline. For another example, remove the zonelines from south karana and run across the bridge. It will set you into a zoneing process also. I know most of the old world zones are set like this, but also many of the newer ('newer than old world') ones are also.

Quote:
Originally Posted by wraithlord98
That's most likely the problem.. question is - has anyone tried "tweaking" the zone in point to see if it corrects it?
This is really the only way to 'default' around the hardcoded zonelines. Best bet is to put the zonein point much further up the hall, or into the first room.
Reply With Quote
  #10  
Old 12-10-2006, 04:36 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

That is about the only thing I have not tried yet. I will try that immediately and report back here on what I find. Thanks for the tip!
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
  #11  
Old 12-10-2006, 05:20 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

I ran the following queries against my world database and I got mixed, but promising results.

Code:
update zone set safe_x = -1589.6, safe_y = 371.3, safe_z = -40.4, canbind = 0 where short_name = 'vexthal';
update zone_points set target_y = 371.3, target_x = -1589.6, target_z = -40.4, target_heading = 64.9 where id = 785;
After a quick reboot of the server, I found I can #zone vexthal and zone in to the updated coordinates and everything is great.. no problems.

But now here is where it gets.. odd. I zoned out to umbral plains and then zoned back into vexthal like a player would, except I didn't zone to the coordinates specified in the query above. Instead it lands me at the original zone in coordinates that were in the database before I updated it. And, of course, then I run into that same infinite zone loop.

I'll test this more tomorrow.
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
  #12  
Old 12-10-2006, 05:30 PM
bufferofnewbies
Hill Giant
 
Join Date: Dec 2005
Location: Lurking in KY
Posts: 239
Default

check doors table
field id:
# 8917

someone might have set the zone as a door also, and it could be triggering before the zoneline does.
Reply With Quote
  #13  
Old 12-10-2006, 08:11 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

Ok I took the time to measure what I am going to call the zone line that is hard coded into the client for vexthal.

This zone-line begins at:

x = -1639.5
y = 372.8
z = -40.4

It ends at:

x = -1419.1
y = 343.0
z = -40.4

Based on this data, the best solution I came up with is to take the advice to move the zone-in point further into the zone, past this hard coded zone-line. I propose doing so with the following queries, which are based upon the PEQ Luclin Release database.

Code:
update zone set safe_x = -1400, safe_y = 343, safe_z = -40.4 where short_name = 'vexthal';
update zone_points set target_y = 343, target_x = -1400, target_z = -40.4, target_heading = 64.4 where id = 785;
update doors set dest_x = -1400, dest_y = 343, dest_z = -40.4, dest_heading = 64.4 where id = 8917;
insert into zone_points (zone, number, target_x, target_y, target_z, target_heading, target_zone_id) VALUES ('vexthal', 1, -741, -1451, 12, 253, 176);
Your mileage may vary on other world databases...

Thank you to all of you who responded to this thread and shared your knowledge with me. I couldn't have solved this problem as nicely as I did without your input.
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
  #14  
Old 12-10-2006, 08:27 PM
bufferofnewbies
Hill Giant
 
Join Date: Dec 2005
Location: Lurking in KY
Posts: 239
Default

Good show. I'm glad you got it to working.
Now to steal your code cause I'm really lazy...

mwhaha
Reply With Quote
  #15  
Old 12-10-2006, 08:36 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default

I moved this thread because it's clear to me now that this bug isn't a bug in the EQEmu server code, but rather just a mechanism behavior of the EQ client.
__________________
Read my developer notes at my blog.

Quote:
If it's not on IRC, it ain't l33t!
Reply With Quote
Reply


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 07:15 PM.


 

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 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3