mirror of
https://github.com/xivapi/ffxiv-datamining.git
synced 2026-08-01 14:28:41 +00:00
Merge branch 'master' of https://github.com/viion/ffxiv-datamining
This commit is contained in:
@@ -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
|
0: complete specific Legacy thing
|
||||||
1 kill stuff
|
1: do n things
|
||||||
2 achievement
|
2: complete n other achievements
|
||||||
3 class
|
3: achieve n levels as class
|
||||||
4 materia
|
4: affix n materia to the same piece of gear
|
||||||
5 various adventure activities, must complete all the requirements in data_0-7
|
5: complete all n of these requirement_2 - 9 things
|
||||||
6 pre quest // all quests must be complete
|
6: complete a specific quest
|
||||||
7 hunting log
|
7: complete all specific hunting log entries
|
||||||
8 discover
|
8: discover every location within...
|
||||||
9 pre quest // any 1 quest must be complete
|
9: complete any of these requirement_2 - 9 quests (?)
|
||||||
10 companion
|
10: level your companion chocobo to rank n
|
||||||
11 grand company
|
11: achieve PVP rank n with a specific Grand Company
|
||||||
12 pvp
|
12: participate in n matches in The Fold
|
||||||
13 pvp
|
13: triumph in n matches in The Fold
|
||||||
14 trial
|
14: complete a specific Trial
|
||||||
15 beast tribe
|
15: achieve rank n with a specific Beast Tribe
|
||||||
16 ???
|
16: there is no type 16
|
||||||
17 frontline
|
17: participate in n Frontline matches
|
||||||
18 frontline
|
18: guide a specific Grand Company to n Frontline victories
|
||||||
19 frontline
|
19: triumph in n Frontline matches
|
||||||
20 aether attune
|
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;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
### 1013
|
### 1013
|
||||||
Mount Barding (data_0 = barding id ??)
|
Mount Barding (data_0 = BuddyEquip)
|
||||||
|
|
||||||
### 1053
|
### 1053
|
||||||
Company Issue Expectorant, Company Issue Tonic, Over-Aspected Cluster, Phoenix Down, all "revive" of some sort
|
Company Issue Expectorant, Company Issue Tonic, Over-Aspected Cluster, Phoenix Down, all "revive" of some sort
|
||||||
|
|||||||
+57
-109
@@ -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_<id>");
|
||||||
|
$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)
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user