Elin:Code Analysis/Basics: Difference between revisions

From Ylvapedia
Jump to navigation Jump to search
(Add stamina calculation... but I'm still not sure what vBase is, can someone help?)
Line 74: Line 74:
* Each point of base endurance increase the base stamina number by 1.
* Each point of base endurance increase the base stamina number by 1.
* ('''Need confirmation''') For each skill a chracter have, increase this base stamina number by the level of that skill.
* ('''Need confirmation''') For each skill a chracter have, increase this base stamina number by the level of that skill.
** We suspect that the reason for using number of skill level instead of character level is the existence of Kumiromi's experience.
* The base stamina number go through a CURVE function with (base, 30, 10, 60).
* The base stamina number go through a CURVE function with (base, 30, 10, 60).
** This means, if the base stamina is less than 30, return that value.
** This means, if the base stamina is less than 30, return that value.
Line 81: Line 82:
** Base stamina 300, output is 77.9
** Base stamina 300, output is 77.9
* The output number is increased by 15, then modified by the vigor(Evalue(62))% of player.
* The output number is increased by 15, then modified by the vigor(Evalue(62))% of player.
==Carryweight Limit==
==Carryweight Limit==
<syntaxhighlight lang="c#" line="1">
<syntaxhighlight lang="c#" line="1">

Revision as of 15:12, 10 December 2024

This page contains code analysis on the basic stats of characters (PC and non-PC). This page is updated to EA23.46

Maximum HP

public override int MaxHP => Mathf.Max(1, ((base.END * 2 + base.STR + base.WIL / 2) * Mathf.Min(base.LV, 25) / 25 + base.END + 10) 
                             * Evalue(60) / 100 * ((IsPCFaction ? 100 : (100 + (int)base.rarity * 300)) + (IsPC ? (EClass.player.lastEmptyAlly * Evalue(1646)) : 0)) / 100);

The Maximum HP is determined by the following factors:

  • Level-based HP: Until level 25, the HP Maximum will be modified by the base number of level. After level 25, this value becomes constant. (4% per level)
    • For example, a character grow from lvl 1 to 2, its HP will increase by base of *2.
    • This level-base will apply to (2 * END + 1 * STR + 0.5 * WIL) * (4% * level)
  • Another 1 * END base HP and 10 HP will be awarded independent of level.
    • This means, at the start of the game (lvl 1), Endurance is the biggest factor (1.04) of HP Maximum far greater than STR (0.04) and WIL (0.02).
    • For character higher than level 25, Each point of END increase HP base by 3, STR by 1, and WIL by 0.5.
  • The HP base is further modified by Character Life (Evalue(60) / 100
  • Character Faction modifier:
    • If character is in PC faction, the HP is modified by 100%
    • If character is not in PC faction, HP is further amplified by the rarity of character.
      • If normal, 100%; if superior, 400%; if legendary, 700%, if mythical, 1000%, if artifact, 1300%.
    • The rarity of character is under investigation, but probably apply to boss monsters in nefias.
  • This value is finally modified by the Lonelysoul feat if the character is PC.

Maximum MP

public override int max => Mathf.Max(1, ((BaseStats.CC.MAG * 2 + BaseStats.CC.WIL + BaseStats.CC.LER / 2) * Mathf.Min(BaseStats.CC.LV, 25) / 25 + BaseStats.CC.MAG + 10) 
                           * BaseStats.CC.Evalue(61) / 100 * ((BaseStats.CC.IsPCFaction ? 100 : (100 + (int)BaseStats.CC.rarity * 250)) 
                           + (BaseStats.CC.IsPC ? (EClass.player.lastEmptyAlly * BaseStats.CC.Evalue(1646)) : 0)) / 100);

The Maximum MP is determined by the following factors:

  • Level-based HP: Until level 25, the MP Maximum will be modified by the base number of level. After level 25, this value becomes constant. (4% per level)
    • For example, a character grow from lvl 1 to 2, its HP will increase by base of *2.
    • This level-base will apply to (2 * MAG + 1 * WIL + 0.5 * LER) * (4% * level)
  • Another 1 * MAG base MP and 10 MP will be awarded independent of level.
    • This means, at the start of the game (lvl 1), Magic is the biggest factor (1.04) of HP Maximum far greater than WIL (0.04) and LER (0.02).
    • For character higher than level 25, Each point of MAG increase MP base by 3, WIL by 1, and LER by 0.5.
  • The MP base is further modified by Character Mana (Evalue(61) / 100
    • If character is not in PC faction, HP is further amplified by the rarity of character.
      • If normal, 100%; if superior, 350%; if legendary, 600%, if mythical, 850%, if artifact, 1100%.
    • The rarity of character is under investigation, but probably apply to boss monsters in nefias.
  • This value is finally modified by the Lonelysoul feat if the character is PC.

Maximum Stamina

	public void CalculateMaxStamina()
	{
		int num = base.END;
		int num2 = 0;
		foreach (Element value in elements.dict.Values)
		{
			if (value.source.category == "skill")
			{
				num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
			}
		}
		num2 = EClass.curve(num, 30, 10, 60);
		if (num2 < 10)
		{
			num2 = 10;
		}
		_maxStamina = num2 + 15;
	}
    ....
    public override int max => BaseStats.CC._maxStamina * BaseStats.CC.Evalue(62) / 100;

The maximum stamina of chracters is determined by the following:

  • Each point of base endurance increase the base stamina number by 1.
  • (Need confirmation) For each skill a chracter have, increase this base stamina number by the level of that skill.
    • We suspect that the reason for using number of skill level instead of character level is the existence of Kumiromi's experience.
  • The base stamina number go through a CURVE function with (base, 30, 10, 60).
    • This means, if the base stamina is less than 30, return that value.
    • For each point of additional base stamina, the return is diminished.
    • Base stamina 60, output is 44.8
    • Base stamina 90, output is 53.36
    • Base stamina 300, output is 77.9
  • The output number is increased by 15, then modified by the vigor(Evalue(62))% of player.

Carryweight Limit

public override int WeightLimit => (base.STR * 500 + base.END * 250 + Evalue(207) * 2000) * ((!HasElement(1411)) ? 1 : 5) + 45000;

The carryweight limit of characters is determined by the following factors:

  • Base limit is 0.5 * STR + 0.25 * END + 2 * Weightlifting skill. (Each "s" in game is 1000 in code.)
  • If the character is golden knight, then this is further modified by 500%.
  • A 45s base carry weight is added to the final result.