250
edits
(大規模編集用にスタブページへ内容コピー) |
(曖昧なとことか不要な情報とかをてなおし) |
||
| Line 1: | Line 1: | ||
==PV== | ==PV== | ||
| Line 72: | Line 41: | ||
最後に、ダメージが負になっていたら0に変更します。 | 最後に、ダメージが負になっていたら0に変更します。 | ||
==処理順== | |||
==ダメージ計算== | ==ダメージ計算== | ||
===反魔法無属性補正=== | |||
<syntaxhighlight lang="c#"> | |||
if (ele == 0 || ele == 926) | |||
{ | |||
e = Element.Void; | |||
if (origin != null) | |||
{ | |||
dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100; | |||
} | |||
} | |||
</syntaxhighlight>反魔法エンチャントの値に応じて、無属性の攻撃のダメージを増減させます。 | |||
ダメージ倍率は以下の通りです。<ref>反魔法エンチャントは生成時に呪われた装備が負の値を取りえるため、0.1倍を下限としてダメージが減少することがあります。</ref> | |||
ダメージ = ダメージ × MAX(1 + 反魔法エンチャント強度 × 0.005, 0.1) | |||
===属性耐性=== | |||
<syntaxhighlight lang="c#"> | |||
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire) | |||
{ | |||
int num2 = ((origin != null) ? origin.Evalue(1238) : 0); | |||
if (attackSource == AttackSource.MagicSword) | |||
{ | |||
num2 += 2; | |||
} | |||
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), num2); | |||
... | |||
public static int GetResistDamage(int dmg, int v, int power = 0) | |||
{ | |||
int num = GetResistLv(v); | |||
if (power > 0 && num > 0) | |||
{ | |||
num = Mathf.Max(num - power, 0); | |||
} | |||
if (num >= 4) | |||
{ | |||
return 0; | |||
} | |||
return num switch | |||
{ | |||
3 => dmg / 4, | |||
2 => dmg / 3, | |||
1 => dmg / 2, | |||
0 => dmg, | |||
-1 => dmg * 3 / 2, | |||
-2 => dmg * 2, | |||
_ => dmg * 2, | |||
}; | |||
} | |||
... | |||
public static int GetResistLv(int v) | |||
{ | |||
int num = v / 5; | |||
if (num < -2) | |||
{ | |||
num = -2; | |||
} | |||
if (num > 4) | |||
{ | |||
num = 4; | |||
} | |||
return num; | |||
} | |||
</syntaxhighlight> | |||
無属性以外で、マナの反動によるダメージでないものは属性耐性によるダメージ増減が行われます。 | |||
== | まず、攻撃対象の属性耐性評価を算出します。 | ||
属性耐性評価 = CLAMP<ref name=":0">値を一定範囲内に制限する関数です。 | |||
関数内の1つめの引数の値は、「2つめの引数の値」~「3つめの引数の値」の範囲内になるよう補正されます。</ref>(該当する属性耐性 / 5, -2, 4) | |||
※ゲーム内では耐性25以上は「免疫+」と評価されますが、現状特に意味はありません。 | |||
次に、攻撃者の属性貫通力を算出します。 | |||
属性貫通力 = 古代種フィートLv + (0、剣魔法のみ2) | |||
属性耐性評価と属性貫通力が共に1以上であれば、最終的な属性耐性評価を減らします。ただし、これによって属性耐性評価が0未満になることはありません。 | |||
属性耐性評価 = MAX(属性耐性評価 - 属性貫通力, 0) | |||
最終的な属性耐性評価の値に応じて、ダメージを増減させます。ダメージ倍率は以下の通りです。 | |||
{| class="wikitable" | |||
|+ | |||
!-2 (致命的な弱点) | |||
! -1 (弱点) | |||
! 0 (なし) | |||
! 1 (耐性) | |||
!2 (強い耐性) | |||
! 3 (素晴らしい耐性) | |||
! 4 (免疫) | |||
|- | |||
| ×2 | |||
|×1.5 | |||
|×1 | |||
|×0.5 | |||
| ×0.333 | |||
|×0.25 | |||
| ×0 | |||
|} | |||
=== 魔法耐性補正 === | |||
<syntaxhighlight> | |||
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire) | |||
{ | |||
... | |||
dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200)); | |||
... | |||
</syntaxhighlight>無属性以外で、マナの反動によるダメージでないものは'''属性耐性と重複して魔法属性耐性によるダメージ増減が行われます。''' | |||
ダメージ倍率は以下の通りです。 | |||
ダメージ = ダメージ / (1 + CLAMP<ref name=":0" />(魔法属性耐性 × 0.05, -0.5, 2)) | |||
最低でダメージ'''「2倍」'''(魔法属性耐性-10)、最大でダメージ'''「0.333倍」'''(魔法属性耐性40)となります。 | |||
=== | === 反魔法属性補正 === | ||
<syntaxhighlight lang="c#"> | |||
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire) | |||
{ | |||
... | |||
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100; | |||
... | |||
</syntaxhighlight>無属性以外で、マナの反動によるダメージでないものは属性耐性と重複して反魔法エンチャントによるダメージ減少が行われます。 | |||
ダメージ倍率は以下の通りです。<ref>反魔法エンチャントは生成時に呪われた装備が負の値を取りえるため、ダメージが増加することがあります。この場合の上限はありません。</ref> | |||
ダメージ = ダメージ × MAX(1 - , 0.1) | |||
ダメージ減少の上限は'''「0.1」'''倍で、上限となるエンチャント強度は'''「90」'''です。 | |||
===濡れ補正=== | |||
<syntaxhighlight lang="c#"> | |||
switch (e.id) | |||
{ | |||
case 910: | |||
{ | |||
Chara chara2 = Chara; | |||
if (chara2 != null && chara2.isWet) | |||
{ | |||
dmg /= 3; | |||
} | |||
break; | |||
} | |||
case 912: | |||
{ | |||
Chara chara = Chara; | |||
if (chara != null && chara.isWet) | |||
{ | |||
dmg = dmg * 150 / 100; | |||
} | |||
break; | |||
} | |||
} | |||
</syntaxhighlight>攻撃対象が濡れ状態の場合、火炎属性はダメージが'''「0.333」'''倍、電撃属性はダメージ'''「1.5」'''倍になります。 | |||
===制圧による与ダメージ減少=== | === 制圧による与ダメージ減少 === | ||
if (origin != null && origin.isChara && origin.Chara.HasCondition<ConSupress>()) | if (origin != null && origin.isChara && origin.Chara.HasCondition<ConSupress>()) | ||
{ | { | ||
| Line 238: | Line 246: | ||
|43 | |43 | ||
|- | |- | ||
|400 | | 400 | ||
|46 | |46 | ||
|- | |- | ||
| Line 245: | Line 253: | ||
|- | |- | ||
|500 | |500 | ||
|53 | | 53 | ||
|- | |- | ||
|550 | |550 | ||
| Line 338: | Line 346: | ||
オパートス信仰による大地の加護を持つなら被ダメージが0.9倍。 | オパートス信仰による大地の加護を持つなら被ダメージが0.9倍。 | ||
===狐守=== | ===狐守 === | ||
if (EClass.pc.HasElement(1207) && isChara) | if (EClass.pc.HasElement(1207) && isChara) | ||
{ | { | ||
| Line 432: | Line 440: | ||
ダメージがプレイヤーに由来するなら0にします。 | ダメージがプレイヤーに由来するなら0にします。 | ||
===フェイルセーフ的符号確認=== | ===フェイルセーフ的符号確認 === | ||
if (dmg < 0) | if (dmg < 0) | ||
{ | { | ||
| Line 439: | Line 447: | ||
もしダメージがマイナスなら、0にします。 | もしダメージがマイナスなら、0にします。 | ||
=== 攻撃の手痛さ === | ===攻撃の手痛さ=== | ||
int num5 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0); | int num5 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0); | ||
| Line 463: | Line 471: | ||
マナの体を持たない場合はただダメージを受けます。 | マナの体を持たない場合はただダメージを受けます。 | ||
== 被ダメージ時の処理== | ==被ダメージ時の処理== | ||
===出血アニメーション=== | ===出血アニメーション=== | ||
| Line 531: | Line 539: | ||
===運命の誓約による即死回避=== | === 運命の誓約による即死回避 === | ||
| Line 546: | Line 554: | ||
スタミナを最大値の半分減らし、死を回避します。 | スタミナを最大値の半分減らし、死を回避します。 | ||
==状態異常付与== | == 状態異常付与== | ||
飛んで、4213行目から状態異常に関する記述がみられます。 | 飛んで、4213行目から状態異常に関する記述がみられます。 | ||
edits