Elin:Code Analysis/Basics: Difference between revisions

From Ylvapedia
Jump to navigation Jump to search
No edit summary
Line 92: Line 92:
* If the character is golden knight, then this is further modified by 500%.
* If the character is golden knight, then this is further modified by 500%.
* A 45s base carry weight is added to the final result.
* 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:
<syntaxhighlight lang="c#" line="1">
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;
</syntaxhighlight>
* 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.
<syntaxhighlight lang="c#" line="1">
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);
</syntaxhighlight>
* This effect happens when you use the Healing feather (Lay hand would be EffectId.JureHeal), and modify you Sanity by -999.
<syntaxhighlight lang="c#" line="1">
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));
}
</syntaxhighlight>
* 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.
<syntaxhighlight lang="c#" line="1">
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;
}
</syntaxhighlight>
* 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.


[[Category:EN]]
[[Category:EN]]
[[Category:Elin Spoiler]]
[[Category:Elin Spoiler]]

Revision as of 15:41, 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.

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 (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.