User:びゃっこ/すたぶ/解析状態異常: Difference between revisions

no edit summary
(Created page with "主に属性強度(eleP、状態異常の通りやすさのあれ)と 状態異常にかかる際の軽減についての処理なんかを記載する予定。 DamageHPの一部とCondition.csとかを中心に見ていく。")
 
No edit summary
Line 3: Line 3:


DamageHPの一部とCondition.csとかを中心に見ていく。
DamageHPの一部とCondition.csとかを中心に見ていく。
{| class="wikitable"
|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;
    }