Blood Rage and Retaliation recast are correct, but don't display a recast. (I think retaliation and defender have never shown a recast, not sure about BR)
You said the recast is correct but it doesn't show up? I think you mean the recast is correct but the
duration doesn't show up?
If so, that's something that even you can fix, actually. Timers considers two things for calculating the duration of a buff. First its base duration and second duration modifiers (skill, gear, augments, buffs, etc.). The latter part is hardcoded into Timers because it would require a lot of work to make a parsable user file that considers all the factors. For example, some buffs last longer if you cast them with another buff on you (like Composure or Perpetuance). And modifiers that give extra seconds are multiplied along with the base duration, others are not. For example, currently we use the following structure to determine a buff's duration:
Code
struct BuffDuration
{
unsigned int Action;
unsigned int Buff;
Targets::Target Target;
float Base;
float Add1;
float Add2;
float Add3;
float Mult1;
float Mult2;
float Mult3;
float Max;
BuffDuration()
: Action(0), Buff(0), Base(0.0), Add1(0.0), Add2(0.0), Add3(0.0), Mult1(1.0), Mult2(1.0), Mult3(1.0), Max(0.0), Target(Targets::Self) { }
float Time()
{
float Result = ((Base * Mult1 + Add1) * Mult2 + Add2) * Mult3 + Add3;
return ((Max > 0) && (Result > Max)) ? Max : Result;
}
};
This shows what is required for a single buff to be calculated correctly. When a piece of gear adds seconds to your duration, you can't just add seconds to a duration variable, you have to add it to the right category and know what it is and is not multiplied by.
The following example of a bard song:
1. You're casting Victory March with a base duration of two minutes.
2. Assume you have Troubadour active which doubles the song duration (i.e. increases duration by 100%).
3. You're using a Carnwenhan 119, which increases the duration by 50%.
Now, how will that compute? Will they add up and increase it by 150%? Or will it increase by 100% first and then again by 50%? Or the other way around? Furthermore:
4. You're wearing a Bihu Justaucorps +1. It adds 4 seconds per Troubadour merit to the duration. We will assume that the player has it fully upgraded (i.e. 5 merits).
How does that factor in? Will those 4*merit seconds be multiplied along with the base duration? Or only one of the two? If so, which one, or maybe even none?
5. You have Soul Voice active, which doubles duration again.
6. You have Clarion Call job points, which add 2 seconds per job point to the duration. We will assume that the player has it fully upgraded (i.e. 5 job points).
You can see what kind of mess you're getting into here. Just flat out adding seconds won't do you much good (which is what Yarnball did, so that's probably what you're thinking of... that's also why Yarnball was borderline useless in many situations). The correct way to resolve this is the following:
1. You set the base duration to 120.
2. Troubador increases the
second multiplication by 1.0 (default: 1.0)
3. Carnwenhan increases the
first multiplication by 0.5 (default: 1.0)
4. The Bihu Justaucorps +1 increases the
first addition by 4.0 × job points (default: 0.0)
5. Soul Voice increases the
third multiplication by 1.0 (default: 1.0)
6. Clarion Call increases the
third addition by 2.0 × job points (default: 0.0)
This results in the following (in seconds):
Code
Duration = ((Base * Mult1 + Add1) * Mult2 + Add2) * Mult3 + Add3
= (( 120 * 1.5 + 20.0) * 2.0 + 0.0 ) * 2.0 + 10.0
= 810
So that's why it's so complicated to calculate and why we have to hardcode it into Timers. This doesn't even consider everything (some spells vary depending on whether or not you cast on yourself or an ally, some vary depending on the buffs that are active on yourself and so on).
However, the base duration is read separately and not hardcoded into Timers. The reason Blood Rage doesn't display at all is because it's missing a "duration" entry in the resources. You can check in Windower/res/job_abilities.lua which job abilities have a base duration and which do not. Two examples:
Code
[267] = {id=267,en="Blood Rage",ja="ブラッドレイジ",element=4,icon_id=367,mp_cost=0,prefix="/jobability",range=11,recast_id=11,targets=1,tp_cost=0,type="JobAbility"},
[269] = {id=269,en="Impetus",ja="インピタス",duration=180,element=0,icon_id=380,mp_cost=0,prefix="/jobability",range=0,recast_id=31,targets=1,tp_cost=0,type="JobAbility"},
You can see Blood Rage missing a duration entry, but Impetus does have one. Fortunately the resources can be adjusted by anyone (although it does require a GitHub account). First, you need to fork this repository:
https://github.com/Windower/ResourceExtractor
Once you have a GitHub account you can just click on the fork button and you're done. This gives you your own copy of the repository in which you can edit things. Next you'll need to find this file:
https://github.com/<YourAccountName>/ResourceExtractor/blob/master/fixes.xml
Make sure to fill in your account name in the URL above. This file contains all manual adjustments we make to parsed resources. The very first section in there already contains the job ability adjustments. Simply take Blood Rage's ID (267, as you can see in the above snippet from Windower/res/job_abilities.lua) and add a new entry for it with its base duration:
Code
<o id="267" duration="30" /> <!-- Blood Rage -->
Then save the change and you have updated your own copy of our resource repository. Next submit a pull request by clicking on the "pull requests" button on the right panel. It should already default to the correct settings (i.e. you submitting a pull request from YourAccountName/ResourceExtractor:master to Windower/ResourceExtractor:master). Then we can accept it and publish the new resources.
In this case I will already do that myself now, this is just some info for you guys on how you can do that yourselves, if you're interested. Of course you can always just let us know about it and we can do it, too, this was just for those among you who are enthusiastic to help :)
Berserk recast is correct but the buff duration is not, missing gear duration from Pummeler's lorica +1 +14 seconds and Agoge Calligae +1 +20 seconds.
Thanks, I'll add that next.
Sorry for delay in getting back to your had to double check.
Np, was asleep anyway :)
... Oh and yes, Timers takes into account merits, but I said that already.
I haven't bothered to check, but does it take JP's into account for things like COR rolls?
Yes. However, we have to encode all of it manually, so it might be that we missed something or made a mistake somewhere. If you notice that anything is missing or incorrect let us know and we can look into it.
Timers
can take pretty much everything into account. Skill, gear, augments, buffs, merits, job points, targets, even environmental factors, if necessary. That doesn't mean that it always does, like I said, every single adjustment has to be made manually, so it's very possible that we forgot something. You can let us know either here or, preferably, on our
issue tracker. We cannot guarantee that we'll check this thread, but we will always get an email notification when someone posts on the issue tracker, and we can manage issues easier on there.