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);
    }