Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correct behavior over hills #29

Open
namreeb opened this issue Mar 22, 2022 · 6 comments
Open

Correct behavior over hills #29

namreeb opened this issue Mar 22, 2022 · 6 comments

Comments

@namreeb
Copy link
Owner

namreeb commented Mar 22, 2022

When pathfinding over hilly ADT terrain free from obstacles, we likely need intermediate points on the path to give the unit proper elevation along the way.

@namreeb
Copy link
Owner Author

namreeb commented Mar 23, 2022

The below log from classic TBC shows that intermediate points for Z correction ARE needed. Note that the 0.25 increments in the delta Z values are due to spline point packing, and not indicative of a pattern in the Z correction.

Map: 0 Position: X: -8722.004 Y: -164.2404 Z: 85.61569
(MovementMonsterSpline) Id: 44015187
(MovementMonsterSpline) Destination: X: 0 Y: 0 Z: 0
(MovementMonsterSpline) CrzTeleport: False
(MovementMonsterSpline) StopDistanceTolerance: 0
(MovementMonsterSpline) (MovementSpline) Flags: 18874368 (CanSwim, Unknown5)
(MovementMonsterSpline) (MovementSpline) Elapsed: 0
(MovementMonsterSpline) (MovementSpline) MoveTime: 7835
(MovementMonsterSpline) (MovementSpline) FadeObjectTime: 0
(MovementMonsterSpline) (MovementSpline) Mode: 0
(MovementMonsterSpline) (MovementSpline) TransportGUID: Full: 0x0
(MovementMonsterSpline) (MovementSpline) VehicleSeat: -1
(MovementMonsterSpline) (MovementSpline) Face: 2 (Target)
(MovementMonsterSpline) (MovementSpline) PointsCount: 1
(MovementMonsterSpline) (MovementSpline) VehicleExitVoluntary: False
(MovementMonsterSpline) (MovementSpline) Interpolate: False
(MovementMonsterSpline) (MovementSpline) PackedDeltasCount: 31
(MovementMonsterSpline) (MovementSpline) HasSplineFilter: False
(MovementMonsterSpline) (MovementSpline) HasSpellEffectExtraData: False
(MovementMonsterSpline) (MovementSpline) HasJumpExtraData: False
(MovementMonsterSpline) (MovementSpline) FaceDirection: 0
(MovementMonsterSpline) (MovementSpline) FacingGUID: <redacted>
(MovementMonsterSpline) (MovementSpline) [0] Points: X: -8703.304 Y: -197.8098 Z: 91.31413
(MovementMonsterSpline) (MovementSpline) [0] WayPoints: X: -8721.154 Y: -165.0251 Z: 86.2149
(MovementMonsterSpline) (MovementSpline) [1] WayPoints: X: -8720.904 Y: -166.0251 Z: 86.4649 delta z = 0.25
(MovementMonsterSpline) (MovementSpline) [2] WayPoints: X: -8720.404 Y: -166.7751 Z: 86.9649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [3] WayPoints: X: -8719.404 Y: -168.5251 Z: 87.9649 delta z = 1.0
(MovementMonsterSpline) (MovementSpline) [4] WayPoints: X: -8718.904 Y: -169.5251 Z: 88.4649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [5] WayPoints: X: -8718.404 Y: -170.2751 Z: 89.4649 delta z = 1.0
(MovementMonsterSpline) (MovementSpline) [6] WayPoints: X: -8717.904 Y: -171.2751 Z: 90.2149 delta z = 0.75
(MovementMonsterSpline) (MovementSpline) [7] WayPoints: X: -8717.404 Y: -172.0251 Z: 91.4649 delta z = 1.25
(MovementMonsterSpline) (MovementSpline) [8] WayPoints: X: -8716.904 Y: -173.0251 Z: 91.9649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [9] WayPoints: X: -8716.404 Y: -173.7751 Z: 92.4649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [10] WayPoints: X: -8715.904 Y: -174.7751 Z: 92.9649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [11] WayPoints: X: -8715.404 Y: -175.5251 Z: 93.4649 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [12] WayPoints: X: -8714.904 Y: -176.5251 Z: 94.2149 delta z = 0.75
(MovementMonsterSpline) (MovementSpline) [13] WayPoints: X: -8714.404 Y: -177.2751 Z: 94.7149 delta z = 0.5
(MovementMonsterSpline) (MovementSpline) [14] WayPoints: X: -8713.904 Y: -178.2751 Z: 96.4649 delta z = 1.75
(MovementMonsterSpline) (MovementSpline) [15] WayPoints: X: -8712.904 Y: -180.0251 Z: 98.2149
(MovementMonsterSpline) (MovementSpline) [16] WayPoints: X: -8712.654 Y: -180.7751 Z: 98.7149
(MovementMonsterSpline) (MovementSpline) [17] WayPoints: X: -8712.154 Y: -181.5251 Z: 99.7149
(MovementMonsterSpline) (MovementSpline) [18] WayPoints: X: -8711.904 Y: -182.2751 Z: 99.9649
(MovementMonsterSpline) (MovementSpline) [19] WayPoints: X: -8711.404 Y: -183.2751 Z: 100.2149
(MovementMonsterSpline) (MovementSpline) [20] WayPoints: X: -8709.904 Y: -185.7751 Z: 99.9649
(MovementMonsterSpline) (MovementSpline) [21] WayPoints: X: -8708.904 Y: -187.5251 Z: 99.2149
(MovementMonsterSpline) (MovementSpline) [22] WayPoints: X: -8708.404 Y: -188.5251 Z: 98.4649
(MovementMonsterSpline) (MovementSpline) [23] WayPoints: X: -8707.904 Y: -189.2751 Z: 98.7149
(MovementMonsterSpline) (MovementSpline) [24] WayPoints: X: -8707.404 Y: -190.2751 Z: 97.9649
(MovementMonsterSpline) (MovementSpline) [25] WayPoints: X: -8706.904 Y: -191.0251 Z: 97.2149
(MovementMonsterSpline) (MovementSpline) [26] WayPoints: X: -8706.404 Y: -192.0251 Z: 96.2149
(MovementMonsterSpline) (MovementSpline) [27] WayPoints: X: -8705.904 Y: -192.7751 Z: 94.7149
(MovementMonsterSpline) (MovementSpline) [28] WayPoints: X: -8705.404 Y: -193.7751 Z: 93.4649
(MovementMonsterSpline) (MovementSpline) [29] WayPoints: X: -8704.904 Y: -194.5251 Z: 92.4649
(MovementMonsterSpline) (MovementSpline) [30] WayPoints: X: -8703.904 Y: -196.2751 Z: 91.7149

@pikdum
Copy link

pikdum commented Sep 21, 2024

Could this be what occasionally causes these issues near hills?

recording_1726223493185.mp4
recording_1726885858673.mp4

@devw4r
Copy link
Contributor

devw4r commented Sep 22, 2024

Could this be what occasionally causes these issues near hills?

No, that seems to be a wrong implementation of movement/spline handling server-side.

@pikdum
Copy link

pikdum commented Sep 22, 2024

Yeah, that's very possible. I couldn't figure out how splines work, so I'm doing movement one point at a time right now.
Basically using namigator to get a path, then looping through it to move to every point in order.

@devw4r
Copy link
Contributor

devw4r commented Sep 23, 2024

We also do one point at a time except for taxi flights. Im not sure if you are updating the spline server side but once you trigger a monster move command you need to also update/sync the spline server side in order to keep the mob position updated so the next point you use starts from the last position of previous spline. You will probably need to implement some in-game visual helper like leaving a trail for movement, that way you can tell if you're synced with the spline the client is executing.

https://streamable.com/73spub

@pikdum
Copy link

pikdum commented Sep 23, 2024

Yeah, I'm doing some basic syncing for each point in a path.
No issues with having mobs walk properly around obstacles, at least.

I've really only noticed weirdness rarely on hills and in cities.
I'll have to test more to see what exactly is going on - adding a visual helper is a good idea.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants