예제 #1
0
    public void AddMedal(string strDef, MedalCombatAbility combatAbility, MedalAbility ability)
    {
        var medalCombatAbilities = new List <MedalCombatAbility>();

        if (combatAbility.Attribute == "PSM")
        {
            foreach (var s in "PSM")
            {
                medalCombatAbilities.Add(new MedalCombatAbility
                {
                    Attribute        = s.ToString(),
                    Direction        = combatAbility.Direction,
                    Duration         = combatAbility.Duration,
                    Tier             = combatAbility.Tier,
                    IsPlayerAffected = combatAbility.IsPlayerAffected,
                    IsEnemyAffected  = combatAbility.IsEnemyAffected,
                });
            }
        }
        else if (combatAbility.Attribute == "UR")
        {
            foreach (var s in "UR")
            {
                medalCombatAbilities.Add(new MedalCombatAbility
                {
                    Attribute        = s.ToString(),
                    Direction        = combatAbility.Direction,
                    Duration         = combatAbility.Duration,
                    Tier             = combatAbility.Tier,
                    IsPlayerAffected = combatAbility.IsPlayerAffected,
                    IsEnemyAffected  = combatAbility.IsEnemyAffected,
                });
            }
        }
        else
        {
            medalCombatAbilities.Add(combatAbility);
        }

        switch (strDef)
        {
        case "strength":
        case "STR":
            foreach (var combat in medalCombatAbilities)
            {
                ability.STR.Add(combat);
            }
            break;

        case "defense":
        case "DEF":
            foreach (var combat in medalCombatAbilities)
            {
                ability.DEF.Add(combat);
            }
            break;

        default:
            Debug.Log("Something went wrong... " + strDef);
            break;
        }
    }
예제 #2
0
    public bool SetRaiseLowerMedal(string duration, string section, MedalAbility ability, string selfTarget = "")
    {
        var setResults = SetRaiseLowerRegex.Matches(section);

        if (setResults.Count > 0)
        {
            foreach (Match setResult in setResults)
            {
                var targetBool = string.IsNullOrEmpty(selfTarget) || selfTarget.Equals("self") ? true : false;
                int.TryParse(setResult.Groups[2].Value, out var amount);
                var direction = amount > 0 ? "Raises" : "Lowers";

                var index = 2;
                for (int i = 0; i < 4; ++i)
                {
                    if (index > 2 && !string.IsNullOrEmpty(setResult.Groups[index].Value))
                    {
                        int.TryParse(setResult.Groups[index].Value, out amount);
                        direction = amount > 0 ? "Raises" : "Lowers";
                    }

                    var attribute = setResult.Groups[index + 1].Value;
                    var strDef    = setResult.Groups[index + 2].Value;

                    if (attribute != "" || strDef != "")
                    {
                        if (attribute == "")
                        {
                            attribute = "Normal";
                        }

                        if (strDef == "" && (index + 2) + 3 < setResult.Groups.Count)
                        {
                            strDef = setResult.Groups[(index + 2) + 3].Value;
                        }
                        if (strDef == "" && (index + 2) + 6 < setResult.Groups.Count)
                        {
                            strDef = setResult.Groups[(index + 2) + 6].Value;
                        }
                        if (strDef == "" && (index + 2) + 9 < setResult.Groups.Count)
                        {
                            strDef = setResult.Groups[(index + 2) + 9].Value;
                        }

                        var medalCombatAbility = new MedalCombatAbility()
                        {
                            Direction        = direction,
                            Attribute        = attribute.Replace("-", ""),
                            Tier             = amount.ToString().Replace("-", ""),
                            Duration         = duration,
                            IsPlayerAffected = targetBool,
                            IsEnemyAffected  = !targetBool,
                        };

                        // !! Medal Add Here !!
                        this.AddMedal(strDef, medalCombatAbility, ability);
                    }

                    index += 3;
                }
            }

            ability.SetStrDef = "SetStrDef";

            return(true);
        }

        return(false);
    }
예제 #3
0
    public bool AddToRaiseLowerMedal(string duration, string section, MedalAbility ability, string selfTarget = "")
    {
        var addResults = AddToRaiseLowerRegex.Matches(section);

        if (addResults.Count > 0)
        {
            foreach (Match addResult in addResults)
            {
                var direction  = addResult.Groups[1].Value;
                var targetBool = string.IsNullOrEmpty(selfTarget) || selfTarget.Equals("self") ? true : false;

                var index = 3;
                for (int i = 0; i < 4; ++i)
                {
                    var attribute = addResult.Groups[index].Value;
                    var strDef    = addResult.Groups[index + 1].Value;

                    if (attribute != "" || strDef != "")
                    {
                        var amount = !string.IsNullOrEmpty(addResult.Groups[index + 2].Value)
                                         ? addResult.Groups[index + 2].Value :
                                     (index + 2) + 3 < addResult.Groups.Count && !string.IsNullOrEmpty(addResult.Groups[(index + 2) + 3].Value)
                                         ? addResult.Groups[(index + 2) + 3].Value :
                                     (index + 2) + 6 < addResult.Groups.Count && !string.IsNullOrEmpty(addResult.Groups[(index + 2) + 6].Value)
                                         ? addResult.Groups[(index + 2) + 6].Value :
                                     (index + 2) + 9 < addResult.Groups.Count && !string.IsNullOrEmpty(addResult.Groups[(index + 2) + 9].Value)
                                         ? addResult.Groups[(index + 2) + 9].Value :
                                     "";

                        if (attribute == "")
                        {
                            attribute = "Normal";
                        }

                        if (strDef == "" && (index + 1) + 3 < addResult.Groups.Count)
                        {
                            strDef = addResult.Groups[(index + 1) + 3].Value;
                        }
                        if (strDef == "" && (index + 1) + 6 < addResult.Groups.Count)
                        {
                            strDef = addResult.Groups[(index + 1) + 6].Value;
                        }
                        if (strDef == "" && (index + 1) + 9 < addResult.Groups.Count)
                        {
                            strDef = addResult.Groups[(index + 1) + 9].Value;
                        }

                        var medalCombatAbility = new MedalCombatAbility()
                        {
                            Direction        = direction,
                            Attribute        = attribute.Replace("-", ""),
                            Tier             = amount,
                            Duration         = duration,
                            IsPlayerAffected = targetBool,
                            IsEnemyAffected  = !targetBool,
                        };

                        // !! Medal Add Here !!
                        this.AddMedal(strDef, medalCombatAbility, ability);
                    }

                    index += 3;
                }
            }

            return(true);
        }

        return(false);
    }
예제 #4
0
    private void ParseRaiseLower(GroupCollection resultGroups, MedalAbility ability)
    {
        var duration = resultGroups[1].Value;
        var section  = resultGroups[2].Value;

        #region SP Atk B

        var spAtkBonusResult = SPAtkRegex.Match(section);

        if (spAtkBonusResult.Success)
        {
            ability.SPBonus = spAtkBonusResult.Groups[1].Value;
        }

        #endregion

        #region Str Def Increase

        var strDefResult = StrDefRegex.Match(section);

        if (strDefResult.Success)
        {
            if (strDefResult.Groups[3].Value == "STR")
            {
                ability.StrUp = "STR" + strDefResult.Groups[4].Value + strDefResult.Groups[2];
            }
            else if (strDefResult.Groups[3].Value == "DEF")
            {
                ability.DefUp = "DEF" + strDefResult.Groups[4].Value;
            }
        }

        #endregion

        #region Self/ Target Regex Check

        var selfTargetResults = SelfTargetRegex.Matches(section);

        if (selfTargetResults.Count > 0)
        {
            foreach (Match selfTargetResult in selfTargetResults)
            {
                var addResult = this.AddToRaiseLowerMedal(duration, selfTargetResult.Groups[2].Value, ability, selfTargetResult.Groups[1].Value.Trim());
                if (addResult)
                {
                    continue;
                }

                var setResult = this.SetRaiseLowerMedal(duration, selfTargetResult.Groups[2].Value, ability, selfTargetResult.Groups[1].Value.Trim());
                if (setResult)
                {
                    continue;
                }
            }

            return;
        }

        #endregion

        #region Add Regex Check

        var addCheckResult = this.AddToRaiseLowerMedal(duration, section, ability);
        if (addCheckResult)
        {
            return;
        }

        #endregion

        #region Set Regex Check

        var setCheckResult = this.SetRaiseLowerMedal(duration, section, ability);
        if (setCheckResult)
        {
            return;
        }

        #endregion
    }
예제 #5
0
    private void OlderParseRaiseLowerBased(GroupCollection resultGroups, MedalAbility ability)
    {
        #region Vars

        var direction = resultGroups[1].Value;
        var target    = !string.IsNullOrEmpty(resultGroups[1].Value) ? resultGroups[1].Value :
                        !string.IsNullOrEmpty(resultGroups[5].Value) && resultGroups[5].Value.Contains("target") ? resultGroups[5].Value :
                        !string.IsNullOrEmpty(resultGroups[9].Value) && resultGroups[9].Value.Contains("target") ? resultGroups[9].Value :
                        "";

        //var attribute1 = resultGroups[3].Value;
        //var strDef1 = resultGroups[4].Value;

        //var attribute2 = resultGroups[7].Value;
        //var strDef2 = resultGroups[8].Value;

        var allAttributes = !string.IsNullOrEmpty(resultGroups[5].Value) && resultGroups[5].Value.Contains("attribute") ? resultGroups[5].Value :
                            !string.IsNullOrEmpty(resultGroups[9].Value) && resultGroups[9].Value.Contains("attribute") ? resultGroups[9].Value :
                            "";

        var duration = resultGroups[11].Value;

        #endregion

        var index = 3;
        for (int i = 0; i < 2; ++i)
        {
            var attribute = resultGroups[index].Value;
            var strDef    = resultGroups[index + 1].Value;

            if (attribute != "" || strDef != "")
            {
                var amount = !string.IsNullOrEmpty(resultGroups[index + 3].Value) ? resultGroups[index + 3].Value :
                             (index + 3) + 4 < resultGroups.Count && !string.IsNullOrEmpty(resultGroups[(index + 3) + 4].Value) ? resultGroups[(index + 3) + 4].Value :
                             "";

                if (attribute == "")
                {
                    attribute = "Normal";
                }
                if (strDef == "" && (index + 1) + 4 < resultGroups.Count)
                {
                    strDef = resultGroups[(index + 1) + 4].Value;
                }

                var medalCombatAbility = new MedalCombatAbility()
                {
                    Direction        = direction,
                    Attribute        = attribute.Replace("-", ""),
                    Tier             = amount,
                    Duration         = duration,
                    IsPlayerAffected = string.IsNullOrEmpty(target),
                    IsEnemyAffected  = !string.IsNullOrEmpty(target),
                };

                // !! Medal Add Here !!
                AddMedal(strDef, medalCombatAbility, ability);
            }

            index += 4;
        }
    }
예제 #6
0
    public MedalAbility Parser(string abilityDescription)
    {
        //TODO Perhaps make only one MedalAbility object and init that at Start() and then just simply change the items...
        var ability = new MedalAbility();

        var parts = abilityDescription.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);

        foreach (var item in parts)
        {
            var trimmedItem = item.Trim().Replace("↑", "Raises").Replace("↓", "Lowers").Replace("’", "'");
            if (trimmedItem.Length == 0)
            {
                continue;
            }
            Debug.Log(trimmedItem);

            for (int i = 0; i < Regexes.Length; ++i)
            {
                var currRegex = Regexes[i];
                var result    = currRegex.Match(trimmedItem);

                if (!result.Success)
                {
                    continue;
                }

                // TODO SWITCH THIS ASAP - From index to enums
                // TODO ^ Is this still what I want? ^
                switch (i)
                {
                case 0:     // 0 Deals
                    ability.Deal             = result.Groups[1].Value == "an" || result.Groups[1].Value == "a" ? "1" : result.Groups[1].Value;
                    ability.IgnoreAttributes = result.Groups[2].Value;
                    break;

                case 1:     // 1 - 3 Inflicts
                    ability.Inflicts = "fixed";
                    break;

                case 2:
                case 3:
                    ability.Inflicts = result.Groups[1].Value;
                    break;

                case 4:     // 4 Damage +
                    ability.DamagePlus = result.Groups[1].Value;
                    break;

                case 5:     // 5 - 7 Heal/ Cure
                    ability.Heal  = result.Groups[1].Value;
                    ability.Esuna = result.Groups[2].Value;
                    break;

                case 6:
                    ability.Esuna = "cures";
                    ability.Heal  = result.Groups[1].Value;
                    break;

                case 7:
                    ability.Heal = result.Groups[1].Value;
                    break;

                case 8:     // 8 - 10 Gauges
                    ability.Gauge = result.Groups[1].Value;
                    ability.Esuna = result.Groups[2].Value;
                    break;

                case 9:
                case 10:
                    ability.Gauge = !string.IsNullOrEmpty(result.Groups[1].Value) ? result.Groups[1].Value : result.Groups[2].Value;
                    break;

                case 11:     // 11 Removes/ Dispel
                    var split = result.Groups[1].Value.Split(new[] { " & ", " and " }, StringSplitOptions.RemoveEmptyEntries);

                    if (split.Length == 2)
                    {
                        ability.DispelPlayer = split[0];
                        ability.DispelEnemy  = split[1];
                    }
                    else
                    {
                        ability.DispelEnemy = split[0];
                    }
                    break;

                case 12:     // 12 - 14 Count
                case 13:
                case 14:
                    ability.Count = result.Groups[1].Value;
                    break;

                case 15:     // 15 Copy
                    ability.Copy = result.Groups[1].Value;
                    break;

                case 16:     // 16 If None
                    //ParseRaiseLower(result.Groups, ability);
                    //ability.IfNone = result.Groups[1].Value;
                    // TODO Pass result to boost/sap parser
                    break;

                case 17:     // 17 Next Medal
                    ability.NextMedal = result.Groups[1].Value;
                    break;

                case 18:     // 18 SP Bonus
                    ability.SPBonus = result.Groups[1].Value;
                    break;

                case 19:     // 19 - 21 Raise/ Lower
                    OlderParseRaiseLowerBased(result.Groups, ability);
                    break;

                case 20:
                    ParseRaiseLower(result.Groups, ability);
                    break;

                case 21:     // 21 Mirros
                    ability.Mirrors = result.Groups[1].Value;
                    break;

                case 22:     // 22 Ignore Attributes
                    ability.Deal             = "1";
                    ability.IgnoreAttributes = "ignore";
                    break;

                case 23:     // 23 Reflect
                    ability.Reflect = result.Groups[1].Value + result.Groups[2].Value;
                    break;

                case 24:     // 24 Guard Break
                    ability.GuardBreak = "GuardBreak";
                    break;

                default:
                    Debug.Log("ERROR: " + item);
                    break;
                }
                //break;
            }
        }

        return(ability);
    }