/// <summary> /// 將當RuleLatgeData.Effect參數數量大於1又為0時補上缺少的Parameter,IsRev為True時會用TargetData private RuleLargeData AddParameter(bool isRev, RuleLargeData data, int parameter = 0) { RuleLargeData rData = data.DeepCopy(); if (rData.effect.Length > 1) { if (rData.effect [1] == 0) { if (parameter != 0) { rData.effect [1] = parameter; } else { rData.effect [1] = GetParameter(isRev, data); } } else { if (parameter != 0 && rData.convType == Const.converseType.Ratio) { rData.effect [1] = rData.effect [1] * parameter / 100; } } } return(rData); }
private int GetParameter(bool isRev, RuleLargeData data) { int param = 0; foreach (KeyValuePair <string, int> kv in data.abilitys) { int abiChange = 100; if (kv.Value != 0) { if (data.convType == 0) { param += kv.Value; } else { if (isRev) { if (mainTargetData.soulData != null) { foreach (var value in mainTargetData.abiChange.Values) { abiChange += value.ContainsKey(kv.Key) ? value [kv.Key] : 0; } param += mainTargetData.soulData.abilitys [kv.Key] * kv.Value / 100 * abiChange / 100; } } else { foreach (var value in mainOrgData.abiChange.Values) { abiChange += value.ContainsKey(kv.Key) ? value [kv.Key] : 0; } param += mainOrgData.soulData.abilitys [kv.Key] * kv.Value / 100 * mainOrgRadio / 100 * abiChange / 100; } } } } return(param); }
/// <summary> /// 決定技能效果目標 /// <param name="data">技能效果資料</param> /// <param name="paramater">效果參數</param> private void OnEffectTarget(RuleLargeData data, bool isSelf = true, bool isExpend = false) { List <int> idxList = new List <int>(); if (data.target > 20) { mainTarget [1] = isSelf == true ? mainTarget [1] : mainTarget [0]; } else if (data.target > 10) { mainTarget [1] = mainTarget [0] == "P" ? "E" : "P"; if (data.target < 7) { for (int i = 0; i < monsterCount; i++) { idxList.Add(i); } } } else { mainTarget [1] = mainTarget [0] == "P" ? "P" : "E"; if (data.target > 1) { for (int i = 0; i < playerCount; i++) { idxList.Add(i); } } } switch (data.target) { case (int)Target.None: break; case (int)Target.Self: idxList = new List <int> (); if (isSelf) { idxList.Add(mainOrgIdx); } else { idxList.Add(mainTargetIdx); } break; case (int)Target.DirTeam: selLockRuleData = data; fightController.OnSelectSkillTarget(idxList, "P"); return; case (int)Target.OnlyMate: //移除發動者 idxList.Remove(mainOrgIdx); break; case (int)Target.DirEnemy: selLockRuleData = data; fightController.OnSelectSkillTarget(idxList, "E"); return; case (int)Target.Trigger: if (isSelf) { idxList.Add(mainTargetIdx); } else { idxList.Add(mainOrgIdx); } break; } fightController.OnSkillEffect(mainOrgIdx, idxList, data, mainTarget, mainSkillId, isExpend); }