Esempio n. 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];
    }
    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));
    }
    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 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);
    }