Elin:解析/エーテル病: Difference between revisions
Sakumashiki (talk | contribs) (Elin:Code Analysis/Ether Diseasesの翻訳) |
Sakumashiki (talk | contribs) m (デフォルトソートキーを追加) |
||
Line 346: | Line 346: | ||
[[Category: JA]] | [[Category: JA]] | ||
[[Category: Elin Spoiler]] | [[Category: Elin Spoiler]] | ||
{{DEFAULTSORT:カイセキ,エーテルビョウ}} |
Latest revision as of 14:01, 26 December 2024
このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
バージョン EA23.61: この記事は、Elin の最新の安定版リリースに遅れをとっていますが、信頼できる範囲にあるかもしれません。
このページでは、この世界のエーテル病を分析しています。
エーテル病
エーテル病のコード:索引
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;
- すべてのエーテル病は整数(すなわちレベル)で表されます。病気の種類は16種類あり、それぞれ見ていきます。
- ご自身で効果を確認したい場合は、その数字をコードで検索してみてください。
マナバッテリー(ManaBattery)
case 1564:
ModBase(961, a * 5, hide: false);
break;
- この病気にかかると、1レベルにつき魔法耐性(961)が5上昇します(現在はレベルが1つだけです)。
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);
}
- PCがマナバッテリーを持っていることを検知すると、Gainability(this spell, 100 × チャージ数) の式を呼び出して、魔法杖の使用回数を取り込み、PCにその魔法ストックを与えます。
- これは、願いの杖の使用回数1回につき、100個の願いの魔法ストックが手に入るという意味ではありません。各魔法には、回数のパラメータがそれぞれにあり(詳細はSourceGame/Elementを参照)、回数に応じて、魔法を唱えられる回数が決まります。
- この値は、暗記スキルの補正を受けます。スキルを持っている場合、一律20%が加算され、スキルレベルごとに1%加算されます。 例えば、願いの杖の場合、暗記レベルが80であれば、数値は次のようになります。100 * 1 (願いの回数1) * (80+100+20) / 100 / 100 = 2
- これはかなり良い値です。1本の魔法杖で2回願いを叶えることができます。それを詠唱できるかは別の話ですが。
- その後、PCでない場合、魔法杖の使用回数1回につきマナが50ずつ減っていく。そして魔法杖のチャージが0になる。
エーテルの滴る手(PoisonHand)
case 1565:
ModBase(955, a * 20, hide: false);
break;
- エーテルの滴る手1レベルごとに、毒耐性が20ずつ上昇します(レベルは1つだけです)。
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;
}
- 武器を装備せずに攻撃すると、攻撃はすべて毒属性(915)に変換されます。
- (要確認)コードでは、あなたのダメージに-50%のペナルティが適用されることが示されています。
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;
}
- これは、あなたのバッグの中のすべてのポーションを有毒化させるために使用するコードです。
- まずランダムに50%の確率が適用されるので、50%の確率でポーションは有毒化から免れます。
- また、あなたのポーションのストック全体を一度に変換するようです。
生きとし生けるものの敵(Provoke)
case 1563:
ModBase(77, -a * (3 + num / 4), hide: false);
break;
- これは、病気のレベルごとに(3 + レベル / 4)で、あなたの魅力(Evalue 77)が低下します。レベルは今のところ1のみです。
- コード分析の例を少しだけ残しておきます。詳細は、vPotential = Char.LVを参照してください。
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);
}
- すべての生き物があなたに敵対する。ただし、以下の条件は除きます。
- それが自分のファクションのメンバーまたはペットである。
- 既にあなたに対して敵対している。
- 動物である。
- あなたが町にいない。
- あなたが自分の土地(自分のファクションのエリア)にいる。
- この効果を適用するには、まだ乱数を振る必要があり、可能性はかなり低いようです(2%)。
- この効果は、パーティーの誰かがこのエーテル病にかかっている場合にも適用されるので、注意してください。
if (EClass.pc.party.HasElement(1563) && num < 0)
{
num = num * 30 / 100;
}
- このコードは、カルマのマイナス修正を計算する必要がある場合に表示されます。カルマの減少は30%にカットされ、小数点以下は切り捨てられます。
- つまり、-5は-1に、-1は0になります。
痴呆 (Stupid)
case 1561:
ModBase(61, -a * 15, hide: false);
ModBase(76, -a * (4 + num / 3), hide: false);
break;
- この病気にかかると、マナが一律で15減少した後に、魔力が(4+LV/3)減少します。
衰弱 (Weak)
case 1560:
ModBase(60, -a * 15, hide: false);
ModBase(70, -a * (4 + num / 3), hide: false);
break;
- この病気にかかると、生命が一律で15減少した後に、筋力が(4+LV/3)減少します。
ポーション中毒(Addict)
if (EClass.rnd(30) == 0 && EClass.pc.HasElement(1559))
{
List<Thing> list = EClass.pc.things.List((Thing a) => a.trait is TraitPotion, onlyAccessible: true);
if (list.Count > 0)
{
EClass.pc.Drink(list.RandomItem());
EClass.player.EndTurn();
}
}
- 毎ターン1/30の確率でポーションを消費し、ターンを終了します。
生きた加湿器(Rain)
if (condition == Condition.Fine)
{
foreach (Chara member in EClass.pc.party.members)
{
if (member.HasElement(1558) && EClass.rnd(4) == 0)
{
condition = Condition.Rain;
Msg.Say("drawRain", member);
break;
}
}
}
- 世界の天気が変動するタイミングが来たら、この病気のチームメンバー一人一人が25%の確率で天気を雨に変える判定を行う。
頭部の巨大化 (Head)
case 1557:
ModBase(71, -a * (5 + num / 3), hide: false);
ModBase(72, -a * (4 + num / 4), hide: false);
ModBase(74, a * (6 + num / 2), hide: false);
ModBase(75, a * (2 + num / 6), hide: false);
この病気には以下の4つの主能力への修正をかけます。
- 耐久が (5 + LV / 3) 減少
- 器用が (4 + LV / 4) 減少
- 学習が (6 + LV / 2) 増加
- 意志が (2 + LV / 6) 増加
殺戮への飢え(Violence)
case 1556:
ModBase(64, -a * (10 + num), hide: false);
ModBase(67, a * (5 + num / 2), hide: false);
break;
- この病気は、あなたのDVを-(10+Lv)減少させるが、あなたのダメージ修正を(5+Lv/2)増加させます。
太い首(Neck)
case 1555:
ModBase(65, a * (12 + num), hide: false);
ModBase(77, -a * (5 + num / 5), hide: false);
if (!hint && a > 0)
{
chara?.body.UnequipAll(31);
}
break;
- この病気にかかると、PVが(12+Lv)上昇しますが、魅力が(5+Lv/5)減少します。
- また、首装備を強制的に解除します。
エーテルの翼 (Wing)
case 1554:
ModBase(404, a * 10, hide: false);
ModBase(401, a, hide: false);
ModBase(79, a * (10 + num / 5), hide: false);
if (!hint && a > 0)
{
chara?.body.UnequipAll(33);
}
break;
- この病気は、レベルごとに運搬重量(weightMod)を10%減少させます。
- また、病気のレベルごとに浮遊レベルが与えられます。(浮遊レベルは複数あるのでしょうか?)
- 病気のレベルごとに速度が(10 + LV / 5)増加します。
- 背中装備を強制的に解除します。
第三/四の眼 (Eye)
case 1553:
ModBase(73, a * (5 + num / 3), hide: false);
ModBase(77, -a * (5 + num / 3), hide: false);
break;
- この病気は、あなたの感覚を(5 + LV / 3)だけ向上させますが、同時に同じ量だけあなたの魅力を減少させます。
蹄変化 (Feet)
case 1552:
ModBase(79, a * Mathf.Min(30 + num / 5, 100), hide: false);
if (!hint && a > 0)
{
chara?.body.UnequipAll(39);
}
break;
- この病気にかかると、速度が(30+Lv/5)上昇し、最大で100(Lv350で到達)まで上昇します。
- また、足装備を装備できなくなります。
重い甲殻(Armor)
case 1562:
ModBase(65, a * (15 + num / 2), hide: false);
ModBase(79, -a * (10 + num / 5), hide: false);
break;
- この病気にかかると、あなたのPVは(15+LV/2)増加しますが、速度が(10+LV/5)減少します。
顔のただれ(Ugly)
case 1551:
ModBase(77, -a * (4 + num / 5), hide: false);
break;
- この病気にかかると、レベルごとに(4 + キャラクターLV / 5)だけ魅力が減少します。レベルは3段階あります。
重力発生 (Gravity)
case 1550:
ModBase(404, -a * 10, hide: false);
break;
- この病気にかかると、レベルごとに運搬中重量(weightMod)が10%増加します。レベルは3段階あります。