Package: ffxiv_stats
ffxiv_statsIntroductionffxiv_statsis a Python package to compute statistics relating to damage variability in Final Fantasy XIV. Variability from hit types (critical, direct, critical-direct) and random +/- 5% rolls are considered. Either moments (mean, variance, and skewness) or damage distributions can be calculated. Both methods are exact and do not rely on sampling.IMPORTANT: This package is still in the early stages of development and still some sharp edges. It is perfectly usable in its current state, but there is is effectively no error checking/handling. There are also no safety rails; if you try to model a rotation that is impossible in-game, you will still get mathematically correct values. Garbage in = garbage out. Also, be aware that class and method names changes are likely.Getting startedBasic usageVariability can be computed using either theRotationclass or one of the role classes (currently onlyHealerandTankis supported, other roles have not been verified yet). TheRotationclass computes variability whend2values are known. The role classes inherits theRotationclass and converts potencies tod2values based on supplied stats. Each role class varies in how it assigns main stats, traits, attack modifier, etc.Using theRotationclassThe rotation is supplied as a Pandas DataFrame with columns and types:action_name: str, unique name of an action. Unique action depends onbuffs,p_i, andl_cpresent.base_action: str, name of an action ignoring buffs. For example, Glare III with chain stratagem and Glare III with mug will have differentaction_names, but the same base_action. Used for grouping actions together.n: int, number of hits.p_n: probability of a normal hit.p_c: probability of a critical hit.p_d: probability of a direct hit.p_cd: probability of a critical-direct hit.d2: int, base damage value of action before any variability.l_c: int, damage multiplier for a critical hit. Value should be in the thousands (1250 -> 125% crit buff).buffs: Total buff strength, or a list of buffs. A 10% buff should be represented as 1.1. A 5% and 10% buff can be represented as either 1.155 or [1.05, 1.10], but the former is preferred. Saving a dataframe with array columns can be finnicky.is_dot: boolean or 0/1, whether the action is a damage over time effect.Using a role classUsing a role class is recommended to go from potencies to d2 values given various stats. Attributes likemain_stat,trait, etc are automatically set to the corresponding values of each role. Rotations are attached using theattach_rotation()method, which inherits theRotationclass. However, therotation_dfargument is similar to the above dataframe, but does have slightly different columnsaction_name: str, unique name of an action. Unique action depends onbuffs,p_i, andl_cpresent.base_action: str, name of an action ignoring buffs. For example, Glare III with chain stratagem and Glare III with mug will have differentaction_names, but the same base_action. Used for grouping actions together.potency: int, potency of the actionn: int, number of hits for the action.p_n: probability of a normal hit.p_c: probability of a critical hit.p_d: probability of a direct hit.p_cd: probability of a critical-direct hit.l_c: int, damage multiplier for a critical hit. Value should be in the thousands (1250 -> 125% crit buff).buffs: Total buff strength, or a list of buffs. A 10% buff should be represented as 1.1. A 5% and 10% buff can be represented as either 1.155 or [1.05, 1.10], but the former is preferred. Saving a dataframe with array columns can be finnicky.damage_type: str saying the type of damage, {'direct', 'magic-dot', 'physical-dot', 'auto', 'pet'}main_stat_add: int, how much to add to the main stat (used to account for medication, if present) when computing d2Instead of ad2column,potency,damage_type, andmain-stat-addare used together with player stats to compute and add ad2column (along with theis-dotcolumn).ExamplesCheck outexamples/for some basic usages.Installationffxiv_statscan be installed from source usingflit. While in the root directory, use the commandflitinstallAlternatively, the package can also be installed with pip.pip install ffxiv_statsRequirementsThe usual scientific computing stack is used:numpy >= 1.20.2matplotlib >= 3.4.2pandas >= 2.0.0scipy >= 1.6.3Aside frompandas, specific versions haven't been tested, butffxiv_statswill probably work with lower versions since fairly basic functionalities are used. There are some typing updates present inpandas2.0.0 which do not have backwards compatibility.