As shown in the gif - after issuing an attack command the character moves to the target, after reaching the target it sometimes stops for 1-2 seconds before attacking.
The pack in the clip is L2J_Mobius_04.0_GrandCrusade, but this issue exists on L2J master branch as well.
It seems to occur far more frequently when attacking monsters that are farther away (e.g. 600+ distance), and happens very rarely when attacking monsters that are close.
Despawning all NPCs on the server, then spawning a single non-moving monster on a hill and the issue still occurs.
Though it was happening on flat ground (constant Z-axis), after reducing the number of calls to moveToPawn() (there were many for some reason), it stopped occurring on flat surfaces. Even still it continues to happen on varying Z-axis surfaces.
updatePosition() continues to be called even after the character has arrived on the client (server still thinks the character has not arrived I guess).
calls to player.calculateDistance3D(_x, _y, _z) in ValidatePosition are returning 150+ throughout the movement.
if (player.calculateDistance3D(_x, _y, _z) > player.getStat().getMoveSpeed())
{
if (player.isBlinkActive())
{
player.setBlinkActive(false);
}
else
{
player.setXYZ(_x, _y, _z);
}
}
changing
if (player.calculateDistance3D(_x, _y, _z) > player.getStat().getMoveSpeed())
to
if (player.calculateDistance3D(_x, _y, _z) > 0)
seems to improve the situation maybe? I imagine there are terrible side-effects to this
I noticed this bug does not exist on ACIS servers, but comparing the two sources (I understand they are drastically different), I cannot seem to understand what may be causing this.
At this point I'm not sure where to look next. I have started looking at geodata/geoEngine from here, but as I'm pretty new to programming and even newer to L2J server development, I have no clue if this is remotely the correct direction.
I'm hoping someone can give me some advice, or a hint, or anything, where I might look next to solve this.