Elin:Code Analysis/Ether Diseases: Difference between revisions

From Ylvapedia
Jump to navigation Jump to search
(Created page with "{{spoiler}} ==Ether Diseases (EA23.61)== ===Depiction of Ether Disease in code: an Index=== <syntaxhighlight lang="c#" line="1"> public const int etherManaBattery = 1564; public const int etherPoisonHand = 1565; public const int etherProvoke = 1563; public const int etherStupid = 1561; public const int etherWeak = 1560; public const int etherAddict = 1559; public const int etherRain = 1558; public const int etherHead = 1557; public const int etherViolence = 1556; public...")
 
No edit summary
Line 138: Line 138:
* A random chance of 50% is applied first, so there is 50% chance your potion will be spared.
* A random chance of 50% is applied first, so there is 50% chance your potion will be spared.
* It also looks like it will transform a whole stack of your potions at once.
* It also looks like it will transform a whole stack of your potions at once.
=== Provoke (Enemy Of All Living Things) ===
<syntaxhighlight lang="c#" line="1">
    case 1563:
ModBase(77, -a * (3 + num / 4), hide: false);
break;
</syntaxhighlight>
* This negatively modify your charisma (Evalue 77) by (3 + Character level / 4) per level of disease.
** We saved a bit of code analysis for esthetic purpose. See vPotential = Char.LV for more detail.
<syntaxhighlight lang="c#" line="1">
    if (!owner.IsPCFactionOrMinion && EClass.rnd(owner.isSynced ? 50 : 2000) == 0 && owner.hostility == Hostility.Neutral && EClass.pc.party.HasElement(1563)
        && !owner.race.tag.Contains("animal") && EClass._zone.IsTown && !EClass._zone.IsPCFaction)
{
EClass.pc.DoHostileAction(owner);
}
</syntaxhighlight>
* Every living thing will turn against you, unless:
** It is your own faction member or pets.
** It is not Neutral towards you already.
** It is an animal.
** You are not in a town.
** You are in your own Faction area.
* A random number still need to be rolled for this effect to apply, and it looks like the possibility is pretty, pretty low (2%).
* This effect apply if ANYONE in your party have this ether disease, so watch out.
<syntaxhighlight lang="c#" line="1">
    if (EClass.pc.party.HasElement(1563) && num < 0)
{
num = num * 30 / 100;
}
</syntaxhighlight>
* This code appears when a Karma negative modification need to be calculated. Your karma decrease will be cut to 30%, round down to nearest integer.
* So -5 becomes -1, -1 becomes 0.


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

Revision as of 01:48, 21 December 2024

Ether Diseases (EA23.61)

Depiction of Ether Disease in code: an Index

public const int etherManaBattery = 1564;
public const int etherPoisonHand = 1565;
public const int etherProvoke = 1563;
public const int etherStupid = 1561;
public const int etherWeak = 1560;
public const int etherAddict = 1559;
public const int etherRain = 1558;
public const int etherHead = 1557;
public const int etherViolence = 1556;
public const int etherNeck = 1555;
public const int etherWing = 1554;
public const int etherEye = 1553;
public const int etherFeet = 1552;
public const int etherArmor = 1562;
public const int etherUgly = 1551;
public const int etherGravity = 1550;
  • All ether disease is depicted with integer (i.e. level). There are 16 kinds of diseases, and we will review each of them.
  • If you want to see for the effect yourself, just search for that number in code.

Mana Battery

    case 1564:
			ModBase(961, a * 5, hide: false);
			break;
  • This disease increase your magic resistance (961) by 5 per level (there is only one level currently).
public void TryAbsorbRod(Thing t)
	{
		if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
		{
			return;
		}
		Say("absorbRod", this, t);
		TraitRod rod = t.trait as TraitRod;
		bool flag = false;
		if (rod.source != null)
		{
			using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
			if (enumerator.MoveNext())
			{
				SourceElement.Row current = enumerator.Current;
				if (IsPC)
				{
					GainAbility(current.id, t.c_charges * 100);
					flag = true;
				}
			}
		}
		if (!flag)
		{
			mana.Mod(-50 * t.c_charges);
		}
		t.c_charges = 0;
		LayerInventory.SetDirty(t);
	}
    ...
    public void GainAbility(int ele, int mtp = 100)
	{
		Element orCreateElement = elements.GetOrCreateElement(ele);
		if (orCreateElement.ValueWithoutLink == 0)
		{
			elements.ModBase(orCreateElement.id, 1);
		}
		if (orCreateElement is Spell)
		{
			int num = mtp * orCreateElement.source.charge * (100 + Evalue(307) + (HasElement(307) ? 20 : 0)) / 100 / 100;
			if (orCreateElement.source.charge == 1)
			{
				num = 1;
			}
			orCreateElement.vPotential += Mathf.Max(1, num / 2 + EClass.rnd(num / 2 + 1));
		}
		Say("spell_gain", this, orCreateElement.Name);
		LayerAbility.SetDirty(orCreateElement);
	}
  • Once detect PC have mana battery, it will take the charges in a rod, then call Gainability(this spell, 100 * charge number) to give PC this spell.
  • This does not mean you get 100 wish spells for 1 charge of wish rod! Each spell have a unique charge parameter (see SourceGame/Element for more), and depend on the charge number it will give you number of spell casting.
    • This value is modified by your memorization skill. If you have the skill, a flat 20% is added, then for each skill level, 1% added.
    • For example, for a wish rod, and you have lvl 80 memorization, the num will equal to = 100 * 1 (Wish has a charge number of 1) * (80+100+20) / 100 / 100 = 2
    • Which is pretty good, yes, you get 2 wishes out of 1 rod, but can you cast it, hum?
  • After that, if you are not PC, your mana will be drained by 50 per charge of rod. Then the rod goes to 0 charges.

Poison Hand

    case 1565:
			ModBase(955, a * 20, hide: false);
			break;
  • Each level of poison hand raise your poison resistance by 20 (there is only 1 level).
    if (conWeapon == null && weapon == null && (CC.MainElement != Element.Void || CC.HasElement(1565)))
			{
				num5 = (CC.HasElement(1565) ? 915 : CC.MainElement.id);
				num6 = CC.Power / 3 + EClass.rnd(CC.Power / 2);
				if (CC.MainElement != Element.Void)
				{
					num6 += CC.MainElement.Value;
				}
				showEffect = false;
				num7 = 50;
			}
  • When you attack with no weapon, all your attack will be transformed into element Poison (915).
  • We see in the code a -50% penalty will be applied to your damage as well but this need confirmation.
    public Thing TryPoisonPotion(Thing t)
	{
		if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
		{
			string text = EClass.sources.things.rows.Where((SourceThing.Row a) => a._origin == "potion" && a.tag.Contains("neg") && a.chance > 100).ToList().RandomItemWeighted((SourceThing.Row a) => a.chance)
				.id;
			Say("poisonDrip", this);
			int num = t.Num;
			t.Destroy();
			t = ThingGen.Create(text).SetNum(num);
		}
		return t;
	}
  • This is the code use to make all your potions in your bag poison.
  • A random chance of 50% is applied first, so there is 50% chance your potion will be spared.
  • It also looks like it will transform a whole stack of your potions at once.

Provoke (Enemy Of All Living Things)

    case 1563:
			ModBase(77, -a * (3 + num / 4), hide: false);
			break;
  • This negatively modify your charisma (Evalue 77) by (3 + Character level / 4) per level of disease.
    • We saved a bit of code analysis for esthetic purpose. See vPotential = Char.LV for more detail.
    if (!owner.IsPCFactionOrMinion && EClass.rnd(owner.isSynced ? 50 : 2000) == 0 && owner.hostility == Hostility.Neutral && EClass.pc.party.HasElement(1563) 
        && !owner.race.tag.Contains("animal") && EClass._zone.IsTown && !EClass._zone.IsPCFaction)
		{
			EClass.pc.DoHostileAction(owner);
		}
  • Every living thing will turn against you, unless:
    • It is your own faction member or pets.
    • It is not Neutral towards you already.
    • It is an animal.
    • You are not in a town.
    • You are in your own Faction area.
  • A random number still need to be rolled for this effect to apply, and it looks like the possibility is pretty, pretty low (2%).
  • This effect apply if ANYONE in your party have this ether disease, so watch out.
    if (EClass.pc.party.HasElement(1563) && num < 0)
				{
					num = num * 30 / 100;
				}
  • This code appears when a Karma negative modification need to be calculated. Your karma decrease will be cut to 30%, round down to nearest integer.
  • So -5 becomes -1, -1 becomes 0.