41
edits
(ダメージ計算のコード解読) |
No edit summary |
||
Line 1: | Line 1: | ||
{{バージョン|23.67}} | |||
== ページの説明 == | |||
ダメージ計算のコードを読んでます | |||
==Evalueリスト== | |||
{| class="wikitable" | |||
!Value# | |||
! Element | |||
!備考 | |||
|- | |||
|(961) | |||
|魔法耐性 | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
|} | |||
==== 属性耐性 ==== | |||
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire) | |||
{ | |||
dmg = Element.GetResistDamage(dmg, this.Evalue(e.source.aliasRef)); | |||
dmg = dmg * 100 / (100 + Mathf.Clamp(this.Evalue(961) * 5, -50, 200)); | |||
} | |||
Element.GetResistDamageで各属性を軽減。 | |||
Evalue(961)は魔法耐性。2倍から1/3倍まで細かく増加、軽減。 | |||
public static int GetResistDamage(int dmg, int v) | |||
{ | |||
int resistLv = Element.GetResistLv(v); | |||
if (resistLv >= 4) | |||
return 0; | |||
switch (resistLv - -2) | |||
{ | |||
case 0: | |||
return dmg * 2; | |||
case 1: | |||
return dmg * 3 / 2; | |||
case 3: | |||
return dmg / 2; | |||
case 4: | |||
return dmg / 3; | |||
case 5: | |||
return dmg / 4; | |||
default: | |||
return dmg; | |||
} | |||
} | |||
耐性5毎にダメージを軽減もしくは増加。 | |||
-10で200% 15で25% 20以上は0。 | |||
==== 濡れ補正 ==== | |||
switch (e.id) | |||
{ | |||
case 910: | |||
Chara chara1 = this.Chara; | |||
if ((chara1 != null ? (chara1.isWet ? 1 : 0) : 0) != 0) | |||
{ | |||
dmg /= 3; | |||
break; | |||
} | |||
break; | |||
case 912: | |||
Chara chara2 = this.Chara; | |||
if ((chara2 != null ? (chara2.isWet ? 1 : 0) : 0) != 0) | |||
{ | |||
dmg = dmg * 150 / 100; | |||
break; | |||
} | |||
break; | |||
} | |||
濡れてたら火炎属性1/3 電撃属性1.5倍 | |||
==== 軽減処理 ==== | |||
if (attackSource != AttackSource.Finish) | |||
{ | |||
if (!this.IsPCFaction && this.LV > 50) | |||
dmg = dmg * (100 - (int) Mathf.Min(80f, Mathf.Sqrt((float) (this.LV - 50)) * 2.5f)) / 100; | |||
dmg = dmg * Mathf.Max(0, 100 - this.Evalue(e == Element.Void ? 55 : 56)) / 100; | |||
if (origin != null && origin.IsPC && EClass.player.codex.Has(this.id)) | |||
dmg = dmg * (100 + Mathf.Min(10, EClass.player.codex.GetOrCreate(this.id).weakspot)) / 100; | |||
if (this.isChara && this.Chara.body.GetAttackStyle() == AttackStyle.Shield && this.elements.ValueWithoutLink(123) >= 5 && e == Element.Void) | |||
dmg = dmg * 90 / 100; | |||
if (this.Evalue(971) > 0) | |||
dmg = dmg * 100 / Mathf.Clamp(100 + this.Evalue(971), 25, 1000); | |||
if (this.HasElement(1305)) | |||
dmg = dmg * 90 / 100; | |||
if (EClass.pc.HasElement(1207) && this.isChara) | |||
{ | |||
int num1 = 0; | |||
int num2 = 0; | |||
foreach (Condition condition in this.Chara.conditions) | |||
{ | |||
if (condition.Type == ConditionType.Buff) | |||
++num1; | |||
else if (condition.Type == ConditionType.Debuff) | |||
++num2; | |||
} | |||
dmg = !this.IsPCParty ? dmg * Mathf.Min(100 + num2 * 5, 120) / 100 : dmg * 100 / Mathf.Min(100 + num1 * 5, 120); | |||
} | |||
if (this.IsPCParty && EClass.pc.ai is GoalAutoCombat) | |||
dmg = dmg * 100 / Mathf.Min(105 + EClass.pc.Evalue(135) / 10, 110); | |||
if (this.HasElement(1218)) | |||
{ | |||
dmg = dmg * (1000 - this.Evalue(1218)) / 1000; | |||
if (dmg <= 0 && EClass.rnd(4) == 0) | |||
dmg++; | |||
} | |||
if (dmg >= this.MaxHP / 10 && this.Evalue(68) > 0) | |||
{ | |||
int num3 = this.MaxHP / 10; | |||
int num4 = (dmg - num3) * 100 / (200 + this.Evalue(68) * 10); | |||
dmg = num3 + num4; | |||
} | |||
} | |||
敵かつLv50より大きい場合√(Lv-50)×2.5%ダメージを軽減 最大80% | |||
物理か属性かを判断して軽減ステータスを適用 | |||
弱点が判明(危ない本の効果)していればダメージを増加 最大1.1倍 | |||
盾Lv5以上かつ盾スタイルなら0.9倍 | |||
ダメージ軽減をもつならダメージを軽減(ダメージ軽減自体が現状使われている様子はなし) | |||
オパートス信仰なら0.9倍 | |||
狐守補正 最大 与ダメ1.2倍 被ダメ1/1.2倍 | |||
オートコンバット補正 1/1.05~1.1倍 | |||
メタル補正 25%の確率で1ダメージ加算 | |||
致命傷耐性 HPの10%を超えるダメージを軽減 致命傷耐性は大地の力(数値未確認)と黄金の騎士(固定値100) | |||
== DamageHP() == | |||
<syntaxhighlight lang="c#" line="1"> | <syntaxhighlight lang="c#" line="1"> | ||
public void DamageHP( | public void DamageHP( |
edits