Since release, companions suffered from a problem where they would roll dodge BACKWARDS again and again until they were so far out in the boonies the boss would reset.
Last year you guys hard capped the number of times they can dodge per fight, which didn't really fix the problem.
I would like to propose a really simple solution.
As most know, there are calculations done in-game that are client side and things that are server-side. Most UI display stuff is done client side, while most ability related stuff is server side, for obvious reasons. The server needs to validate changes to things like player health and resources, otherwise a cheat program could modify these client side and the server would just accept it. There is crossover where UI stuff is done client side then important things like inventory content is validated server side.
Anything done server side contributes to server load and thus lag.
However, when considering companions roll dodging, it is not really important for the server to validate which direction they roll, save for updating their positional data.
A very simple fix therefor, borrowed directly from Skyrim, would be to create an invisible object at the point the player enters combat with a given mob, and give this object persistent (until combat ends or distance is > some limit) coordinates.
This would be done entirely on the client side, and have no bearing on gameplay or server performance whatsoever. You would not even know they exist. EXCEPT, and again purely on the client side, they could be used to compute companion movement in combat. specifically, when the companion is hit by an enemy, they would run checks:
- Is the companion the target of that enemy
- What is the distance to that enemy's origin point (the invisible marker with coordinates).
- Take action based on the above conditions.
Basically what this would do is allow the game client to tell the companion to never backpedal or roll dodge in a direction that would go outside a maximum safe tether ring from the monster's combat origin point if it would possibly result in them resetting. Instead,
if companion.GetDistance(origin) + <movement action> > safe distance, STRAFE instead of backpedal, or roll dodge a different direction.
The server would then be updated with the positional data, no different than when the player moves around.
This could also be used to help companions avoid "standing in stupid" as they could check this distance and take evasive action if damage source = AOE.
Just a thought.