Elin:解析/信仰: Difference between revisions

From Ylvapedia
m (EN版の情報を反映。信仰心と捧げもの周りの解析。翻訳は後程)
m (記事の翻訳を進めた(まだ途中))
Tags: Mobile edit Mobile web edit Advanced mobile edit Visual edit
Line 1: Line 1:
{{解析}}
{{解析}}
==信仰心と捧げ物==
==信仰心と捧げ物==
===Gift at which piety level?===
{{バージョン|23.61}}
===神のご褒美を貰うのに必要な信仰心===
<syntaxhighlight lang="c#" line="1">
<syntaxhighlight lang="c#" line="1">
     int num = EClass.pc.Evalue(85);
     int num = EClass.pc.Evalue(85);
Line 27: Line 28:
}
}
</syntaxhighlight>
</syntaxhighlight>
*As of EA23.61, there are two Gift ranks for each god, and each of them is hardcoded at piety level 15 and 30. You will recieve a gift after reach each of these levels then manually pray to the god.
*EA23.61の時点で、それぞれの神には2つのご褒美を貰える段階があり、それぞれ信仰心レベル15と30に設定されています。 それぞれのレベルに達した後、手動で神に祈ることでご褒美がもらえます。
===What messages are shown at which threshold?===
===信仰心の深度を示すメッセージ===
<syntaxhighlight lang="c#" line="1">
<syntaxhighlight lang="c#" line="1">
     int num = Mathf.Max(c.Evalue(306), 1);
     int num = Mathf.Max(c.Evalue(306), 1);
Line 45: Line 46:
}
}
</syntaxhighlight>
</syntaxhighlight>
*The above code controls the faith message when your piety levels up.
* 上記のコードは、あなたの信仰心がレベルアップしたときのメッセージを制御しています。
*There are 5 messages in all, determined by num2, ranging from (0~4).
* メッセージは全部で5つあり(0~4)、num2によってどれになるかが決まります。
*num2 will be calculated using your (Piety level / Faith level) * 4,rounded down to the nearest integer.
*num2は、あなたの(信仰心÷信仰スキル)×4で計算され、小数点以下は切り捨てられます。
**So if <25%, num2 = 0; 25%~50%, num2 = 1, 50%~75%, num2 = 2, >75%, num2 = 3.
** つまり、 25%未満ならnum2 = 0、25%~50%ならnum2 = 1、50%~75%ならnum2 = 2、>75%ならnum2 = 3 のメッセージが流れます。
*If you are already at the maximum piety level, num2 = 4
*信仰心が最大レベルに達していると、num2 = 4 のメッセージが流れます。
*Then depend on num2, different message will be played.
===捧げ物の価値に応じて流れるメッセージ===
*If you are at maximum piety (num2 = 4), then a message will always be shown.
===What message is shown at which offer value?===
<syntaxhighlight lang="c#" line="1">
<syntaxhighlight lang="c#" line="1">
public int GetOfferingValue(Thing t, int num = -1)
public int GetOfferingValue(Thing t, int num = -1)
Line 94: Line 93:
}
}
</syntaxhighlight>
</syntaxhighlight>
*The offer value is calculated with the following
*捧げ物の価値は以下の順で計算されます。
*num is the number of items you offered.
*num は捧げたアイテムの個数
*num2 will be the offering value per item, with minimum value of "1".
*num2 はアイテム1個あたりの価値で、最小値は1です。
*If the item is meat, then;
*肉を捧げた場合、以下の通りになります。
**The weight of meat is divided by 10 (to know that 1000 weight = 1.0s), with minimum value of 1 and maximum value of 1000.
**肉の重量は10で割られ(weight値1000=1.0sとなるため)、最小値は1、最大値は1000となります。
**If this meat is unlabelled (i.e. not being a meat drop by entity) the value is further divided by 10.
**肉に名前がない場合(ハンマー解体などで手に入れた肉の場合)、その値はさらに10で割られます。
**Because the divide operator is rounding down to nearest int, this means it is possible to obtain 0 offer value if you are offering unlabelled meat lower than 0.1s.
**除算演算子は最も近いintに切り捨てられるため、0.1s以下の名前のない肉を提供する場合、捧げ物の価値が0になる可能性があります。
*If the item is of category a god will take (not meat), then:
*捧げ物が神の好物(肉以外)の場合、以下の通りになります。
**The weight of item is divided by 10, but with a minimum value of 50 and maximum value of 1000.
** アイテムの重量は10で割られますが、最小値は50、最大値は1000となります。
***Therefore, the weight of item will still count, but anything less than 0.5s will count as 0.5s.
***このため、アイテムの重量は別でカウントされていますが、0.5s未満のアイテムは0.5sとして扱われます。
**The number is then multiplied by the category value.
**一部のアイテムカテゴリーには価値に一定の倍率がかかります。
***As of '''EA23.61''', the multipler apply to instrument(*5), rod (*3), catalyst (*3), ancient book (*5), spell book (*4), skill book (*10), map (*4).
***EA23.61時点では、楽器(×5)、魔法杖(×3)、触媒(×3)、古の書(×5)、魔法書(×4)、技術書(×10)、地図(×4)に倍率がかかります。(この中には、今の所どの神に捧げられないアイテムも含まれています。)
*If the item is decayed (rotten), the offer value is further divided by 10.
*アイテムが腐っている場合、価値はさらに10で割られます。
**Because the decayed check is done after the 0 offer value check, you won't get 0 offer value if your item is only rotten, but lablled.
**腐敗判定は捧げ物の価値0判定の後に行われるため、肉が腐敗していても名前があれば捧げ物の価値は0にはなりません。
**For example a labelled, 0.7s non-rotten meat will generate a offer value of 70.
**例えば、名前付きで0.7sの腐っていない肉は、70の価値を持ちます。
*The final value is modified by the following:
*最終的な価値は以下のように処理されます。
**The offer value will '''increase by 2%''' per each level of the item, at most 100% (for LV 50). (See in resource/things/LV. Meat and most items are LV 1, most equipments range from 10-20, rarest at lv 60)
**捧げ物の価値はアイテムレベルごとに2%ずつ増加し、最大で100%(LV50の場合)増加します。 (素材/アイテム/LVを参照。 肉とほとんどのアイテムはLV1、ほとんどの装備品は10~20、最もレアなものはLV60)
**A further 50% additive modifier is applied if "Just cooked" state is on the offering item.
**捧げ物に【できたて料理】の特性がある場合は、さらに50%の加算率が適用されます。
<syntaxhighlight lang="c#" line="1">
<syntaxhighlight lang="c#" line="1">
public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)
public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)
Line 147: Line 146:
int value = orCreateElement.Value;
int value = orCreateElement.Value;
c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3);
c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3);
</syntaxhighlight>
</syntaxhighlight>  
*The previously calculated offeringValue will return to this function, then the message displayed will be determined.
*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%.
*But first, if the character is demigod, the offeringValue will be further offset by 30%.

Revision as of 04:10, 26 December 2024

信仰心と捧げ物

バージョン 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.

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 (a < 0 && BaseStats.CC.HasElement(1330, 1)) { a = -EClass.rnd(-a * 130 / 100 + 2); }

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

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