Elin:解析/信仰

From Ylvapedia
Revision as of 13:23, 26 December 2024 by Sakumashiki (talk | contribs) (→‎信仰心と捧げ物: 翻訳完了)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

信仰心と捧げ物

バージョン 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で割られます。
    • 腐敗判定は捧げ物の価値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経験値(次のレベルまで半分)だけです

エヘカトル流魔術

エヘカトルの信仰効果によるマナとスタミナ消費のランダム化に関するコードは以下のようになっています。

if (a < 0 && BaseStats.CC.HasElement(1330, 1)) { a = -EClass.rnd(-a * 130 / 100 + 2); }

つまり、マナやスタミナを消費する際、 0~(元の消費量の1.3倍+2)の範囲で乱数を取った値が新しい消費量になります。

例えば、ある魔法の消費MPが40だった場合、消費量は0~54の範囲に乱数化されます。