public void Merge(System.Int32 skillId) { if (skillId != 0) { _skill = MasterDataManager.GetSkillData(skillId); _skill.Merge(_skill.rule_id); } }
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); } }
/// <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); } } }
/// <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); } } }