Elin:解析/信仰
このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
信仰心と捧げ物
バージョン EA23.61: この記事は、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.
Piety level up
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;
}
}
}
- This, in fact, apply to all level ups.
- If you increased your piety level, the remaining experiences will be cut in half, then at most half to the next level can be retained.
- So if you gained 3000 piety exp, you leveled up from empty, remaining is 2000 exp, but you can only retain 500 exp (half to the next level)
- If you increased your piety level, the remaining experiences will be cut in half, then at most half to the next level can be retained.
エヘカトル流魔術
エヘカトルの信仰効果によるマナとスタミナ消費のランダム化に関するコードは以下のようになっています。
if (a < 0 && BaseStats.CC.HasElement(1330, 1)) { a = -EClass.rnd(-a * 130 / 100 + 2); }
つまり、マナやスタミナを消費する際、 0~(元の消費量の1.3倍+2)の範囲で乱数を取った値が新しい消費量になります。
例えば、ある魔法の消費MPが40だった場合、消費量は0~54の範囲に乱数化されます。