doxxx / ffxiv-craft-opt-web

Web frontend for FFXIV Crafting Optimizer service.
zlib License
224 stars 198 forks source link

Name of the Elements always buffing Brand of the Elements by 200% regardless of progress #374

Closed asciisyaez closed 4 years ago

asciisyaez commented 4 years ago

Required Information

Class: GSM Level: 70 Craftsmanship: 975 Control: 856 CP: 385 Recipe Name: Skybuilders' Candelabra Recipe Level: 60 Solver Seed:

Expected Behaviour

Each Brand of Elements cast after the first should have diminished buff due to progress

Step1- Name of the Elements: Progress 0 Step2- Brand of the Elements: Progress 705 Step3 - Brand of the Elements: Progress 1236 Step 4 - Brand of the Elements: Progress 1635

Actual Behaviour

Each Name of Elements cast after Brand of the Elements is always buffed by 200% regardless of progress

Step1- Name of the Elements: Progress 0 Step2- Brand of the Elements: Progress 705 Step3 - Brand of the Elements: Progress 1410 Step 4 - Brand of the Elements: Progress 2002

Steps To Reproduce

Manually input Name of Elements, and 3 Brand of Elements after and monitor Monte Carlo Sim

doxxx commented 4 years ago

Duplicate of #368.

asciisyaez commented 4 years ago

Duplicate of #368.

Separate issue, Previous case was 200% buff being applied without Name of Elements, Current issue is Name of Elements buffing progress by 200% irregardless of current progress.

Monte Carlo Random Example

Action DUR CP QUA PRG IQ CTL QINC BPRG BQUA WAC Cond S/F

0 80 384 7914 0 0 838 0 0 0 0 Normal 0 1 Name of the Elements 80 354 7914 0 0 838 0 0 0 0 Good 1 2 Brand of the Elements 70 348 7914 447 0 838 0 447 0 0 Normal 1 3 Brand of the Elements 60 342 7914 894 0 838 0 447 0 0 Good 1 4 Brand of the Elements 50 336 7914 1341 0 838 0 447 0 0 Normal 1 Progress Check: false, Durability Check: false, CP Check: true, Tricks Check: true, Reliability Check: true, Wasted Actions: 0

27Steven34 commented 4 years ago

Math.min(...) should probably be replaced with Math.max(...) in line 307 of ffxivcraftmodel.js. I am not at my computer atm, but I believe this may fix the issue.

The above is not the fix, my brain was backwards.

I don't know how the multiplier is being calculated, that may also affect this.

27Steven34 commented 4 years ago

Rather than issue 368, I think this is a more direct reporting of one of the problems described in Issue #357

doxxx commented 4 years ago

@asciisyaez what's your progress at 100% efficiency?

doxxx commented 4 years ago

If I understand correctly, Name of Elements + Brand of Elements at 0% progress should produce 300% efficiency progress, but that doesn't match your example of 705 which is 219.6% efficiency (given an 100% efficiency progress of 321).

27Steven34 commented 4 years ago

My setup: GSM Level 63 Craftmanship 547 Control 498 CP 327 Recipe: Koppranickel Rapier (Level 63)

Sim Results

100% efficiency = 111 # Action PRG BPRG 0 0 0
1 Muscle Memory 333 333 2 Name of the Elements 333 0
3 Brand of the Elements 777 444 4 Brand of the Elements 1110 333 5 Brand of the Elements 1429 319 6 Waste Not 1429 0 7 Basic Synthesis 1562 133 8 Basic Synthesis 1695 133 9 Basic Synthesis 1828 133 10 Basic Synthesis 1961 133 11 Basic Synthesis 2094 133

The problem I see above is that the BotE uses in step 4 should be less than the 300% increase shown since progress has already been made by this point.

Actual Results

100% efficiency = 111 # Action PRG BPRG 0 0 0
1 Muscle Memory 333 333 2 Name of the Elements 333 0
3 Brand of the Elements 728 395 4 Brand of the Elements 952 224 5 Brand of the Elements 1142 190 6 Waste Not II 1142 0 7 Basic Synthesis 1275 133 8 Basic Synthesis 1408 133 9 Basic Synthesis 1541 133

I modified the sim to use a linear formula of (-2*<%complete>)+2 and was able to produce the correct numbers in the modified simulator. I will be creating a pull request shortly with these changes.

Note: My GSM is actually level 62, but the sim calculates my 100% progress to be 97 while the game says it is 111. Note: The sim shows incorrect difficulty and max quality values for the Koppranickel Rapier (and likely other recipes). I changed the recipe data on my local version of the sim when executing this test, but will not be pushing these changes as they are not related to this issue.

doxxx commented 4 years ago

I modified the sim to use a linear formula of (-2*<%complete>)+2 and was able to produce the correct numbers in the modified simulator. I will be creating a pull request shortly with these changes.

I was thinking of something like this:

function calcNameOfElementsBonus(s) {
    // Progress is determined by calculating the percentage and rounding down to the nearest percent.
    var percentComplete = Math.floor(s.progressState / s.synth.recipe.difficulty * 100);
    // Bonus ranges from 0 to 200% based on the inverse of the progress.
    return 2 * (100 - percentComplete) / 100;
}

And removing the Math.min where calcNameOfElementsBonus is called.

Note: My GSM is actually level 62, but the sim calculates my 100% progress to be 97 while the game says it is 111.

That's quite a bit off...

Note: The sim shows incorrect difficulty and max quality values for the Koppranickel Rapier (and likely other recipes).

Hmm... I'll rerun the recipe scraper.

27Steven34 commented 4 years ago

I was thinking of something like this:

function calcNameOfElementsBonus(s) {
    // Progress is determined by calculating the percentage and rounding down to the nearest percent.
    var percentComplete = Math.floor(s.progressState / s.synth.recipe.difficulty * 100);
    // Bonus ranges from 0 to 200% based on the inverse of the progress.
    return 2 * (100 - percentComplete) / 100;
}

And removing the Math.min where calcNameOfElementsBonus is called.

Yeah, I think that is mathematically equivalent and a bit easier to read. It should work.

The Math.max and Math.min calls are really just sanity checks at this point. Assuming s.progressState is never less than 0 or greater than s.synth.recipe.difficulty, the bonus will always be between 0% and 200%. That said, explicitly bounding them is probably good practice.

doxxx commented 4 years ago

Deployed to beta site.