Exemplo n.º 1
0
    /// <summary>
    /// 觸發條件為自身因素者
    /// <param name="orgData">攻擊者資料</param>
    /// <param name="targetData">被攻擊者資料</param>
    /// <param name="data">技能資料</param>
    /// <param name="allDamage">傷害資料</param>
    private void OnSkillSelfRule(SkillLargeData data, List <DamageData> allDamage = null)
    {
        mainSkillId = data.id;

        int parameter = 0;

        bool[] meets = new bool[data.ruleData.Count];
        for (int i = 0; i < data.ruleData.Count; i++)
        {
            switch (data.ruleData [i].rule [0])
            {
            case (int)Rule.None:
                meets [i] = true;
                break;

            case (int)Rule.HpLess:
            case (int)Rule.HpBest:
                meets [i] = fightController.OnRuleMeets(mainOrgIdx, data.ruleData [i].rule, mainTarget[0]);
                break;

            case (int)Rule.OnDmg:
                meets [i] = allDamage != null && allDamage.Count > 0;
                parameter = GetDamage(allDamage);
                break;

            case (int)Rule.JobCntUp:
                meets [i] = fightUIController.GetJobGround(data.ruleData [i].rule [1]) >= data.ruleData [i].rule [2];
                parameter = fightUIController.GetJobGround(data.ruleData [i].rule [1]);
                break;

            case (int)Rule.LayerCntUp:
                meets [i] = fightUIController.GetLayerGround(data.ruleData [i].rule [1]) >= data.ruleData [i].rule [2];
                parameter = fightUIController.GetLayerGround(data.ruleData [i].rule [1]);
                break;

            case (int)Rule.JobCntDown:
                meets [i] = fightUIController.GetJobGround(data.ruleData [i].rule [1]) < data.ruleData [i].rule [2];
                parameter = fightUIController.GetJobGround(data.ruleData [i].rule [1]);
                break;

            case (int)Rule.LayerCntDown:
                meets [i] = fightUIController.GetLayerGround(data.ruleData [i].rule [1]) < data.ruleData [i].rule [2];
                parameter = fightUIController.GetLayerGround(data.ruleData [i].rule [1]);
                break;
            }
        }

        if (data.isOr)
        {
            for (int i = 0; i < data.ruleData.Count; i++)
            {
                if (meets [i] == true)
                {
                    if (mainTarget [0] == "E" ||
                        (mainTarget [0] == "P" && fightUIController.GetEnerge(data.ruleData [i].energe) == true))
                    {
                        Debug.Log("Launch Success");
                        OnEffectTarget(AddParameter(false, data.ruleData [i], parameter));
                    }
                    else
                    {
                        if (fightUIController.GetEnerge(data.ruleData [i].energe) == false)
                        {
                            Debug.Log("Energe Not Worth");
                        }
                    }
                }
            }
        }
        else
        {
            if (!DataUtil.CheckArray <bool> (meets, false))
            {
                OnMultiEffectTarget(data.ruleData, parameter, true);
            }
        }
    }