主に属性強度(eleP、状態異常の通りやすさのあれ)と 状態異常にかかる際の軽減についての処理なんかを記載する予定。
DamageHPの一部とCondition.csとかを中心に見ていく。
| 910 | eleFire | 火炎 |
| 911 | eleCold | 冷気 |
| 912 | eleLightning | 電撃 |
| 913 | eleDarkness | 暗黒 |
| 914 | eleMind | 幻惑 |
| 915 | elePoison | 毒 |
| 916 | eleNether | 地獄 |
| 917 | eleSound | 轟音 |
| 918 | eleNerve | 神経 |
| 919 | eleHoly | 神聖 |
| 920 | eleChaos | 混沌 |
| 921 | eleMagic | 魔法 |
| 922 | eleEther | エーテル |
| 923 | eleAcid | 酸 |
| 924 | eleCut | 出血 |
| 925 | eleImpact | 衝撃 |
| 926 | eleVoid | 無 |
| 950 | resFire | 火炎耐性 |
| 951 | resCold | 冷気耐性 |
| 952 | resLightning | 電撃耐性 |
| 953 | resDarkness | 暗黒耐性 |
| 954 | resMind | 幻惑耐性 |
| 955 | resPoison | 毒耐性 |
| 956 | resNether | 地獄耐性 |
| 957 | resSound | 音耐性 |
| 958 | resNerve | 神経耐性 |
| 959 | resChaos | 混沌耐性 |
| 960 | resHoly | 神聖耐性 |
| 961 | resMagic | 魔法耐性 |
| 962 | resEther | エーテル耐性 |
| 963 | resAcid | 酸耐性 |
| 964 | resCut | 出血耐性 |
| 965 | resImpact | 衝撃耐性 |
DamageHP
ダメージが正という条件
bool Chance(int a, int max)
{
if (dmg > 0 || (origin != null && origin.HasElement(1345)))
{
return Mathf.Min(a, max) > EClass.rnd(100);
}
return false;
}
ダメージが正か、キズアミを信仰しているときに、
入力値a(ただし上限のmaxが存在)が乱数0~99より大きいとき、trueを返します。
状態異常付与に用いられる関数です。
Condition.cs
条件
public Condition AddCondition<T>(int p = 100, bool force = false) where T : Condition
{
return AddCondition(typeof(T).Name, p, force);
}
public Condition AddCondition(string id, int p = 100, bool force = false)
{
return AddCondition(Condition.Create(id, p), force);
}
public Condition AddCondition(Condition c, bool force = false)
{
c.owner = this;
if (!(c is ConBurning))
{
if (c is ConBleed && ResistLv(964) >= 3)
{
return null;
}
}
else if (ResistLv(950) >= 3)
{
return null;
}
炎上付与が無効化されるのは、
- キャラが炎上していない、そして出血状態かつ、出血耐性評価が素晴らしい以上のとき
- 火炎耐性評価が素晴らしい以上のとき
if (c.GainResistFactor > 0 && CanGainConResist)
{
if (c.GainResistFactor >= 400)
{
c.power /= 2;
}
ResistCon(c);
if (c.power <= 0)
{
return null;
}
}
if (!force)
{
if (c.source.negate.Length != 0)
{
string[] negate = c.source.negate;
foreach (string text in negate)
{
if (HasElement(text))
{
return null;
}
}
}
Element defenseAttribute = c.GetDefenseAttribute(this);
if (defenseAttribute != null)
{
c.power = 100 * c.power / (100 + defenseAttribute.Value);
}
if (c.source.resistance.Length != 0)
{
int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
if (num > 0)
{
c.power /= num * num + 1;
if (c.power <= 40)
{
return null;
}
}
}
c.power = c.EvaluatePower(c.power);
if (c.power <= 0)
{
return null;
}
}
for (int j = 0; j < conditions.Count; j++)
{
if (conditions[j].id != c.id)
{
continue;
}
if (c.Type == ConditionType.Stance || c.IsToggle)
{
conditions[j].Kill();
return null;
}
if (conditions[j].CanStack(c))
{
if (conditions[j].WillOverride)
{
conditions[j].Kill(silent: true);
continue;
}
if (CanGainConResist)
{
AddResistCon(c);
}
conditions[j].OnStacked(c.power);
conditions[j].OnStartOrStack();
conditions[j].PlayEffect();
}
if (!conditions[j].AllowMultipleInstance)
{
return null;
}
}
foreach (Condition condition in conditions)
{
if (condition.TryNullify(c))
{
return null;
}
}
int num2 = c.EvaluateTurn(c.power);
if (num2 == 0)
{
return null;
}
c.value = num2;
conditions.Add(c);
if (CanGainConResist)
{
AddResistCon(c);
}
c.SetOwner(this);
c.Start();
SetDirtySpeed();
if (c.ShouldRefresh)
{
Refresh();
}
if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
{
EClass.player.EndTurn();
}
if (c.SyncRide && (ride != null || parasite != null))
{
if (ride != null)
{
ride.AddCondition(Condition.Create(c.source.alias, c.power));
}
if (parasite != null)
{
parasite.AddCondition(Condition.Create(c.source.alias, c.power));
}
}
return c;
}