示例#1
0
    /// <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);
    }
示例#2
0
    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);
    }
示例#3
0
    /// <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);
    }