I know it was supposed to be patched and was probably even worse but on the example of Lancer:
normal attack period is 1.5s which corresponds to 0.6666… Hz attack speed (meaning they do 0.666… attacks every second, calculated as: 1/1.5s = 0.666… Hz).
0.66666… alternatively 0.(6), or 0,6 period 1 is equivalent to 2/3. Its probably different notation in every country.
20% more of attack speed is 0.66666… * 1.2 = 0.8 Hz
converting it back: 1/0.8 = 1.25
attack every 1.25 second.
Alternatively you can think of it as: 20% more attack speed is 1/1.2 attack period.
1/1.2 = 0,83333333…
1.5s * 0,8333333… = ~1,25s
Currently Lancer after the upgrade goes from 1.5 to 1.28 which gives it 18% more attack speed and it is the same fraction for every stable unit(I’ve checked Horseman, Lancer, Yuan Rider, Scout and Imperial Guard).
Correction:
horseman goes from 1,75 to 1,47 which gives 19% and scout goes from 2 to 1,62 which gives 23,5%. I must have made a mistake previously, so it gives different values for every unit, and its not even 18% once.
I’ve tracked the dali upgrade in Essence Editor (and find errors in my original post in the meantime).
there is a value 0.75 for the upgrade which multiplies with cooldown giving current attack speed values.
cooldown for horseman,knight,scout are 0.875s, 1.125s, 1.5s respecively.
But there is also a wind up times:
horseman: 0.5s
knight: 0.5s
scout: 0.375s
and a constant of 0,125 for all cavarly that I wasn’t able to find which is probably some global action cooldown.
I’ve also tracked the old post with the same bug and it seems that the value previously was 0,83, which initially seems correct, but since it only applies to cooldown the upgrade was almost halved for Lancer.
There is no single value of the upgrade that gives 20% attack speed, you need the upgrade multiplier also apply to wind up and wind down(0 for cavalry) intervals, if it is able to multiply 0.125 it would be perfect 20%, but I don’t know if thats possible.
I guess you can also create new identical units and manually adjust cooldown for every unit leaving the rest of the intervals unchanged.
This is not really a bug, just that with the way attack speed buffs are calculated and a 0.125s tick rate rounding, it is nearly impossible to get the actual posted values for the buff. I’ve described how it works here: