View Single Post
  #30  
Old 09-07-2008, 06:17 AM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by Angelox View Post
In Unrest building where Undead barkeep spawns, when you pull him, he tries run through the bar, and falls through the floor to the level below
I have code that may fix this. Essentially it changes the way FindBestZ works to a) detect if the mobs position is under the world/inside geometry and b) find all valid Z positions for the current X/Y (by valid, I mean surfaces that are upward facing and not 'under the world' and returns the closest Z.

It adds a bit more runtime overhead. For each possible Z position it casts a ray upwards. If the ray hits a face, it then checks if it is the back or front side of a polygon. E.g. if you were inside a building it would hit the front side of a downward facing poly that makes up the ceiling, so you are not under the world. If you were waist deep in the bar in unrest, the ray would hit the back side of the poly making up the top of the bar, and so you would be classed as under the world and the code would move you to the top of the bar (assuming that is 'nearer' than the floor below).

It absolutely depends on the server having Azone2 generated map files. The reason for this is that the stock azone builds EQG maps with the vertices ordered the opposite way round to S3D maps, basically meaning the 'under the world' test that works for S3D maps, returns the opposite result for EQG maps.

I'll do some more work on it one of these days.
Reply With Quote