private void PillarOrder_TicketRaised(object sender, TicketRaisedEventArgs e) { OrderBuyoutAndActivatePillar order = e.Order as OrderBuyoutAndActivatePillar; IEnumerable <EvaluableMessage_PillarNeed> messages = base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_PillarNeed>(BlackboardLayerID.Empire, (EvaluableMessage_PillarNeed match) => match.EvaluationState == EvaluableMessage.EvaluableMessageState.Validate && match.WorldPosition == order.TargetPosition && match.PillarDefinition.Name == order.PillarDefinitionName); if (messages.Any <EvaluableMessage_PillarNeed>()) { using (IEnumerator <EvaluableMessage_PillarNeed> enumerator = messages.GetEnumerator()) { if (enumerator.MoveNext()) { EvaluableMessage_PillarNeed evaluableMessage_PillarNeed = enumerator.Current; if (e.Result != PostOrderResponse.Processed) { evaluableMessage_PillarNeed.SetFailedToObtain(); } else { evaluableMessage_PillarNeed.SetObtained(); } } } } }
private SynchronousJobState SynchronousJob_StartValidatedBoosters() { if (this.aiEntityCity.City == null || !this.aiEntityCity.City.GUID.IsValid || this.aiEntityCity.City.Empire.Index != base.AIEntity.Empire.Index || this.aiEntityCity.City.BesiegingEmpireIndex >= 0) { return(SynchronousJobState.Success); } float num = 0f; this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, DepartmentOfTheTreasury.Resources.EmpireMoney, out num, false); if (num <= this.MoneyAtTurnBegin * (this.departmentOfForeignAffairs.IsInWarWithSomeone() ? 0.5f : 0.25f)) { return(SynchronousJobState.Success); } this.decisionMaker.UnregisterAllOutput(); this.decisionMaker.ClearAIParametersOverrides(); base.AIEntity.Context.InitializeDecisionMaker <PillarDefinition>(AICityState.ProductionParameterModifier, this.decisionMaker); List <PillarDefinition> elements = (from pillarDefinition in this.PillarDatabase.GetValues() where DepartmentOfTheTreasury.CheckConstructiblePrerequisites(base.AIEntity.Empire, pillarDefinition, new string[] { ConstructionFlags.Prerequisite }) select pillarDefinition).ToList <PillarDefinition>(); this.decisionResults.Clear(); this.decisionMaker.EvaluateDecisions(elements, ref this.decisionResults); if (this.decisionResults != null && this.decisionResults.Count > 0 && this.decisionResults[0].Score > 0f) { if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools && ELCPUtilities.ELCPVerboseMode) { foreach (DecisionResult decisionResult in this.decisionResults) { PillarDefinition pillarDefinition3 = decisionResult.Element as PillarDefinition; Diagnostics.Log("ELCP {0}/{1} AILayer_Pillar evaluations {2} {3}", new object[] { base.AIEntity.Empire, this.aiEntityCity.City.LocalizedName, pillarDefinition3.Name, decisionResult.Score }); } } PillarDefinition pillarDefinition2 = this.decisionResults[0].Element as PillarDefinition; if (pillarDefinition2.Name == AILayer_Pillar.DustPillarName && pillarDefinition2.GetPillarCount(base.AIEntity.Empire) > 2f) { if (this.decisionResults.Count <= 1 || this.decisionResults[1].Score <= 0f) { return(SynchronousJobState.Failure); } pillarDefinition2 = (this.decisionResults[1].Element as PillarDefinition); } int num2 = 0; WorldPosition targetPosition = this.ComputeMostOverlappingPositionForRange(pillarDefinition2, out num2); if (num2 < 5) { return(SynchronousJobState.Success); } float pillarDustCost = this.GetPillarDustCost(pillarDefinition2); if (!float.IsPositiveInfinity(pillarDustCost) && num >= pillarDustCost && targetPosition.IsValid) { OrderBuyoutAndActivatePillar order = new OrderBuyoutAndActivatePillar(base.AIEntity.Empire.Index, pillarDefinition2.Name, targetPosition); base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order); return(SynchronousJobState.Running); } } return(SynchronousJobState.Success); }