解析/信仰
![]() | このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
信仰心と捧げ物
バージョン EA23.87: この記事は、Elin の最新の安定版リリースに遅れをとっていますが、信頼できる範囲にあるかもしれません。
神のご褒美を貰うのに必要な信仰心
int num = EClass.pc.Evalue(85);
if (giftRank == 0 && (num >= 15 || EClass.debug.enable))
{
Talk("pet");
Chara chara = CharaGen.Create(source.rewards[0]);
EClass._zone.AddCard(chara, point);
chara.MakeAlly();
chara.PlayEffect("aura_heaven");
giftRank = 1;
return true;
}
if (source.rewards.Length >= 2 && giftRank == 1 && (num >= 30 || EClass.debug.enable))
{
Talk("gift");
string[] array = source.rewards[1].Split('|');
string[] array2 = array;
foreach (string text in array2)
{
Reforge(text, point, text == array[0]);
}
giftRank = 2;
return true;
}
- EA23.61の時点で、それぞれの神には2つのご褒美を貰える段階があり、それぞれ信仰心レベル15と30に設定されています。 それぞれのレベルに達した後、手動で神に祈ることでご褒美がもらえます。
信仰心の深度を示すメッセージ
int num = Mathf.Max(c.Evalue(306), 1);
int num2 = 4;
if (orCreateElement.vBase >= num)
{
c.elements.SetBase(orCreateElement.id, num);
}
else
{
num2 = Mathf.Clamp(orCreateElement.vBase * 100 / num / 25, 0, 3);
}
if (num2 == 4 || orCreateElement.Value != value)
{
Msg.Say("piety" + num2, c, c.faith.TextGodGender);
}
- 上記のコードは、あなたの信仰心がレベルアップしたときのメッセージを制御しています。
- メッセージは全部で5つあり(0~4)、num2によってどれになるかが決まります。
- num2は、あなたの(信仰心÷信仰スキル)×4で計算され、小数点以下は切り捨てられます。
- つまり、 25%未満ならnum2 = 0、25%~50%ならnum2 = 1、50%~75%ならnum2 = 2、>75%ならnum2 = 3 のメッセージが流れます。
- 信仰心が最大レベルに達していると、num2 = 4 のメッセージが流れます。
捧げ物の価値
public int GetOfferingValue(Thing t, int num = -1)
{
if (num == -1)
{
num = t.Num;
}
int num2 = 0;
if (t.source._origin == "meat")
{
num2 = Mathf.Clamp(t.SelfWeight / 10, 1, 1000);
if (t.refCard == null)
{
num2 /= 10;
}
}
else
{
string[] cat_offer = source.cat_offer;
foreach (string key in cat_offer)
{
if (t.category.IsChildOf(key))
{
num2 = Mathf.Clamp(t.SelfWeight / 10, 50, 1000);
num2 *= EClass.sources.categories.map[key].offer / 100;
break;
}
}
}
if (num2 == 0)
{
return 0;
}
if (t.IsDecayed)
{
num2 /= 10;
}
num2 = num2 * (100 + Mathf.Min(t.LV * 2, 100) + (t.HasElement(757) ? 50 : 0)) / 100;
return Mathf.Max(num2, 1) * num;
}
- 捧げ物の価値は以下の順で計算されます。
- num は捧げたアイテムの個数
- num2 はアイテム1個あたりの価値で、最小値は1です。
- 肉を捧げた場合、以下の通りになります。
- 肉の重量は10で割られ(weight値1000=1.0sとなるため)、最小値は1、最大値は1000となります。
- 肉に名前がない場合(ハンマー解体などで手に入れた肉の場合)、その値はさらに10で割られます。
- 除算演算子は最も近いintに切り捨てられるため、0.1s以下の名前のない肉を提供する場合、捧げ物の価値が0になる可能性があります。
- 捧げ物が神の好物(肉以外)の場合、以下の通りになります。
- アイテムの重量は10で割られますが、最小値は50、最大値は1000となります。
- このため、アイテムの重量は別でカウントされていますが、0.5s未満のアイテムは0.5sとして扱われます。
- 一部のアイテムカテゴリーには価値に一定の倍率がかかります。
- EA23.61時点では、楽器(×5)、魔法杖(×3)、触媒(×3)、古の書(×5)、魔法書(×4)、技術書(×10)、地図(×4)に倍率がかかります。(この中には、現状どの神にも捧げられないアイテムも含まれています。)
- アイテムの重量は10で割られますが、最小値は50、最大値は1000となります。
- アイテムが腐っている場合、価値はさらに10で割られます。
- 腐敗判定は捧げ物の価値0判定の後に行われるため、肉が腐敗していても名前があれば捧げ物の価値は0にはなりません。
- 例えば、名前付きで0.7sの腐っていない肉は、70の価値を持ちます。
- 最終的な価値は以下のように処理されます。
- 捧げ物の価値はアイテムレベルごとに2%ずつ増加し、最大で100%(LV50の場合)増加します。 (素材/アイテムの種類/アイテムLVを参照。 肉とほとんどのアイテムはLV1、ほとんどの装備品は10~20、最もレアなものはLV60)
- 捧げ物に【できたて料理】の特性がある場合は、さらに50%の加算率が適用されます。
捧げ物の価値に応じて流れるメッセージ
public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)
{
bool @bool = t.GetBool(115);
int offeringValue = Deity.GetOfferingValue(t, t.Num);
offeringValue = offeringValue * (c.HasElement(1228) ? 130 : 100) / 100;
if (takeoverMod == 0)
{
if (offeringValue >= 200)
{
Msg.Say("god_offer1", t);
EClass.pc.faith.Talk("offer");
}
else if (offeringValue >= 100)
{
Msg.Say("god_offer2", t);
}
else if (offeringValue >= 50)
{
Msg.Say("god_offer3", t);
}
else
{
Msg.Say("god_offer4", t);
}
}
else
{
Msg.Say("god_offer1", t);
offeringValue += Deity.GetOfferingValue(t, 1) * takeoverMod;
}
int num = Mathf.Max(c.Evalue(306), 1);
Element orCreateElement = c.elements.GetOrCreateElement(85);
int value = orCreateElement.Value;
c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3);
- The previously calculated offeringValue will return to this function, then the message displayed will be determined.
- But first, if the character is demigod, the offeringValue will be further offset by 30%.
- The offering value threshold for each message is 200, 100, 50.
- So a piece of meat of 2.2s should generate the best possible message...but a 1.7s meat will not (tested).
- HOWEVER, the experience gained towards Piety is only calculated at two-thirds of the offering value.
- Thus to increase piety level by 1, you need to offer items with 1500 offer value, thus gaining 1000 piety experiences.
- 先程計算した捧げ物の価値がこの関数に返され、表示されるメッセージが決まります。
- しかしその前に、プレイヤーが半神である場合、捧げものの価値はさらに30%されます。
- 各メッセージの捧げ物の価値の閾値は 200、100、50 です。
- つまり、2.2sの肉を捧げたら最高のメッセージが表示され、1.7sの肉では表示されません(テスト済み)。
信仰心レベルの上昇
if (element.vExp >= element.ExpToNext)
{
int num = element.vExp - element.ExpToNext;
int vBase = element.vBase;
ModBase(ele, 1);
OnLevelUp(element, vBase);
element.vExp = Mathf.Clamp(num / 2, 0, element.ExpToNext / 2);
if (element.vTempPotential > 0)
{
element.vTempPotential -= element.vTempPotential / 4 + EClass.rnd(5) + 5;
if (element.vTempPotential < 0)
{
element.vTempPotential = 0;
}
}
else if (element.vTempPotential < 0)
{
element.vTempPotential += -element.vTempPotential / 4 + EClass.rnd(5) + 5;
if (element.vTempPotential > 0)
{
element.vTempPotential = 0;
}
}
}
- この式は、実際にはすべてのレベルアップに適用されます。
- 信仰心の経験値は、捧げ物の価値の3分の2だけが計算されます。
- そのため、信仰心のレベルを1上げるには、捧げ物の価値が合計1500のアイテムを捧げ、1000の信仰心の経験値を獲得する必要があります。
- 信心レベルが上がった場合、残りの経験値は半分になり、最大でも次のレベルアップまで半分のところまでしか獲得できません。
- つまり、信仰心経験値を一度に3000獲得し、経験値が0から1000まで到達してレベルアップした場合、余りは2000経験値ですが、保持できるのは500経験値(次のレベルまで半分)だけです
信仰によるボーナス
信仰パワー
public int GetPietyValue()
{
if (base._IsPC)
{
return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
}
return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
}
- 信仰によるボーナスは信心レベルと信仰の日数によって算出される信仰パワーによって決定されます。(小数点以下切り捨て)
- PCの場合、信仰パワーは「10 + 2 * √(信仰日数) + 信心Lv / 2」です。
- それ以外の場合、信仰パワーは「10 + 5 * √(キャラクターLv) + 信仰スキルLv / 2」です。
信仰によるボーナス
if (!HasCondition<ConExcommunication>())
{
int[] array = row.elements;
int num = GetPietyValue() * (120 + Evalue(1407) * 15) / 100;
for (int i = 0; i < array.Length; i += 2)
{
int num2 = array[i + 1] * num / 50;
if (array[i] == 79)
{
num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
}
if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
{
num2 = 20;
}
faithElements.SetBase(array[i], Mathf.Max(num2, 1));
}
}
- 破門の効果を受けていない時、信仰中の神に応じたボーナス係数によって、主能力・スキル・耐性・アビリティにボーナスが加算されます。
- 信仰ボーナスの計算式は以下の通りです。
ボーナス = 信仰パワー * (1.2 + 0.15 * 敬虔フィートLv) * ボーナス係数 / 50
以下は神ごとのボーナス係数の表です。「(対応する主能力・スキル・耐性・アビリティ名)/(ボーナス係数)」のように記述します。
神 | 主能力ボーナス | スキルボーナス | 耐性ボーナス | アビリティボーナス |
---|---|---|---|---|
(半神のみ)無のエイス | 筋力/8,器用/8,耐久/8,
感覚/8,学習/8,魔力/8, 意志/8,魅力/8, 速度/20,運/20 |
なし | なし | なし |
風のルルウィ | 感覚/10,速度/30 | 弓/16,クロスボウ/12,回避/14,調教/8 | なし | 《ルルウィ》の憑依/10 |
地のオパートス | 筋力/11,耐久/16 | 盾/15,重量上げ/16,採掘/12,鍛冶/12 | なし | なし |
元素のイツパロトル | 魔力/18 | 瞑想/15,詠唱/8 | なし | 魔力の抽出/10 |
機械のマニ | 器用/14,感覚/14 | 銃/18,探索/8,鍵開け/16,罠解体/5,鑑定/12,戦略/10 | なし | なし |
収穫のクミロミ | 感覚/8,器用/12,学習/16 | 農業/12,錬金術/10,裁縫/10,読書/8 | なし | なし |
幸運のエヘカトル | 魅力/20,運/25 | 回避/15,魔力の限界/17,釣り/12,隠密/12 | なし | なし |
癒しのジュア | 意志/16,耐久/10 | 自然治癒/18,瞑想/10,解剖学/9,料理/8,魔道具/10,魔力の限界/12 | なし | 《ジュア》の祈り/10 |
忘却のヤカシャ | (未実装) | (未実装) | (未実装) | (未実装) |
調和のエリン | (未実装) | (未実装) | (未実装) | (未実装) |
悪戯のキズアミ | 魅力/12,運/15,速度/10 | 暗記/10,魔力制御/12 | 地獄/10,神聖/5 | 《キズアミ》の悪戯/10 |
月影のホロメ | 魔力/16,魅力/12 | 長剣/14,詠唱/12,演奏/8 | 暗黒/15 | 頭撫で/10 |
戦禍のイーヴァン | 筋力/10,器用/9,感覚/8 | 戦術/12,両手持ち/12,二刀流/12,乗馬/8,旅歩き/10 | なし | なし |
ボーナスの算出時に21以上となった耐性ボーナスは20なるよう補正されます。
また、速度のみ以下の式で減衰補正がかかります。
補正後速度ボーナス = CURVE (補正前速度ボーナス, (ボーナス係数 * 2), 10, 50)
エヘカトル流魔術
エヘカトルの信仰効果によるマナとスタミナ消費のランダム化に関するコードは以下のようになっています。
if (a < 0 && BaseStats.CC.HasElement(1330, 1)) { a = -EClass.rnd(-a * 130 / 100 + 2); }
つまり、マナやスタミナを消費する際、 0~(元の消費量の1.3倍+2)の範囲で乱数を取った値が新しい消費量になります。
例えば、ある魔法の消費MPが40だった場合、消費量は0~54の範囲に乱数化されます。