Exemplo n.º 1
0
 public void Merge(System.Int32 skillId)
 {
     if (skillId != 0)
     {
         _skill = MasterDataManager.GetSkillData(skillId);
         _skill.Merge(_skill.rule_id);
     }
 }
Exemplo n.º 2
0
 public void OnUseSkill(SkillLargeData skillData, bool isExpend = false)
 {
     if (skillData.isOr)
     {
         foreach (RuleLargeData ruleData in skillData.ruleData)
         {
             if (mainTarget [0] == "E" || (mainTarget [0] == "P" && fightUIController.GetEnerge(ruleData.energe, isExpend)))
             {
                 OnEffectTarget(ruleData, false);
             }
         }
     }
     else
     {
         OnMultiEffectTarget(skillData.ruleData, 0);
     }
 }
Exemplo n.º 3
0
    /// <summary>
    /// 觸發條件為外在因素者
    /// <param name="data">技能資料</param>
    /// <param name="allDamage">傷害資料</param>
    private void OnSkillExternalRule(SkillLargeData data, List <DamageData> allDamage = null)
    {
        bool[] meets     = new bool[data.ruleData.Count];
        int    parameter = 0;

        foreach (DamageData damageData in allDamage)
        {
            if (damageData.hpRatio <= 0)
            {
                for (int i = 0; i < data.ruleData.Count; i++)
                {
                    if (data.ruleData [i].rule [0] == (int)Rule.Death)
                    {
                        meets [i] = true;
                        if (data.isOr)
                        {
                            OnEffectTarget(data.ruleData [i]);
                            return;
                        }
                    }
                }
            }
        }

        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.norDmg:
                meets [i] = allDamage.Count > 0;
                parameter = GetDamage(allDamage);
                break;

            case (int)Rule.norDmgP:
                if (allDamage.Count > 0 && allDamage [0].damageType == DamageType.Physical)
                {
                    meets [i] = true;
                    parameter = allDamage [0].damage;
                }
                else
                {
                    meets[i] = false;
                }
                break;

            case (int)Rule.norDmgM:
                //兩種傷害時,傷害一 物理:傷害二 魔法
                if (allDamage.Count == 2)
                {
                    meets [i] = true;
                    parameter = allDamage [1].damage;
                }
                //但種傷害時,因傷害一可能為物理傷害,所以必須檢查
                else if (allDamage.Count == 1)
                {
                    if (allDamage [0].damageType == DamageType.Magic)
                    {
                        meets [i] = true;
                        parameter = allDamage [0].damage;
                    }
                    else
                    {
                        meets [i] = false;
                    }
                }
                else
                {
                    meets [i] = false;
                }
                break;
            }
        }
        if (data.isOr)
        {
            for (int i = 0; i < data.ruleData.Count; i++)
            {
                if (meets [i] == true)
                {
                    if (mainTarget [1] == "E" ||
                        (mainTarget [1] == "P" && fightUIController.GetEnerge(data.ruleData [i].energe)))
                    {
                        Debug.Log("Launch Success");
                        OnEffectTarget(AddParameter(true, data.ruleData [i], parameter), false);
                    }
                    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, false);
            }
        }
    }
Exemplo n.º 4
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);
            }
        }
    }