private void DeployFormationsOfTeam(Team team) { foreach (Formation formation in team.Formations) { formation.IsAIControlled = true; } Mission.Current.AllowAiTicking = true; Mission.Current.ForceTickOccasionally = true; team.ResetTactic(); bool teleportingAgents = Mission.Current.IsTeleportingAgents; Mission.Current.IsTeleportingAgents = true; team.Tick(0.0f); Mission.Current.IsTeleportingAgents = teleportingAgents; Mission.Current.AllowAiTicking = false; Mission.Current.ForceTickOccasionally = false; }
public override void EarlyStart() { Mission.Current.MissionTeamAIType = this._teamAIType; switch (this._teamAIType) { case Mission.MissionTeamAITypeEnum.FieldBattle: using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; current.AddTeamAI((TeamAIComponent) new TeamAIGeneral(this.Mission, current)); } break; } case Mission.MissionTeamAITypeEnum.Siege: using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; if (current.Side == BattleSideEnum.Attacker) { current.AddTeamAI((TeamAIComponent) new TeamAISiegeAttacker(this.Mission, current, 5f, 1f)); } if (current.Side == BattleSideEnum.Defender) { current.AddTeamAI((TeamAIComponent) new TeamAISiegeDefender(this.Mission, current, 5f, 1f)); } } break; } case Mission.MissionTeamAITypeEnum.SallyOut: using (IEnumerator <Team> enumerator = Mission.Current.Teams.GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; if (current.Side == BattleSideEnum.Attacker) { current.AddTeamAI((TeamAIComponent) new TeamAISallyOutDefender(this.Mission, current, 5f, 1f)); } else { current.AddTeamAI((TeamAIComponent) new TeamAISallyOutAttacker(this.Mission, current, 5f, 1f)); } } break; } } if (!Mission.Current.Teams.Any <Team>()) { return; } switch (Mission.Current.MissionTeamAIType) { case Mission.MissionTeamAITypeEnum.NoTeamAI: using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; current.AddTacticOption((TacticComponent) new TacticCharge(current)); } break; } case Mission.MissionTeamAITypeEnum.FieldBattle: using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator()) { while (enumerator.MoveNext()) { Team team = enumerator.Current; int num = this._battleCombatants.Where <IBattleCombatant>((Func <IBattleCombatant, bool>)(bc => bc.Side == team.Side)).Max <IBattleCombatant>((Func <IBattleCombatant, int>)(bcs => bcs.GetTacticsSkillAmount())); team.AddTacticOption((TacticComponent) new TacticCharge(team)); if ((double)num >= 20.0) { team.AddTacticOption((TacticComponent) new TacticFullScaleAttack(team)); if (team.Side == BattleSideEnum.Defender) { team.AddTacticOption((TacticComponent) new TacticDefensiveEngagement(team)); team.AddTacticOption((TacticComponent) new TacticDefensiveLine(team)); } if (team.Side == BattleSideEnum.Attacker) { team.AddTacticOption((TacticComponent) new TacticRangedHarrassmentOffensive(team)); } } if ((double)num >= 50.0) { team.AddTacticOption((TacticComponent) new TacticFrontalCavalryCharge(team)); if (team.Side == BattleSideEnum.Defender) { team.AddTacticOption((TacticComponent) new TacticDefensiveRing(team)); team.AddTacticOption((TacticComponent) new TacticHoldChokePoint(team)); } if (team.Side == BattleSideEnum.Attacker) { team.AddTacticOption((TacticComponent) new TacticCoordinatedRetreat(team)); } } } break; } case Mission.MissionTeamAITypeEnum.Siege: using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; if (current.Side == BattleSideEnum.Attacker) { current.AddTacticOption((TacticComponent) new TacticBreachWalls(current)); } if (current.Side == BattleSideEnum.Defender) { current.AddTacticOption((TacticComponent) new TacticDefendCastle(current)); } } break; } case Mission.MissionTeamAITypeEnum.SallyOut: using (IEnumerator <Team> enumerator = Mission.Current.Teams.Where <Team>((Func <Team, bool>)(t => t.HasTeamAi)).GetEnumerator()) { while (enumerator.MoveNext()) { Team current = enumerator.Current; if (current.Side == BattleSideEnum.Defender) { current.AddTacticOption((TacticComponent) new TacticSallyOutHitAndRun(current)); } if (current.Side == BattleSideEnum.Attacker) { current.AddTacticOption((TacticComponent) new TacticSallyOutDefense(current)); } current.AddTacticOption((TacticComponent) new TacticCharge(current)); } break; } } foreach (Team team in (ReadOnlyCollection <Team>) this.Mission.Teams) { team.QuerySystem.Expire(); team.ResetTactic(); } }