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