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