public override void Execute(Army army, global::PlayerController playerController, out Ticket ticket, EventHandler <TicketRaisedEventArgs> ticketRaisedEventHandler, params object[] parameters) { ticket = null; if (army == null || playerController == null) { return; } TerraformDevice terraformDevice = null; if (parameters != null && parameters.Length > 0 && parameters[0] is TerraformDevice) { terraformDevice = (parameters[0] as TerraformDevice); } List <StaticString> list = new List <StaticString>(); if (terraformDevice == null || !this.CanToggleOverDevice(army, terraformDevice, ref list)) { return; } if (terraformDevice.DismantlingArmy == null) { if (army.IsDismantlingDevice) { OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, army.DismantlingDeviceTarget, false); playerController.PostOrder(order, out ticket, ticketRaisedEventHandler); } OrderToggleDismantleDevice order2 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, true); playerController.PostOrder(order2, out ticket, ticketRaisedEventHandler); } else if (terraformDevice.DismantlingArmy == army) { OrderToggleDismantleDevice order3 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, false); playerController.PostOrder(order3, out ticket, ticketRaisedEventHandler); } }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); IGameEntityRepositoryService service2 = service.Game.Services.GetService <IGameEntityRepositoryService>(); if (this.orderTicket != null) { if (!this.orderTicket.Raised) { return(State.Running); } if (this.orderTicket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed) { this.orderTicket = null; aiBehaviorTree.ErrorCode = 1; return(State.Failure); } this.orderTicket = null; return(State.Success); } else { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } if (army.IsDismantlingDevice) { aiBehaviorTree.ErrorCode = 37; return(State.Failure); } if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName)) { aiBehaviorTree.LogError("${0} not set", new object[] { this.TargetVarName }); return(State.Failure); } IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity; if (!(gameEntity is IWorldPositionable) || !(gameEntity is TerraformDevice)) { aiBehaviorTree.ErrorCode = 10; return(State.Failure); } if (!service2.Contains(gameEntity.GUID)) { return(State.Success); } if ((gameEntity as TerraformDevice).TurnsToActivate() < 1999) { return(State.Success); } if ((gameEntity as TerraformDevice).DismantlingArmy != null) { aiBehaviorTree.ErrorCode = 37; return(State.Failure); } Diagnostics.Assert(AIScheduler.Services != null); if (service.Game.Services.GetService <IWorldPositionningService>().GetDistance(army.WorldPosition, (gameEntity as IWorldPositionable).WorldPosition) != 1) { aiBehaviorTree.ErrorCode = 12; return(State.Failure); } IEncounterRepositoryService service3 = service.Game.Services.GetService <IEncounterRepositoryService>(); if (service3 != null) { IEnumerable <Encounter> enumerable = service3; if (enumerable != null && enumerable.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(army.GUID, false))) { return(State.Running); } } OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, gameEntity.GUID, true); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.orderTicket, null); return(State.Running); } }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { if (this.ticket != null) { if (!this.orderExecuted) { return(Amplitude.Unity.AI.BehaviourTree.State.Running); } if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed) { this.orderExecuted = false; this.ticket = null; aiBehaviorTree.ErrorCode = 1; return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } this.orderExecuted = false; this.ticket = null; return(Amplitude.Unity.AI.BehaviourTree.State.Success); } else { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName)) { aiBehaviorTree.LogError("${0} not set", new object[] { this.TargetVarName }); return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity; if (!(gameEntity is TerraformDevice)) { aiBehaviorTree.LogError("${0} is not a device", new object[] { this.TargetVarName }); return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } TerraformDevice terraformDevice = gameEntity as TerraformDevice; IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); service.Game.Services.GetService <IGameEntityRepositoryService>(); AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType state = this.State; if (state != AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start) { if (state == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Stop && (!terraformDevice.DismantlingArmyGUID.IsValid || army.GUID != terraformDevice.DismantlingArmyGUID)) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } } else if (terraformDevice.DismantlingArmyGUID.IsValid) { return(Amplitude.Unity.AI.BehaviourTree.State.Failure); } this.orderExecuted = false; OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, this.State == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised)); return(Amplitude.Unity.AI.BehaviourTree.State.Running); } }