LandSandBoat / server

:sailboat: LandSandBoat - a server emulator for Final Fantasy XI. Just an X-34 landspeeder out for a drive.

Home Page:https://landsandboat.github.io/server/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🔨 Enmity handling and info

Xaver-DaRed opened this issue · comments

I affirm:

  • I understand that if I do not agree to the following points by completing the checkboxes my issue will be ignored.
  • I have read and understood the Contributing Guide and the Code of Conduct.
  • I have searched existing issues to see if the issue has already been opened, and I have checked the commit log to see if the issue has been resolved since my server was last updated.

Describe the feature

Our current system to handle enmity may need some improvements.

PR #5123 linked an article which could lead to some better understanding on how enmity works.
https://forum.square-enix.com/ffxi/threads/30629-Enmity-System-Explanation-and-Planned-Adjustments?p=402769&viewfull=1#post402769

Several things to try to test in retail would be:

  • Enmity caps. (The article speaks about damage volatile enmity and time volatile enmity and mentions caps existing and being the same for all jobs, probably.)
  • Factors to enmity generation and decay.
    • The article mentions decay being about 60 per second (for time volatile enmity) however it also mentioned not wanting to speak about actual numbers, suggesting this may be some kind of base influenced by some other factors.
    • Some years ago, a testing was performed and conluded enmity decay varied depending on character level. This was tested using 2 warriors of different levels, naked and no merits/job-points using provoke. We lack this testing, unfortunately, so we have to take it with a chunk of salt.

Very interesting! Something I noticed from the linked forum post:

Enmity calculation for effect variations
For each level there is data known as standard damage which is used for enmity calculation.
*This value was made to be almost the same damage value as the baseline value when weapon data is created (240 attack delay sword).

The below is how enmity is calculated at the time of dealing “d” damage:
Time-volatile enmity = 240d/standard damage
Damage-volatile enmity= 80
d/standard damage
(Standard damage is obtained based on the level of the monster)
In other words, if you are dealing standard damage every 4 seconds, time-volatile enmity is repeatedly decaying from 240 to 0. Also, damage-volatile enmity is 1/3 of the time-volatile enmity (25% of total enmity), and the coefficient value is 80.

Currently the amount of fire power is much higher than the initially set standard, so I feel we need to rectify the situation where it is easy to reach the cap for volatile enmity by revamping the standard damage used for enmity calculations.

Followed by:

Standard damage (time-volatile)
First, we are planning to make adjustments to the standard damage. Since we are able to set the standard damage for each level, it will be possible to only adjust this for high levels without affecting other levels.

We seem to be using the old values hard coded. It seems that the new system changes these on a per-level basis.

Edit: I'm also possibly misunderstanding those values!

Over the years SE modified capping as well as the amounts of CE/VE produced by various spells and actions (one example is debuff spells had their hate reduced).

There are also certain NM behaviors that suggest the "rules" at least can be altered per-mob as well: abnormal decay rates, abnormal capping, abnormal per-actiontype hate (for example certain specific spell generating more hate than normal)

Things got way more complex. And even on normal mobs I've not seen the current modern "normal" cap pinned down. Used to be 10k and then 30k and those were legit, dunno what it is now.

Used to be 10k and then 30k and those were legit, dunno what it is now.

Wonder if that is related at all to this:

As to whether increasing this cap will make it so players don’t get stuck at the enmity cap, since it is only possible work size-wise for us to raise the value approximately three times of what it is currently, this is not an effective way to go.
While there were suggestions to change the cap values for each job, assuming that the suggestions were based on getting stuck at the cap, if this situation were to arise, it would ultimately boil down to whether you can or cannot maintain the target, so for the current conditions we are currently looking at pairing this with something else.

Not sure what they mean by "work size-wise", but ~30k would be close to max signed 16-bit int, though idk why they'd be using a signed int for that.

I was reading through some patch notes and happened across some general enmity changes that might be relevant.

Feb 2014

Enmity generated from dealing damage has been adjusted.
Enmity generated from dealing damage to enemies of level 100 or greater no longer accumulates as quickly.

The "Enmity+X" and "Enmity-X" statistics found on equipment have undergone the following adjustments.
Those receiving damage from a foe while wearing "Enmity-X" equipment will experience greater enmity reductions, while those wearing "Enmity+X" equipment will experience lesser enmity reductions.

Aug 2014

The maximum value of the equipment attribute “Enmity+” has been increased.

Mar 2015

Enmity Adjustments
The enmity cap has been tripled.
The amount of enmity gained by dealing damage has been lowered.

  • Enmity generated by healing remains the same.
    Enmity will now decrease based on the gap between player/pet level/item level and monster level.
  • Abilities that generate a fixed amount of enmity, such as healing magic and elemental magic, are exempt from this change.

That seems to be it other than some job or ability specific changes.