mirror of
https://github.com/xivapi/ffxiv-datamining.git
synced 2026-07-24 19:09:10 +00:00
102 lines
3.0 KiB
Markdown
102 lines
3.0 KiB
Markdown
# Item Stats
|
|
|
|
Most of these are kind of obvious, but will add here for safe keeping!
|
|
|
|
# Attack speed
|
|
|
|
Equation: `(attack speed / 1000 `
|
|
|
|
# Auto Attack
|
|
|
|
Equation: `(damage / 3 * attack speed)`
|
|
|
|
Remember to use HQ damage when determining Auto-Attack for HQ items.
|
|
|
|
# DPS
|
|
|
|
Equation: `(damage / 3)`
|
|
|
|
# Finding HQ values
|
|
|
|
HQ values are just the difference, the "additional number", if an item is Accuracy: 32, and HQ Accuracy: 35, the HQ value is listed as 3.
|
|
|
|
An example can be found at offsets: [34, 50, 75 = value, param, hq](https://github.com/viion/XIV-Datamining/blob/master/offsets/Items/items_csv_xivdb_unverified.txt#L15-L17)
|
|
|
|
# Max meld values
|
|
|
|
```csharp
|
|
class ItemLevel {
|
|
public int GetMaximum(BaseParam baseParam) {
|
|
const int Offset = -1;
|
|
return baseParam.Key == 0 ? 0 : Convert.ToInt32(this[Offset + baseParam.Key]);
|
|
}
|
|
}
|
|
|
|
class BaseParam {
|
|
public int GetMaximum(EquipSlotCategory category) {
|
|
const int Offset = 2;
|
|
return category.Key == 0 ? 0 : Convert.ToInt32(this[Offset + category.Key]);
|
|
}
|
|
|
|
public int GetModifier(int role) {
|
|
const int Offset = 24;
|
|
const int Maximum = 12;
|
|
if (role < 0 || role > Maximum)
|
|
return 0;
|
|
return Convert.ToInt32(this[Offset + role]);
|
|
}
|
|
}
|
|
|
|
class Equipment {
|
|
public int GetMaximumParamValue(BaseParam baseParam)
|
|
// Base value for the param based on the item's level
|
|
var maxBase = ItemLevel.GetMaximum(baseParam);
|
|
// Factor, in percent, for the param when applied to the item's equip slot
|
|
var slotFactor = baseParam.GetMaximum(EquipSlotCategory);
|
|
// Factor, in percent, for the param when used for the item's role
|
|
var roleModifier = baseParam.GetModifier(BaseParamModifier);
|
|
|
|
// Rounding appears to use AwayFromZero. Tested with:
|
|
// Velveteen Work Gloves (#3601) for gathering (34.5 -> 35)
|
|
// Gryphonskin Ring (#4526) for wind resistance (4.5 -> 5)
|
|
// Fingerless Goatskin Gloves of Gathering (#3578) for GP (2.5 -> 3)
|
|
return (int)Math.Round(maxBase * slotFactor * roleModifier / 10000.0, MidpointRounding.AwayFromZero);
|
|
}
|
|
}
|
|
```
|
|
|
|
# Overall Item Level
|
|
|
|
This one is really for gearset applications.
|
|
|
|
Item level is `*2` when involving two handed weapons, this is to compensate for off hand. You can test this by equipping only a Sword in game, then equip your Shield of the same item level and record the two values. Then equip a two handed weapon, your character will be the same overal item level as a Sword+Shield.
|
|
|
|
# Category to Slot ID
|
|
```
|
|
// slot id => cat id
|
|
[
|
|
// main hand
|
|
738 => [
|
|
1,2,3,4,5,6,7,8,9,10,84,87,88,89,
|
|
12,14,16,18,20,22,24,26,28,30,32,
|
|
],
|
|
|
|
// off hand
|
|
739 => [
|
|
13,15,17,10,21,23,25,27,29,31,11
|
|
],
|
|
|
|
// head, body, hands, waist, legs, feet, ears, neck, wrists, ring
|
|
740 => [34],
|
|
741 => [35],
|
|
742 => [37],
|
|
743 => [39],
|
|
744 => [36],
|
|
745 => [38],
|
|
746 => [41],
|
|
747 => [40],
|
|
748 => [42],
|
|
748 => [43],
|
|
];
|
|
```
|