User:Forte/解析メモ/ダメージ: Difference between revisions

no edit summary
(ダメージ計算のコード解読)
 
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(
46

edits