User:びゃっこ/すたぶ/解析だめけいさん: Difference between revisions

摂理補正まで書く
(曖昧なとことか不要な情報とかをてなおし)
(摂理補正まで書く)
Line 61: Line 61:
  ダメージ = ダメージ × MAX(1 + 反魔法エンチャント強度 × 0.005, 0.1)
  ダメージ = ダメージ × MAX(1 + 反魔法エンチャント強度 × 0.005, 0.1)


===属性耐性===
===属性耐性補正===
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
Line 113: Line 113:
まず、攻撃対象の属性耐性評価を算出します。
まず、攻撃対象の属性耐性評価を算出します。
  属性耐性評価 = CLAMP<ref name=":0">値を一定範囲内に制限する関数です。
  属性耐性評価 = CLAMP<ref name=":0">値を一定範囲内に制限する関数です。
 
関数内の1つめの引数の値は、「2つめの引数の値」~「3つめの引数の値」の範囲内になるよう補正されます。</ref>(該当する属性耐性 / 5, -2, 4)
  関数内の1つめの引数の値は、「2つめの引数の値」~「3つめの引数の値」の範囲内になるよう補正されます。</ref>(該当する属性耐性 / 5, -2, 4)
  ※ゲーム内では耐性25以上は「免疫+」と評価されますが、現状特に意味はありません。
  ※ゲーム内では耐性25以上は「免疫+」と評価されますが、現状特に意味はありません。
次に、攻撃者の属性貫通力を算出します。
次に、攻撃者の属性貫通力を算出します。
Line 151: Line 151:
ダメージ倍率は以下の通りです。
ダメージ倍率は以下の通りです。
  ダメージ = ダメージ / (1 + CLAMP<ref name=":0" />(魔法属性耐性 × 0.05, -0.5, 2))
  ダメージ = ダメージ / (1 + CLAMP<ref name=":0" />(魔法属性耐性 × 0.05, -0.5, 2))
最低でダメージ'''「2倍」'''(魔法属性耐性-10)、最大でダメージ'''「0.333倍」'''(魔法属性耐性40)となります。
最大でダメージ'''「2倍」'''(魔法属性耐性-10)、最小でダメージ'''「0.333倍」'''(魔法属性耐性40)となります。


=== 反魔法属性補正 ===
=== 反魔法属性補正 ===
Line 160: Line 160:
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;
...
...
</syntaxhighlight>無属性以外で、マナの反動によるダメージでないものは属性耐性と重複して反魔法エンチャントによるダメージ減少が行われます。
</syntaxhighlight>無属性以外で、マナの反動によるダメージでないものは属性耐性と重複して反魔法エンチャントによるダメージ増減が行われます。


ダメージ倍率は以下の通りです。<ref>反魔法エンチャントは生成時に呪われた装備が負の値を取りえるため、ダメージが増加することがあります。この場合の上限はありません。</ref>
ダメージ倍率は以下の通りです。<ref>反魔法エンチャントは生成時に呪われた装備が負の値を取りえるため、ダメージが増加することがあります。この場合の上限はありません。</ref>
  ダメージ = ダメージ × MAX(1 - , 0.1)
  ダメージ = ダメージ × MAX(1 - 反魔法エンチャント強度 × 0.01, 0.1)
ダメージ減少の上限は'''「0.1」'''倍で、上限となるエンチャント強度は'''「90」'''です。
ダメージ減少の上限は'''「0.1」'''倍で、上限となるエンチャント強度は'''「90」'''です。


Line 191: Line 191:
</syntaxhighlight>攻撃対象が濡れ状態の場合、火炎属性はダメージが'''「0.333」'''倍、電撃属性はダメージ'''「1.5」'''倍になります。
</syntaxhighlight>攻撃対象が濡れ状態の場合、火炎属性はダメージが'''「0.333」'''倍、電撃属性はダメージ'''「1.5」'''倍になります。


=== 制圧による与ダメージ減少 ===
=== 制圧補正 ===
if (origin != null && origin.isChara && origin.Chara.HasCondition<ConSupress>())
<syntaxhighlight lang="c#">
        {
if (origin != null && origin.isChara && origin.Chara.HasCondition<ConSupress>())
            dmg = dmg * 2 / 3;
{
        }
dmg = dmg * 2 / 3;
制圧状態のキャラの与ダメージが減る処理です。
}
</syntaxhighlight>攻撃者が制圧状態場合、ダメージが、'''「0.667」'''倍になります。


ダメージが、2/3倍になります。
===敵Lv補正===
<syntaxhighlight lang="c#">
if (!IsPCFaction && LV > 50)
{
dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(LV - 50) * 2.5f)) / 100;
}
</syntaxhighlight>
レベル50を超えるPC勢力以外のキャラクターが受けるあらゆるダメージは軽減されます。


※ここからはしばらく、AttackTypeがFinishでないときの計算です。
ダメージ倍率は以下の通りです。
===敵のレベルに応じたダメージ軽減===
 
 
レベル50を超えた敵が受けるダメージ軽減量は以下の通りです:
 
まず、レベル50以下の敵の軽減率は0%、レベル1074以上の敵は軽減率80%となります。
 
if (!this.IsPCFaction && this.LV > 50)
{
    dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt((float)(this.LV - 50)) * 2.5f)) / 100;
}
 
 
 
プレイヤーのファクションに属さないキャラで、レベルがLv50より高い場合:


与えるダメージに、* (100 - [  2.5 * √(敵のレベル - 50) か 80 かのうち小さいほう ]<ref>正確には小さい方を四捨五入したもの</ref>) / 100が掛けられます。
ダメージ = ダメージ × (1 - Min(0.025 × √(攻撃対象Lv - 50), 0.8))


つまり、Lv1074以上の敵に対してはダメージが80%減少し、Lv51~Lv1073の敵に対しては[sqrt(敵Lv-50) * 2.5]%減少します。
この軽減は攻撃対象が'''Lv1074の時最大'''となり、ダメージ倍率は'''「0.2」'''倍となります。以下は敵Lvごとのダメージ倍率の簡易表です。
{| class="wikitable"
{| class="wikitable"
|+レベル毎のダメージ軽減
|+レベル毎のダメージ軽減
!敵のLv
!敵のLv
!軽減率(%)
!軽減率()
|-
|-
|51
|51
|2
|×0.98
|-
|-
|100
|100
|17
|×0.83
|-
|-
|150
|150
|25
|×0.75
|-
|-
|200
|200
|30
|×0.70
|-
|-
|250
|250
|35
|×0.65
|-
|-
|300
|300
|39
|×0.61
|-
|-
|350
|350
|43
|×0.57
|-
|-
| 400  
| 400  
|46
|×0.54
|-
|-
|450
|450
|50
|×0.50
|-
|-
|500
|500
| 53
| ×0.47
|-
|-
|550
|550
|55
|×0.45
|-
|-
|600
|600
|58
|×0.42
|-
|-
|650
|650
|61
|×0.39
|-
|-
|700
|700
|63
|×0.37
|-
|-
|750
|750
|66
|×0.34
|-
|-
|800
|800
|68
|×0.32
|-
|-
|850
|850
|70
|×0.30
|-
|-
|900
|900
|72
|×0.28
|-
|-
|950
|950
|75
|×0.25
|-
|-
|1000
|1000
|77
|×0.23
|-
|-
|1050
|1050
|79
|×0.21
|-
|-
|1074
|1074
|80
|×0.20
|-
|-
|1100
|1100
|80
|×0.20
|}
|}
=== 狂戦士補正 ===
<syntaxhighlight lang="c#">
if (origin != null && origin.HasCondition<ConBerserk>())
{
dmg = dmg * 3 / 2;
}
</syntaxhighlight>狂戦士化状態の攻撃者による、状態異常や瘴気など<ref name=":1">暴力禁止エンチャント有効下でダメージを与えられるもの、つまり攻撃者の認識ができないもの</ref>以外のあらゆるダメージを'''「1.5」'''倍にします。
===摂理補正===
<syntaxhighlight>
if (EClass.game.principal.enableDamageReduction && IsPCFaction)
{
int num3 = ((origin != null) ? origin.LV : EClass._zone.DangerLv);
if (num3 > 50)
{
dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
}
}
</syntaxhighlight>「高レベル帯での敵の与えるダメージを減衰する」摂理が有効のとき、PC勢力がLv51以上のキャラクターから受けるあらゆるダメージを軽減します。
ダメージ倍率は以下の通りです。
ダメージ = ダメージ × (1 - MIN(0.01 × √('''攻撃者Lv''' - 50), 0.95))
また危険度51階以上のフロアでは、状態異常や瘴気など<ref name=":1" />によるダメージをフロアの危険度に応じてダメージを軽減します。
ダメージ倍率は以下の通りです。
ダメージ = ダメージ × (1 - MIN(0.01 × √('''フロア危険度''' - 50), 0.95))
===物理軽減と属性軽減によるダメージ減少===
===物理軽減と属性軽減によるダメージ減少===


250

edits