Elin:解析/基本ステータス

From Ylvapedia
Revision as of 16:22, 10 December 2024 by Inno (talk | contribs) (→‎Maximum MP)


このページでは、PCとNPC基本ステータスに関する解析情報を記載しています。

最終更新バージョンはEA23.46

最大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);

最大HPは以下の要素によって決まります:

  • レベルに基づくHP:
    • レベル25まで、最大HPはレベルによって修正されます。レベル25以降はレベルアップしても最大HPは上がることはない。(レベルごとに4%)
      • 例えば、キャラクターがレベル1から2に成長する場合、そのHPは基本値の二倍に増加します。
      • 計算式は:(2 * END + 1 * STR + 0.5 * WIL) * (レベルの4%)
    • さらに、1 * ENDと10の基本HPがレベルに関係なく付与されます。
    • つまり、ゲーム開始時(レベル1)において、ENDが最大HPの最も大きな要素(1.04)であり、STR(0.04)や WIL(0.02)よりもはるかに大きい。
    • レベル25以上のキャラクターでは、ENDの各ポイントがHPの基本値を3増加させ、STRが1増加させ、WILが0.5増加させます。
    • HPの基本値はさらにキャラクターの生命値%によって修正されます。
  • キャラクター派閥の修正:
    • キャラクターがPC派閥に属している場合、HPは変わらない。
    • キャラクターがPC派閥に属していない場合、HPはキャラクターのレアリティによってさらに増幅されます。
    • 通常の場合、100%; High Qualityの場合、400%; Legendaryの場合、700%; Mythicalの場合、1000%; Artifactの場合、1300%。
    • キャラクターのレアリティは現在調査中ですが、おそらくネフィアのボスモンスターに適用されます。
  • この値は、キャラクターがPCである場合、孤独な魂のフィートによって最終的に修正されます。

最大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);

最大MPは以下の要素によって決まります:

  • レベルに基づくMP:
    • レベル25まで、最大MPはレベルによって修正されます。レベル25以降はレベルアップしても最大HPは上がることはない。(レベルごとに4%)
      • 例えば、キャラクターがレベル1から2に成長する場合、そのHPは基本値の二倍に増加します。
      • 計算式は:(2 * MAG + 1 * WIL + 0.5 * LER) * (レベルの4%)
    • さらに、1 * MAGと10の基本MPがレベルに関係なく付与されます。
    • つまり、ゲーム開始時(レベル1)において、MAGが最大MPの最も大きな要素(1.04)であり、WIL(0.04)や LER(0.02)よりもはるかに大きい。
    • レベル25以上のキャラクターでは、MAGの各ポイントがMPの基本値を3増加させ、WILが1増加させ、LERが0.5増加させます。
  • MPの基本値はさらにキャラクターのマナ値%によって修正されます。
  • キャラクター派閥の修正:
    • キャラクターがPC派閥に属している場合、MPは変わらない。
    • キャラクターがPC派閥に属していない場合、MPはキャラクターのレアリティによってさらに増幅されます。
    • 通常の場合、100%; High Qualityの場合、350%; Legendaryの場合、600%; Mythicalの場合、850%; Artifactの場合、1100%。
    • キャラクターのレアリティは現在調査中ですが、おそらくネフィアのボスモンスターに適用されます。
  • この値は、キャラクターがPCである場合、孤独な魂のフィートによって最終的に修正されます。

最大スタミナ

	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;

キャラクターの最大スタミナは以下の要素によって決まります:

  • まずは基本体力値を計算します。
    • 1 END は基本体力値を1増加させます。
    • キャラクターが持っているスキルごとに、そのスキルのレベルに応じて基本体力値を増加させます。
    • 例えば、両手武器のレベルが50であれば、基本体力値 += 50。料理のレベルが50であれば、さらに+= 50と続きます。
    • 最大体力値の主な決定要因は、保有するスキルの合計レベルであり、耐久力(END)ではありません。
  • 基本体力値は「CURVE」関数を通過します(基本体力値、30、10、60)。
    • これは、基本体力値が30未満の場合、その値を返すことを意味します。
    • 基本体力値が大きくなるほど、出力のメリットは減少します。例えば:
      • 基本体力値60の場合、出力は44.8です。
      • 基本体力値90の場合、出力は53.36です。
      • 基本体力値300の場合、出力は77.9です。
      • 基本体力値1500の場合、出力は110.0です。
      • 基本体力値15000の場合、出力は195.6です。
      • スタミナの限界こそ存在しませんが、約120を超えると非常に上げにくくなります
  • この出力数値をさらに15増加し、その後にプレイヤーの活力%によって修正されます。
    • したがって、合計スキルレベルが1500のプレイヤーは、最大スタミナが約125になり、そのキャラクターの活力によって修正されます。
    • 耐久力(END)が20で、合計スキルレベルが40の新しいPCは、最大スタミナが60しかありません。

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.

Sanity

There are many factors influencing the sanity of players. We pick the main ones in the code for analysis:

	public void Cure(CureType type, int p = 100, BlessedState state = BlessedState.Normal)
	{
		bool flag = state == BlessedState.Blessed;
		switch (type)
		{
		case CureType.Heal:
		case CureType.Prayer:
			CureCondition<ConFear>();
			CureCondition<ConBlind>(2 * p / 100 + 5);
			CureCondition<ConPoison>(5 * p / 100 + 5);
			CureCondition<ConConfuse>(10 * p / 100 + 10);
			CureCondition<ConDim>(p / 100 + 5);
			CureCondition<ConBleed>(2 * p / 100 + 10);
			if (flag)
			{
				SAN.Mod(-5);
			}
			break;
  • This is utilized when a player pray to god, and if the state of item used is "blessed", the character will have -5 Sanity value.
    • This is pretty strange, considering that the action of praying to god is never an item and can never be assigned the "blessed" state, thus the code is unused.
	case EffectId.RemedyJure:
		TC.HealHP(1000000, HealSource.Magic);
		TC.CureHost(CureType.Jure, power, state);
		TC.Say("heal_jure", TC);
		break;
    if (type == CureType.Jure)
			{
				SAN.Mod(-999);
  • This effect happens when you use the Healing feather (or Jure's pillow?) (Lay hand would be EffectId.JureHeal), and modify you Sanity by -999.
		case Type.Dojin:
			c.PlaySound("wow");
			c.Say("book_decode", c, owner);
			if (!c.IsPC)
			{
				c.Talk("wow");
			}
			switch (BookType)
			{
			case Type.Ero:
				if (c.IsPC)
				{
					EClass.pc.SAN.Mod(-(EClass.rnd(5) + 1));
				}
  • This effect happens when a PC reads strange book that is in the "Ero" type. The Sanity is modded with a random value from -1 to -5.
		case 914:
			flag2 = false;
			if (EClass.rnd(3) != 0)
			{
				if (Chance(30 + eleP / 5, 100))
				{
					Chara.AddCondition<ConConfuse>(eleP);
				}
			}
			else if (Chance(30 + eleP / 5, 100))
			{
				Chara.AddCondition<ConSleep>(eleP);
			}
			if (Chance(50, 100))
			{
				Chara.SAN.Mod(EClass.rnd(2));
			}
			break;
            ...
		case 920:
			flag2 = false;
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConBlind>(eleP / 2);
			}
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConParalyze>(eleP / 2);
			}
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConConfuse>(eleP / 2);
			}
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConPoison>(eleP / 2);
			}
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConSleep>(eleP / 2);
			}
			if (Chance(5 + eleP / 25, 40))
			{
				Chara.AddCondition<ConDim>(eleP / 2);
			}
			if (Chance(30 + eleP / 10, 100))
			{
				Chara.SAN.Mod(EClass.rnd(2));
			}
			break;
            ...
        bool Chance(int a, int max)
		{
			if (dmg > 0 || (origin != null && origin.HasElement(1345)))
			{
				return Mathf.Min(a, max) > EClass.rnd(100);
			}
			return false;
		}
  • There are two types of attacks that specifically increase the Sanity value, this is observed to be the main way people get Sanity value in daily life.
  • Element ID 914 or Mind Attack will have a 50% chance of increase your Sanity value by 0 - 1 for every attack received.
  • Element ID 920 or Chaos Attack will have a chance of increase your Sanity value by 0 - 1 for every attack received. The chance depend on the Element power of the attack, and will range from 30% to 100%.
  • A few other effects exist as a fixed increase in Sanity value. Doing the f thing will give Sanity value +10. Eating Human flesh (canniblism) gives a fixed Sanity value +15.