diff --git a/research/achievements_requirement_type.md b/research/achievements_requirement_type.md index e9dbdce77..d01330bac 100644 --- a/research/achievements_requirement_type.md +++ b/research/achievements_requirement_type.md @@ -1,64 +1,29 @@ -Achievements link to a "pre-requisite type" that defines it as completeed. The list of Types are: +Achievements link to a "pre-requisite type" that defines it as completed. The list of Types are: ``` -0 legacy -1 kill stuff -2 achievement -3 class -4 materia -5 various adventure activities, must complete all the requirements in data_0-7 -6 pre quest // all quests must be complete -7 hunting log -8 discover -9 pre quest // any 1 quest must be complete -10 companion -11 grand company -12 pvp -13 pvp -14 trial -15 beast tribe -16 ??? -17 frontline -18 frontline -19 frontline -20 aether attune +0: complete specific Legacy thing +1: do n things +2: complete n other achievements +3: achieve n levels as class +4: affix n materia to the same piece of gear +5: complete all n of these requirement_2 - 9 things +6: complete a specific quest +7: complete all specific hunting log entries +8: discover every location within... +9: complete any of these requirement_2 - 9 quests (?) +10: level your companion chocobo to rank n +11: achieve PVP rank n with a specific Grand Company +12: participate in n matches in The Fold +13: triumph in n matches in The Fold +14: complete a specific Trial +15: achieve rank n with a specific Beast Tribe +16: there is no type 16 +17: participate in n Frontline matches +18: guide a specific Grand Company to n Frontline victories +19: triumph in n Frontline matches +20: attune to all aether currents in a specific area +21: obtain n minions +22: there is no type 22 +23: complete all Verminion challenges +24: obtain a variety of anima weapon ``` - -Up to date mapping by: Tequila Mockingbird - -```js -switch (achievement.type) { - case 4: // affix n materia to the same piece of gear - case 5: // complete all n of these requirement_2 - 9 things - case 10: // level your companion chocobo to rank n - case 12: // participate in n matches in The Fold - case 13: // triumph in n matches in The Fold - case 17: // participate in n Frontline matches - case 19: // triumph in n Frontline matches - return achievement.requirement_1; - case 1: // do n things - case 3: // achieve n levels as class - case 11: // achieve PVP rank n with a specific Grand Company - case 15: // achieve rank n with a specific Beast Tribe - case 18: // guide a specific Grand Company to n Frontline victories - case 21: // obtain n minions - return achievement.requirement_2; - case 0: // complete specific Legacy thing (some stil relevant) - case 6: // complete a specific quest - case 7: // complete all specific hunting log entries - case 8: // discover every location within... - case 9: // complete any of these requirement_2 - 9 quests (?) - case 14: // complete a specific Trial - case 20: // attune to all aether currents in a specific area - case 23: // complete all Verminion challenges - case 24: // obtain a variety of anima weapon - return 1; - case 2: // complete n other achievements - return 0; // the other achievements have their own weights and this is automatic - case 16: // there is no type 16 - case 22: // there is no type 22 - default: - return null; -} - ``` - diff --git a/research/item_actions.md b/research/item_actions.md index 9d7a01a21..bdf3d8c51 100644 --- a/research/item_actions.md +++ b/research/item_actions.md @@ -1,5 +1,5 @@ ### 1013 -Mount Barding (data_0 = barding id ??) +Mount Barding (data_0 = BuddyEquip) ### 1053 Company Issue Expectorant, Company Issue Tonic, Over-Aspected Cluster, Phoenix Down, all "revive" of some sort diff --git a/research/quest_exp_reward.md b/research/quest_exp_reward.md index 4380ee52e..8e058c8bb 100644 --- a/research/quest_exp_reward.md +++ b/research/quest_exp_reward.md @@ -1,112 +1,60 @@ -Quest experience points are generated using a small equation. Why this is done I am not sure as the values always seem static. +Quest experience points are generated using a small equation. +Why this is done I am not sure as the values always seem static. -### New findings as of 27 September 2017: +### Formula updated: 28th May, 2018 + +**CORE FORMULA** +> `EXP = Quest.ExpFactor * ParamGrow.QuestExpModifier * (45 + (5 * Quest.ClassJobLevel_0)) / 100` + +All formula's use this as their starting point and ADD onto it. + +**QUEST LEVEL 50** +> `EXP = CORE + ((400 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (400 * (Quest.ExpFactor/100))))` + +**QUEST LEVEL 51** +> `EXP = CORE + ((800 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (800 * (Quest.ExpFactor/100))))` + +**QUEST LEVEL 52-59** +> `EXP = CORE + ((2000 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (2000 * (Quest.ExpFactor/100))))` + +**QUEST LEVEL 60-69** +> `EXP =CORE + ((37125 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-60) * (3375 * (Quest.ExpFactor/100))))` + + +----- + +#### Formula in PHP: + +This is example code, it requires getting the `quest` and `paramGrow` prior + +```php +$quest = $service->get("Quest_"); +$paramGrow = $service->get("xiv_ParamGrow_{$quest->ClassJobLevel_0}"); + +// CORE = Quest.ExpFactor * ParamGrow.QuestExpModifier * (45 + (5 * Quest.ClassJobLevel_0)) / 100 +$EXP = $quest->ExpFactor * $paramGrow->QuestExpModifier * (45 + (5 * $quest->ClassJobLevel_0)) / 100; + +// CORE + ((400 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (400 * (Quest.ExpFactor/100)))) +if (in_array($quest->ClassJobLevel_0, [50])) { + $EXP = $EXP + ((400 * ($quest->ExpFactor / 100)) + (($quest->ClassJobLevel_0 - 50) * (400 * ($quest->ExpFactor / 100)))); +} + +// CORE + ((800 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (800 * (Quest.ExpFactor/100)))) +else if (in_array($quest->ClassJobLevel_0, [51])) { + $EXP = $EXP + ((800 * ($quest->ExpFactor / 100)) + (($quest->ClassJobLevel_0 - 50) * (400 * ($quest->ExpFactor / 100)))); +} + +// CORE + ((2000 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-52) * (2000 * (Quest.ExpFactor/100)))) +else if (in_array($quest->ClassJobLevel_0, [52,53,54,55,56,57,58,59])) { + $EXP = $EXP + ((2000 * ($quest->ExpFactor / 100)) + (($quest->ClassJobLevel_0 - 52) * (2000 * ($quest->ExpFactor / 100)))); +} + +// CORE + ((37125 * (Quest.ExpFactor / 100)) + ((Quest.ClassJobLevel_0-60) * (3375 * (Quest.ExpFactor/100)))) +else if (in_array($quest->ClassJobLevel_0, [60,61,62,63,64,65,66,67,68,69])) { + $EXP = $EXP + ((37125 * ($quest->ExpFactor / 100)) + (($quest->ClassJobLevel_0 - 60) * (3375 * ($quest->ExpFactor / 100)))); +} + +// Set +$quest->ExperiencePoints = $EXP; ``` -(BASE is also known as EXP_FACTOR in godbert) - - -LEVEL 1-49 use "Core Formula" - BASE * PARAMGROW * (45 + (5 * LEVEL)) / 100 - -LEVEL 50-51 use "Core Formula" + "Secondary Formula with a 800 modifier and a starting EXP of 800" - CORE + ((800 * (BASE / 100)) + ((LEVEL-52) * (800 * (BASE/100)))) - -LEVEL 52-59 use "Core Formula" + "Secondary Formula with a 2000 modifier and a starting EXP of 2000" - CORE + ((2000 * (BASE / 100)) + ((LEVEL-52) * (2000 * (BASE/100)))) - -LEVEL 60-69 use "Core Formula" + "Secondary Formula with a 2000 modifier and a starting EXP of 37125" - CORE + ((37125 * (BASE / 100)) + ((LEVEL-60) * (3375 * (BASE/100)))) - exp = (A * B * (45 + (5 * C)) / 100) + ((37125 * (A/100)) + ((C-60) * (3375 * (A/100)))) -``` - - -### Note: - -For Quests level 50 or above, an additional formula is done, findings: - -https://docs.google.com/spreadsheets/d/15h13UbfqhxkD9BoQJkLvR66fnZRq6Wn6YxEMRXO9VE4/edit#gid=0 - -```js -// pre level 50 -(exp_factor * param_grow * (45 + 5 * quest_level)) / 100; - -// If quest is 50 or above -(exp_factor * param_grow * (45 + 5 * quest_level)) / 100 + (additive * (base / 100)) -``` - -- The `exp_factor` value can be found in the **Quest** itself, offset: [found here](https://github.com/viion/XIV-Datamining/blob/master/offsets/3.1_list.txt#L756) -- The `param_grow` value is found in the **ParamGrow** file! offset: `quest_exp_modifier` [found here](https://github.com/viion/XIV-Datamining/blob/master/offsets/3.1_list.txt#L725) -- The `quest_level` is the level of the quest, found in the **Quest** itself, offset `class_level_1` (main class) [found here](https://github.com/viion/XIV-Datamining/blob/master/offsets/3.1_list.txt#L737) - -If a quest is a bove 50, it has an additional 10k exp per 100th exp_factor value. - -If the `exp_factor` is 100, you add 10000 exp, if its 200, you add 20000. etc. - -So after the question, you would do: - -```js -exp = (exp_factor * quest_exp_modifier * (45 + 5 * class_level_1)) / 100; - -exp = exp + (exp_factor / 100) * 10000; -``` - -Not fully confirmed this, but it has worked for a few 50+ quests I tested against. - - - - - -____ - -# Random notes - -(BASE is also known as EXP_FACTOR in godbert) - - -LEVEL 1-49 use "Core Formula" - BASE * PARAMGROW * (45 + (5 * LEVEL)) / 100 - -LEVEL 50-51 use "Core Formula" + "Secondary Formula with a 800 modifier and a starting EXP of 800" - CORE + ((800 * (BASE / 100)) + ((LEVEL-52) * (800 * (BASE/100)))) - -LEVEL 52-59 use "Core Formula" + "Secondary Formula with a 2000 modifier and a starting EXP of 2000" - CORE + ((2000 * (BASE / 100)) + ((LEVEL-52) * (2000 * (BASE/100)))) - -LEVEL 60-69 use "Core Formula" + "Secondary Formula with a 2000 modifier and a starting EXP of 37125" - CORE + ((37125 * (BASE / 100)) + ((LEVEL-60) * (3375 * (BASE/100)))) - - - -Level 60+ example - - -exp: (BASE * PARAMGROW * (45 + (5 * LEVEL)) / 100) + ((37125 * (BASE / 100)) + ((LEVEL-60) * (3375 * (BASE/100)))) - - -A = BASE -B = PARAMGROW -C = LEVEL - -exp = (A*B*(45+(5*C))/100)+((37125*(A/100))+((C-60)*(3375*(A/100)))) -sim = () - -Test: -BASE = 200 -PARAMGROW = 135 -LEVEL = 63 - -(200 * 135 * (63 + 9) / 20) + ((-6615 * 200) + (135 * 200 * 63) / 4) = -800550 - -(200 * 135 * (45 + (5 * 63)) / 100) + ((37125 * (200 / 100)) + ((63-60) * (3375 * (200/100)))) = 191700 (correct) - - - -Simplified? - - - - - -(200 * 135 * (63 + 9) / 20) + ((-6615 * 200) + (135 * 200 * 63) / 4) -