Exemple #1
0
    public void EnemyAICharacterAndSkillSelectFunction(CharacterStateControl currentCharacters)
    {
        EnemyAIPattern  enemyAiPattern       = currentCharacters.enemyStatus.enemyAiPattern;
        AIActionPattern currentActionPattern = enemyAiPattern.GetCurrentActionPattern(currentCharacters, base.battleStateData.currentRoundNumber - 1);
        AIActionClip    randomActionClip     = currentActionPattern.GetRandomActionClip();
        int             isSelectSkill        = currentCharacters.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);

        if (!currentCharacters.currentSufferState.FindSufferState(SufferStateProperty.SufferType.SkillLock))
        {
            int num = currentCharacters.SkillIdToIndexOf(randomActionClip.useSkillId);
            if (currentCharacters.isUseSkill(num))
            {
                isSelectSkill = num;
            }
        }
        currentCharacters.isSelectSkill = isSelectSkill;
        CharacterStateControl[] array = this.GetSkillTargetList(currentCharacters, currentCharacters.currentSkillStatus.target);
        if (!randomActionClip.IsFindMachConditionTargets(array))
        {
            currentCharacters.isSelectSkill = currentCharacters.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);
            array = base.battleStateData.playerCharacters;
        }
        CharacterStateControl[] aliveCharacters = CharacterStateControl.GetAliveCharacters(array);
        CharacterStateControl[] array2          = CharacterStateControlSorter.SortedTargetSelect(aliveCharacters, currentCharacters.currentSkillStatus, randomActionClip);
        currentCharacters.targetCharacter = array2[0];
    }
    public Queue <CharacterStateControl> GetSortedSpeedCharacerList(CharacterStateControl[] controlers = null)
    {
        BattleStateData          battleStateData = BattleStateManager.current.battleStateData;
        BattleStateManager       current         = BattleStateManager.current;
        BattleStateHierarchyData hierarchyData   = BattleStateManager.current.hierarchyData;

        CharacterStateControl[]       collection = (controlers != null) ? controlers : this.GetTotalCharacters();
        Queue <CharacterStateControl> queue      = new Queue <CharacterStateControl>(collection);

        if (controlers == null)
        {
            foreach (CharacterStateControl characterStateControl in queue)
            {
                characterStateControl.SpeedRandomize(hierarchyData.onEnableRandomValue);
                current.fraudCheck.FraudCheckOverflowMaxSpeed(characterStateControl);
            }
        }
        CharacterStateControl[] collection2 = CharacterStateControlSorter.SortedSpeedEnemyPriority(queue.ToArray());
        queue = new Queue <CharacterStateControl>(collection2);
        battleStateData.currentTurnNumber = 0;
        battleStateData.SetOrderInSortedCharacter(queue, -1);
        if (!current.onEnableTutorial)
        {
            hierarchyData.onEnableRandomValue = true;
        }
        return(queue);
    }
    private static int CompareAffectEffectRangeBase(CharacterStateControl x, CharacterStateControl y, int minValue, int maxValue)
    {
        if (x == y)
        {
            return(0);
        }
        int num  = 0;
        int num2 = 0;

        foreach (SkillStatus skillStatus2 in x.skillStatus)
        {
            List <int> serverAffectEffectList = CharacterStateControlSorter.GetServerAffectEffectList(skillStatus2);
            foreach (int num3 in serverAffectEffectList)
            {
                if (minValue <= num3 && num3 <= maxValue)
                {
                    num++;
                    break;
                }
            }
        }
        foreach (SkillStatus skillStatus4 in y.skillStatus)
        {
            List <int> serverAffectEffectList2 = CharacterStateControlSorter.GetServerAffectEffectList(skillStatus4);
            foreach (int num4 in serverAffectEffectList2)
            {
                if (minValue <= num4 && num4 <= maxValue)
                {
                    num2++;
                    break;
                }
            }
        }
        return(Mathf.Clamp(num2 - num, -1, 1));
    }
Exemple #4
0
 public void AutoPlayCharacterAndAttackSelectFunction(CharacterStateControl currentCharacter)
 {
     currentCharacter.isSelectSkill = 0;
     CharacterStateControl[] aliveCharacters = CharacterStateControl.GetAliveCharacters(base.battleStateData.enemies);
     CharacterStateControl[] array           = CharacterStateControlSorter.SortedTargetSelect(aliveCharacters, currentCharacter.currentSkillStatus, null);
     currentCharacter.targetCharacter = array[0];
 }
Exemple #5
0
    public void AutoPlayCharacterAndSkillSelectFunction(CharacterStateControl currentCharacter)
    {
        if (currentCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.SkillLock))
        {
            currentCharacter.isSelectSkill = 0;
        }
        else
        {
            currentCharacter.isSelectSkill = 0;
            SkillStatus[] array       = currentCharacter.skillStatus.Where((SkillStatus item) => item.skillId != this.stateManager.publicAttackSkillId).ToArray <SkillStatus>();
            int           num         = currentCharacter.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);
            SkillStatus   skillStatus = currentCharacter.skillStatus[num];
            foreach (SkillStatus skillStatus2 in array)
            {
                if (skillStatus2.skillType == SkillType.Deathblow)
                {
                    skillStatus = skillStatus2;
                    break;
                }
            }
            for (int j = 0; j < currentCharacter.skillStatus.Length; j++)
            {
                if (currentCharacter.skillStatus[j] == skillStatus && currentCharacter.isUseSkill(j))
                {
                    currentCharacter.isSelectSkill = j;
                    break;
                }
            }
        }
        CharacterStateControl[] characterStatus = null;
        switch (currentCharacter.currentSkillStatus.target)
        {
        case EffectTarget.Enemy:
            characterStatus = base.battleStateData.enemies;
            break;

        case EffectTarget.Ally:
            characterStatus = base.battleStateData.playerCharacters;
            break;

        case EffectTarget.Attacker:
            characterStatus = new CharacterStateControl[]
            {
                currentCharacter
            };
            break;

        case EffectTarget.EnemyWithoutAttacker:
            characterStatus = base.battleStateData.enemies.Where((CharacterStateControl item) => item.myIndex != currentCharacter.myIndex).ToArray <CharacterStateControl>();
            break;

        case EffectTarget.AllyWithoutAttacker:
            characterStatus = base.battleStateData.playerCharacters.Where((CharacterStateControl item) => item.myIndex != currentCharacter.myIndex).ToArray <CharacterStateControl>();
            break;
        }
        CharacterStateControl[] aliveCharacters = CharacterStateControl.GetAliveCharacters(characterStatus);
        CharacterStateControl[] array3          = CharacterStateControlSorter.SortedTargetSelect(aliveCharacters, currentCharacter.currentSkillStatus, null);
        currentCharacter.targetCharacter = array3[0];
    }
    private static bool CheckTargetSelect(CharacterStateControl x, AIActionClip aiActionClip)
    {
        if (aiActionClip == null)
        {
            return(false);
        }
        TargetSelectReference targetSelectRerefence = aiActionClip.targetSelectRerefence;

        if (targetSelectRerefence != TargetSelectReference.Hp)
        {
            return(targetSelectRerefence != TargetSelectReference.Ap || CharacterStateControlSorter.GetApRemingAmoutRange(x, aiActionClip.minValue, aiActionClip.maxValue));
        }
        return(x.GetHpRemainingAmoutRange(aiActionClip.minValue, aiActionClip.maxValue));
    }
    private static int CompareHate(CharacterStateControl x, CharacterStateControl y)
    {
        if (x == y)
        {
            return(0);
        }
        int num = CharacterStateControlSorter.CompareHateBase(x, y);

        if (Mathf.Abs(num) == 1)
        {
            return(num);
        }
        return(RandomExtension.IntPlusMinus());
    }
 private static int CompareHpRangeBase(CharacterStateControl x, CharacterStateControl y, float minRange, float maxRange)
 {
     if (x == y)
     {
         return(0);
     }
     if (!x.GetHpRemainingAmoutRange(minRange, maxRange))
     {
         return(1);
     }
     if (!y.GetHpRemainingAmoutRange(minRange, maxRange))
     {
         return(-1);
     }
     return(CharacterStateControlSorter.CompareHpBase(x, y));
 }
    private static int CompareBaseTargetSelect(CharacterStateControl x, CharacterStateControl y, SkillStatus skillStatus)
    {
        if (x == y)
        {
            return(0);
        }
        int num = CharacterStateControlSorter.CompareToleranceBase(skillStatus.GetSkillStrength(x.tolerance), skillStatus.GetSkillStrength(y.tolerance));

        if (Mathf.Abs(num) == 1)
        {
            return(num);
        }
        num = -CharacterStateControlSorter.CompareHpBase(x, y);
        if (Mathf.Abs(num) == 1)
        {
            return(num);
        }
        return(CharacterStateControlSorter.CompareHate(x, y));
    }
    private static int CompareSpeedEnemyPriority(CharacterStateControl x, CharacterStateControl y)
    {
        if (x == y)
        {
            return(0);
        }
        int num = CharacterStateControlSorter.CompareSpeedBase(x, y, true, true);

        if (Mathf.Abs(num) == 1)
        {
            return(num);
        }
        if (x.isEnemy == y.isEnemy)
        {
            return(RandomExtension.IntPlusMinus());
        }
        if (x.isEnemy)
        {
            return(-1);
        }
        return(1);
    }
    public static CharacterStateControl[] SortedTargetSelect(CharacterStateControl[] characterStatus, SkillStatus skillState, AIActionClip actionClip = null)
    {
        List <CharacterStateControl> list = new List <CharacterStateControl>();

        foreach (CharacterStateControl characterStateControl in characterStatus)
        {
            if (CharacterStateControlSorter.CheckTargetSelect(characterStateControl, actionClip))
            {
                list.Add(characterStateControl);
            }
        }
        if (list.Count > 0)
        {
            Comparison <CharacterStateControl> comparison = (CharacterStateControl x, CharacterStateControl y) => CharacterStateControlSorter.CompareTargetSelect(x, y, actionClip);
            list.Sort(comparison);
        }
        else
        {
            list = new List <CharacterStateControl>(characterStatus);
            Comparison <CharacterStateControl> comparison2 = (CharacterStateControl x, CharacterStateControl y) => CharacterStateControlSorter.CompareBaseTargetSelect(x, y, skillState);
            list.Sort(comparison2);
        }
        return(list.ToArray());
    }
    private List <SubStateSkillDetailsFunction.TargetData> CreateTargetData(List <SubStateSkillDetailsFunction.TargetData> oldTargetDataList, CharacterStateControl currentCharacter, AffectEffectProperty currentSuffer, bool isProtectEnableSkill, ref bool enableDrawProtectMessage)
    {
        List <SubStateSkillDetailsFunction.TargetData> list = new List <SubStateSkillDetailsFunction.TargetData>();

        CharacterStateControl[] array;
        if (base.battleStateData.isConfusionAttack)
        {
            if (currentCharacter.isEnemy)
            {
                array = base.stateManager.targetSelect.GetSkillTargetList(base.battleStateData.playerCharacters[0], currentSuffer.target);
            }
            else
            {
                array = base.stateManager.targetSelect.GetSkillTargetList(base.battleStateData.enemies[0], currentSuffer.target);
            }
        }
        else
        {
            array = base.stateManager.targetSelect.GetSkillTargetList(currentCharacter, currentSuffer.target);
        }
        if (array == null || array.Length == 0)
        {
            return(list);
        }
        bool flag = false;

        if (currentSuffer.effectNumbers == EffectNumbers.Simple)
        {
            CharacterStateControl[] array2 = array.Where((CharacterStateControl item) => item.currentSufferState.FindSufferState(SufferStateProperty.SufferType.Protect)).ToArray <CharacterStateControl>();
            if (base.battleStateData.isConfusionAttack)
            {
                flag = (isProtectEnableSkill && array2 != null && array2.Length > 0);
            }
            else
            {
                flag = (isProtectEnableSkill && array2 != null && array2.Length > 0 && currentCharacter.isEnemy != array[0].isEnemy);
            }
            if (flag)
            {
                array = CharacterStateControlSorter.SortedSufferStateGenerateStartTiming(array2, SufferStateProperty.SufferType.Protect);
                if (currentCharacter.targetCharacter == array[0])
                {
                    enableDrawProtectMessage = false;
                }
                currentCharacter.targetCharacter = array[0];
            }
            array = new CharacterStateControl[]
            {
                currentCharacter.targetCharacter
            };
        }
        if (!currentSuffer.isMissThrough && oldTargetDataList.Count > 0)
        {
            List <CharacterStateControl> list2  = new List <CharacterStateControl>();
            CharacterStateControl[]      array3 = array;
            for (int i = 0; i < array3.Length; i++)
            {
                CharacterStateControl target = array3[i];
                SubStateSkillDetailsFunction.TargetData targetData = oldTargetDataList.Where((SubStateSkillDetailsFunction.TargetData item) => item.target == target).SingleOrDefault <SubStateSkillDetailsFunction.TargetData>();
                bool flag2;
                if (targetData != null)
                {
                    flag2 = !targetData.isAllMiss;
                }
                else
                {
                    flag2 = oldTargetDataList.Where((SubStateSkillDetailsFunction.TargetData item) => !item.isAllMiss).Any <SubStateSkillDetailsFunction.TargetData>();
                }
                if (flag2)
                {
                    list2.Add(target);
                }
            }
            if (list2.Count <= 0)
            {
                return(list);
            }
            array = list2.ToArray();
        }
        foreach (CharacterStateControl target2 in array)
        {
            list.Add(new SubStateSkillDetailsFunction.TargetData
            {
                target    = target2,
                isAllMiss = true,
                onProtect = flag,
                isDamage  = isProtectEnableSkill
            });
        }
        return(list);
    }
    public static CharacterStateControl[] SortedSufferStateGenerateStartTiming(CharacterStateControl[] characterStatus, SufferStateProperty.SufferType sufferType)
    {
        CharacterStateControl[]            array      = characterStatus.Clone() as CharacterStateControl[];
        Comparison <CharacterStateControl> comparison = (CharacterStateControl x, CharacterStateControl y) => CharacterStateControlSorter.CompareGenreationStartTimingBase(x, y, sufferType);

        Array.Sort <CharacterStateControl>(array, comparison);
        return(array);
    }
    private static int CompareTargetSelect(CharacterStateControl x, CharacterStateControl y, AIActionClip aiActionClip)
    {
        if (x == y)
        {
            return(0);
        }
        int num = 0;

        if (aiActionClip != null)
        {
            switch (aiActionClip.targetSelectRerefence)
            {
            case TargetSelectReference.Hp:
                num = CharacterStateControlSorter.CompareHpRangeBase(x, y, aiActionClip.minValue, aiActionClip.maxValue);
                break;

            case TargetSelectReference.Hate:
                num = CharacterStateControlSorter.CompareHateBase(x, y);
                break;

            case TargetSelectReference.Attack:
                num = CharacterStateControlSorter.CompareAttackBase(x, y);
                break;

            case TargetSelectReference.Defence:
                num = CharacterStateControlSorter.CompareDefenceBase(x, y);
                break;

            case TargetSelectReference.SpecialAttack:
                num = CharacterStateControlSorter.CompareSpecialAttackBase(x, y);
                break;

            case TargetSelectReference.SpecialDefence:
                num = CharacterStateControlSorter.CompareSpecialDefenceBase(x, y);
                break;

            case TargetSelectReference.Speed:
                num = CharacterStateControlSorter.CompareSpeedBase(x, y, false, false);
                break;

            case TargetSelectReference.Luck:
                num = CharacterStateControlSorter.CompareLuckBase(x, y);
                break;

            case TargetSelectReference.ToleranceNone:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.None);
                break;

            case TargetSelectReference.ToleranceRed:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.Red);
                break;

            case TargetSelectReference.ToleranceBlue:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.Blue);
                break;

            case TargetSelectReference.ToleranceYellow:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.Yellow);
                break;

            case TargetSelectReference.ToleranceGreen:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.Green);
                break;

            case TargetSelectReference.ToleranceWhite:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.White);
                break;

            case TargetSelectReference.ToleranceBlack:
                num = CharacterStateControlSorter.CompareToleranceAttributeBase(x, y, global::Attribute.Black);
                break;

            case TargetSelectReference.TolerancePoison:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.Poison);
                break;

            case TargetSelectReference.ToleranceConfusion:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.Confusion);
                break;

            case TargetSelectReference.ToleranceParalysis:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.Paralysis);
                break;

            case TargetSelectReference.ToleranceSleep:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.Sleep);
                break;

            case TargetSelectReference.ToleranceStun:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.Stun);
                break;

            case TargetSelectReference.ToleranceSkillLock:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.SkillLock);
                break;

            case TargetSelectReference.ToleranceInstantDeath:
                num = CharacterStateControlSorter.CompareToleranceAffectEffectBase(x, y, AffectEffect.InstantDeath);
                break;

            case TargetSelectReference.AttributeNone:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.None);
                break;

            case TargetSelectReference.AttributeRed:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.Red);
                break;

            case TargetSelectReference.AttributeBlue:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.Blue);
                break;

            case TargetSelectReference.AttributeYellow:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.Yellow);
                break;

            case TargetSelectReference.AttributeGreen:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.Green);
                break;

            case TargetSelectReference.AttributeWhite:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.White);
                break;

            case TargetSelectReference.AttributeBlack:
                num = CharacterStateControlSorter.CompareAttributeBase(x, y, global::Attribute.Black);
                break;

            case TargetSelectReference.Ap:
                num = CharacterStateControlSorter.CompareApRangeBase(x, y, aiActionClip.minValue, aiActionClip.maxValue);
                break;

            case TargetSelectReference.AffectEffect:
                num = CharacterStateControlSorter.CompareAffectEffectRangeBase(x, y, (int)aiActionClip.minValue, (int)aiActionClip.maxValue);
                break;

            case TargetSelectReference.SufferType:
                num = CharacterStateControlSorter.CompareSufferTypeRangeBase(x, y, (int)aiActionClip.minValue, (int)aiActionClip.maxValue);
                break;
            }
            if (aiActionClip.selectingOrder == SelectingOrder.LowAndHavent)
            {
                num *= -1;
            }
        }
        return(num);
    }
 private static int CompareToleranceAffectEffectBase(CharacterStateControl x, CharacterStateControl y, AffectEffect affectEffect)
 {
     return(CharacterStateControlSorter.CompareToleranceBase(x.tolerance.GetAffectEffectStrength(affectEffect), y.tolerance.GetAffectEffectStrength(affectEffect)));
 }
 private static int CompareToleranceAttributeBase(CharacterStateControl x, CharacterStateControl y, global::Attribute attribute)
 {
     return(CharacterStateControlSorter.CompareToleranceBase(x.tolerance.GetAttributeStrength(attribute), y.tolerance.GetAttributeStrength(attribute)));
 }