Esempio n. 1
0
    public void AddBuff(BuffImage prefab, string buff_name, int remain_counter, double effect_value, double effect_value2)
    {
        bool detect = false;

        if (prefab == null)
        {
            return;
        }

        // unity潜在バグの可能性。null合体演算子、厳密にはnull判定かどうかを行おうとした時、
        // missing exceptionが発生するので、null合体演算子はここでは使わない。
        //BuffImage[] buffList = this.GetComponentsInChildren<BuffImage>() ?? null;
        BuffImage[] buffList = this.GetComponentsInChildren <BuffImage>();
        if (buffList == null)
        {
            return;
        }

        // 既に該当BUFFがあるかどうかを確認。
        for (int ii = 0; ii < buffList.Length; ii++)
        {
            if (buffList[ii].BuffName == buff_name)
            {
                detect = true;
                if (buff_name == Fix.BUFF_PD_DOWN)
                {
                    buffList[ii].CumulativeUp(remain_counter, 1);
                }
                else
                {
                    buffList[ii].UpdateBuff(buff_name, remain_counter, effect_value, effect_value2);
                }
                break;
            }
        }
        if (detect)
        {
            return;
        }

        // 該当BUFFが無い場合は、BUFFオブジェクトを追加する。
        BuffImage buff = Instantiate(prefab) as BuffImage;

        buff.UpdateBuff(buff_name, remain_counter, effect_value, effect_value2);
        buff.gameObject.SetActive(true);
        buff.transform.SetParent(this.gameObject.transform);
        RectTransform rect = buff.GetComponent <RectTransform>();

        rect.transform.localPosition = new Vector3(0, 0);
        rect.anchoredPosition        = new Vector2(0, 0);
        rect.anchorMin = new Vector2(0, 0);
        rect.anchorMax = new Vector2(1, 1);
    }
Esempio n. 2
0
    /// <summary>
    /// 物理防御の算出
    /// </summary>
    public static double PhysicalDefense(Character player)
    {
        double result = 1 + player.TotalStrength * Potential(player) * 0.20f;

        result += (player.MainWeapon?.PhysicalDefense ?? 0);
        result += (player.SubWeapon?.PhysicalDefense ?? 0);
        result += (player.MainArmor?.PhysicalDefense ?? 0);
        result += (player.Accessory1?.PhysicalDefense ?? 0);
        result += (player.Accessory2?.PhysicalDefense ?? 0);
        result += (player.Artifact?.PhysicalDefense ?? 0);

        if (player.IsHunterShot)
        {
            result *= player.IsHunterShot.EffectValue;
        }
        if (player.IsPhysicalDefenseDown)
        {
            double decrease = (1.00f - player.IsPhysicalDefenseDown.EffectValue * player.IsPhysicalDefenseDown.Cumulative);
            if (decrease <= 0.0f)
            {
                decrease = 0.0f;
            }
            result *= decrease;
            Debug.Log("IsPhysicalDefenseDown phase: " + result);
        }

        BuffImage stanceOfTheShield = player.IsStanceOfTheGuard;

        if (stanceOfTheShield)
        {
            result = result * (1.00f + player.IsStanceOfTheGuard.EffectValue * stanceOfTheShield.Cumulative);
        }

        if (result <= 0.0f)
        {
            result = 0.0f;
        }
        return(result);
    }
Esempio n. 3
0
    /// <summary>
    /// 基本ロジックを内包した物理攻撃実行コマンド
    /// </summary>
    private bool ExecNormalAttack(Character player, Character target, double magnify, CriticalType critical)
    {
        Debug.Log(MethodBase.GetCurrentMethod());

        // ターゲットが既に死んでいる場合
        if (target.Dead)
        {
            StartAnimation(target.objGroup.gameObject, Fix.BATTLE_MISS, Fix.COLOR_NORMAL);
            this.NowAnimationMode = true;
            return(false);
        }

        // ターゲットに対して命中していない場合
        if (player.IsDizzy)
        {
            if (AP.Math.RandomInteger(100) > (int)player.IsDizzy.EffectValue)
            {
                StartAnimation(target.objGroup.gameObject, Fix.BATTLE_DIZZY_MISS, Fix.COLOR_NORMAL);
                this.NowAnimationMode = true;
                return(false);
            }
        }

        // 攻撃コマンドのダメージを算出
        double damageValue = PhysicalDamageLogic(player, target, magnify, Fix.DamageSource.Physical, critical);

        // ディバイン・フィールドによる効果
        BuffField panelField = GetPanelFieldFromPlayer(target);

        if (panelField != null)
        {
            BuffImage buffImage = PreCheckFieldEffect(panelField.gameObject, Fix.DIVINE_CIRCLE);
            if (buffImage != null)
            {
                Debug.Log("DivineShiled: " + player.FullName + " -> " + damageValue.ToString("F2") + " " + buffImage.EffectValue.ToString("F2"));
                buffImage.EffectValue -= damageValue;
                StartAnimationGroupPanel(buffImage.gameObject, Fix.BATTLE_DIVINE + "\r\n " + (int)(buffImage.EffectValue), Fix.COLOR_NORMAL);
                if (buffImage.EffectValue <= 0)
                {
                    buffImage.RemoveBuff();
                }
                return(false); // ディバイン・フィールドで吸収された場合はヒットしたことにならない。
            }
        }

        // ダメージ適用
        ApplyDamage(player, target, damageValue);

        // 追加効果
        if (player.IsFlameBlade && player.Dead == false)
        {
            double addDamageValue = MagicDamageLogic(player, target, SecondaryLogic.MagicAttack(player), Fix.DamageSource.Fire, critical);
            ApplyDamage(player, target, addDamageValue);
        }
        BuffImage stanceOfTheBlade = player.IsStanceOfTheBlade;

        if (stanceOfTheBlade != null)
        {
            stanceOfTheBlade.Cumulative++;
        }
        BuffImage stanceOfTheGuard = target.IsStanceOfTheGuard;

        if (target.IsStanceOfTheGuard && target.IsDefense && target.Dead == false)
        {
            stanceOfTheGuard.Cumulative++;
        }

        return(true);
    }
Esempio n. 4
0
    /// <summary>
    /// 物理攻撃の算出
    /// </summary>
    public static double PhysicalAttack(Character player, ValueType value_type)
    {
        double min = 1 + player.TotalStrength * Potential(player) * 1.00f;
        double max = 1 + player.TotalStrength * Potential(player) * 1.00f;

        min += (player.MainWeapon?.PhysicalAttack ?? 0);
        min += (player.SubWeapon?.PhysicalAttack ?? 0);
        min += (player.MainArmor?.PhysicalAttack ?? 0);
        min += (player.Accessory1?.PhysicalAttack ?? 0);
        min += (player.Accessory2?.PhysicalAttack ?? 0);
        min += (player.Artifact?.PhysicalAttack ?? 0);

        max += (player.MainWeapon?.PhysicalAttackMax ?? 0);
        max += (player.SubWeapon?.PhysicalAttackMax ?? 0);
        max += (player.MainArmor?.PhysicalAttackMax ?? 0);
        max += (player.Accessory1?.PhysicalAttackMax ?? 0);
        max += (player.Accessory2?.PhysicalAttackMax ?? 0);
        max += (player.Artifact?.PhysicalAttackMax ?? 0);

        double result    = 0.0f;
        int    debug     = 999;
        int    debug_min = 999999999;
        int    debug_max = 0;
        double debug_avg = 0;

        for (int ii = 0; ii < debug; ii++)
        {
            result = CoreDamage(player, value_type, min, max);
            //Debug.Log("CoreDamage: " + Convert.ToInt32(result).ToString());
            if (debug_min >= result)
            {
                debug_min = Convert.ToInt32(result);
            }
            if (debug_max <= result)
            {
                debug_max = Convert.ToInt32(result);
            }
            debug_avg += result;
        }
        debug_avg /= debug;
        //Debug.Log("AVG: " + Convert.ToInt32(debug_avg).ToString());
        //Debug.Log("MIN: " + Convert.ToInt32(debug_min).ToString());
        //Debug.Log("MAX: " + Convert.ToInt32(debug_max).ToString());

        //    double result = CoreDamage(player, value_type, min, max);

        if (player.IsAuraOfPower)
        {
            result *= player.IsAuraOfPower.EffectValue;
        }

        BuffImage stanceOfTheBlade = player.IsStanceOfTheBlade;

        if (stanceOfTheBlade)
        {
            result = result * (1.00f + (player.IsStanceOfTheBlade.EffectValue * stanceOfTheBlade.Cumulative));
        }

        if (result <= 0.0f)
        {
            result = 0.0f;
        }
        return(result);
    }